IT 견문록/2022_부스트캠프 AITech 3기(100일)

[일일리포트] Day 67 (MRC Basic)

논곰 2022. 4. 25. 22:10

해당 일일리포트에서는 네이버 커넥트에서 진행하는 '부스트캠프 AI Tech 3기'에서 배운 내용을 다루고 있습니다. 저작권 이슈 때문에 관련 자료를 올릴 수는 없기에 핵심 이론과 코드를 요약해서 올리고 있기에 내용이 부족할 수 있습니다.

▶ Today I Learned (핵심 요약 정리)

MRC

Machine Reading Comprehension (기계독해)은 주어진 지문(Context)를 이해하고, 주어진 질의의 답변(Query/Question)을 추론하는 Task이다. SearchEngine에서 주로 사용되는 Task로 지문을 던지면, 지문을 해결하기 위한 답을 찾아오게 된다.
MRC 데이터셋 종류로는 Extractive Answer Datasets와 Descriptive/NarrativeAnswer Datasets, Multiple-Choice Datasets이 있다. Multiple-Choice Datasets로 시작해서 점차 많은 데이터셋이 증가했다고 생각하면 된다.

  1. Extractive Answer Datasets: 질의에 대한 답이 항상 주어진 지문(context)의 Segment(or span)으로 존재
  2.   보통 빈 칸을 뚫어놓고 답을 찾는 경우 Cloze test라고 한다. 하지만, Span Extraction의 경우 실제 질문의 형태로 지문을 넣어준다. 하지만, 이때 문장 내에 답이 있다고 가정한다. (Cloze Tests, Span Extraction)
  3. Descriptive/NarrativeAnswer Datasets: 답이 지문 내에서 추출한 span이 아니라, 질의를 보고 생성된 sentence(or free-form)의 형태 (MS MaRCO)
  4. Multiple-Choice Datasets: 질의에 대한 답을 여러 개의 answer candidates 중 하나로 고르는 형태. 일반적인 QA에서 사용하지는 않는다. (MCTest)

Challenges in MRC

MRC Task에는 다음과 같은 Challenges(데이터)들이 있다.

  • paraphrased paragraph(DuoRC): 같은 질문에 다른 paraphrased로 구성되어 있는 경우. 단어들의 구성이 유사하지는 않지만 동일한 의미의 문장을 이해해야 할 때 좀 어렵다.
  • coreference resolution(QuoRef): 문장 전체를 이해해야 답을 할 수 있을 때
  • Unanswerable questions(SquAD 2.0): 주어진 질문에서 질문에 대한 답을 찾을 수 없을 때
  • Multi-hop reasoning(HotpotQA, QAngaroo): 여러 개의 Document에서 질의에 대한 supporting fact를 찾아야지만 답을 찾을 수 있음

MRC의 평가방법

Extractive answer와 Multiple-Choice answer datasets에 대한 평가 방법에는 EM과 F1-score가 있다.
1) Extract Match: 예측한 답과 ground-truth이 정확히 일치하는 샘플의 비율. 단, 답변이 조금만 달라도 틀리다고 판단
2) F1 Score: Extract Match를 보완하기 위해 예측한 답과 geound-truth 사이의 token overlap을 F1으로 계산

Descriptive answer datasets 계산을 위해 사용하는 평가방법 ROUGE-L score와 BLEU를 사용한다.
1) ROUGE-L Score: 예측한 값과 ground-truth 사이의 overlap recall 계산 (ROUGE-L-⇒LCS(Longest-common-subsequence)기반)
2) BLEU: 예측한 답과 ground-truth 사이의 precision. n-gram의 비율을 통해 점수를 계산 (BLEU-n ⇒uniform-n-gram weight)

Extraction-based MRC

질문의 답변이 항상 주어진 지문 내에 Span으로 존재하는 경우의 Task를 의미한다(e.g. SQuAD, KorQuAD, NewsQA, Natural Questions, etc.) Position을 예측한다는 의미에서 Span으로 존재한다고 얘기한다. 평가방법으로는 EM과 F1-score를 사용한다.

  • Exact Match(EM) Score: 예측값과 정답이 완벽히 일치하는 경우만 1점
  • F1 Score: 예측값과 정답의 overlap을 비율로 계산. 0점과 1점 사이 부분점수를 받을 수 있다.
Extraction-based MRC Overview

Pre-processing

정답은 하나의 연속된 span으로 문장안에 존재한다고 가정한다.

  1. Tokenization: 테스트를 작은 단위 (Token)로 나누는 것. 최근엔 OOV문제를 해결해주고 정보학적으로 이점을 가진 Byte Pair Encoding (BPE)을 주로 사용한다. 본 강의에서는 BPE 방법론 중 하나인 WordPiece Tokenizer를 사용한다. 비교적 자주 나오지 않는 단어는 나눠지게 된다.
  2. Special Token: [CLS], [SEP] 토큰이 질문과 문장을 나눈다.
  3. Attension Mask: 입력 시퀀스 중에서 attention을 연산할 때 무시할 토큰을 표시한다. 보통 [PAD]와 같은 의미가 없는 특수토큰을 무시하기 위해 사용한다.
  4. Token Type IDs: 입력이 2개 이상의 시퀀스일 때, 각각에게 ID를 부여하여 모델이 구분해서 해석하도록 유도한다. MRC에선 질문이 항상 첫번째 문장이므로 질문에 해당하는 범위와 PAD 토큰 범위를 0으로 제외시킨다.
  5. 모델 출력값: 정답은 문서 내 존재하는 연속된 단어 토큰(span)이므로, span의 시작과 끝 위치를 알면 정답을 맞출 수 있다. 그렇기 때문에 Extraction-based에선 답안을 생성하기 보다, 시작위치와 끝 위치를 예측하도록 학습한다. 즉 Token Classification문제로 치환한다.

