PStage MRC 3강 - Generation-based MRC
Generation-based MRC
Generation-based MRC 문제 정의
Extraction-based mrc와 다르게 주어진 질문의 답이 지문 내에 존재하지 않을 수도 있기 때문에 기본적으로 답변을 ‘생성’하는 문제로 분류한다.
input은 Extraction-based mrc와 동일하지만, generation-based mrc에서는 fine-tuning 시 정답 text까지 생성하는 seq2seq 모델로 분류할 수 있다.
Generation-based MRC vs. Extraction-base MRC
- MRC 모델 구조
- Seq-to-Seq PLM 구조 (Generation) vs. PLM + Classifier 구조 (Extraction)
- Loss 계산을 위한 답의 형태 / Prediction의 형태
- Free-form text 형태 (Generation) vs. 지문 내 답의 위치 (Extraction)
- Extraction-based MRC는 f1 계산을 위해 text로의 별도의 전환 과정이 필요하다.
Pre-processing
Tokenize
Extraction과 같이 토큰화를 진행한 뒤 input_ids(또는 input_token_ids)를 생성한다.
Generation 모델에서는 PAD 토큰은 사용되지만, CLS와 SEP 토큰의 경우 사용할 수는 있지만 보통 자연어를 이용한 텍스트 포맷으로 대신하는 경우가 많다. ex) CLS -> Question, SEP -> Context
입력표현
Extraction 모델과 달리 어텐션 마스크만 사용한다. 대부분 decoder가 사용된 모델에서는 입력시퀀스를 구분하지 않기 때문이다.
출력표현
토큰의 시작과 끝 위치를 맞추는 것이 아닌 정답 텍스트를 표현하기만 하면 된다.
모델의 출력을 선형 레이어에 넣고, sequence_length 내 각 위치마다 들어가야할 단어를 하나씩 선택하면서 전체 길이만큼 반복하며 시퀀스를 생성한다.
Model
BART
- seq2seq 문제의 pretraining을 위한 denoising autoencoder를 사용한다.
- 인코더는 BERT와 같은 bi-directional 구조이며, 디코더는 GPT와 같은 uni-directional(autoregressive)이다.
- 텍스트에 노이즈를 주고 원래 텍스트를 복구하는 문제를 푸는 것으로 pretraining을 진행한다.
Post-processing
Decoding
보통 스페셜 토큰을 사용하여 문장의 시작점부터 search를 진행한다.
- Greedy Search
- 빠르지만 처음에 선택한 답이 잘못된 선택일 수 있다.
- Exhaustive Search
- 모든 가능성을 고려하기 때문에 vocab이나 문장 길이가 조금만 길어도 불가능에 가까워진다.
- Beam Search
- Exhaustive Search를 하되 각 타임스텝마다 가장 가능성이 높은 Top-k만 유지한다.
PStage MRC 3강 - Generation-based MRC
https://l-yohai.github.io/PStage-MRC-3-Generation-based-MRC/