[boostcamp] MRC Introduction

허치영·2022년 4월 25일
0

boostcamp

목록 보기
5/5

MRC란?

MRC는 Machine Reading Comprehension의 약자로 기계 독해라고도 부른다.
기계 독해 : 지문(Context)이 주어질 때 주어진 질의(Query/Question)의 답변을 추론하는 문제

MRC는 search engine으로 지문을 찾고 찾은 지문 내에서 질의에 대한 답변 찾는 방식으로 진행된다.

MRC Dataset 종류

  1. Extractive Answer Datasets

Question에 대한 답변이 항상 context의 segment(span)으로 존재하는 데이터셋.
지문에서 답변을 추출해내는 방식으로 답변을 만들어 낸다.

  1. Descriptive/Narrative Answer Datasets

Question에 대한 답변이 context에서 추출한 span이 아니라 question을 보고 생성된 sentence인 데이터셋.

  1. Multiple-choice Datasets

Question에 대한 답변을 여러개의 candidates 중 하나로 고르는 형태의 데이터셋.
객관식 문제 풀이라고 보면 된다.


Challenges in MRC

  • Paraphrasing
    Context에서 같은 의미로 사용되는 문장이지만 paraphrase되어 있는 경우가 잦기에 paraphrased paragraph에 대한 이해가 필요하다.

  • Coreference Resolution
    Context에서 대명사가 등장하는 빈도가 잦기 때문에 각각의 대명사가 어떤 대상을 지칭하는지 알아야 context에 대해 제대로 이해할 수 있다.

  • Unanswerable Question
    Context 내에서 답변을 찾을 수 없는 경우도 존재. (ex: SQuAD 2.0)
    실제로 답변이 없는 지문이 주어질 때 억지로 답변을 내놓기보다 "No Answer"이라는 선택지를 택하도록 해야함.

  • Multi-hop Reasoning
    Question에 대한 답변을 찾기 위해서 여러개의 document에서 supporting fact를 찾아야하는 경우가 있음 (ex: HotpotQA, QAngaroo)



MRC 평가 방법

  1. Exact Match (Accuracy)
    Prediction과 Ground-truth가 정확히 일치하는 샘플의 비율을 의미한다.
    답변이 조금만 달라져도 틀린 것으로 간주되기 때문에 높은 점수를 못받을 가능성이 높음
  2. F1 Score
    EM에서 생기는 문제(조금만 답변 달라도 틀린 것으로 간주되는 상황)를 막기 위해서 고안된 방법.
    Prediction과 Ground-truth 사이의 token overlap을 F1으로 계산한다.
    단순히 overlap되는지만 보기 때문에 답변의 의미가 실제로 맞는지에 대해서는 구분하지 못한다.

두 방법 모두 Extractive Answer나 Multiple-choice Answer Dataset에서 잘 쓰이는 평가 지표로 Descriptive/Narrative Answer Dataset에서는 사용되지 못한다.
(Free-form의 답안은 유의어 때문에 일치하는 token이 많지않을 가능성이 높기 때문이다.)

  1. ROUGE-L
    Prediction과 Ground-truth사이의 token overlap을 확인하는 방법
    ROUGE-L, ROUGE-1, ROUGE-2가 있는데, 각각의 정의에 따라 token n-gram이 얼마나 겹치는지에 대해서 평가한다.
    ROUGE-L의 경우에는 LCS(Longest Common Subsequence) 기반으로, 겹치는 n-gram중 가장 긴것에 대해서 평가를 진행한다.
  2. BLEU
    Prediction과 Ground-truth 사이의 overlap을 n-gram level에서 계산하여 평가하는 방식

두 방식은 Descriptive/Narrative Answer Dataset에서 사용할 수 있다.



Unicode & Tokenization

  • Unicode : 전 세계의 모든 문자를 일관되게 표현하고 다룰 수 있도록 만들어진 문자셋을 말한다. 각각의 문자는 하나의 숫자에 mapping된다.

표시 형식

ex: U+AC00
U+: 유니코드 뜻하는 접두어
AC00: 16진수 code point

  • UTF-8: 현재 가장 많이 쓰는 인코딩 방식 문자 타입에 따라서 다른길이의 바이트를 할당
    Unicode Transformation Format의 약자

  • Python에서의 Unicode

Python3부터 string은 유니코드 표준을 사용한다.
ord() : 문자를 유니코드 code point로 변환
chr() : Code point를 문자로 변환

  • Unicode와 한국어

한국어는 한자 다음으로 많은 code point를 차지한다.
완성형 : 글자 하나를 code point에 매핑 (11,172개) (ex: 가, 갉, 굶)
조합형 : 초,중,종성 글자. 각각을 조합해서 글자 만듦 (ex: ㄱ, ㅏ, ㄺ)

  • Tokenizing

텍스트를 토큰 단위로 나누는 것
띄어쓰기, 형태소, subword등 여러 기준을 사용한다. 다만 현재는 띄어쓰기 기준 tokenizing은 잘 사용하지 않는다. 보통은 형태소 기준 혹은 subword 기준으로 많이 사용한다.
(띄어쓰기 기준으로 tokenizing을 하게되면 vocabulary의 크기가 너무 커지기 때문이다.)

  • Subword Tokenizing

자주쓰이는 글자 조합을 한 단위로 취급하고, 자주 안쓰는 조합을 subword로 쪼개는 방식
띄어쓰기 기준으로 tokenizing을 진행했을 때보다 훨씬 작은 크기의 vocab으로 구성 가능하며, delimeter(구분자)로 띄어쓰기와 subword의 구분이 되어있어 원래의 문장을 복원하기가 쉽다는 장점이 있다.

  • BPE(Pyte-Pair Encoding)
    단어를 나누는 방식을 data-driven으로 함
  1. 자주 나오는 글자 단위 bigram(or byte pari)를 다른 글자로 치환
  2. 치환될 글자를 저장
  3. 1,2번 반복

요즘 BPE같은 data-driven이 자주 사용된다.
OOV(Out-of-Vocabulary)문제에 강인하다.



Dataset

KorQuAD

  • KorQuAD는 LG CNS에서 개발한 한국어 QA/MRC 데이터셋
  • 1,150개 위키피디아 문서, 10,649 개 하위 문서들을 크라우드 소싱으로 제작
  • 63952개 질의응답 쌍으로 구성
  • Train: 60,407 / DEV: 5,774 / TEST: 3,898
  • 누구나 데이터 받아지고, 모델 제출하고, 리더보드 평가 가능
  • 현재 v1.0, v2.0 공개되어 있다.
  • 2.0은 긴 분량의 문서가 포함되고, 자연어 문장뿐만 아니라 표, 리스트 등을 포함하는 HTML 형태로 표현되어 있어 문서 전체 구조에 대한 이해가 필요하다.

KorAuAD의 데이터 수집
SQuAD v1.0의 데이터 수집 방식 벤치마크
문서 수집- 질문/답변 생성 - 2차 답변 태깅

Huggingface에서 korquad 정제되어 있음
huggingface쓰면 다운로드 쉽고, 전처리 과정 필요없어짐

profile
NLP를 공부하는 대학생입니다

0개의 댓글