네이버 부스트캠프/LEVEL-2

[부스트캠프][P-stage][WK11 / Day47] MRC 1

1. 강의 내용

MRC Intro & Python Basics (서민준님)

1) Introduction to MRC

기계 독해 (Machine Reading Comprehension)이란 주어진 지문 (context)를 이해하고, 주어진 질의 (Query/Question)의 답변을 추론하는 문제입니다.

MRC의 종류

  1. Extractive Answer Datasets
    : 질의 (question)에 대한 답이 항상 주어진 지문 (context)의 segment (or span)으로 존재
    • Span Extraction: SQuAD, KorQuAD, NewsQA, Natural Questions, etc
  2. Descriptive/Narrative Answer Datasets
    : 답이 지문 내에서 추출한 span이 아니라, 질의를 보고 생성 된 sentence (or free form)의 형태
    • MS MARCO (Bajaj et al., 2016), Narrative QA
  3. Multiple choice Datasets
    : 질의에 대한 답을 여러 개의 answer candidates 중 하나로 고르는 형태
    • MCTest(Richardson et al., 2013), RACE, ARC, etc.

Challenges in MRC

  • Paraphrasing: 같은 의미의 문장이지만 다른 단어들로 이루어져 있는 것
    e.g.) DuoRC (paraphrased-paragraph)
  • Coreference Resolution: Coreference는 그 사람, 그 것 등 어떤 존재를 지칭하는 용어로, 이러한 용어들을 찾아내는 task
    e.g.) QuoRef (coreference-resolution)
  • Unanswerable questions: 답변이 존재하지 않는 경우
    e.g.) SQuAD 2.0
  • Multi hop reasoning: 여러 개의 document에서 질의에 대한 supporting fact를 찾아야지만 답을 찾을 수 있음
    e.g.) HotpotQA, QAngaroo

MRC의 평가방법

  1. Exact Match / F1 Score: 답변이 지문 내에 존재하는 경우 (extractive answer)와 주어진 선택지 중 답을 고르는 경우 (multiple choice answer)에 쓰입니다.
  • Exact Match (Accuracy): 예측한 답과 ground-truth이 정확히 일치하는 샘플의 비율
  • F1 Score : 예측한 답과 ground-truth&사이의 token&overlap을 F1으로 계산
  1. ROUGE-L / BLEU: descriptive 한 답은 완벽하게 일치하는 답을 찾기 쉽지 않기 때문에 Ground-truth와 예측한 답 사이의 overlap을 계산해 줍니다.
  • ROUGE-L Score: 예측한 값과 ground-truth 사이의 overlap recall
  • BLEU (Bilingual Evaluation Understudy): 예측한 답과 ground-truth 사이의 precision

2) Unicode & Tokenization

  • Unicode: 전 세계의 모든 문자를 일관되게 표현하고 다룰 수 있도록 만들어진 문자셋으로 각 문자마다 숫자 하나에 매핑합니다.
  • 인코딩 & UTF-8
    • 인코딩: 문자를 컴퓨터에서 저장 및 처리할 수 있게 이진수로 바꾸는 것
    • UTF-8 (Unicode Transformation Format): UTF-8&는 현재 가장 많이 쓰는 인코딩 방식이며 문자 타입에 따라 다른 길이의 바이트를 할당합니다.

  • Python에서의 Unicode: Python3부터 string 타입은 유니코드 표준을 사용
    • ord: 문자를 유니코드 code point로 변환
    • chr: Code point를 문자로 변환
  • Unicode와 한국어: 한국어는 한자 다음으로 유니코드에서 많은 코드를 차지하고 있는 문자

토크나이징

텍스트를 토큰 단위로 나누는 것으로 단어(띄어쓰기 기준), 형태소, subword 등 여러 토큰 기준이 사용됩니다.

  • Subword 토크나이징: 자주 쓰이는 글자 조합은 한 단위로 취급하고, 자주 쓰이지 않는 조합은 subword로 쪼개줍니다. "##"은 디코딩 (토크나이징의 반대 과정)을 할 때 해당 토큰을 앞 토큰에 띄어쓰기 없이 붙인다는 것을 뜻합니다.

BPE (Byte-Pair Encoding)

