MRC는 Machine Reading Comprehension의 약자로 기계 독해라고도 부른다.
기계 독해 : 지문(Context)이 주어질 때 주어진 질의(Query/Question)의 답변을 추론하는 문제
MRC는 search engine으로 지문을 찾고 찾은 지문 내에서 질의에 대한 답변 찾는 방식으로 진행된다.
Question에 대한 답변이 항상 context의 segment(span)으로 존재하는 데이터셋.
지문에서 답변을 추출해내는 방식으로 답변을 만들어 낸다.
Question에 대한 답변이 context에서 추출한 span이 아니라 question을 보고 생성된 sentence인 데이터셋.
Question에 대한 답변을 여러개의 candidates 중 하나로 고르는 형태의 데이터셋.
객관식 문제 풀이라고 보면 된다.
Paraphrasing
Context에서 같은 의미로 사용되는 문장이지만 paraphrase되어 있는 경우가 잦기에 paraphrased paragraph에 대한 이해가 필요하다.
Coreference Resolution
Context에서 대명사가 등장하는 빈도가 잦기 때문에 각각의 대명사가 어떤 대상을 지칭하는지 알아야 context에 대해 제대로 이해할 수 있다.
Unanswerable Question
Context 내에서 답변을 찾을 수 없는 경우도 존재. (ex: SQuAD 2.0)
실제로 답변이 없는 지문이 주어질 때 억지로 답변을 내놓기보다 "No Answer"이라는 선택지를 택하도록 해야함.
Multi-hop Reasoning
Question에 대한 답변을 찾기 위해서 여러개의 document에서 supporting fact를 찾아야하는 경우가 있음 (ex: HotpotQA, QAngaroo)
두 방법 모두 Extractive Answer나 Multiple-choice Answer Dataset에서 잘 쓰이는 평가 지표로 Descriptive/Narrative Answer Dataset에서는 사용되지 못한다.
(Free-form의 답안은 유의어 때문에 일치하는 token이 많지않을 가능성이 높기 때문이다.)
두 방식은 Descriptive/Narrative Answer Dataset에서 사용할 수 있다.
표시 형식
ex: U+AC00
U+: 유니코드 뜻하는 접두어
AC00: 16진수 code point
Python3부터 string은 유니코드 표준을 사용한다.
ord() : 문자를 유니코드 code point로 변환
chr() : Code point를 문자로 변환
한국어는 한자 다음으로 많은 code point를 차지한다.
완성형 : 글자 하나를 code point에 매핑 (11,172개) (ex: 가, 갉, 굶)
조합형 : 초,중,종성 글자. 각각을 조합해서 글자 만듦 (ex: ㄱ, ㅏ, ㄺ)
텍스트를 토큰 단위로 나누는 것
띄어쓰기, 형태소, subword등 여러 기준을 사용한다. 다만 현재는 띄어쓰기 기준 tokenizing은 잘 사용하지 않는다. 보통은 형태소 기준 혹은 subword 기준으로 많이 사용한다.
(띄어쓰기 기준으로 tokenizing을 하게되면 vocabulary의 크기가 너무 커지기 때문이다.)
자주쓰이는 글자 조합을 한 단위로 취급하고, 자주 안쓰는 조합을 subword로 쪼개는 방식
띄어쓰기 기준으로 tokenizing을 진행했을 때보다 훨씬 작은 크기의 vocab으로 구성 가능하며, delimeter(구분자)로 띄어쓰기와 subword의 구분이 되어있어 원래의 문장을 복원하기가 쉽다는 장점이 있다.
요즘 BPE같은 data-driven이 자주 사용된다.
OOV(Out-of-Vocabulary)문제에 강인하다.
KorAuAD의 데이터 수집
SQuAD v1.0의 데이터 수집 방식 벤치마크
문서 수집- 질문/답변 생성 - 2차 답변 태깅
Huggingface에서 korquad 정제되어 있음
huggingface쓰면 다운로드 쉽고, 전처리 과정 필요없어짐