generation based MRC 모델링 방법 간단하게 알아보기

1. MRC문제를 푸는 방법이란

 

지문과 관련된 질문을 받고 답을 내는 방법은 지문 내에 명시적으로 존재하는 답의 위치를 반환하는 extraction based MRC

 

지문 내 token에 대한 embedding을 가져와 이것이 정답의 시작점인지 아닌지, 끝점인지 아닌지 token classification 문제로 변환

 

 

 

또 하나의 방법은 지문 내 답의 위치를 말하는 것이 아니라 답변 text를 생성하는 방법이 있다

 

이 문제가 조금 더 어려운 이유는 실제로 지문 내에 정답이 있을수도 있고 없을수도 있다는 점.

 

그럼에도 불구하고 주어진 질문에 주관식으로 기술하듯이 정답 text를 생성해야하는 점

 

정답이 존재하더라도 정답의 위치를 파악하는 것이 아니라 모델이 해당 정답을 생성하도록 유도하는 것이고

 

실제로 생성한 해당 정답을 예측으로 사용한다

 

 

 

모든 extraction based MRC는 generation based MRC로 치환할 수 있다.

 

왜냐하면 정답이 지문에 있다고 굳이 위치를 반환하는 것이 아니라 해당 정답 text를 생성하면 되니까

 

당연하지만 역은 거짓이다. generation based MRC는 지문 내 정답의 존재 여부와 무관하게 풀수있다

 

 

2. 평가방법 metric

 

extraction based MRC와 같은 평가방법인 Exact match와 F1 score를 사용할 수는 있다.

 

근데 exact match는 character level에서 단 하나라도 틀리면 0점이므로

 

그 엄격함 때문에 generation based MRC의 평가방법으로 어울리지는 않는다

 

왜냐하면 주관식을 해보면 알겠지만 실제 정답과 정확히 기술하는건 상상으로도 불가능하잖아 EM으로 보면 거의 무조건 0점임

 

그래서 일반적인 생성문제에서는 ROUGE나 BLEU를 사용한다

 

BLEU-4 기본적인 공식

 

3. model overview

 

extraction based MRC와 거의 비슷함

 

input으로 context와 answer을 주는데 preprocessing으로 tokenizing을 수행

 

token들 각각을 embedding을 수행하여

 

generation based MRC model인 Seq2Seq pretrained language model에 전부 넣어

 

‘14위’라고 text를 generation하여 prediction으로 내놓는다

 

 

 

extraction MRC는 output embedding을 score로 바꿔서 start와 end index로 예측했다면

 

generation MRC는 정답 text를 그대로 생성하는 것이다.

 

 

4. extraction과 generation 모델 구조 비교

 

4-1) extraction

 

encoder만 있는 classification위주의 pretrained language model이 extraction based MRC에 활용

 

BERT같은 경우는 encoder만 활용하므로 generation에 사용하기에는 부적절하다

 

encoder와 token이 정답 위치에 해당하는지 classification을 해주는 classifier layer로 구성된 모델

 

정답 위치에 대한 확률분포를 negative loss likelihood로 계산

 

 

4-2) generation

 

Seq2Seq기반의 pretrained language model이란

 

encoder와 decoder를 모두 활용하여 language generation을 할 수 있는 모델을 말한다

 

text의 정확한 decoding을 위해 teacher-forcing같은 방법으로 학습하여 정답을 내도록 한다

 

 

 

5. preprocessing

 

extraction based보다 전처리과정은 전반적으로 쉽다고 볼수있다

 

 

 

위와 같이 주어진 input data를 tokenizing을 진행함

 

예를 들어 Wordpiece tokenizer를 쓸건데 사전학습 단계에서 학습에 사용한 vocab에 대해 미리 구축해놓아야함

 

미리 각 단어 token들에 대해 자주 등장하는 단어는 작은 번호를, 덜 등장하는 단어는 큰 번호를 부여한 index 집합도 구축

 

 

Tokenizer는 미리 구축한 index집합을 활용하여 들어온 input data를 tokenizing한 뒤

 

vocab에 대한 index 집합에 대응시켜 token을 숫자로 바꿔줌

 

 

 

“미국 군대 내 두번째로 높은 직위는 무엇인가?” input으로 넣으면

 

bert-base-multilingual-cased model의 tokenizer를 활용하여 tokenizing을 하면

 

