Third P-stage 1(Day 46)


MRC Project에 들어가기 앞서 MRC에 대한 Introduction을 진행한다.

부스트 캠프 46일차 학습 요약

  • 학습 : MRC Intro and Python Basics
  • 피어 세션

목차

1. Introduction to MRC

1-1. Machine Reading Comprehension (MRC)

  • 주어진 지문(context)를 이해하고, 주어진 질의 (Query/Question)의 답변을 추론하는 문제
  • 질문이 들어오면 Search Engine을 통해 지문을 찾고 지문 내에서 정답을 찾는 방식

1-2. MRC 종류

  • Extractive Answer Dataset
    • 질의에 대한 답이 항상 주어진 지문의 segment or span으로 존재
    • 답변이 지문 내에 항상 존재한다고 가정한다.
    • Cloze Test 1
      • 질문 문장에서 빠진 단어를 알아 맞추는 것을 목표로 한다.
      • (CNN/Daily Mail Dataset)
    • Span Extraction 2
      • 질문에 대한 답을 지문에서 찾는 방식이다.
      • SQuAD, KorQuAD, NewsQA, Natural Questions가 있다.
    • Descriptive/Narrative Answer Dataset 3
      • 답이 지문 내에서 추출한 span이 아니라 질의를 보고 생성된 sentence(or free-form) 형태이다.
      • MS MARCO(Bajaj et al., 2016)이 있다.
    • Multiple-choice Dataset
      • 질의에 대한 답을 여러개의 answer candidates 중 하나를 고르는 형태이다.
      • MCTest, RACE, ARC, etc
      • QA 모델을 만드는 차원에서는 적합하지 않기 때문에 실제로 사용되지는 않는다.

1-3. MRC Dataset 역사

4

  • MCTest를 시작점으로 보는 분들이 대다수 이다.
  • 위의 이미지와 같은 역사를 바탕으로 현재까지 이어지고 있다.

1-4. Challenges in MRC

  • 단어들의 구성이 유사하지 않지만 동일한 의미의 문장을 이해해야 하는 경우
    • DuoRC(Paraphrased Paragraph)와 QuoRef(Coreference resolution) dataset을 해결할 때 어려움이 있다.
    • Paraphrased의 경우 같은 의미의 문장이지만 다른 단어들로 구성될 경우를 의미한다. 기계 입장에서 단어가 달라지면 같은 의미라고 판단하기가 어려워진다.
    • Coreference resolution은 대명사(그, 그녀)가 누구를 지칭하고 있는지 명확히 알 수 없어 기계 입장에서 이해하기 어려울 수 있다. 이로부터 대명가 누구를 지칭하고 있는지를 찾아내는 task가 중요하고 이로부터 MRC를 조금 더 원활하게 진행할 수 있다.
  • 지문 내에 답변이 존재하지 않을 경우
    • 실제로 지문에 답변이 존재하지 않을 수 있지만, 모델 입장에서는 답변이 존재하는 것처럼 인식하여 잘못된 답변을 출력할 수 있다.
  • Multi-hop reasoning 5
    • 때에 따라서는 다양한 지문이 있어야지만 질문에 해당하는 답을 찾을 수 있다.
    • 여러 개의 Document에서 질의에 대한 Supporting Fact를 찾아야지만 답을 찾을 수 있다.
    • 위의 그림처럼, 질문에 대한 답이 여러개의 Document를 거쳐 정보를 취합해야 얻을 수 있다.
    • EX) HotpotQA, QAngaroo

1-5. MRC 평가방법

