MRC(Machine Reading Comprehension) 은 주어진 지문(Context)를 이해하고, 주어진 질의(Question)의 답변을 추론하는 문제이다. 종류에는 질의에 대한 답이 항상 주어진 지문의 span으로 존재하는 Extractive 와 지문의 span이 아닌 질의를 보고 생성된 sentence의 형태인 Descriptive/Narrative, 질의에 대한 답을 여러 개의 answer candidates 중 하나를 고르는 형태의 Multiple-choice가 있다. 각 종류별로 많은 벤치마크 데이터셋이 존재한다.
MRC의 어려운 점 중 첫번째는 단어들의 구성이 유사하지 않지만 동일한 의미의 문장, 문서를 이해하는 것이다. 예를 들어 Paraphrasing 됐거나 Coreference Resolution(it, 그것 등 지칭대명사) 된 문장들을 같은 의미로 해석하도록 하는것이 예시이다. 두번째는 Unanswerable question이다. 대표적으로 SQuAD 2.0 데이터셋에 새롭게 질의의 답이 존재하지 않는 데이터를 제공하였는데, 모델이 비슷해보이는 단어 구성일지라도 지문에서 질의의 답을 찾을 수 없는 경우 No answer로 표기해야 하는데 이것 역시 쉽지는 않다는 것이다. 마지막으로 Multi-hop reasoning이다. 질의에 대한 supporting fact/evidence를 찾기 위해 한 document/context가 아닌 여러 개의 document를 거쳐야만 답을 얻을 수 있는 경우를 말한다.
MRC의 평가방법(metric)에는 먼저 Exact Match/F1이 있다. Extractive와 Multiple-choice에 사용되는 metric인데, 예측한 답이 ground-truth와 정확히 일치하는 샘플의 비율 Exact Match와 예측한 답과 ground-truth 사이의 token overlap을 계산하는 F1 으로 모델의 성능을 평가하는 것이다. Descriptive 방식은 answer가 생성되기 때문에 예측한 값과 Ground-truth 사이의 overlap recall을 계산하는 ROUGE-L과 예측한 값과 Ground-truth 사이의 precision을 계산하는 BLEU를 사용한다.
앞에서 언급했지만 질의(Question)에 대한 답(answer)이 항상 주어진 지문(context)의 span으로 존재 하는 MRC 문제를 Extraction-based MRC 라고 한다. Metric으로 앞에서 언급한 Exact Match/F1을 사용하는데, Exact Match는 어렵지 않으니까 F1에 대해 식으로 알아보자.
pred_tokens는 Prediction의 토큰 개수이다. ground_tokens는 ground truth answer의 토큰 개수이다.
Tokenization은 텍스트를 작은 단위(Token)로 나누는 것이다. 띄어쓰기, 형태소, subword 등 다양한 기준이 사용되며 현재는 Byte-pair Encoding이 주로 사용되고 있다. 대표적인 WordPiece Tokenizer가 이 BPE를 사용한 것이다.
"미국 군대 내 두번째로 높은 직위는 무엇인가?"
-> 미국, 군대, 내, 두번째, ##로, 높은, 직, ##위는, 무엇인가, ?
Huggingface에서 Tokenizer를 불러와서 tokenize하면 Attention Mask라는 데이터를 확인할 수 있다. 이는 Attention 연산시 무시할 토큰을 지정하기 위한 데이터이다. 보통 Padding 토큰을 attention 연산에서 제외하기 위해 0으로 두고 나머지를 1로 두게된다.
Token Type IDs 입력이 2개 이상의 시퀀스(예 : 질문 & 지문) 일 때, 각각에게 ID를 부여하여 모델이 구분해서 해석하도록 유도하는 것이다.
모델이 지문에서 answer span을 찾아낸 후에는 후처리과정을 거치게 된다. 가장 먼저 불가능한 답을 제거하게 된다. answer span End position이 start position보다 앞에 있거나, 예측한 위치가 context를 벗어나거나, 미리 설정한 max_answer_length 보다 길이가 더 긴 경우 candidate list에서 제거하게 된다. 이러한 과정을 포함한 최적의 답안 찾기의 전체 과정은 이렇다.
- start/end position prediction에서 score(logits)가 가장 높은 N개를 각각 찾는다.
- 불가능한 Start/end 조합을 제거한다.
- 가능한 조합들을 score의 합이 큰 순서대로 정렬한다.
- Score가 가장 큰 조합을 최종 예측으로 선정한다.
- Top-K가 필요한 경우 차례대로 내보낸다.