이전 포스팅에서 Extraction-based MRC에 대해 알아보았다. Extraction-based MRC는 지문 내 답의 위치를 예측하는 토큰 분류 문제로 정의하였다.
이번 포스팅에서는 Genration-based MRC에 대해 알아볼 것이다.
Generation-based MRC 정의
Generation-based MRC는 주어진 질의(Question)를 보고, 지문 내 답이 있든 없든 답변을 생성해낸다. 즉 생성 문제로 정의할 수 있다.
Genration-based MRC Overview
Extraction-based MRC와 입력 부분은 유사하지만, Genration-based MRC의 경우 모델의 출력값이 정답 그 자체가 된다. 이때 모델은 일종의 Seq-to-Seq모델로 decoder가 있는 모델이 될 수 있다. BERT의 경우 encoder로만 구성되기 때문에 Generation-based MRC 모델로 사용될 수 없다.
Extraction-based MRC VS Genration-based MRC
1. 모델 구조
- Generation : Seq-to-Seq PLM 구조
- Extraction : PLM + Classifier 구조
2. Loss
- Generation : decoding할 때, teacher forcing과 같은 방식으로 학습하여 정답을 도출
- Extraction : answer의 시작 및 끝 위치에 대한 확률 분포에 대해 negative loss likelihood를 계산하는 방식
Pre-processing
■ 입력 - Tokenization
마찬가지로 WordPiece Tokenizer를 사용하여 tokenization을 한다. 사전학습 단계에서 데이터 집합(코퍼스)를 구축할 때 token에 순서대로 인덱스를 부여하며, 그 인덱스를 input_ids라고 한다. 모델의 기본 입력은 input_ids이지만 학습에 필요한 추가적인 정보도 입력한다.
■ 입력 - Special Token
special token은 학습 시에만 사용되며 단어 자체의 의미를 가지지 않는 token이다. special token에는 [SOS](Start Of Sentece), [EOS](End Of Sentece), [CLS], [SEP], [PAD], [UNK] 등이 있다.
- Extraction-based MRC : [CLS], [SEP], [PAD] token 사용
- Generation-based MRC : [PAD] token사용, [CLS] 및 [SEP] token 사용할 수 있으나 question, context같은 자연어를 이용하여 정해진 텍스트 포맷으로 데이터 생성
■ 입력 - Attention Mask , Token type ids
Generation-based MRC에서 Attention Mask는 입력으로 들어가지만, Token type ids는 들어가지 않는다.
■ 출력 - 정답 출력
- Extraction-based MRC의 경우, text생성 대신 정답의 start / end position을 출력하는 것이 목표이다.
- Generation-based MRC의 경우, 실제 text를 생성하기 위해 매 sequence의 위치마다 들어갈 단어를 모델이 아는 모든 단어들 중 하나로 예측하는 것이 목표이다.
- 모델의 출력을 선형 레이어에 넣어서 각 sequence 위치마다 들어가야할 단어를 하나씩 예측한다. 예측된 단어를 모두 이어붙여 정답을 도출한다.
Model
■ BART
BART는 기계독해, 기계번역, 요약, 대화 등 Seq-to-Seq문제의 pre-training을 위한 denoising autoencoder이다. denoising autoencoder이라는 표현을 쓰는 이유는 noise를 준 후 noise가 없었던 원래 상태를 예측하도록 학습하기 때문이다. BERT와 마찬가지로 Masking을 하여 input을 넣지만 Mask를 맞추는 방식이 아닌, 생성하는 방식으로 학습을 진행한다. start / end position을 내보내는 BERT와 달리 BART는 실제 정답 text를 내보낸다.
■ BART의 Encoder / Decoder
- Encoder : BERT처럼 bi-directional
- Decoder : GPT처럼 uni-directional(autoregressive)
■ BART의 Pre-training
텍스트에 noise를 주고 원래 텍스트를 복구하는 방식으로 pre-training을 수행한다.
- noise 주입 방식 : Token Masking, Sentence Permutation, Document Rotation, Token Deletion, Text Infilling
Post-processing
■ Search
BART는 Decoding으로 text를 생성하므로 이전 step의 출력이 다음 step의 입력으로 들어간다. 매 step에서 예측할 단어를 찾는 방식으로 크게 Greedy Search, Exhaustive Search, Beam Search가 있다.
- Greedy Search : 현재 step에서 가장 좋아보이는 단어(확률값이 가장 높은 단어)를 선택
- 당장은 가장 좋은 선택일 수 있으나 전체적으로 좋지 않은 단어일 수 있으며, 이 경우 최종적으로 이상한 정답을 도출한다.
- Exhaustive Search : 매 step마다 모든 단어를 경우의 수로 두고 예측을 진행한다.
- 현실성 떨어지는 방법이다. sentence 및 vocab의 개수가 늘어나면 시간과 메모리 문제로 사용할 수 없다.
- Beam Search : 매 step마다 가장 좋아보이는 Top-k개의 단어를 경우의 수로 두고 예측을 진행한다.
- Greedy Search와 Exhaustive Search를 융합한 형태로 가장 합리적인 방식이다.
[reference]
https://sshleifer.github.io/blog_v2/jupyter/2020/03/12/bart.html
'AI > 딥러닝' 카테고리의 다른 글
[MRC] Passage Retrieval – Dense Embedding (0) | 2021.10.17 |
---|---|
[MRC] Passage Retrieval – Sparse Embedding (0) | 2021.10.17 |
[MRC] Extraction-based MRC (0) | 2021.10.13 |
[MRC] MRC 개념 / 종류 / 평가 방법 , Python Unicode , Tokenization , KorQuAD (0) | 2021.10.13 |
[특강] AI 서비스 개발 및 AI 기술팀 조직 구성 (0) | 2021.09.27 |
댓글