[ODQA] 1. MRC Intro & Python Basics
1. Introduction to Machine Reading Comprehension
2. Unicode & Tokenization
3. Looking into the Dataset
1. Introduction to Machine Reading Comprehension
▮ MRC의 개념
- 기계 독해
- 주어진 지문(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 을 많이 사용한다.
- descriptive answer 의 경우는 완벽하게 일치하는 답변을 찾기 쉽지 않기 때문에 EM score의 경우 대부분 0점일 수 있다.
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 형태로 표현되어 있어 문서 전체 구조에 대한 이해가 필요하다.