# (1강) MRC Intro & Python Basics

> * 기계독해에 대한 소개와 기본적인 파이썬 지식에 대한 강의
> * 기계독해란 무엇인지? 어떤 종류가 있는지? 평가는 어떻게 해야하는지?
> * unicode와 tokenization 개념
> * KorQuAD를 통해 실제 기계독해 데이터의 형태 확인

## 1. Introduction to MRC

### 1.1. Machine Reading Comprehension (MRC)의 개념

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

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FBu61rMLuuG7U0Mh8bQwq%2Fimage.png?alt=media\&token=bbeb52f5-d770-4b13-a81e-56f30fac62b4)

보통 질문에 대한 답을 찾는 방식은 1) 질문에 대한 관련 문서들을 찾고, 2) 그 문서들로부터 질문에 대한 답을 찾는 것으로 나누어져있다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FT27p5PAzr833j9MhuZeO%2Fimage.png?alt=media\&token=fde045ff-f6c4-4a71-a568-b6ca9aa61f10)

### 1.2. MRC의 종류

#### Extractive Answer Datasets

질의에 대한 답이 항상 주어진 지문의 segment(or span)으로 존재

* **Span Extraction**
  * SQuAD, KorQuAD, NewsQA, Natural Question, etc

#### Descriptive / Narrative Answer

답이 지문 내에서 추출한 span이 아니라, **질의를 보고 생성된 sentence** (or free-form)의 형태

* MS MARCO, Narrative QA

#### Multiple-choice Datasets

질의에 대한 답을 여러 개의 answer candidates 중 하나로 고르는 형태 (수능문제 같음)

* MCTest, RACE, ARC, etc

### 1.3. MRC Datasets

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FUwfAWlR0ewECPROM8RBw%2Fimage.png?alt=media\&token=49ae75b6-ee84-4f39-9ae0-a4eb13e8b456)

### 1.4. Challenge in MRC

단어들의 구성이 유사하지 않지만 동일한 의미의 문장을 이해

* DuoRC (paraphrased paragraph)
  * 동음 이의어 등
* QuoRef (coreference resolution)
  * 지칭 대명사 - it, that, he...

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FCAJPQCMDcIrGr1wLAfan%2Fimage.png?alt=media\&token=f38b828a-354f-44e6-b88d-fd63b50e092c)

* Unanswerable questions
  * Question with 'no answer'
  * SQuAD 2.0

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FX7rRpYa1V9kpz1vowJbV%2Fimage.png?alt=media\&token=1354605e-bbaf-4b49-b561-e31cda6767ce)

* Multi-hop reasoning
  * 여러개의 document에서 질의에 대한 supporting fact를 찾아야지만 답을 찾을 수 있음
  * HotpotQA, QAngaroo

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2F1PqXFlOwkPxKomyWGkMa%2Fimage.png?alt=media\&token=8805c333-b175-46bc-8486-841bf0aa4fe9)

### 1.5. MRC의 평가방법

#### Exact Match / F1 Score

For extractive answer and multiple-choice answer datasets

* Exact Match
  * (Number of correct samples) / (Number of whole samples)
* F1 Score

  * 예측한 답과 ground-truth 사이의 token overlap을 F1으로 계

  ![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FQcmO7YyrgJV15MH8IGgV%2Fimage.png?alt=media\&token=c6a859e4-f99f-485f-89bd-ac4e0dae39f0)

#### ROUGE-L / BLEU

For descriptive answer datasets => Ground Truth와 예측한 답 사이의 overlap을 계

* ROUGE-L Score
  * 예측한 값과 ground-truth 사이의 overlap recall
  * ROUGE-L => LCS (Longest common subsequence) 기반
* BLEU (Bilingual Evaluation Understudy)
  * 예측한 답과 ground-truth 사이의 precision
  * BLEU-n => uniform n-gram weight

## 2. Unicode & Tokenization

