10주차(1) - Teaching Machines to Read and Comprehend

2019. 3. 29. 12:08풀잎스쿨 NLP Bootcamp

논문링크: https://arxiv.org/abs/1506.03340

 

Teaching Machines to Read and Comprehend

Teaching machines to read natural language documents remains an elusive challenge. Machine reading systems can be tested on their ability to answer questions posed on the contents of documents that they have seen, but until now large scale training and tes

arxiv.org

참고자료: (남재신님 발표자료, 구글 Slide) https://tinyurl.com/y2vtr4rp

 

모두연) NLPbootcamp) MRC_내발표) Teaching Machines to Read and Comprehend 190323

Teaching Machines to Read and Comprehend (15/6/10)

docs.google.com

 

시작하기 전, MRC에 대해서 알아보려고 한다. MRC란 무엇일까? 여기서 MRC는 Machine Reading Comprehension을 말하며, 다음을 지칭한다.

 

  1. 기계가 글과 질문을 읽고
  2. 추론을 하여
  3. 글에서 정답을 찾아주는 것

MRC는 NLU에서 해결하고자 하는 가장 큰 Task중 하나이며, 주로 '주어진 문서'에 대해 '질문'에 대한 '답'을 하는 것이 묵표이다. 왜 이런 이야기를 하고자 하는가 하면, MRC와 QA는 다르다는 언급을 하고 싶기 때문이다.

 

흔히 많은 사람들이 MRC와 QA를 동일시 하는 경우가 많은데, 이는 사실과는 미묘한 차이가 있다.

QA는 사람들이 흔히 알고있는 정보(상식, 생활정보 등)을 미리 알고있다고 가정하고, 때문에 규칙이나 상식과 같은 문제를 푸는 것이 대부분이다.

MRC의 경우는 조금 다르다. '주어진 문서/지문'이 있고, '질문'에 대해 '답'을 하고자 하는 문제이기 때문에 사람들이 흔히 알고 있는 지식을 이용해서 문제를 풀면 안된다는 점에 주목해야한다. 즉, '지문만을' 보고 문제를 풀어야 하며, 때문에 지문에 대한 정보를 파악해야 한다는 점이 주목된다.

 

Abstract

일단 글을 시작하기 전, MRC가 무엇인지에 대해 간략하게 설명했다. 일단 NLU는 우리가 가장 풀고싶어하는 문제중 하나인 것은 알겠는데, 이러한 모델을 학습시킬 데이터는 어디서 가져올까?

 

물론 외부 데이터를 Crawling해서 모으는 것도 가능하다. 하지만 이러한 데이터는 정말 Benchmark로 사용하기에 적합한것인가? 라고 묻는다면 그렇지는 않을 것이다. 또한 학습을 위해서는 대규모의 데이터셋이 필요할 것이다. 하지만 단순 Crawling으로는 이러한 데이터를 정제하는데도, 구하는데도 많은 시간이 소요될 것이다.

 

따라서 우리는 Model에 대한 Performance를 확인하기 위한 용도로도, 학습을 진행하기 위한 용도로도 Dataset이 필요하게 된 것이다. DeepMind에서는 이러한 문제, 즉 MRC를 해결하기 위해 데이터셋을 만들었다. 또한 논문은 여기서 그치지 않고 논문에서 언급하는 데이터셋을 이용하여 MRC Task를 위한 모델을 제시한다. 

Contribution

Dataset Introduction

Target Task of Dataset

일단 데이터셋의 목표는 명확하다.

  1. 문맥이 주어지고,
  2. 질문(쿼리)을 받아서
  3. 정답을 생성하는 것

