-
질문(question)의 답변(answer)이 항상 주어진 지문(context)내에 span으로 존재
-
e.g. SQuAD, KorQuAD, NewsQA, Natural Questions, etc
- Extraction-based MRC datasets in HuggingFace datasets (https://huggingface.co/datasets)
- Exact Match (EM)
- Score 예측 값과 정답이 캐릭터 단위로 완전히 똑같을 경우에만 1점 부여. 하나라도 다른 경우 0점.
- F1 Score
- 예측값과 정답의 overlap을 비율로 계산.
- 0점과 1점사이의 부분점수를 받을 수 있음.
텍스트를 작은 단위 (Token) 로 나누는 것
-
띄어쓰기 기준, 형태소, subword 등 여러 단위 토큰 기준이 사용됨
-
최근엔 Out-Of-Vocabulary (OOV) 문제를 해결해주고 정보학적으로 이점을 가진 Byte Pair Encoding (BPE)을 주로 사용함
-
본강에선 BPE방법론중 하나인 WordPiece Tokenizer를 사용
- 입력 시퀸스 중에서 attention을 연산할 때 무시할 토큰을 표시
- 0은 무시, 1은 연산에 포함
- 보통 [PAD]와 같은 의미가 없는 특수토큰을 무시하기 위해 사용
- 입력이 2개이상의 시퀸스일 때 (예: 질문 & 지문), 각각에게 ID를 부여하여 모델이 구분해서 해석하도록 유도
- 정답은 문서내 존재하는 연속된 단어토큰 (span)이므로, span의 시작과 끝 위치를 알면 정답을 맞출 수 있음
- Extraction-based에선 답안을 생성하기 보다, 시작위치와 끝위치를 예측하도록 학습함. 즉, Token Classification문제로 치환
다음과 같은 경우 candidate list에서 제거
- End position이 start position보다 앞에 있는 경우 (e.g. start=90,end=80)
- 예측한 위치가 context를 벗어난 경우 (e.g. question 위치쪽에 답이 나온 경우)
- 미리 설정한 max_answer_length 보다 길이가 더 긴 경우
- Start / end position prediction에서 score(logits)가 가장 높은 N개를 각각 찾는다.
- 불가능한 start/end조합을 제거한다.
- 가능한 조합들을 score의 합이 큰 순서대로 정렬한다.
- Score가 가장 큰 조합을 최종 예측으로 선정한다.
- Top-k가 필요한 경우 차례대로 내보낸다.
-
MRC 문제를 푸는 방법
- Extraction-based MRC : 지문 (context) 내 답의 위치를 예측 => 분류 문제 (classification)
- Generation-based MRC : 주어진 지문과 질의 (question)를 보고, 답변을 생성 => 생성 문제 (generation)
동일한 extractive answer datasets => Extraction-based MRC와 동일한 평가 방법을 사용 (recap)
- Exact Match (EM) Score
- EM = 1 if (Characters of the prediction) == (Characters of ground-truth) else 0
- F1 Score
- 예측한 답과 ground-truth 사이의 token overlap을 F1으로 계산
- MRC 모델 구조
- Seq-to-seq PLM 구조 (generation) vs. PLM + Classifier구조 (extraction)
- Loss 계산을 위한 답의 형태 / Prediction의 형태
- Free-form text 형태 (generation) vs. 지문 내 답의 위치 (extraction)
- => Extraction-based MRC : F1 계산을 위해 text로의 별도 변환 과정이 필요
Tokenization (토큰화) : 텍스트를 의미를 가진 작은 단위로 나눈 것 (형태소)
- Extration-based MRC와 같이 WordPiece Tokenizer를 사용함
- WordPiece Tokenizer 사전 학습 단계에서 먼저 학습에 사용한 전체 데이터 집합 (Corpus)에 대해서 구축되어 있어야함
- 구축 과정에서 미리 각 단어 토큰들에 대해 순서대로 번호(index)를 부여해둠
- Tokenizer은 입력 텍스트를 토큰화 한 뒤, 각 토큰을 미리 만들어둔 단어 사전에 따라 인덱스로 변환
- 학습 시에만 사용되며 단어 자체의 의미는 가지지 않는 특별한 토큰
- SOS(Start Of Sentence), EOS(End Of Sentence), CLS, SEP, PAD, UNK.. etc
- => Extraction-based MRC에선 CLS, SEP, PAD 토큰을 사용
- => Generation-based MRC 에서도 PAD 토큰은 사용됨, CLS, SEP 토큰 또한 사용할 수 있으나, 대신 자연어를 이용하여 정해진 텍스트 포맷(format)으로 데이터를 생성
- Attention mask
- Extraction-based MRC와 똑같이 attention 연산을 수행할 지 결정하는 attention mask 존재
- Token type ids
- BERT와 달리 BART에서는 입력시퀀스에 대한 구분이 없어 token_type_ids가 존재하지 않음
- 따라서, Extraction-based MRC와 달리 입력에 token_type_ids 가 들어가지 않음
- Sequence of token ids
- Extraction-based MRC에선 텍스트를 생성해내는 대신 시작/끝 토큰의 위치를 출력하는 것이 모델의 최종 목표였음
- Generation-based MRC는 그보다 조금 더 어려운 실제 텍스트를 생성하는 과제를 수행
- 전체 sequence의 각 위치 마다 모델이 아는 모든 단어들 중 하나의 단어를 맞추는 classification 문제
기계 독해, 기계 번역, 요약, 대화 등 sequence to sequence 문제의 pre-training을 위한 denoising autoencoder
- BART의 인코더는 BERT처럼 bi-directional
- BART의 디코더는 GPT처럼 uni-directional (auto regressive)
- BART는 텍스트에 노이즈를 주고 원래 텍스트를 복구하는 문제를 푸는 것으로 pre-training 함
- 디코더에서 이전 스텝에서 나온 출력이 다음 스텝의 입력으로 들어감 (autoregressive)
- 맨 처음 입력은 문장 시작을 뜻하는 special token