Post-Processing

불가능한 답 제거하기

  1. End position이 Start position보다 앞에 있는 경우
  2. 예측한 위치가 context를 벗어난 경우
  3. 미리 설정한 max_answer_length보다 길이가 더 긴 경우

최적의 답안 찾기

  1. Start/end position prediction에서 score(logits)가 가장 높은 N개를 각각 찾는다.
  2. 불가능한 start/end 조합을 제거한다.
  3. 가능한 조합들을 score의 합이 큰 순서대로 정렬한다.
  4. Score가 가장 큰 조합을 최종 예측으로 선정한다.
  5. Top-k가 필요한 경우 차례대로 내보낸다.

Generation-based MRC

주어진 지문에 대해 답이 있을 수도 있고, 없을 수도 있지만 답변을 생성해내는 Task이다. 모든 Extraction based MRC문제는 Generation-based MRC문제로 치환이 가능하다. 하지만 그 반대는 불가능하다. MRC문제를 푸는 방법을 보면
Extraction-based MRC문제의 경우 '지문 내 답의 위치를 예측해서 분류하는 문제'로 볼 수 있다면, Generation-based MRC 문제는 '주어진 지문과 질의를 보고, 답변을 생성하는 문제'로 볼 수 있다. 평가방법으로는 Extraction-based MRC문제와 같이 Exact Match Score와 F1-Score를 사용하기도 하지만, 다른 Score들(ROUGE-L, BLEU)도 사용한다.
두 모델의 차이를 구조와, Prediction의 형태로 구분하면 다음과 같다.

Generation-based MRC Overview

Pre-processing

입력표현

  • Tokenization: Extraction-based MRC 와 같이 WordPiece Tokenizer를 사용한다. 인덱스로 바뀐 질문을 보통 input_ids로 부른다. Tokenizer는 입력 텍스트를 토큰화한 뒤, 각 토큰을 미리 만들어둔 단어 사전에 따라 인덱스로 변환한다. 모델의 기본 입력은 input_ids만 필요하지만, 그 외 추가적인 정보가 필요하기도 하다.
  • Special Token: Generation-based MRC에서도 PAD토큰은 사용됨. CLS, SEP토큰 대신 자연어를 이용하여 정해진 텍스트 포맷(format)으로 데이터를 생성한다.
  • Additional information: Extraction-based MRC 와 똑같이 어텐션 연산을 수행할 지 결정하는 Attention mask가 존재한다. BERT와 달리 BART에서는 입력 시퀀스에 대한 구분이 없어 token_type_ids가 존재하지 않는다. 따라서 Extraction-based MRC와 달리 입력에 token_type_ids가 들어가지 않음.

출력표현(정답출력): Sequence of token ids 전체 시퀀스의 각 위치마다 모델이 아는 모든 단어들 중 하나의 단어를 맞추는 classification 문제가 된다.

정답 출력

BART는 기계 독해, 기계 번역, 요약, 대화 등 seq-to-seq문제의 pre-training을 위한 denoising autoencoder이다. Generation-based MRC Task는 Seq2Seq 문제이기 때문에 BART가 사용된다. BART의 인코더는 BERT처럼 bi-directional하고, 디코더는 GPT처럼 uni-directional(autoregressive)하게 학습한다. BART는 텍스트에 노이즈를 주고 원래 텍스트를 복구하는 문제를 푸는 것으로 pre-training한다.

Post-Processing

Post-Processing의 단계로는 Decoding과 Searching이 존재한다.

  • Decoding: 디코더에서 이전 스텝에서 나온 출력이 다음 스텝의 입력으로 들어감(augoregressive). 맨 처음 입력은 문장 시작을 뜻하는 스페셜 토큰이다.
  • Searching: Greedy Search, Exhaustive Search, Beam Search의 방법이 존재한다.

▶ Review (생각)

오늘부터 3주 간 MRC Competition이 진행된다. 1, 2일차 동안에는 강의를 들으면서 기초적인 부분에 대해서 배우게 되고, 그동안 일일회고에는 배운 내용을 간단하게 정리하고자 한다. 우선 오늘 처음 들은 강의에 대해 간단히 말하자면, 이번 MRC 강의의 경우 뭔가 아쉬운 느낌이 드는 것 같다. 부족한 시간이라는 것은 알긴 하지만 내용 간 이어지는 설명이 없어서 흐름을 파악하기 좀 힘들었던 것 같다. 예를 들어서 왜 Extraction-based MRC와 Generation-based MRC의 차이점을 배워야 하는지, Pre-Processing과 Post-Processing으로 나눠서 이해해야 하는 이유는 무엇인지 등에 대해서 계속 궁금증이 해소가 안 됐던 것 같다. 이론적인 부분은 조금은 아쉬웠어도 실습이나, 자료들은 좋다고 생각한다. 일부 코드가 구동이 잘 안되는 경우가 있긴 했지만 크리티컬한 부분은 아니었다.
실습을 다 하지는 않고, 서버를 놀리기 좀 그래서 Competition에 구현했던 하이퍼 파라미터 튜닝이나 돌려볼까 생각을 하고, 피어세션 이후부터 코드를 좀 만져봤다. 하지만, Train도중에 Validation 계산이 안돼서 하이퍼 파라미터 튜닝이 안되는 문제가 발생헀다. 따라서 내일은 이 부분을 좀 수정해야할 필요가 있어보인다. 그리고 실습 코드와 Baseline코드가 유사한 부분이 있어서 실습을 먼저 보는 것도 좋아보인다.