주어진 지문(Context)를 이해하고, 주어진 질의(Query/Question)의 답변을 추론하는 문제
주어진 지문에서 질문에 대한 답변을 하는 방식이지만 이걸 응용하게되면 지문이 주어져있지 않은 상태에서 질문이 들어와도 질문과 관련이있는 지문을 웹상에서 찾아가지고 답변을 줄 수 있는 형태, 즉 Question Answering system 을 만들 수 있다.
▮MRC의 종류
1. Extractive Answer Datasets
- Question에 대한 답이 항상 주어진 Context의 segment(or span)으로 존재해야 한다.
- 중간의 어떤 단어를 빼고 그걸 맞추는 방식(cross test)이며 엄밀하게는 Question & Answering 은 아니다. (QA 같은 경우는 아주 비슷하지만 질문이 더 이상은 빠진 단어를 맞추는 것이 아니라 실제로 지문형태로 들어온다.)
- 질문에 대한 답변이 context(지문) 안에 존재한다는 가정으로 문제를 진행한다.
2. Descriptive/Narrative Answer Datasets
- 답이 지문 내에서 추출한 span 이 아니라, 질의를 보고 생성된 sentence (or free-form) 의 형태이다.
- 지문내에는 없는 답변을 생성해내는 task로 진행됨
3. Multiple-choice Datasets
- 질의에 대한 답을 여러 개의 answer candidates 중 하나로 고르는 형태이다.
▮ Challenges in MRC
1. Paraphrasing
단어들의 구성이 유사하지는 않지만 동일한 의미의 문장을 이해해야 한다. (같은 의미의 문장이지만 다른 단어로 이루어진 문장)
P1은 질문과 유사한 단어가 많으므로 답을 유추하기 쉽지만 P2는 질문과 유사한 단어가 나오지 않아서 답을 유추하기 어렵다.
2. Coreference Resolution
대명사가 무엇을 지칭하는지 이해해야 한다.
3. Unanswerable questions
지문내에 답변이 존재하지 않는 경우
"모르겠다"라고 답해야 맞는것인데 여러 문법적인 구조상 답변을 내고마는 오류가 발생한다.
4. Multi-hop reasoning
질문에 대한 답을 하기 위해서 여러개의 문서를 조합해야 하는 경우
여러 개의 document에서 질의에 대한 supporting fact를 찾아야지만 답을 찾을 수 있다.
▮ MRC의 평가 방법
1. Exact Match / F1 Score
Extractive answer, multiple-chloice answer datasets에 많이 사용된다.
free-form answer dataset에는 사용하기 어렵다.
완전히 일치하는 답을 찾기 어렵기 때문에 대부분의 점수가 0점이 될 수 있다.
F1 Score를 사용할 수 도 있겠지만 F1 score는 overlap으로만 평가하다보니 답변 자체의 언어적인 부분을 평가하기가 어렵다 → ROGUE-L / BLUE를 사용
Exact Match (EM) or Accuracy
예측한 답과 Ground-truth가 정확히 일치하는 샘플의 비율
Number of correct samples / Number of whole samples
F1 Score
예측한 답과 ground-truth 사이의 token overlap을 F1으로 계산
EM score는 정확히 같지 않기 때문에 0점이지만 F1 Score 같은 경우에는 겹치는 음절에 대해 partial score를 부여해 0.8점이다.
2. ROUGE-L / BLEU
descriptive answer datasets
descriptive answer 의 경우는 완벽하게 일치하는 답변을 찾기 쉽지 않기 때문에 EM score의 경우 대부분 0점일 수 있다. F1 Score 같은 경우 단어의 overlap으로만 보다보니 답변 자체의 언어적인 부분에서 변화를 보기 힘든 부분이 있어서 실제로는 BLEU 나 ROUGE-L 을 많이 사용한다.
ROUGE-L Score
Ground-truth와 예측한 답 사이의 overlap recall
ROUGE-L 같은 경우 overlap을 보긴 하지만 각 단어 뿐만 아니라 정의에 따라 여러개의 단어가 겹치는지 안겹치는지를 Logest common subsequence라는 개념으로 찾게 찾는다.
L → Longest Common Subseuquence → prediction과 정답의 겹치는 subsequence 길이가 얼마인지
BLEU Score (Bilingual Evaluation Understudy)
예측한 답과 ground-truth 사이의 precision
BLEU-n : unitforn n-gram weight : n gram 끼리 겹치는 비율 계산
2. Unicode & Tokenization
▮ Unicode
전 세계 모든 문자를 일관되게 표현하고 다룰 수 있도록 만들어진 문자셋
각 문자마다 숫자 하나에 매핑된다.
▮ 인코딩 & UTF-8
인코딩 : 문자를 컴퓨터에서 저장 및 처리할 수 있게 이진수로 바꾸는 것
UTF-8 (Unicode Transformation Format)
UTF-8 는 현재 가장 많이 쓰이는 인코딩 방식
문자 타입에 따라 다른 길이의 바이트를 할당함
1 byte: Standard ASCII
2 bytes: Arabic, Hebrew, most European scripts
3 bytes: BMP(Basic Multilingual Plane) - 대부분의 현대 글자 (한글 포함)
4 bytes: All Unicode characters - 이모지 등
영어를 쓰게되면 영어는 ASCII 내에서 보통 해결이 된다. ASCII의 경우 character의 개수가 256개로 제한하고 있기 때문에 byte 1개 즉, $ 2^{8} $ 개만 필요하다. 그래서 문자를 1byte로 모두 나타낼 수 있습니다
그러나 영어가 아닌 다른 언어들을 쓰기 시작하면 더 많은 byte가 필요하게 된다. 그래서 그때그때 필요할 때마다 byte를 추가 할당하는 방식으로 효율적인 문자 인코딩을 사용한다.
▮ Python에서 Unicode 다루기
ord → 문자를 유니코드 code point로 변환
chr → Code point를 문자로 변환
▮ Unicode와 한국어
한국어는 한자 다음으로 유니코드에서 많은 코드를 차지하고 있다.
완성형
현대 한국어의 자모 조합으로 나타낼 수 있는 모든 완성형 한글 11,172자(가, 각, …, 힢, 힣)
(U + AC00 ~ U + D7A3)
조합형
조합하여 글자를 만들 수 있는 초⋅중⋅종성
(U + 1100 ~ U + 11FF, U + A960 ~ U + A97F, U + D7B0 ~ U + D7FF)
▮ Tokenizing
텍스트를 토큰 단위로 나누는 것
단어(띄어쓰기 기준), 형태소, subword 등 여러 토큰 기준이 사용된다.
Subword 토크나이징
자주 쓰이는 글자 조합은 한 단위로 취급하고, 자주 쓰이지 않는 조합은 subword로 쪼갠다. “##” 은 디코딩을 할 때 해당 토큰을 앞 토큰에 띄어쓰기 없이 붙인다는 것을 뜻한다.
토크나이저 방법론은 모델의 일부라고 보는게 좋다.
BPE (Byte-Pair Encoding)
데이터 압축용으로 제안된 알고리즘
NLP 에서 토크나이징용으로 활발하게 사용되고 있음
가장 자주 나오는 글자 단위 Bigram (or Byte pair)를 다른 글자로 치환
치환된 글자를 저장
1~2번 과정 반복
3. Looking into the Dataset
▮ KorQuAD
LG CNS 가 AI 언어지능 연구를 위해 공개한 질의응답/기계독해 한국어 데이터셋
인공지능이 한국어 질문에 대한 답변을 하도록 필요한 학습 데이터셋
1,550개의 위키피디아 문서에 대해서 10,649건의 하위 문서들과 크라우드 소싱을 통해 제작한 63,952개의 질의응답 쌍으로 구성되어 있음 (TRAIN 60,407 / DEV 5,774 / TEST 3,898)
누구나 데이터를 내려받고, 학습한 모델을 제출하고 공개된 리더보드에 평가를 받을 수 있음 →→ 객관적인 기준을 가진 연구 결과 공유가 가능하다.
현재 v1.0, v2.0 공개: 2.0은 보다 긴 분량의 문서가 포함되어 있으며, 단순 자연어 문장 뿐 아니라 복잡한 표와 리스트 등을 포함하는 HTML 형태로 표현되어 있어 문서 전체 구조에 대한 이해가 필요하다.