(1강) MRC Intro & Python Basics

Course Objective

이러한 질문에 대해 답을 잘 답변하는 팀이 최종 우승하게 된다!

1.Introduction to MRC

이번 섹션에서는 지문이 주어지고 이에 대한 질문이 주어졌을 때 답을 하는 모델을 만들어본다. 이후에는 지문이 방대하게 주어지거나, 주어지지 않을 때 답을 하는 모델을 만들 것임

MRC의 종류

1. Extractive Answer Datasets

  • 질문에 대한 답이 항상 주어진 지문에 존재해야 한다.

  • SQuAD, KorQuAD, NewsQA 등이 있다.

2. Descriptive / Narrative Answer Datasets

  • 답이 지문 내에서 추출하는 것이 아니라 질문을 보고 생성된 형태

  • MS MARCO, Narrative QA

3. Multiple-choice Datasets

  • 질의에 대한 답을 여러 개의 answer candidates 중 하나로 고르는 형태

  • MCTest

MRC Datasets

  • 많은 연구가 시작되면서 18년도 부터는 많은 데이터셋이 공개되기 시작했다.

Challenge

MRC에서 어려운 점은 다음과 같다.

  • 모델 입장에서는 P1에 대한 답변은 찾기가 쉽지만 P2에 대한 답변은 하기 어렵다. 왜냐하면 질문에 존재하는 단어를 지문에서 찾기 어렵기 때문

  • Coreference는 지칭대명사를 의미한다. 문장 내에서 그것, 저것이 의미하는 바를 알아야 이해할 수 있다.

또한, 지문내에 답변이 존재하지 않는 것도 MRC의 Challenge 이다.

  • 실제로 지문에서는 답을 찾을 수 없지만, 질문과 지문에 동일하거나 유사하게 존재하는 단어들 때문에 모델이 헷갈려한다.

  • 모델이 답변 모르겠다고 하는 것이 더 좋은 답변일 것이다.

마지막으로, 여러 개의 문서를 한번에 참조해야만 답을 낼 수 있는 경우이다.

  • 위 문제의 답은 세 문서를 모두 보지 않으면 말할 수 없다.

MRC의 평가방법

  • EM의 경우에는 단어가 조금만 달라도 점수를 아예 못받기 때문에 이를 개선하기 위해 F1 Score를 사용하게 되었다.

  • Description answer dataset과 같은 경우 정확한 답을 찾기가 어렵다. 그렇다 보니 대부분 0점을 얻게 된다.

  • F1은 단어의 Overlap만 보다보니, 실제 완성된 문장이 언어적으로 어색할 수 있다. 그래서 이러한 점을 개선하기 위해 BLEU나 ROUGE-L을 많이 사용한다.

  • ROUGE-L은 예측한 값과 Grount-Truth, GT 사이에 overlap을 보긴 하지만, 이 overlap을 볼 때 단어마다 보는것뿐만 아니라, 스코어의 정의에 따른 n-gram으로 여러 개의 단어가 겹치는지를 LCS라는 개념으로 찾게된다.

  • BLEU 역시 n-gram을 비교해서 n-gram끼리 겹치는 비율을 계산한다.

    • n이 증가할수록 겹치기는 쉽지 않으므로 점수가 낮아지게된다.

2.Unicode & Tokenization

  • 필요할 때 마다 바이트를 추가 할당하는 방식을 사용한다.

  • 현대 문자의 대부분을 표현할 수 있다.

Python에서 Unicode 다루기

python2와 python3는 유니코드를 다루는 법이 다루므로 이를 유의해야 한다.

  • 한국어는 한자 다음으로 유니코드에서 많은 코드를 차지하고 있다. 왜냐하면, 자모만을 사용하는 것이 아니라 자모 조합으로 나타낼 수 있는 모든 완성형 한글을 사용하기 때문이다. 이 때, 한글은 완성형과 조합형으로 나타낼 수 있다.

  • 내부적으로 다르게 구성이 되어있기 때문에 조합형의 경우 길이가 2이고 완성형의 경우 길이가 1이다. 눈으로는 판단하기가 어렵기 때문에 len 같은 함수를 사용한다.

토크나이징

  • 예전에는 Regular Expression과 같이 사람이 직접 고안한 방법으로 토크나이징을 했지만 인간의 상식과 컴퓨터의 생각이 다르기 때문에 자연스러운 BPE나 Subword 토크나이징 방법이 요즘은 주를 이루고 있다.

3.Looking into the Dataset

KorQuAD

  • 이런 국내 데이터셋이 존재하면, 객관적인 연구결과 동기화가 가능해진다는 장점이 다.

KorQuAD 데이터 수집 과정은 다음과 같다.

HuggingFace Datasets

from datasets import load_dataset
dataset = load_dataset('squad_kor_v1', split='train')
  • 이렇게 데이터를 불러오면 다른 데이터들도 매우 쉽게 불러올 수 있다.

KorQuAD 예시

  • answer_start가 있는 이유는 실제로 모델이 질문에 대한 답변을 유추한 위치를 명시해주기 위함이다. 동일한 단어가 존재하더라도 해당 단어의 위치에 따라 질문에 대한 답변이 될 수도 있고 되지 못할 수도 있기 때문에 이를 구체적으로 명시한다. 숫자가 주어지는 경우를 strong supervision, 주어지지 않는 경우를 distant supervision 이라고 할 수 있다.

실제로 데이터를 출력하는 dictionary 형태로 데이터를 얻게 된다.

  • 다만 validation이나 test에서는 교향곡만이 답이 아닐 수 있기 때문에 이 데이터에서는 text의 길이가 하나 이상일 수 있다.

KorQuAD 통계치

질문 유형

답변 유형

Last updated

Was this helpful?