1) Extraction-based mrc: 지문 (context) 내 답의 위치를 예측 ⇒ 분류 문제 (classification)
2) Generation-based mrc: 주어진 지문과 질의 (question) 를 보고, 답변을 생성 ⇒ 생성 문제 (generation)
모든 Extraction-based mrc는 Generation-based mrc로 치환이 가능하다.
1) Exact Match(EM) Score
EM = 1 when (Characters of the prediction) == (Characters of ground-truth) Otherwise, EM = 0
2) F1 Score
예측한 답과 ground-truth 사이의 token overlap을 F1으로 계산
즉, Generation-based mrc는 모델의 Output에서 index를 예측하는 형태가 아닌 정답을 생성해내는 모델이다. 즉 이전 Extractive에서는 정답을 특정할 수 있는 Index를 기반으로 Score를 측정해 정답을 유추했다면, 여기서는 생성해낸 정답을 바탕으로 바로 Metric을 평가할 수 있다.
1) MRC 모델 구조
Seq-to-seq PLM 구조 (generation) vs. PLM + Classifier 구조 (extraction)
2) Loss 계산을 위한 답의 형태 / Prediction의 형태
Free-form text 형태 + Teacher Forcing (generation) vs. 지문 내 답의 위치 (extraction)
⇒ Extraction-based MRC: F1 계산을 위해 text로의 별도 변환 과정이 필요
Extract mrc와 달리 정답 텍스트 그 자체를 주면 되기 때문에 오히려 Extract보다 간단하다고 할 수 있다.
Tokenization(토큰화) : 텍스트를 의미를 가진 작은 단위로 나눈 것 (형태소)
학습 시에만 사용되며 단어 자체의 의미는 가지지 않는 특별한 토큰 -SOS(Start Of Sentence),EOS(End Of Sentence),CLS,SEP,PAD,UNK.. 등등
⇒ Extraction-based MRC에선 CLS,SEP,PAD토큰을사용
⇒ Generation-based MRC 에서도 PAD 토큰은 사용됨. CLS, SEP토큰 또한 사용할 수 있으나, 대신 자연어를 이용하여 정해진 텍스트 포맷(format)으로 데이터를 생성
Attention mask
Sequence of token ids
- 모델의 출력을 선형 레이어에 넣음
(seq_length, hidden_dim) -> (seq_length, vocab_size)- Seq_length의 각 위치마다 들어가야할 단어를 하나씩 선택
- 정해진 횟수 또는 전체 길이의 수만큼 반복
기계 독해, 기계 번역, 요약, 대화 등 sequence to sequence 문제의 pre-training을 위한 denoising autoencoder
denoising autoencoder : 노이즈가 없었던 원래 버젼을 reconstruct하는 형태
BART는 텍스트에 노이즈를 주고 원래 텍스트를 복구하는 문제를 푸는 것으로 pre-training함 -> 생성 분야에 강점
아래와 같은 다양한 방법으로 생성, 결과물 출력
실제로는 Beam Search의 top_k만 유지하는 형식으로 많이 사용한다. Greedy Search는 실제 의미로서 잘못 적용될 가능성이, Exhaustive Search는 너무 많은 Cost소요때문에 사용하기 힘들다.
By mt5.
seq2seq collator : 다른 seq length를 가진 input들을 합쳐줘서 pair computing을 하기 쉽게 만들어준다.
DataCollatorForSeq2Seq
label_pad_token_id = tokenizer.pad_token_id
data_collator = DataCollatorForSeq2Seq(
tokenizer,
model=model,
label_pad_token_id=label_pad_token_id,
pad_to_multiple_of=None,
)