### 2.1. Unicode란?

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

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FZT9EBYBVW1s3ZaO69x0I%2Fimage.png?alt=media\&token=9042839c-cb51-44af-a98a-7cbc9d8f3e3c)

### 2.2. 인코딩 & UTF-8

**인코딩이란?** 문자를 컴퓨터에서 저장 및 처리할 수 있게 이진수로 바꾸는 것

#### UTF-8 (Unicode Transformation Format)

가장 많이 쓰는 인코딩 방식으로 문자 타입에 따라 다른 길이의 바이트를 할당한다.

* 1byte: Standard ASCII
* 2byte: Arabic, Hebrew, most European scripts
* 3byte: BMP(Basic Multilingual Plane) - 대부분의 현대 글자 (한글)
* 4byte: All Unicode characters - 이모지 등

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FisQqItK0VyfEvQ4SsOxN%2Fimage.png?alt=media\&token=9ba99253-36b5-46d8-95a9-063c8ddd3e1d)

### 2.3. Tokenizing

텍스트를 토큰 단위로 나누는 것.

단어, 형태소, subword 등 여러 토큰 기준이 사용된다.

#### Subword 토크나이징

자주 쓰이는 글자 조합은 한 단위로 취급하고, 자주 쓰이지 않는 조합은 subword로 쪼갠다.

"##"은 디코딩을 할 때 해당 토큰을 앞 토큰에 띄어쓰기 없이 붙인다는 것을 의미한다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FB8QJVINQZAUxZUgEB00u%2Fimage.png?alt=media\&token=61ab2890-a0bc-417d-a77f-c5780f459b93)

> Pre-trained 모델과 토큰나이저는 하나의 묶음!

### 2.4. BPE (Byte-Pair-Encoding)

데이터 압축용으로 제안된 알고리즘으로 NLP에서 토크나이징용으로 사용되고 있다.

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

## 3. Look into the Dataset

### 3.1. KorQuAD 살펴보기

* LG CNS가 AI 언어지능 연구를 위해 공개한 질의응답/기계독해 한국어 데이터 셋
  * 인공지능이 한국어 질문에 대한 답변을 하도록 필요한 학습 데이터&#x20;
  * 1,550개의 위키피디아 문서에 대해서 10,649 건의 하위 문서들과 크라우드 소싱을 통해 제작한 63,952개의 질의 응답 쌍으로 구성되어있음 (Train: 60,407 / Dev: 5,774 / TEST: 3,898)
  * 누구나 데이터를 내려받고, 학습한 모델을 제출하고 공개된 리더보드에 평가를 받을 수 있음
  * 현재 v2.0이 공개되었으며 보다 긴 분량의 문서가 포함되어있고 단순 자연어뿐만 아니라 표나 리스트 등을 포함하는 html 형태로 되어있어 문서 전체 구조에 대한 이해가 필요하다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FHsjIBRjzrfqhq2zPWile%2Fimage.png?alt=media\&token=cdd26059-c4d8-4fea-bdb1-80dd0d62a884)

### 3.2. Hugging Face 라이브러리 활용

* KorQuAD 데이터 셋의 경우 `squad_kor_v1` , `squad_kor_v2` 로 불러올수 있다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2Fe0h7tZOhFMwSA8yxKe4x%2Fimage.png?alt=media\&token=3d19212d-bc28-400c-bdcc-a4779474f5e5)

### 3.3. Example

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2F3r0pJxH6iePveIGe90wa%2Fimage.png?alt=media\&token=901843d8-1755-421f-8495-52694cf8ab8d)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2Fj93z1DE5C03TPBuhv9XL%2Fimage.png?alt=media\&token=44734e54-c097-4ff2-8962-5021c2f1786d)

## 관련코드 Link

{% embed url="<https://drive.google.com/file/d/1EEUUQ3CAyLT0LJY72CuDNMM6Nrvsw89E/view?usp=sharing>" %}
