강의소개
기계독해(MRC) 강의에 오신걸 환영합니다. 첫 강의에서는 기계독해에 대한 소개 기본적인 파이썬 지식들에 관한 강의입니다. 기계독해란 무엇인지, 어떠한 종류가 있는지, 평가는 어떻게 해야할 지에 대해 알아보고, 자연어 처리에 필요한 unicode / tokenization 개념을 배울 예정입니다. 마지막으로 한국어 기계독해 데이터인 KorQuAD를 살펴보며 실제 기계독해 데이터가 어떠한 형태로 이루어 졌는지 배워보겠습니다.
Further Reading
MRC task를 한 줄로 정의해보면? 사용자가 질문을 답할 수 있는 Question Answering 모델을 밑바닥부터 개발하는 Task
Introduction to MRC
- Machine Reading Comprehension(MRC)의 개념
- 기계 독해, 즉 주어진 지문(Context)를 이해하고, 주어질 질의(Query/Question)의 답변을 추론하는 문제
- 모델은 Context, Query, answer에 대해서 학습을 하고, 실제 사용 단계에서는 Qeury가 주어졌을 때 Search Engin을 통해서 관련있는 context 후보군은 찾고, Context 내에서 QUery에 대하 Answer를 찾음
- 인공지능 스피커, 검색엔진, 챗봇 등에서 이러한 방식을 사용하여 서빙!
- MRC의 종류
- 1) Extractive Answer Datasets
- 질의(Question)에 대한 답이 항상 주어진 지문(context)의 segment(or span)으로 존재
- E.g.)
- 1) Cloze Tests(CNN/Daily Mail, CBT dataset), 문장의 특정 word를 blank로 놓고 지문에서 찾아서 맞추는 문제(엄밀히 말하는 QA task는 아니지만 어느 정도 유사한 형태의 task)
- 2) Span Extraction(SQuAD, KorQuAD, NewsQA, Natural Questions, etc), 질문에 대한 답변을 맞추는 문제!!
- 이 문제는 지문 내에서 찾아서 맞추는 문제지만, 반면 질의에 대해 sentence를 생성하는 형태도 존재
- 2) Descriptive/Narrative Answer Datasets
- 답이 지문 내에서 추출한 span이 아니라, 질의를 보고 생성된 sentence(or free-form)의 형태
- e.g.) MS MARCO dataset(bajaj et al.,2016)
- 3) Multiple-choice Datasets
- 질의에 대한 답을 여러 개의 answer candidates 중 하나로 고르는 형태
- QA 모델을 만드는 차원에서는 적합하지 않아서 최근에는 잘 안 쓰이는 방법론
- e.g.) MCTest, RACE, ARC, etc
MRC의 평가 방법
- 1) Exact Match(EM) / F1 Score
- Extractive Answer & Multiple-choice answer dataset의 평가지표로 많이 사용됨
- EM(or Accuracy) : 예측한 답과 ground-truth의 정확히 일치하는 샘플의 비율
- (Number of correct sample) / (Number of whole samples)
- 단, 조금만 다르더라도 오답으로 평가하기에 이러한 단점을 극복한 metric이 F1 score
- F1 score : 예측한 답과 ground-truth 사이의 token overlap을 F1으로 계산
- 2) ROUGE-L / BLEU
- descriptive answer dataset의 평가 지표로 사용 됨
- Ground-truth와 예측한 답 사이의 overlap을 계산
- F1도 사용할 수 있지만, F1은 단어 간 overlap을 보기에 언어적인 부분에서 평가를 하기엔 적합하지 않음
- ROUGE-L Score과 BLUE 모두 n-gram으로 예측한 값과 ground-truth 사이의 overlap 정도를 평가하지만, ROUGE-L은 recall, BLUE는 Precision 기반
Unicode & Tokenization
- MRC뿐만 아니라 NLP 전반적으로도 매우 중요한 주제이므로 잘 알고 가보자
- Unicode
- Unicode : 전 세계의 모든 문자를 일관되게 표현하고 다룰 수 있도록 만들어진 문자셋이며, 각 문자마다 하나의 숫자에 매핑됨
- U+AC00 => U=(유니코드를 뜻하는 접두사) + AC00(16 진수(hexadecimal) Code Point)
- 인코딩 & UTF-8
- 인코딩 : 문자를 컴퓨터에서 저장 및 처리할 수 있게 이진수로 바꿔주는 것
- UTF-8 : 현재 가장 많이 쓰이는 인코딩 방식
- 문자 타입에 따라 다른 길이의 바이트를 할당(다이나믹함!! 매우 유용)
- 영어의 경우 ASCII 내에서 해결되며, ASCII는 character의 개수를 256개로 제한하고 있기에 1 byte, 즉 8bit 내에서 해결 가능함
- e.g.)
- 1 byte : Standard ASCII
- 2 bytes : Arabic, Hebrew, most European scripts
- 3 bytes : BMP(Basic Multilingual Plane) - 대부분 현대 글자(한글 포함)
- 4 bytes : All uncode characters - 이모지 등
- Python에서 Unicode 다루기
- python3부터 string 타입은 유니코드 표준을 사용하며, python2는 다르므로 아래 부분은 python3에서만 그대로 사용 가능!
- ord() : 문자를 유니코드 code point로 변환
- chr() : code point를 문자로 변환
- hex(ord()): code point를 16진수로 변환, 이 때 '0x' 접두사가 붙음
- Unicode와 한국어!
- 한국어는 자모 단위와 자모의 조합인 완성형 글자에 대한 유니코드가 따로 존재함
- 자모 유니코드 조합으로 완성형 단어를 만들 수 있음
- 단, 만들었떠라도 len()을 보면, 완성형은 1개이지만, 자모 조합은 자모 개수만큼 출력됨!
- 완성형(U+AC00~U+D7A3), 조합형(U+1100~U+11FF, U+A960~U+A97F, U+D7B0~U+D7FF)
- 토크나이징
- 텍스트를 토큰 단위로 나누는 것
- 단어(띄어쓰기 기준), 형태소, subword 등 여러 토큰 기준이 사용됨
- 여기서 subword tokenizer는 BERT에서 사용됨
- bert tokenizer = BPE(Byte-Pair Encoding)
- 즉, tokenization 방법론은 model에 따라 차이가 있는데, 모델에 맞게 tokenizer를 선택하는 것이 중요함
Looking into the Dataset
- KorQuAD 훑어보기
- LG CNS가 AI 언어지능 연구를 위해 공개한 질의응답/기계독해 한국어 데이터셋으로, 인공지능이 한국어 질문에 대한 답변을 하도록 필요한 학습 데이터셋!
- 1550개의 위키피디아 문서에 대해서 10,649건의 하위 문서들과 크라우드 소싱을 통해 제작한 63,952개의 질의응답 쌍으로 구성됨(Train 60,407 / DEV 5,774 / TEST 3,898)
- 공개된 리더보드에서 평가 받을 수 있음=> 객관적인 기준을 가진 연구 결과를 공유 가능해짐
- 현재 V1.0, V2.0이 공개되었고, 2.0은 보다 긴 문서가 포함되어 있고, 자연어 뿐만 아니라 표, 리스트 등을 포함하는 HTML 형태로 표현되어 있으므로 문서 전체 구조를 이해할 필요가 있음
- Huggingface의 datasets.load_dataset을 통해 불러올 수 있음!
이번 강의에서는 MRC Task란 무엇인가에 대해 아주 자세하면서도 이해가 잘 되도록 설명을 잘해주셨다. 덕분에 조금 애매했던 MRC Task를 제대로 이해할 수 있었다.
하지만 아직까지는, 아직 어떻게 MRC Task에 대해서 좋은 전처리를 할 수 있는지, 어떤 방법론을 통해서 성능을 높일 수 있을 지에 대해 감이 잘 오지 않는다. 이 부분들은 실습과 special mission, 그리고 대회를 통해 익혀보도록 할 예정이다!! 이번주도 화이팅