PStage MRC 1강 - MRC Intro

Introduction to MRC

Machine Reading Comprehension (기계독해)는 주어진 지문(Context)를 이해하고, 주어진 질의(Query/Question)의 답변을 추론하는 문제이다.

예를들어 서울특별시에 대한 지문에서 서울의 GDP는 세계 몇 위야? 라는 질문을 했을 때, 세계 4위 라는 답변을 하는 과제이다.

주로 질문(쿼리)가 들어오면 문서에서 답을 낼 수 있는 시스템(구글, 인공지능 스피커)에서 사용되며, 관련 문서를 찾고 -> 정답을 찾는 방식으로 구성된다.

MRC의 종류들은 아래와 같다.

1) Extractive Answer Datasets

질의에 대한 답이 항상 주어진 지문의 segment(or span)으로 존재하는 경우. 이런 방식을 채택하는 데이터셋으로는 SQuAD, KorQuAD, NewsQA 등이 있다.

2) Descriptive/Narrative Answer Datasets

답이 지문 내에 존재하지 않고, 질의를 보고 생성된 sentence(or free-form)의 형태. MS MARCO, Narrative QA 등의 데이터셋이 이러한 방식을 채택한다.

3) Multiple-choice Datasets

최근에는 잘 사용되지 않지만, 질의에 대한 답을 여러 개의 answer candidates 중 하나로 고르는 형태임.

MRC Datasets들이 언제부터 생성되었는지 확정적으로 정해지진 않았지만, MCTest(2013)을 시초로 보고, 해당 형태는 수능 객관식문제와 비슷한 형태를 띄고 있다. 이후에 점점 지문 내에 답이 존재하지 않더라도 검색을 통해 관련된 답변을 찾아올 수 있는 형태로 데이터셋이 구축되고 있다.

MRC의 Challenges

MRC를 하면서 어려운 과제들을 직면할 수 있다. 첫 번째로, 단어들의 구성이 유사하지 않지만 동일한 의미의 문장을 이해해야 하는 경우이다. Question에 있는 단어들이 Phrase에 대체로 비슷하게 존재하면 굉장히 쉽게 답을 찾을 수 있지만, 비슷한 단어가 없는 등의 경우엔 굉장히 답을 고르기 어려울 수 있다. 또한 지시대명사(it, the, him, her 등)를 찾는 것이 굉장히 어려운 과제이다. 두 번째는 주어진 지문에서 질문에 대한 답을 찾을 수 없는 경우가 있으며, 마지막으로 Multi-hop reasoning(여러 개의 document에서 질의에 대한 supporting fact를 찾아서 답을 찾아야 하는 경우)이다.

MRC의 평가방법

MRC에서는 Exact Match / F1 score, ROUGE-L / BLEU 로 평가를 진행할 수 있다.

  • EM: 예측한 답과 ground-truth이 정확히 일치하는 샘플의 비율
  • F1 score: 예측한 답과 ground-truth 사이의 token overlap을 F1으로 계산
  • ROUGE-L Score: 예측한 값과 ground-truth 사이의 overlap recall
  • BLEU (Bilingual Evaluation Understudy): 예측한 답과 ground-truth 사이의 precision

Unicode & Tokenization

유니코드

Unicode는 전 세계의 모든 문자를 일관되게 표현하고 다룰 수 있도록 만들어진 문자셋으로, 각 문자마다 숫자 하나에 매핑한다.

유니코드와 조금 다른 방식으로 인코딩 & UTF-8이 있는데, 인코딩이란 문자를 컴퓨터에서 저장 및 처리할 수 있게 이진수로 바꾸는 것이며, UTF-8은 현재 가장 많이 쓰는 인코딩 방식으로 문자 타입에 따라 다른 길이의 바이트를 할당하는 방식이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# ord: 문자를 유니코드 code point로 변환
ord('A')
> 65
ord('가')
> 44032
hex(ord('A'))
> '0x41'
hex(ord('가'))
> '0xac00'
# chr: Code point를 문자로 변환
chr(44032)
> '가'
chr(65)
> 'A'
chr(0xAC00)
> '가'
chr(0x41)
> 'A'

한국어는 유니코드에서 한자 다음으로 많은 코드를 차지하고 있다. 한글은 초성, 중성, 종성을 분리할 수 있기 때문에 각 성 하나하나가 유니코드에 매핑되어 있으나, 초성/중성/종성이 전부 결합되어있는 완성형 글자 하나하나도 모두 유니코드에 매핑되어 있기 때문에 가짓수가 굉장히 많아지기 때문이다.

토크나이징

가장 쉽게 토크나이징을 할 수 있는 방법은 띄어쓰기 기준으로 split하는 것이나, 효과가 좋지 않아서 주로 subword 토크나이징 방식을 사용한다. 자주 쓰이는 글자 조합은 한 단위로 취급하고, 자주 쓰이지 않는 조합은 subword로 쪼갠다.

BERT 토크나이저에서 “##”은 디코딩할 때 해당 토큰을 앞 토큰에 띄어쓰기 없이 붙인다는 것을 뜻한다.

1
2
tokenizer.tokenize('아버지 가방에 들어가신다')
> ['아버지', '가', '##방', '##에', '들어', '##가', '##신', '##다']

그 다음으로 볼 것은 BPE(Byte-Pair Encoding) 토크나이저다. 데이터 압축용으로 제안된 알고리즘이며, NLP에서 활발하게 사용되고 있다. BPE 알고리즘은 아래의 방식을 따른다.

  1. 가장 자주 나오는 글자 단위 Bigram(or Byte pair)를 다른 글자로 치환한다.
  2. 치환된 글자를 저장해둔다.
  3. 1~2번을 반복한다.

Looking into the Dataset

KorQuAD 살펴보기

LG CNS에서 언어지능 연구를 위해 공개한 질의응답/기계독해 데이터셋으로 한국어 위키피디아 1,550개의 문서에 대한 10,649건의 하위 문서와 크라우드 소싱으로 제작한 63,592개의 질의응답 쌍으로 구성되어 있음. (Train 60,407 / Dev 5,774 / Test 3,898)

현재 KorQuAD v1.0과 v2.0이 공개되어 있다. 2.0은 보다 긴 분량의 문서가 포함되어 있고, 단순 자연어 문장 뿐 아니라 복잡한 표와 리스트 등을 포함하는 HTML 형태로 표현되어 있어서 문서 전체 구조에 대한 이해가 필요하다.

KorQuAD는 SQuAD v1.0의 데이터 수집 방식을 벤치마크하여 표준성을 확보하였다. 대상 문서를 수집한 뒤 전처리를 거친 후 질문/답변 약 7만쌍을 생성하였고, 양질의 질의응답 쌍을 작업자들이 생성할 수 있도록 상세한 가이드라인을 제시하였으며 2차 태깅과정에서 사람이 직접 답해보면서 Human Performance를 측정하였다.

KorQuAD는 huggingface datasets 라이브러리로 편하게 불러올 수 있으며, huggingface datasets 라이브러리를 사용하면 memory-mapped, cached 되어 있는 데이터셋을 불러올 수 있어서 메모리 공간 부족이나 전처리 과정 반복의 번거로움을 피할 수 있다.

1
2
from datasets import load_dataset
dataset = load_dataset('squad_kor_v1', split='train') # squad_kor_v2

KorQuAD 의 답변 유형은 대상, 인물, 시간, 장소` 등 쉽게 특정할 수 있는 것이 대부분을 차지하고 있으며, 영문 표준 데이터와 특성이 유사하다.


Author

Yohan Lee

Posted on

2021-10-12

Updated on

2021-10-12

Licensed under

댓글