(1강) MRC Intro & Python Basics

newbie·2021년 10월 12일
0

강의소개

기계독해(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 Task를 응용하면, 지문이 주어지지 않아도, 질문이 들어오면 web 상에서 관련있는 context 후보군을 찾아서 답변을 줄 수 있는 형태인 QA 시스템을 구현하는데 사용할 수 있다.

  • Challenges in MRC

    • 1) 단어들의 구성이 유사하지 않지만 도일한 의미의 문장을 이해해야 하는 경우..
    • Dataset example
      • DuoRC(paraphrased paragraph)
        • 질의와 다른 단어를 사용한 경우 기계는 다른 형태의 단어를 다르게 인식할 수 있어서, 이런 경우 paraphrasing이 어려울 수 있음
      • QuoRef(corefernece resolution)
        • 지시대명사가 지문 내에 있을 때 실제로 어떤 것을 가리키고 있는지를 파악하기 어려울 수 있음
    • 2) 실제로 지문 내에서 답변이 존재하지 않는 경우..
      • SQuAD 2.0
        • Qeustion with 'No Answer'
        • 주어진 지문 내에서 답변을 찾을 수 없음도 하나의 답변의 형태로 존재함
    • 3) Multi-hop reasoning : 여러 개의 document에서 질의에 대한 supporting fact를 찾아야지만 답을 할 수 있는 문제
      • HotpotQA, QAngaroo

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, 그리고 대회를 통해 익혀보도록 할 예정이다!! 이번주도 화이팅

profile
DL, NLP Engineer to be....

0개의 댓글