하지만 주어진 문맥을 보고 답변을 할 수 있게 하기 위해서는 문맥이 아니면 얻을 수 없는 정보여야 한다는 조건이 붙는다. 따라서 이를 위해서 Entity를 익명화 하는 과정을 거치게 된다. 예를 들면, '2019년 3월 기준 MBC 9시 뉴스의 메인 앵커는 누구?'라는 질문에 대해 답변을 하기 위해 지문이 주어지고, 이 지문에서 나오는 Entity들은 모두 익명화가 되어있는 형태인 것이다. 만약 지문중 특정 문장이 'ent192는 2018년 12월부터 MBC 9시 뉴스의 메인 앵커를 맡고 있다'라는 문장이 나온다면, 앞서 주어진 질문의 답은 사람의 이름이 아닌 'ent192'로 답변해야 하는 것이다.

 

이후, Entity에 대한 질문에 대해 답을 하기 위해 Entity부분을 빈칸으로 만들게 된다. 이를 보통 'Fill in the blank' 문제라고 부르며, 이러한 테스트 방법은 '클로제 테스트(Cloze Type Question)'라고 부른다.

 

여기까지의 문제를 조금 더 '수식'스럽게 풀어보면 이렇다.

p(Answer | Context_Document, Query)

즉, Context(문맥)가 주어지고 Query가 주어지면 답을 찾는 문제인 것이다.

 

Dataset 설명

데이터셋은 아래와 같이 구성되어있다.

  • 온라인 신문 기사
    • 기사
    • 요약본
      • 요약본은 단순히 원 기사에서 문장을 복사하지 않는다
  • 약 320,000건의 기사
    • CNN: 93,000건
    • Daily Mail: 220,000건
  • ACQ트리플 만들기
    • 기사 요약본들을 Cloze 스타일 질문으로 변환

 

Model Architecture

Neural Network Models: Attentive Reader, Impatient Reader, Deep LSTM Reader

이 논문에서는 단순히 데이터셋만을 제공할 뿐이 아닌 

 

모델의 구조는 크게 3가지로 나눠볼 수 있다.

  • Attentive Reader
  • Impatient Reader
  • Deep LSTM Reader

Deep LSTM Reader

LSTM을 통해 문서를 읽는 부분이다. 이 부분에서는 Context Document 전체를 단어(Word)하나씩 피드를 한다. 그 이후, 쿼리를 하나씩 넣게 되는데, 이 반대의 순서로도 진행을 하게 된다. 이와 같은 구조는 쿼리(Query, 질문)과 Document간의 페어를 하나의 긴 문장처럼 처리하게 된다. (여기서 처리(Processing)란 Embedding을 말한다.) 이 결과로 나온 Embedding을 통해 Document 내 어떤 토큰이 쿼리를 처리하는지에 대해 학습하게 된다.

 

Deep LSTM Reader는 크게 3가지로 구성된다.

  • Multi-Layer
  • Peephole
  • Skip Connection

여기서 주목할 부분은 Peephole이다. 이 부분을 알아보기 위해 수식을 봐야한다.

기존 Deep LSTM Reader 구조에서 사용되는 수식

 

위와 같은 수식은 상당히 이해가 어려운 부분이 있다. 따라서 불필요한 부분을 일부 삭제하고 살펴보자.

수식에서 k,x,o에 대한 표시를 삭제한 형태

위 수식을 보면 어딘가 익숙한 구조라는 것이 느껴진다. 바로 기존 LSTM에서 사용하던 수식을 그대로 차용한 구조라는 점이다. 물론 기존의 수식과는 어딘가 차이가 있는 것처럼 보인다. 해당 부분은 아래의 그림을 통해 이해할 수 있다.

LSTM + Peephole

 

간단하게 설명하자면, 기존의 LSTM에서는 현재의 Cell State를 업데이트 하기 위해 Hidden State와 해당 Step의 Input만을 받아 각 부분(Update Gate, Forget Gate, Input Gate, Output Gate)을 계산하게 된다. 하지만 이는 사실상 이전 Cell State를 입력으로 받지 않기때문에 Sequential한 정보가 부족해지는 현상을 보이게 될 수 있다. 따라서 이러한 점을 보완하기 위해 Peephole connection이라는 부분을 통해 이전 Step의 Cell State 또한 입력으로 받고자 하는 것이다. 즉, 각 Gate를 계산하기 위해, 1) 이전 Step의 Cell State, 2) 현재 Step의 Hidden State, 3) 현재 Step의 Input State를 입력으로 받게 된다.

 

