본문 바로가기
AI/딥러닝

[MRC] Generation-based MRC

by 채채씨 2021. 10. 13.
728x90
반응형

이전 포스팅에서 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이지만 학습에 필요한 추가적인 정보도 입력한다.

 

WordPiece Tokenizer 예시

 

 

 

 입력 - 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

728x90
반응형

댓글