(1강) MRC Intro & Python Basics

💡
기계독해의 기본과 파이썬의 지식에 대해 알아본다.

Course Objective

이 Stage의 목적은 사용자의 질문에 답할 수 있는 Question Answering Model을 밑바닥부터 개발할 수 있는 능력을 기르는 것이다.

Introduction to MRC

기계 독해 (Machine Reading Comprehension)이란, 주어진 지문을 이해하고 주어진 질의에 대한 답변을 추론하는 Task이다.

MRC Task를 수행하기 위해서는 대체로 2개의 System이 필요하다. Question에 해당하는 정보가 있는 Context를 찾는 Search Engine System과 해당 정보를 전달하는 Dialog System이다.

MRC는 아래와 같은 세부 Task로 나눠서 이해할 수 있다.

  1. Extractive Answer Datasets : 질의에 대한 답이 항상 지문 내에 존재하는 Task
  1. Descriptive / Narrative Answer Datasets : 질의에 대한 답을 문장으로 생성하는 Task
  1. Multiple-choice Datasets : 여러 개의 선택지 중 질의에 대한 답을 고르는 형태의 Task

MRC Dataset은 2013년에 등장한 MCTest Dataset을 시초로 보는 시각이 많으며, 이후 폭발적으로 Dataset이 등장하여 활발하게 연구되고 있다.

MRC의 연구는 다음과 같은 한계를 극복하고자 하고 있다.

  1. 질의와 다른 단어로 구성되어 있으나, 의미가 같은 문장에서 정보를 추출하는 것.
  1. Context내에 질의에 대한 답을 찾을 수 없는 경우, '찾을 수 없다'는 추론을 하는 것.
  1. 여러 개의 Context를 통해서만 정보를 찾을 수 있는 질의를 해결하는 것.

MRC Task의 평가는 다음과 같은 Metric을 사용한다.

  1. EM (Exact Match) : Prediction과 Ground-Truth가 정확히 일치하는 샘플의 비율 Score
  1. F1 Score : Prediction과 Ground-Truth 사이의 Token Overlap을 F1으로 계산하는 Score
  1. ROUGE-L : 가장 긴 Sub-sequence 기준으로 N-gram의 Overlap을 Recall로 계산하는 Score
  1. BLEU : Prediction과 Ground-Truth 사이의 N-gram의 Overlap을 Precision로 계산하는 Score

Unicode & Tokenization

Unicode란 전 세계의 모든 문자를 일관되게 표현할 수 있도록 만들어진 문자 셋이다. 각 문자마다 하나의 숫자에 매핑하여 활용한다.

각 문자가 매핑된 숫자를 Computer가 인식 할 수 있도록 Encoding해줘야 하는데, 대표적인 방법이 UTF-8이다. 현재 가장 많이 사용되는 Encoding 방식이며, 문자 타입에 따라서 다른 길이의 바이트를 할당한다. 한글은 한자 다음으로 유니코드에서 가장 많은 Code를 차지하고 있다.

Python은 Version 3부터 Unicode를 기본으로 String Type을 제공한다. 이와 관련된 함수는 ordchr가 있다. 이는 각각 Code Point와 Unicode의 변환을 수행하는 함수이다.

Tokenizing은 Text를 특정 기준으로 구분하는 것을 의미한다. 이 기준으로는 '단어', '형태소', 'Sub-word'등 다양한 기준이 존재한다.

Sub-word Tokenizing은 자주 쓰이는 글자 조합을 한 단위로 취급하고, 그렇지 않은 조합은 Sub-word로 쪼개는 방식을 의미한다. BPE (Byte-Pair Encoding)은 이를 위한 알고리즘으로, Data Driven 방식의 Tokenizing으로 활용된다. Bi-gram 기준으로, 가장 많이 등장하는 조합을 합쳐나가는 방식으로 Tokenizing을 수행한다.

Looking into the Dataset

KorQuAD는 LG CNS에서 한국어 NLP 연구를 위해 개발한 Dataset이다. 이는 질의응답 및 기계독해 Task를 위해 질문과 답변의 형태로 구성되어 있다.

SQuAD와 유사한 방법으로 제작되었다. Wikipedia의 Data를 활용했으며, Version 1과 2가 존재한다. 이 Dataset은 해당 Home Page에서도 내려받을 수도 있고, Hugging Face의 Library를 통해서도 Download 할 수 있다. 후자의 방법이 다양한 이슈를 예방할 수 있고, 간편하기에 자주 활용되는 방법이다.

Dataset의 예시는 다음과 같다.

JSON 형태로 구성되어, Key를 통해 접근할 수 있다. 동일한 답변이 여러 곳에서 발생할 수 있기 때문에, answer_starttext는 List Type의 Value를 갖는다.

KorQuAD의 질문과 답변의 유형은 다음과 같다.


Reference

KorQuAD 소개 영상

문자열 Type에 대한 게시물


Project

오늘의 목표 및 진척상황

  • NLP 관련 강의 복습
  • Baseline 이해하기

직면했던 문제와 학습한 내용

  1. NLP 관련 강의 복습

    밀렸던 KLUE의 후반부 강의를 들었다. 기계독해와 관련된 내용이 있어서 도움은 되었지만, 실질적으로 Task에 대한 이해까지는 도달하지 못했다. 이전 NLP 강의와 실습 Code를 보려고 했으나, 집중력 있게 공부하지는 못했다.

  1. Baseline 이해하기

    공개된 Baseline을 뜯어보며 각 함수에 대해 확인해보려고 했으나, 도저히 이해가 되지 않았다. Dataset이 없는 채로 함수만 보니, 알 수가 없었다. Code 자체도 매우 길고, Task도 익숙치 않아서 더 어렵게만 느껴졌다. 이에 위처럼 이전 실습 Code를 공부하려 했으나, 유의미한 성과를 거두지는 못했다.

추가로 진행 할 사항

  • Dataset과 Baseline 이해하기

'네이버 부스트캠프 AI Tech' 카테고리의 다른 글

[P3] Day 63 (21.04.28)  (0) 2021.06.26
[P3] Day 62 (21.04.27)  (0) 2021.06.26
[P2] Relation Extraction Competition Wrap-up Report  (0) 2021.04.26
[P2] Day 60  (0) 2021.04.26
[P2] Day 59  (0) 2021.04.26

+ Recent posts