Attentive Reader

Attentive Reader에서는 각 문장과 Query를 비교하여 문장 내 중요한 부분이 어디인지 파악하게 된다. 즉, Document 내 한문장씩을 Input으로 받는 부분과 Query를 받는 부분이 있고, 두 부분의 관계를 통해 Context sentence중 어느 부분이 중요한지를 파악하는 과정이다.

 

하지만 여기서도 문제는 있는데, 문장 내에서 중요한 부분이 하나가 아닌 여러개가 있다면 어떨까? Attentive Reader는 중요한 부분이 어디인지를 파악하기 위해 Softmax를 사용하게 되는데, 이 말은 하나의 중요한 부분만 파악한다는 의미이다. 바로 이런 문제를 해결하기 위해 Attentive Reader를 같은 문장에 대해 여러번(Hops) 반복하게 되는 것이다. 바로 이 '여러번'에 대해서는 Impatient Reader가 담당하게 된다.

 

Impatient Reader

여기서는 Document 내 어떤 Sentence가 Query와 가장 밀접한 관련이 있는가에 대한 정보를 파악하게 된다. 즉, Query(질문)에 답을 하기 위해서는 어느 문장을 봐야 하는가에 대한 학습을 하게 된다. 하지만 이러한 정보는 Document 전체를 한번만 훑는 것으로는 쉽게 파악되지 않기 때문에, 여러번 Document를 보게 된다. (이전 논문에서 나왔던 Episodic Memory와 유사한 개념으로 이해할 수 있다)

 

여기서 반복되는 갯수는 Query의 토큰의 갯수만큼 진행된다. 여기서 토큰은 보통 Word단위로 들어오기 때문에 단어의 갯수만큼 반복된다고 이해할 수 있다. 즉, 길이 m의 Query가 주어질 때, m만큼 반복되게 되며, 이러한 시스템을 통해 Attentive Reader도 여러번 반복되며, 이 과정을 통해 어느 문장, 어느 단어가 중요한지를 최종적으로 학습하게 된다.

Query의 단어가 변함에 따라 Attention 토큰이 변한다

Result & Conclusion

(Frame-semantic Benchmark와 Word Distance Benchmark는 이해가 어려워 생략합니다.)

 

Result

각 모델의 정확도에 대한 결과

논문에서 제시하는 데이터셋을 이용하여 모델을 구축한 결과를 보여준다. 기존 방식들은 MRC Task에 대해 정확도가 그렇게 높지 않게 나오는 반면, 논문에서 제시하는 MRC모델은 훨씬 좋은 성능을 보여주며, 각 Reader의 성능에 대해서도 볼 수 있다.

 

Conclusion

이 논문에서는 보다 나은 MRC모델의 구축을 위해 CNN/Daily Mail의 기사를 통한 데이터셋을 구축함과 동시에 해당 데이터셋을 이용하여 Context Document내에서 정답을 찾는 모델을 제시한다. 사실 모델은 Attention을 전체적인 부분와 상세한 부분으로 나눠쓴 구조가 기억할 만한 부분이고, 주요 Contribution은 데이터셋을 제공한 부분이 크다는 느낌이다.

 

다만 추후 다른 논문에서 언급되겠지만, CNN/Daily Mail의 데이터셋의 양이 방대한 만큼 그만큼 오류도 많다는 이야기가 있다. 이와 같은 문제때문에 MRC 모델을 검증하기 위해 SQuAD라고 불리는 데이터셋을 주로 이용하게 된다.