6

  • Exact Match(= Accuracy)
    • 예측한 답과 Ground-Truth가 정확히 일치하는 샘플의 비율
    • (Number of correct samples) / (Number of whole samples)
    • 답변이 조금만 달라져도 점수를 얻지 못하는 단점이 있다.
  • F1 Score
    • 예측한 답과 Ground-Truth 사이의 Token Overlap을 F1으로 계산한다.
    • descriptive answer에 약점을 가진다. f1의 경우 단어의 overlap을 보다보니 답변 자체의 언어적인 부분에서의 변화를 보기 힘든부분이 존재한다.
  • ROUGE-L
    • 예측한 값과 Ground-Truth 사이의 Overlap Recall
    • n-gram, 즉 여러개의 단어가 겹치는지 안겹치는지를 LCS(Longest Common Subsequence)를 기반으로 찾아서 점수를 매긴다.
  • BLEU
    • 예측한 답과 Ground-Truth 사이의 Precision
    • 실제로 n-gram에서의 n을 정의해줌으로서, n-gram level에서의 겹치는 단어를 비교하여 점수를 낸다.

2. Unicode and Tokenization

2-1. Unicode란?

7

  • 전 세계의 모든 문자를 일관되게 표현하고 다룰 수 있도록 만들어진 문자셋
  • 각 문자마다 숫자 하나에 매핑한다.

2-2. 인코딩 and UTF-8

  • 인코딩이란?
    • 문자를 컴퓨터에서 저장 및 처리할 수 있도록 이진수로 바꾸는 것
  • UTF-8 (Unicode Transformation Format)
    • UTF-8은 현재 가장 많이 쓰는 인코딩 방식
    • 문자 타임에 따라 다른 길이의 바이트를 할당한다. 8 9

2-3. Python에서 Unicode 다루기

10

  • Python3부터 string 타입은 유니코드 표준을 사용한다.
  • ord : 문자를 유니코드 code point로 변환한다.
  • chr : Code point를 문자로 변환한다.

2-4. Unicode와 한국어

  • 한국어는 한자 다음으로 유니코드에서 많은 코드를 차지하고 있다.
  • 완성형
    • 현대 한국어의 자모 조합으로 나타낼 수 있는 모든 완성형 한글 11,172자(가-힣)
    • U+AC00 ~ U+D7A3
  • 조합형
    • 조합하여 글자를 만들 수 있는 초,중,종성
    • U+1100 ~ U+11FF, U+A960 ~ U+A97F, U+D7B0 ! U+D7FF
  • 조합형의 경우, len을 활용하여 길이를 확인할 때 조합한 개수만큼의 길이가 나오기 때문에 완성형으로 만든 단어와 조합형으로 만든 단어의 길이를 출력할 때 다르게 나올 수 있다.

2-5. Tokenizing

  • 텍스트를 토큰 단위로 나누는 것
  • 단어(띄어쓰기 기준), 형태소, subword 등 여러 토큰 기준이 사용된다.
  • Subword Tokenizing 11
    • 자주 쓰이는 글자 조합은 한 단위로 취급하고, 자주 쓰이지 않는 조합은 subword로 쪼갠다. (Byte Pair Encoding)
    • ’##’은 디코딩(토크나이징의 반대 과정)을 할 때, 토큰을 앞 토큰에 띄어쓰기 없이 붙인다는 의미를 뜻한다.

2-6. BPE (Byte Pair Encoding)

12

  • 데이터 압축용으로 제안된 알고리즘 이다.
  • NLP에서 Tokenizing용으로 활발히 사용되고 있다.
    • 가장 자주 나오는 글자 단위 Bigram(or Byte Pair)를 다른 글자로 치환한다.
    • 치환된 글자를 저장해둔다.
    • 위 두 과정을 반복하여 진행한다.
  • 이런 과정을 바탕으로 subword tokenizer가 진행되며, 위의 문장에서 아버지는 한 단어가되고 다른 단어들은 쪼개져서 나오는 것을 볼 수 있다.

3. Dataset