['미국', '군', '##대', '내', '두', '##번째', '##로', '높은', '직', '##위', '##는', '무', '##엇', '##인', '##가', '?']

 

vocab에서 자주 등장하는 단어는 ‘미국’이나 ‘높은’같이 붙어있고 그렇지 않은 단어는 1글자 ‘군’ , ‘내’ , ‘두’ 같이 쪼개짐

 

직위같은 경우 자주 등장 안해서 ‘직’, ‘##위’로 쪼개짐

 

##가 붙은 것은 원래 문장으로 복원할 시 바로 앞 token과 그대로 붙여쓰라는 의미

 

따라서 복원하기가 상당히 쉽다. 참고로 다시 변환하면

 

[CLS] 미국 군대 내 두번째로 높은 직위는 무엇인가? [SEP]

 

BERT 특성상 CLS와 SEP같은 special token이 존재함

 

이 token화된 질문을 index로 바꾸면?

 

[101, 23545, 8910, 14423, 8996, 9102, 48506, 11261, 55600, 9707, 19855, 11018, 9294, 119137, 12030, 11287, 136, 102]

 

위와 같이 index로 바꾼 질문을 input_ids라고 부른다.(혹은 input_token_ids)

 

모델의 기본적인 입력은 위와 같은 input_ids인데 이외에 필요한 추가적인 정보가 더 필요하다

 

 

6. special token

 

학습 시에만 사용되며 그 자체에 언어적인 의미는 없다

 

모델마다 special token 이름과 형태가 조금 다른데 [SOS],[EOS],[CLS], [SEP], [PAD], [UNK] 등등이 사용

 

[SEP] 같은 경우는 질문과 지문을 구분할 때 사용함. (질문 [SEP] 지문)으로 묶어서 하나의 input으로 넣어줌

 

[CLS]는 보통 BERT에서 input 앞에 붙여서 나중에 classification task 등에 활용함

 

[PAD]같은 경우는 모든 input 데이터 길이를 맞춰주기 위해 input 마지막에 의미없이 붙이는 token

 

generation에서도 [CLS],[SEP]같은거 쓸수는 있는데 나중에 task에 [CLS]를 굳이 쓸 이유는 없고 정해진 format에 맞춰 text를 생성하죠

 

extraction과 generation의 special token 차이?? 근데 오른쪽건 처음봄;

 

 

경우에 따라 [CLS]대신 question이나 context라고 표시할 수 있다고 쓰여있긴하네 모델에 따라 어떻게 표시할지 다르긴 한데

 

 

7. additional information

 

extraction MRC처럼 attention 연산을 수행할지 무시할지 결정하는 1과 0의 attention mask

 

token type ids는 질문과 지문을 구분하여 질문은 0, 지문은 1, PAD는 0을 부여하여 1인 곳에서만 정답을 찾게 구분해주는 친구였는데

 

extraction MRC와는 다르게 사용하지 않음

 

BART는 입력 sequence에 대한 구분 없이 token_type_ids가 존재하지 않는다

 

 

 

사실 [SEP]가 있으면 token_type_ids를 굳이 안줘도 모델이 알아서 질문과 지문을 어느정도 구분해준다고 함

 

초기에는 token_type_ids를 줘서 구분을 해보고자 했는데 요즘 모델은 크게 필요없다고 생각해서 지웠나봄

 

 

8. output에 대한 표현

 

extraction based MRC는 text를 생성하는 것 대신에 지문 내에 존재하는 정답의 시작 위치와 끝 위치를 출력하는 것이 목표

 

generation based MRC는 그보다 조금 어려운 실질적인 text를 생성해야하는 문제

 

classification 문제로도 바라볼 수 있다고??

 

지문 내에 답이 존재한다면 지문 내 모든 sequence의 단어들을 보면서 정답인지 아닌지 분류하는 문제?

 

 

 

왼쪽이 extraction based MRC, 오른쪽이 generation based MRC

 

입력과 출력은 동일한데 출력으로 어떻게 하느냐가 문제인가?

 

근데 generation같은 경우 출력을 generation 바로 할수있지 않나?

 

 

9. generation 과정

 

일반적인 decoding 방법이랑 사실상 동일함

 

단어를 하나씩 예측하며 생성하고 이전의 예측은 다음 예측을 위한 input으로 들어감

 

 

 

 

 

TAGS.

Comments