(2강) Extraction-based MRC

💡
추출 기반의 기계독해 Task에 대해 알아본다.

Extraction-based MRC

Extraction-based MRC는 질문에 대한 답변이 '항상' 주어진 지문 내에 존재해야 한다. 이 Task는 주어진 질문에 따라 해당 답변의 정확한 '위치'를 추론하는 것을 목적으로 한다.

평가 방법은 앞서 살펴보았듯, 통상 EM과 F1 Score를 사용한다. F1 Score는 각 Token을 기준으로 Precision과 Recall이 계산된다. 정답이 여러 개인 경우에는, 각 정답에 대해서 F1 Score를 계산하고, 가장 높은 값을 취한다.

Extraction-based MRC의 Overview는 다음과 같다.

각 Step에 대해 자세히 알아보자.

Pre-processing

활용될 Data의 형태는 다음과 같다.

위와 같은 Dataset의 Text는 Tokenizing되는데, 본 강의에서는 Byte Pair Encoding 중 WordPiece Tokenizer를 활용한다. Tokenizer를 통해 BERT가 필요로 하는 Attention Mask와 Token Type IDs까지 생성한다.

모델의 출력값은, 시작 위치와 끝 위치를 예측하도록 구성한다. 이를 통해서 이 Task는 Token Classification의 문제로 접근할 수 있다.

Fine-tuning

BERT Model의 입력과 출력을 도식화하면 다음과 같다.

출력에 대해 자세히 살펴보면 다음과 같다.

  1. 각 Token에 대해 확률값인 Logit이 출력된다.
  1. 해당 Logit을 Split하여, 각 Token에 대한 Start Position Logit과 End Position Logit을 얻는다.
  1. Cross Entropy Loss를 이용해 각 Ground Truth와의 Loss를 구한다.
  1. 최종 Loss는 각 Loss를 더 한 후 평균을 낸 것으로 사용한다.

Post-processing

위 과정을 통해 학습한 Model이 Evaluation과 Prediction을 수행하기 위해서는 Post-processing을 필요로 한다. 각 Feature에서 출력된 Prediction을 Origin Text에 대해 통합하는 과정이 수행된다.

최적의 답안을 결정하는 과정은 다음과 같다.

  1. Start와 End Position Prediction 중 Logit의 Score가 가장 높은 N개의 쌍을 찾는다.
  1. 불가능한 조합을 제거한다. (아래와 같은 경우가 발생할 수 있다.) Ex 1) End Position이 Start Position보다 앞서는 경우 Ex 2) Position 값이 Context를 벗어난 경우 Ex 3) 조합의 길이가 Max Length보다 긴 경우
  1. 가능한 조합을 Score 순으로 정렬한다.
  1. Score가 가장 큰 조합을 최종 예측으로 선정한다.
  1. Top-k가 필요한 경우 순서대로 출력한다.


(3강) Generation-based MRC

💡
생성 기반의 기계독해 Task에 대해 알아본다.

Generation-based MRC

Generation-based MRC는 주어진 질문과 지문을 통해 적절한 답변을 생성해내는 것이다. 즉, 위와 달리 Generation Task로 접근해야 한다.

평가방법은 EM과 F1 Score외에도 Louge-L이나 BLEU와 같은 Metric을 사용할 수 있다.

Extraction-based MRC와 비교하면 다음과 같다.

Generation-based MRC의 Overview는 다음과 같다.

Pre-processing

Dataset은 Extraction-based MRC와 동일한 형태로 사용할 수 있다.

단, 이 Task를 수행하는 Model은 Tokenizer와 동일한 Index 형태로 전체 데이터 집합에 대해 사전학습이 수행되어 있어야한다. 입력 표현도 Special Token 대신 Text Format을 사용한다.

Text Pair가 입력되지 않기 때문에 Token Type IDs는 필요하지 않다. 즉, Input IDs와 Attention Mask의 값만 생성해서 입력하면 된다.

출력과 근사하는 Task를 살펴보면 다음과 같다.

Model

이 Task를 수행하기 위해서는 문장을 생성하는 Decoder가 필요하다. BART는 BERT의 Encoder와 GPT의 Decoder를 갖춘 형태로 이 Task에 적합한 Model이다.

BART는 원래 텍스트를 복구하는 Task로 학습되었기 때문에, 이와 같은 Task에 매우 적합하다.

Post-processing

