(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?