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