extraction based MRC 모델링 방법, 필수 용어 간단하게 알아보기
1. 정의
질문의 답변이 항상 주어진 지문 내 span으로 존재하는 경우
SQuAD, KorQuAD, NewsQA, Natural Questions
이런 가정을 할 수 있다면 정답 text를 생성하는 문제가 아니라 지문 내 정답 text의 위치를 찾는 문제로 바뀌어 편리해진다
2. dataset
각각의 데이터셋을 제작한 웹사이트에서 다운 받을 수도 있지만 편리성을 위해 HuggingFace 웹사이트에서 다운 받기도 가능
HuggingFace는 다운받기도 쉬우면서 다루기도 쉬운 format으로 되어 있음
3. 평가방법
1) Exact Match
prediction과 ground truth가 정확하게 character level로 일치하는 경우만 1점
단 하나라도 틀리면 0점
2) F1 score
예측값과 정답의 overlap 비율을 계산함
EM과는 다르게 0점과 1점사이 부분점수를 받을 수 있는 soft한 metric
precision은 prediction의 총 token 수에 대해 prediction과 ground truth가 일치하는 token 수의 비율
쓸데없이 prediction이 길어지면(분모가 커지면) 아무리 겹치는 token 수가 많더라도 precision은 작아짐
recall은 ground truth의 총 token 수에 대해 prediction과 ground truth가 일치하는 token 수의 비율
recall은 겹치는 token수가 너무 적으면 감소하는 metric
F1은 2*precision*recall을 precision+recall로 나눈 값
일반적으로 Exact match가 F1에 비해 더 낮아야 정상임
F1 score 계산 예시.. ground truth 부분 그림이 좀 이상하긴 한데
prediction token = 1, ground truth token = 2
겹치는 token =1이므로 precision=1, recall = 1 / 2
F1 = 1 / (1 + 1 / 2) = 2 / 3
참고로 ground truth가 여러개인 경우 위와 같이 F1 score를 각각의 ground truth에 대해 모두 계산한 다음
실제 evaluation은 그 중 가장 높은 계산값을 score로 한다.
4. model overview
input raw data로 context랑 question을 받는데 preprocessing으로 context와 question을 tokenizing함
각각의 token을 embedding하여 vector로 만들고 pretrained extraction MRC model에 전부 넣어서 fine-tuning을 수행
prediction 결과가 재밌는데 start position과 end position을 주느냐? 그것은 아니다.
token embedding vector들을 넣으면 model은 start랑 end로 10과 17을 바로 내놓는 것이 아니라
원래는 contextualize vector를 내놓는다.
그냥 또 하나의 embedding vector를 내놓는다는 말인데 이 vector로부터 각각 position의 시작과 끝에 대한 점수를 계산하여
가장 score가 높은 시작 vector와 끝 vector를 찾은 다음에 그 위치를 구해서 바꿔서 반환하는 것임
start와 end 위치를 찾기만 하면 token 그대로 가져오면 되니까 단어로 만드는 것은 쉬워
5. preprocessing
raw data를 model에 넣어주기 전에 model이 알아먹을 수 있도록 processing하는 과정이 필요함
title과 context는 동일한데 거기에 여러 질의쌍이 존재함
주황색 질문에 대한 정답은 주황색으로 표시되어 있고 파란색 질문에 대한 정답은 파란색으로 표시되어 있음
6. tokenization
input text를 작은 단위의 token으로 나누는 것임
simple하게는 띄어쓰기 기준인데 복잡하게 들어가면 형태소나 subword 기준으로 나눌 수 있음
최근엔 Out of vocabulary 문제를 해결해주면서 정보학적으로 이득인 byte pair encoding을 주로 사용한다고 함
여기서도 byte pair encoding의 일종인 wordpiece tokenizer를 주로 사용하기로 함
wordpiece tokenizer는 자주 나오는 단어는 ‘미국’, ‘군대’, ‘두번째’처럼 하나의 단어로 만들고 자주 나오지 않는 단어는 ‘내’, ‘로’, ‘위는’,’직’으로 나뉨
'직위'는 같은 경우는 vocab에서 자주 나오는 단어가 아니라 ‘직’, ‘위는’으로 나뉘었다고 함
7. special tokens
[CLS]는 input의 시작을 나타내는 special token이고 [SEP]는 질문과 지문을 구분해주는 token이다
‘[CLS] 질문 [SEP] 지문’의 형태로 질문과 지문을 하나의 input으로 합쳐서 tokenizing을 함
[PAD]같은 경우는 모든 input의 길이를 맞추기 위해 뒷부분에 사용
tokenizing을 시키고 나서도 special token들은 여전히 special token 그 자체로도 남아있다
8. attention mask
입력 sequence에 대하여 attention 연산을 할 때 무시할 token을 표시하는 작업
0은 무시하고 1은 attention 연산에 활용함
보통 special token중 [PAD]는 언어적 의미가 전혀 없는 부분이므로 보통 이것을 0으로 표시함
model에 입력을 줄 때 attention mask도 같이 주면서 model 입장에서 무시할 부분을 알려준다
9. token type IDs
입력이 질문과 지문 2개 이상 sequence인 경우 붙여서 input으로 주더라도 질문과 지문을 정확히 구분할 수 있어야함
구분하는 방법은 2가지 인데 [SEP]라는 special token을 사용
token type IDs라고 질문의 token은 0으로 하고 지문은 1로 하여 model이 구분하여 해석할 수 있도록 input에 이것도 같이 준다
마지막 PAD는 그냥 편의상 0으로 준다고함
1인 부분이 지문이고, 여기서 정답을 찾을 수 있도록 만듦
10. output processing
supervised learning을 위해 정답도 같이 processing해서 줘야함
정답의 경우 context level에서 character 위치로 파악함
tokenize 후 학습할 때 supervise signal을 주는 방식은 정답 token이 어디있는가로 주어져서 약간의 processing이 필요하다
original text 내에 존재하는 84번부터 88번까지 위치를 model이 찾을 수 있도록 processing하여 supervised signal로 줘야함
거의 대부분은 문제 없는데 진짜 재수없게 ‘미국’같은 경우 ‘미’, ‘##국’,... 이렇게 나뉘어버리면
정확하게 일치하는 정답이 없을 수 있으나 그렇다 하더라도 최소한으로 포함하는 단어들(예를 들면 육군 부 참모 총장까지???)을 정답으로 포함하여 학습할 때 사용해야한다?
그래서 정답 후보를 조금은 더 넓게 가져와야하지 않을까..? 그랬던것 같기도 하고 ㅎㅎ?
11. fine tuning
실제 학습에는 pretrained bert model에 preprocessing한 input을 주면 context question embedding vector를 output으로 내놓음
이것은 input embedding과는 조금 다르게 contextualize된 vector임
이 vector를 fine-tuning하여 여러가지 용도로 사용할 수 있게 만든 것이 BERT의 가장 큰 특징인데 MRC에는 어떻게 쓸까?
지문 내에서 정답에 해당하는 contextualize embedding을 모두 가져와 linear transformation으로 각 단어마다 하나의 숫자가 mapping되도록 바꿔줌
linear transformation을 두번 하는건데 하나는 시작 위치에 대한 점수를 구하기 위한 linear transformation이고
다른 하나는 끝 위치에 대한 점수를 구하기 위한 linear transformation
각각에서 가장 점수가 높은 위치를 시작 위치와 끝 위치로 구하고 최종 답안을 내는 방식을 취한다
직관적인 예시로 위와 같이 5개 token의 정답 후보를 가져와 각각 linear transform하여
시작 위치에 대한 점수와 끝 위치에 대한 점수를 구해서 가장 높은 vector를 가져옴
이 linear transformation은 물론 학습 해야하는 부분임
실제 학습할 때는 linear transformation 수치를 softmax를 취하여 negative log likelihood로 학습한다
12. post processing
불가능한 답을 제거하는 것으로
예를 들어 end position이 start position보다 앞에 있는 것
예측한 위치가 context를 벗어나는 경우로 input을 질문과 지문을 붙여서 주는데 상당히 드물게 질문에서 정답을 찾은 경우
미리 설정한 정답의 최대 길이(max_answer_length)보다 긴 정답이 발생하는 경우
(+추가) model이 이해하는 contextualize embedding vector를 score로 환산하여 사람이 이해할 수 있게 start, end로 바꾸는 과정
13. 최적의 정답을 찾기
start prediction을 위해 score가 가장 높은 N개를 찾음
end prediction을 위해 score가 가장 높은 N개를 찾음
N*N의 경우의 수에서 바로 위에서 언급한 불가능한 조합은 제거함
가능한 조합들에 대해 score합이 가장 높은 순서대로 정렬함
가장 큰 score의 조합을 최종 prediction으로 산정함
만약 Top-k가 필요한 경우는 위에서 정렬하여 점수가 높은 상위 k개를 출력한다
'딥러닝 > Machine Reading Comprehension' 카테고리의 다른 글
BERT와 BART 비교하면서 간단하게 알아보기(+greedy, beam, exhaustive search) (0) | 2024.03.06 |
---|---|
generation based MRC 모델링 방법 간단하게 알아보기 (0) | 2024.03.05 |
KorQuAD 데이터셋에 대한 개요 (0) | 2024.03.03 |
subword tokenizing, byte pair encoding 간단하게 알아보기 (0) | 2024.03.03 |
Machine reading comprehension metric 종류 (0) | 2024.03.02 |