(2강) Extraction-based MRC
1.Extraction-based MRC
문제 정의

답변을 생성해내는 것이 아니라 지문에서 찾을 수 있게된다.
이러한 데이터셋은 직접 해당 사이트에서 다운받을 수도 있지만 huggingface의 datasets에서 다운이 가능하다.
평가 방법

왼쪽은 SQuAD 데이터셋이며 오른쪽은 LG에서 SQuAD를 토대로 만든 KorQuAD이다.
F1 점수가 EM 점수보다 높은 것을 알 수 있다.
EM은 예측값과 정답이 캐릭터 단위로 완전히 똑같을 경우에만 1점을 부여하며, 하나라도 다르면 0점을 부여한다.
반면 F1은 예측값과 정답의 overlap을 비율로 계산하며 0점과 1점 사이의 부분점수를 받을 수 있다.
좀 더 자세히는 다음과 같다.

이 때 G.T가 여러개이므로 각각의 G.T와 예측을 비교하게 되고 가장 최고의 점수를 F1 Score로 지정한다.
Overview

지문과 질문이 각각 임베딩되어 모델에 들어가게 되고 모델은 특정 시퀀스를 반환하는 것이 아니라 답이라고 예측되는 토큰의 포지션을 반환한다.
2.Pre-processing
Tokenization
여기서는 OOV 문제를 해결해주고 정보학적으로 이점을 가진 BPE를 사용할 것이며 이 중 WordPiece Tokenizer를 사용한다.
OOV : Out-Of-Vocaburary
BPE : Byte Pair Encoding
Special Tokens
[CLS] 질문 [SEP] 지문 의 꼴로 모델에 입력된다.
Attention Mask
입력 시퀀스 중에서 attention 연산을 할 때 무시할 토큰을 표시한다. 0은 무시, 1은 연산에 포함한다. [PAD]와 같이 의미가 없는 특수토큰을 무시하기 위해 사용한다.
Token Type IDs

질문에는 0, 지문에는 1을 주며 PAD에는 편의상 0을 준다.
모델 출력값

만약, 정답이 '미국 육군 부 참모 총장' 이라면 84와 88을 반환하게 된다. 근데 만약 토큰화가 '저미국', '육군', '부', '참모총', '장이' 로 되어있으면 어떻게 할까? 이 때는 점수가 좀 낮아질 수는 있겠지만 그래도 최소 SPAN을 잡았다는 것으로 인지하고 그대로 이 토큰을 사용하게 된다.
3.Fine-tuning

start, end token이라고 예상되는 벡터는 해당 포지션이 진짜 시작, 끝 token일 확률이며 이를 실제 답의 start/end 위치와 cross-entropy loss를 통해 학습한다.
4.Post-processing
불가능한 답 제거하

질문에서 답이 있을 경우 예측한 context를 벗어날 수 있다.
최적의 답안 찾기

실습
Requirements
7 : 특정 폴더에 있는 특정 파이썬 코드들을 현재 환경에 import 할 수 있다.
데이터 및 평가 지표 불러오기
dataset은 train과 valid로 이루어져 있으며 dataset의 각각의 요소 id, title, context, question, answers로 이루어져 있다.
dataset['train']으로 train dataset에 접근할 수 있으며dataset['train'][0]으로 특정 example에 접근할 수 있다.
Pre-trained 모델 불러오기
config와 tokenizer 그리고 model을 Auto series library를 통해 불러올 수 있다.
설정하기
max_seq_length를 설정해야 모델의 size도, pad도 정할 수 있다.
pad_to_max_length=True는 남은 시퀀스를 pad로 채우겠다는 것
doc_stride
max_train_samples, max_val_samples : 학습 및 검증할 데이터 수를 정해놓는다. 여기서는 간단한 테스트 용이기 때문에 작게 정했지만 실제로는 매우 큰 수가 입력된다.
preprocessing_num_workes : 4이상으로는 보통 필요가 없는 경우가 많으며 하드웨어에 dependent 하다.
n_best_size : 답변 길이의 최적의 길이를 설정한다.
max_answer_length : 너무 긴 답변이 나오지 않도록 조절한다.
전처리하기
데이터를 사전에 설정했던 대로 전처리해서 dictionary 형태로 반환하게 된다.
select를 이용하면 데이터를 일정 수 만큼 뽑을 수 다.
valid 데이터도 똑같이 처리 준다.
Fine-tuning 하기
default_data_collator : 여러 개의 example을 collate 해주는 역
TrainingArguments : 학습을 할 때 줄 수 있는 config를 한번에 줄 수 있는 편리한 기능
Eval Prediction : 좀 더 편하게 예측할 수 있도록 함
QuestionAnsweringTrainer : 학습을 더 편하게 수 있다.
postprocess_qa_predictions : 결과를 얻고나서 한번 더 post process를 해야하는데 이를 가능하게 해준다.
평가하
Last updated
Was this helpful?