
Machine Reading Comprehension(기계 독해)
주어진 지문(Context)를 이해하고, 주어진 질의(Query/Question)의 답변을 추론하는 문제
사용자의 질문을 답할 수 있는 Question Answering Task
질의에 대한 답이 항상 주어진 지문의 Segment(Span), 즉 부분으로 존재
지문에서 "추출"하여 질의에 대한 답변을 반환함
SUqAD, KorQuAD, NewsQA, Natural Questiosn 등
질의에 대한 답을 여러 개의 Answer Candidates 중 하나를 고르는 형태
객관식 문제
MCTest, RACE, ARC 등
Paraphrasing
다른 단어, 같은 의미인 문장을 이해해야 할 필요성이 존재
(ex) "A는 미션을 성공했다"와 "A는 주어진 일을 완료했다" 문장의 경우 둘 다 성공했다는 의미이지만 문장 구조는 다르다. 이 2문장을 동일하다고 이해해야 한다.
Coreference
지칭 대명사가 무엇을 지칭하는지 알아야 함
지칭대명사가 곧 답이 되는 경우도 많으므로 매우 중요한 Task
Unanswerable Questions
Multi-hop Reasoning
문서 1개가 아닌 여러 개의 Document에서 질문에 대한 답을 찾아야 하는 문제
여러 개의 Document를 동시에 고려하여 답이 얻어짐
Extractive Answer나 Multiple-choice answer datasets에서 활용되는 Metric
예측한 답과 Ground-truth가 정확히 일치하는 샘플의 비율
부분 점수 없이 답이 "완전히" 동일해야 점수를 얻을 수 있음
Extractive Answer나 Multiple-choice answer datasets에서 활용되는 Metric
예측한 답과 Ground-truth 사이의 Token Overlap을 F1-score를 통해 계산
부분 점수가 존재
Descriptive Answer Datasets에서 활용되는 Metric
Ground-truth와 예측한 답 사이의 Overlap을 계산
L : LCS 기반
예측한 답과 Ground-truth 사이의 Precision
모든 문자를 일관되게 표현하고 다룰 수 있도록 만들어진 문자셋
U+AC00
문자를 컴퓨터에서 저장 및 처리할 수 있도록 이진수로 바꾸는 것
UTF-8
ord : 문자를 Unicode의 Point로 변환함
chr : Unicode Point를 문자로 변환함
한국어 Unicode 특징
한자 다음으로 많은 코드를 차지함
완성형 + 조합형을 통해 한글을 표현 가능
완성형 : '가', '각' 등 현대 한국어 자모 조합으로 나타낼 수 있는 모든 글자 11,172자
조합형 : 조합하여 글자를 만들 수 있는 초/중/종성
텍스트를 "토큰" 단위로 나누는 것
단어(띄어쓰기 기준), 형태소, Subword 등 여러 토큰 기주을 활용함
자주 쓰이는 글자 조합은 1 토큰으로, 자주 쓰이지 않는 조합은 Subword로 쪼개 각각을 하나의 토큰으로 활용하는 것
(ex) '아버지 가방에 들어가신다' 문장을 Subword로 따지면 '가방'을 '가'+'##방'으로 표현된다. 이는 '가방'이라는 단어가 자주 쓰이는 조합이 아니라고 판단하여 해당 단어를 2개의 Subword로 구성된 단어로 파악하여 쪼갠 이후 '가'와 '##방'을 Subword로 고려해 2개의 토큰으로 이루어졌다고 판단하는 것이다
'##'
데이터 압축용으로 제안된 알고리즘
순서
최근 OOV 문제를 해결할 수 있고 정보학점 이점을 지닌 BPE를 자주 활용
LG CNS가 공개한 질의응답/기계독해 한국어 데이터셋
인공지능이 한국어 질문에 대한 답변을 하도록 구성된 질의응답 데이터셋
누구나 데이터를 활용할 수 있고 공개된 리더보드에 평가를 받을 수 있음
v1.0, v2.0 존재
답변을 유추할 수 있는 문장이 중요하기 때문에 답변의 위치(answer start_index)까지 같이 출력하도록 되어 있음
대상 문서 수집
질문/답변 생성
2차 답변 태깅
from datasets import load_dataset
dataset = load_dataset('squad_for_v1', split='train')
# v2.0을 가지고 오고 싶다면 squad_for_v2로 지정하면 됨
# split을 valid, test로 지정하여 다른 용도의 데이터도 가져올 수 있음
Huggingface의 Dataset 라이브러리를 활용하는 방법
접근 가능한 모든 데이터셋이 Memory-mapped, cached 되어 있어 메모리 공간 부족이나 전처리 과정 반복의 번거로움 등을 피할 수 있음