3-1. KorQuAD

  • LG CNS가 AI 인공지능 연구를 위해 공개한 질의응답/기계독해 한국어 데이터셋
  • 한국어 위키피디아 1,550개의 문서에 대한 10649건의 하위 문서들과 크라우드 소싱을 통해 제작한 63,952개의 질의응답 쌍으로 구성 (Train : 60407, Dev : 5774, Test : 3898)
  • 누구나 데이터를 내려받고, 학습한 모델을 제출하고 공개된 리더보드에 평가를 받을 수 있다. 이로인해 객관적인 기준을 가진 연구 결과 공유가 가능해진다.
  • 현재 v1.0, v2.0이 공개되어 있으며, 2.0은 보다 긴 분량의 문서가 포함되어 있어 단순 자연어 문장 뿐만 아니라 복잡한 표와 리스트 등을 포함하는 HTML 형태로 표현되어 있어 문서 전체 구조에 대한 이해가 필요하다.
  • 영어 dataset의 Natural Questions와 형태가 상당히 비슷하다.

3-2. KorQuAD 수집 과정

  • SQuAD v1.0의 데이터 수집 방식을 벤치마크하여 표준성을 확보함.
  • 대상 문서 수집
    • 위키 백과에서 수집한 글들을 문단 단위로 정제, 이미지/표/URL 제거
    • 짧은 문단, 수식이 포함된 문단 등 제거
  • 질문/답변 생성
    • 크라우드소싱을 통해 질의응답 70,000+ 쌍 생성
    • 작업자가 양질의 질의응답 쌍을 생성하도록 상세한 가이드라인을 제시
  • 2차 답변 태깅
    • 앞에서 생성한 질문에 대해 사람이 직접 답해보면서 Human Performance 측정
    • 앞서 질문/답변 생성 과정에 참여한 사람은 참여 불가

3-3. HuggingFace datasets 라이브러리

13

  • HuggingFace에서 만든 datasets는 자연어처리에 사용되는 대부분의 데이터셋과 평가 지표를 접근하고 공유할 수 있게 만든 라이브러리이다.
  • Numpy, Pandas, PyTorch, Tensorflow2 호환
  • 접근가능한 모든 데이터셋이 memory-mapped, cached 되어 있어 데이터를 로드하면서 생기는 메모리 공간 부족이나 전처리 과정 반복의 번거로움 등을 피할 수 있다.
  • KorQuAD의 경우 squad_kor_v1, squad_kor_v2로 불러올 수 있다.
  • train set만 가져오고 싶을 경우, 위의 그림처럼 split option을 줘서 가져올 수 있다.

3-4. KorQuAD Example

14

  • KorQuAD 역시 SQuAD와 비슷한 형태를 띄고 있기 때문에, 질문에 대한 답이 항상 지문 내에 존재한다.
  • 질문에 대한 답이 지문 내에서 몇 번째 Character에서 시작하는지를 알려주는 요소가 ‘answer_start’이다.
  • 이런 answer_start 요소가 중요한 이유는 답변이 한 번만 나오면 문제가 되지 않지만, 경우에 따라 답변이 지문 내에서 여러 개가 나올 수 있지만 유추할 수 있는 문장은 하나만 있을 수도 있기 때문이다.
  • answer start가 주어진 경우를 strong supervision이라고 볼 수 있고, 주어지지 않을 경우를 distance supervision이라고 볼 수 있다. 15
  • 실제로 print를 하면 위의 그림과 같다.
  • answer start와 text가 list의 형태로 되어있는데, 답변이 여러개가 존재하는 경우가 있을 수 있기 때문이며, 많은 경우에는 답변이 하나이고, 실제 train 과정에서는 답변이 하나인 경우만 학습한다.
  • validation/test dataset에서는 text에서의 답변이 한 개가 아닌 다른 답변도 인정해주기 위해서 list에 속한 데이터가 2~3개가 될 수도 있다.

4. 해야할 일

  • Byte Pair Encoding 심화학습
    • 내용 이해
    • 쓰임새





© 2019.04. by theorydb

Powered by jjonhwa