데이터 압축용으로 제안된 알고리즘으로, NLP에서 토크나이징용으로 활발하게 사용되고 있습니다.

  1. 가장 자주 나오는 글자 단위 Bigram (or Byte pair)를 다른 글자로 치환
  2. 치환된 글자를 저장
  3. 1~2번 반복

Extraction-based MRC (서민준님)

1) Extraction-based MRC

Extraction-based MRC 문제 정의

질문(question)의 답변(answer)이 항상 주어진 지문(context)내에 span으로 존재

  • e.g. SQuAD, KorQuAD, NewsQA, Natural Questions, etc.

Extraction-based MRC 평가 방법

  • Exact Match (EM) Score: 예측값과 정답이 캐릭터 단위로 완전히 똑같을 경우에만 1점 부여. 하나라도 다른 경우 0점.
  • F1 Score: 예측값과 정답의 overlap을 비율로 계산. 0점과 1점사이의 부분점수를 받을 수 있음.Extraction-based MRC Overview

2) Pre-processing

입력 예시

Tokenization

텍스트를 작은 단위 (Token) 로 나누는 것으로 띄어쓰기, 형태소, subword 등 여러 단위 토큰 기준이 사용됩니다. 최근엔 Out-Of-Vocabulary (OOV) 문제를 해결해주고 정보학적으로 이점을 가진 Byte Pair Encoding(BPE)을 주로 사용합니다.

Special tokens, attention mask, and token ids for BERT

  • Special Tokens
    '[CLS]'는 질문의 시작, '[SEP]'은 질문과 context사이와 context의 끝으로 사용
  • attention mask
    입력 시퀸스 중에서 attention 을 연산할 때 무시할 토큰을 표시하는데, 0은 무시하고 1은 연산에 포함 시킵니다. 보통 [PAD]와 같은 의미없는 특수 토큰을 무시하기 위해 사용됩니다.
  • Token Type IDs
    입력이 2개 이상의 시퀸스일 때 (예: 질문 & 지문), 각각에게 ID를 부여하여 모델이 구분해서 해석하도록 유도

출력 형태

정답은 문서내 존재하는 연속된 단어토큰 (span)이므로, span의 시작과 끝 위치를 알면 정답을 맞출 수 있습니다. 따라서 Extraction-based에선 답안을 생성하기 보다, 시작위치와 끝위치를 예측하도록 학습하여 Token classification 문제로 치환 가능합니다.

3) Fine-tuning

Fine-tuning BERT

4) Post-processing

불가능한 답 제거하기

다음과 같은 경우 candidate list에서 제거

  • End positionE이 start position보다 앞에 있는 경우 (e.g. start = 90, end = 80)
  • 예측한 위치가 context를 벗어난 경우 (e.g. question 위치쪽에 답이 나온 경우)
  • 미리 설정한 max_answer_length 보다 길이가 더 긴 경우

최적의 답안 찾기

  1. Start/end position prediction에서 score (logits)가 가장 높은 N개를 각각 찾는다.
  2. 불가능한 start/end 조합을 제거한다.
  3. 가능한 조합들을 score의 합이 큰 순서대로 정렬한다.
  4. Score가 가장 큰 조합을 최종 예측으로 선정한다.
  5. Top-k 가 필요한 경우 차례대로 내보낸다.

Generation-based MRC (서민준님)

1) Generation-based MRC

Generation-based MRC 개념 및 개요

  1. Extraction-based mrc: 지문 (context) 내 답의 위치를 예측 -> 분류 문제 (classification)
  2. Generation-based mrc: 주어진 지문과 질의 (question) 를 보고, 답변을 생성 -> 생성 문제 (generation)

Extraction-based mrc 문제는 Generation-based mrc 문제로 치환이 가능하지만 생성 문제는 Extraction-based mrc로 치환이 불가능 합니다.

Generation-based MRC 평가 방법

동일한 extractive answer datasets -> Extraction-based MRC와 동일한 평가 방법을 사용 (recap)

Generation-based MRC Overview


-> 정답까지 green box 에서 생성