Generation-based MRC는 Auto-regression의 형태로 문장을 생성한다. 이렇게 Sequential 하게 생성되는 출력의 최적값을 찾기 위해서는 BEAM Search와 같은 방법이 사용된다.


Reference

SQuAD Dataset

BERT

The Illustrated BERT, ELMO, and co.

Hugging Face Datasets

Introducing BART

BART

T5


Project

오늘의 목표 및 진척상황

  • Task 이해하기
  • 환경 설정 및 오류 해결
  • Baseline 이해하기 (train.py만)

직면했던 문제와 학습한 내용

  1. Task 이해하기

    오늘 강의를 통해서 Task에 대한 기본적인 부분은 이해할 수 있었다. Retrieval 부분은 아직 전혀 모르겠지만, Extraction MRC 부분은 조금 알 것 같았다.

    요약 정리하면 다음과 같다. Input의 형태는 Tokenized Query와 Context가 Pair로 입력된다. Context는 특정 길이에 따라 분리되어 입력된다. 각 Token의 Embedding Vector를 구하며, Softmax를 통해 2개의 Logit을 출력한다. 각 Logit은 Start와 End Position을 의미한다. 위 두 Logit을 이용해서 Ground-Truth와 Loss를 발생시키며 학습한다. Metric에서의 비교나 출력을 위해서, 후처리를 통해 Original Text에서의 위치와 Word로 변환한다.

  1. 환경 설정 및 오류 해결

    할당 받은 Server와 Baseline에서는 Mecab을 사용하고 있다. (아마도 Retrieval 단계에서 사용하는 것 같다.) 제공해준 Requirement.sh만으로는 오류가 생겨, 이에 대한 문제해결을 했다.

    토론 게시판에 김남혁님이 올려주신 글이 큰 도움이 됐다. 다만, 내 환경상에서 추가적인 작업이 필요했다. Github의 Mecab-ko를 Clone한 이후에 Setup.py를 실행해야 하는데, 내부적인 Code에서 오류가 발생했다. Code를 살펴보니 mecab-config --version의 명령어에서 정보를 받아 설치를 수행하는 것인데, 해당 명령어가 출력되지 않아서 생기는 문제였다. 이에, 환경변수를 확인해보았다. PATH가 잡히지 않은 상태였고, Root 계정으로 이를 재설치하여 이 문제를 해결할 수 있었다.

  1. Baseline 이해하기

    어제는 Baseline을 보다가 포기했지만, 오늘은 Train.py에서 일어나는 일만이라도 이해하자는 마음으로 덤볐다. 눈으로만 Code를 보니 이해하기가 너무 어려워서, 손으로 써보기 시작했다.

    중요해 보이는 각 함수 부분만 정리했는데도, 위와 같이 정신없는 노트가 나왔다.

    위 과정 이후 Train에 사용되는 Dataset을 기준으로 어떤 Process를 거치는지 확인해봤다. 먼저, 처음보는 형태로 Dataset을 Load하는 것을 알 수 있었다. Hugging Face의 datasets Library의 load_from_disk 함수를 통해 Data를 읽는데, DatasetDict Type의 객체가 생성되었다.

    DatasetDict는 정의된 Key로 접근할 수 있었으며, datasets.arrow_dataset.Dataset의 Type을 갖는 객체였다. 각 Item에는 Indexing을 통해 접근 할 수 있었다.

    이후 미리 정의된 prepare_train_features 함수를 통해서 Input 형태로 처리한다. Context는 Length에 따라서 Features로 나뉘게 되고, 각 Features 앞에는 Question이 Pair로 입력된다. 모든 Text는 Tokenizing되고, BERT의 입력될 수 있는 형태의 Dict가 된다. 추가로, QuestionAnswering Head에 맞는 Label (Start and End Postion)의 Key Value를 갖는다.

    3952개의 Context가 9508개의 Feature로 분리됐다.

    Start와 End Position을 갖지 않는 Feature는 [CLS]를 Label로 갖고 있는다.

추가로 진행 할 사항

  • Model의 입출력 확인하기

'네이버 부스트캠프 AI Tech' 카테고리의 다른 글

[P3] Day 64 (21.04.29)  (0) 2021.06.26
[P3] Day 63 (21.04.28)  (0) 2021.06.26
[P3] Day 61 (21.04.26)  (0) 2021.06.26
[P2] Relation Extraction Competition Wrap-up Report  (0) 2021.04.26
[P2] Day 60  (0) 2021.04.26

+ Recent posts