Generation-based MRC & Extraction-based MRC 비교

  • MRC 모델 구조
    Seq-to-seq PLM 구조 (generation) vs. PLM + Classifier 구조 (extraction)
  • Loss 계산을 위한 답의 형태 / Prediction의 형태
    Free-form text 형태 (generation) vs. 지문 내 답의 위치 (extraction)
  • Extraction-based MRC: F1 계산을 위해 text로의 별도 변환 과정이 필요

2) Pre-processing

입력 표현

  • 데이터 예시
  • 토큰화
    Extraction-based MRC 와 같이 WordPiece Tokenizer를 사용하는데, WordPiece Tokenizer 사전학습 단계에서 먼저 학습에 사용한 코퍼스에 대해서 구축되어 있어야하며 구축 과정에서 미리 각 단어 토큰들에 대해 순서대로 번호(인덱스)를 부여해 둡니다.

WordPiece Tokenizer 사용 예시:


-> '##'은 바로 전의 단어에 붙어 있다는 의미이며 자주 사용되지 않는 단어의 경우, 위 예시의 '직위'처럼 분리되어 토크나이징 됩니다.
인덱스로 바뀐 질문을 보통 input_ids로 부르며 모델의 입력에는 그 외의 추가적인 정보가 필요합니다.

  • Special Token
    : 학습 시에만 사용되며 단어 자체의 의미는 가지지 않는 특별한 토큰
    -> SOS(Start Of Sentence), EOS(End Of Sentence), CLS, SEP, PAD, UNK..등등
    -> Extraction-based MRC 에선 CLS, SEP, PAD 토큰을 사용하며 Generation-based MRC 에서도 PAD 토큰이 사용되지만 CLS, SEP 토큰은 자연어를 이용하여 정해진 텍스트 포맷으로 데이터를 생성함으로써 대체 가능합니다.
  • additional information
    Attention-mask: Extraction-based MRC 와 똑같이 어텐션 연산을 수행할 지 결정하는 어텐션 마스크 존재

Token type ids: BERT 와 달리 BART 에서는 입력시퀀스에 대한 구분이 없어 token_type_ids 가 존재하지 않음

  • 따라서-Extraction-based-MRC-와-달리-입력에-token_type_ids-가-들어가지-않음

출력 표현

  • Sequence of token ids:
    • Extraction-based MRC에선 텍스트를 생성해내는 대신 시작/끝 토큰의 위치를 출력하는 것이 모델의 최종 목표였음
    • Generation-based MRC는 그보다 조금 더 어려운 실제 텍스트를 생성하는 과제를 수행
    • 전체 시퀀스의 각 위치마다 모델이 아는 모든 단어들 중 하나의 단어를 맞추는 classification 문제

3) Model

BART Encoder & Decoder

  • BART: 기계 독해, 기계 번역, 요약, 대화 등 sequence-to-sequence 문제의 pre-training을 위한 denoising autoencoder

BART의 인코더는 BERT처럼 bi-directional하며, BART의 디코더는 GPT처럼 uni-directional(autoregressive) 합니다.

Pre-training BART

BART는 텍스트에 노이즈를 주고 원래 텍스트를 복구하는 문제를 푸는 것으로 pre-training 합니다.

 

4) Post-processing

Decoding

디코더에서 이전 스텝에서 나온 출력이 다음 스텝의 입력으로 들어가며 (augoregressive) 맨 처음 입력은 문장 시작을 뜻하는 스페셜 토큰으로 이루어 집니다.

Searching

search 방식은 아래와 같은 방법들을 사용하는데, greedy search는 효율적이고 빠르지만 단어를 하나씩만 선택하며 결정을 이른 시기에 하게 되기 때문에 나중에 문장이 완성되면 나쁜 결과가 나올 수 있습니다. Exhaustive search는 모든 경우를 다 계산하는 방법인데, 모든 경우를 고려하기 때문에 문장의 길이가 길어지거나 vocab의 size가 커지면 돌아가는데 무리가 생깁니다. 마지막으로 Beam search는 일반적으로 많이 사용되는 방식으로 Exhaustive search에서 각 time step마다 top-k개의 선택을 합니다.


2. 과제 수행 과정 / 결과물 정리


3. 피어세션 정리

  • 스몰톡, 강의 진도 체크
  • 서베이논문 파트 나누기
  • 1차 대회 계획 세우기 및 아이디어 회의