R-NET: MACHINE READING COMPREHENSION WITH SELF-MATCHING NETWORKS

R-NET: MACHINE READING COMPREHENSION WITH SELF-MATCHING NETWORKS

1. 서론 

자연어 처리 문제 중 주어진 Context 를 이해하고 주어진 질문에 답변하는 문제를 흔히 MRC (Machine Reading Comprehension) 라고표현을 하는데, 풀고자 하는 문제는 아래의 예시와 같다. 아래의 예를 보면, 주어진 두줄의 문장이 있는데 (여기에는 Joe 가 어디에 있고 뭘하고 있는지 정보가 포함되어 있다.) 여기에 Where is the milk now? 와 같은 질문을 하면, A Office 라고 답변을하는 것과 같은 Task 를 수행하고자 하는 것이다.

SQuAD1.1 Leaderboard (’18..07.04 기준)

MRC 문제는 최근 굉장히 핫한 분야로 많은 회사들이 연구를 수행하고 있으며, 시시각각 State of Arts 가 바뀌고 있는 분야로, 글을 작성하는 ‘18.07.04 기준 Leader Board 를 아래와 같이 첨부 하였다. 금번 포스트에서 보고자 하는 것은, MicroSoft 의 R-Net 으로 예전에 관심이 있어서 MRC 논문을 찾아볼 당시에는 Leader Board 1위에 있던 알고리즘 이었으며, 현재는 Ensemble 모델 기준으로 5위에 위치한 여전히 경쟁력이 있는 알고리즘이다.

2. 기존 연구

이 논문을 이해하려고 하면, 기본적으로 알아야 하는 개념들이 있는데, 기본적인 신경망, RNN, GRU, BiDirectional , Seq2Seq(Encoder,Decoder)등의 개념은 알고 있다고 가정하고 몇 가지 기존 연구를 간단하게 이야기 하고자 한다.

(1) Effective Approaches to Attention-based Neural Machine Translation (링크) (링크)

(2) Pointer Network  (링크)

(3) Match-LSTM (링크)

(4) MACHINE COMPREHENSION USING MATCH-LSTM AND ANSWER POINTER (링크)

(5) Attention Is All You Need (링크)

3. 핵심 IDEA 

(1) Architecture

(2) Data Set

아래의 데이터는 Squad Data Set 으로 https://rajpurkar.github.io/SQuAD-explorer/ 에서 다운로드 받을 수 있다.

{"version": "v2.0", "data": [{"title": "Normans", "paragraphs": [{"qas": [{"question": "In what country is Normandy located?", "id": "56ddde6b9a695914005b9628", "answers": [{"text": "France", "answer_start": 159}, {"text": "France", "answer_start": 159}, {"text": "France", "answer_start": 159}, {"text": "France", "answer_start": 159}], "is_impossible": false}, {"question": "When were the Normans in Normandy?", "id": "56ddde6b9a695914005b9629", "answers": [{"text": "10th and 11th centuries", "answer_start": 94}, {"text": "in the 10th and 11th centuries", "answer_start": 87}, {"text": "10th and 11th centuries", "answer_start": 94}, {"text": "10th and 11th centuries", "answer_start": 94}], "is_impossible": false}, {"question": "From which countries did the Norse originate?", "id": "56ddde6b9a695914005b962a", "answers": [{"text": "Denmark, Iceland and Norway", "answer_start": 256}, {"text": "Denmark, Iceland and Norway", "answer_start": 256}, {"text": "Denmark, Iceland and Norway", "answer_start": 256}, {"text": "Denmark, Iceland and Norway", "answer_start": 256}],

(3) Encoding Question and Passage

본 논문에서는 단어와 Char Level 두가지 Embedding 을 Concat 하여 사용하고 있으며, 각각의 Embedding 은 알아서 적정히 잘 했다고 가정하고 있다. 부연 설명을 하자면, Word Embedding 은 Word2Vec, Glove, FastText 등의 알고리즘을 활용할 수 있으며, CharLevel 은 OneHot Encoding 도 좋고, Look Up Table 을 사용하는 방법도 좋다.

Encoding Layer 에서는 위와 같이 BiGRU 를 사용하여 각 단어, Char 레벨의 Embedding 을 Question 및 Passage 에 대한 Vector Representation 에 활용하고 있다.

(4) Question Passage Mapping

1 단계에서 각각 Question 과 Passage 를 나타내는 Vector 를 만들어 내었으니, 이제 Question 과 Passage 를 맵핑하여 관계를 연결하여 줄 필요가 있다. 이는 Attention Mechanism 을 약간 변형한 것인데,  아래와 같은 원문 설명을 기준으로 추가적인 설명을 하고자 한다.

위에서 일부러 Attention 에 대해서 따로 설명한 이유가 여기에 있다.  v 는 매 Step 의 output 결과로 다음 Layer 의 Input 이 되겠다. 여기서 중요한건 c 를 구하는 부분인데,  s 는 Score , a 는 Softmax 를 취한 확률, c 는 Question Vector * a(Attention) 이 되겠다. 조금 더 이해를 쉽게 설명하자면, 위에서 설명한 Attention Mechanism 에 비교하자면, Encoder 부가 Question 이고, Decoder 부가  Passage 가 되는 것이다.

여기서 조금 특인한건 Score 를 구할때 보면, 이전 RNN State 의 output 값과, Question, Passage Vector 3가지를 위에서 설명한 concat 방식으로 Scoring 를 하고 있는 점이다. 원래 위에서 설명한 Attention 은 Encoder 와 Decoder 부의 Vector 만을 가지고 연산하는데, 조금 변형된 형태로 보여진다.

위의 내용은 Passage 를 RNN 의 Input 에 추가하는 변형된 match-LSTM 이라는 방법은 제안하고 있는데, Match-LSTM의 개념은 간단히 살펴보면 아래와 같다. (원문은 여기)
간단하게 보자면,  기존 방법은 아래와 같이 Attention 만 Input 으로 사용되었지만,

아래의 그림과 같이 Match-LSTM 은 Ht와 A를 같이 활용하고 있다. Hs 는 Encoder부의 Hidden State 이고 a 는 Attention , Ht는 Decoder 부의 Hidden State , Hm 은 여기서 말하는 Match LSTM 이라고 해석된다. 여기서 중요한 점은 Hm 을 연산할 때, Ht 와 A 를 같이 Input 으로 활용한다는 점 이겠다.

같은 맥락에서 보면 Question은 고정된 seq2seq의 Encoder부로 보고 있으니, Passage Decoder부분 연산시 기존의 RNN Input 이 c (attention * Question Vector) 였다면, 여기에 Passage t 를 추가하는 형태로 Match-LSTM 을 응용하였다고 보면 되겠다.

마지막으로 각각 Passage Token 의 중요도를 구하기 위해서 0~1 Input 을 변환하는 Sigmoid 함수를 활용하여 각각 Passage Token 의 중요도를 구할 수 있다. 결국 의미적으로 보면, Passage 의 각각의 Token 에 대해서 Question 과 얼만큼 관계가 있는지 구하는 것이다. (6) 번 과정 물론 내용으로 보면, 다음 Layer 의 Input 으로 활용되는 것은 V 인것으로 보인다.

 

(4) Self Matching Attention

 

Self Attention 에 대한 이야기가 나오는데 기술적인 아키택쳐가 아닌 감성적인 활용의 이유를 시각적으로 보면 아래와 같습니다. Making 이라는 단어가 중요하다고 생각되는데, Self Attention을 해보니 Making More Difficult 처럼 연관된 중요 단어들을 찾아 낼 수 있다는 것입니다. 자세한 사항은 “Attention Is All You Need ” (링크) 참조

앞의 Layer 를 통과하면, Passage 의 각 Token 의 중요성을 표시하는 결과를 Input 으로 받을 수가 있는데, 이 정보의 문제는 문맥적인 정보가 매우 제한적이라는 점입니다. 이러한 문제 때문에 종종 연관된 주변의 중요한 정보들을 누락하게 됩니다. (특정 단어 하나만 중요하다고 그 단어로 답변이 되는 것이 아니라, 그 단어 주변의 문맥을 형성하는 단어들을 같이 찾을 필요성에 대해 이야기 하는 것으로 이해함)

이러한 문제를 해결하기 위하여 자기 자신과의 Attention 을 구하여 연산하는 것이 Self Matching Attention 의 핵심입니다. 이를 통해서 실제 답변을 생성하기 위하여 필요한 주변의 연관 단어들을 알아서 수집해 줄 수 있습니다.

(5) Output Layer

위에서 설명한 MACHINE COMPREHENSION USING MATCH-LSTM AND ANSWER POINTER  의 사상이 여기에서 등장한다, 결과를 출력하는 방법은 크게 두 가지가 있을 수 있는데, 하나는 Sequence 방법이고, 하나는 Boundary 방법이다. Sequence 방법은 Pointer Network 에서 Decoder 부를 생성하여 OutPut 으로 Encoder 부분(Context) 중에서 답변에 해당하는 위치를 Return 하는 형태가 되는 것인데, 이 경우에는 언제까지 답변을 생성할지 판단해서 종료해 주어야 한다. (여기에서 어떤 알고리즘의 경우에는 Reinforcement 를 활용하기도 하는 것이다) . Boundary 방법은 딱 두개의 답변만 생성하는 것이다. 시작과 끝 (당연히 학습셋도 그렇게 생겼겠지) 여기에서는 Boundary 방법을 사용하고 있다.

다시한번 정리를 해보면 아래와 같은 몇 가지 Idea 들의 조합이다라고 생각할 수 있겠다. 너무 예전 연구로써 당연시 되는 내용들을 제외하면 아래 정도 아닐까?

(1) Word, Char Embedding 에 Bi Directional LSTM/GRU 를 사용하는 것은 기존의 연구 결과이며, 최근에 가장 일반적으로 사용하는 방법이다. 최근에는 Pretrained 된 모델을 사용하는 ELMO 같은 방법도 있겠다.

(2) Question 과 Context 의 Attention을 구하는 과정은 Memory Network 에서 차용한 방법으로,이 또한 Attention Mechanism 에서 파생된 응용 방법이다. 이것은 아마도 Matching-LSTM 과 같은 연구와 유사성이 있는 내용으로 생각된다.

(3) 그 다음 Self Attention 이 고유한 Idea 로 논문의 제목도  “R-NET: MACHINE READING COMPREHENSION WITH SELF-MATCHING NETWORKS” 이 되는 것인데, 이것도 결국은 Attention Mechanism 에서 파생된 응용 방법의 하나라고 생각된다.

(4) 마지막 Pointer network 의 개념도 기존의 연구 “MACHINE COMPREHENSION USING MATCH-LSTM AND ANSWER POINTER” 를 차용한 것으로 보면 되겠다.

여기에 Reinforcement 의 방법을 차용하면, 어디까지(어떤 길이로) 답변을 생성할지 판단하는 정책망 (Policy Network) 가 추가되는 것이고, 요즘 유행하는 Convolution 방법을 Text Representation 에 넣어 볼 수도 있는 것이고.. 또 생각해 보자면, Context 는 매우 길기 때문에 효과적은 해석을 위해서 계층적인 RNN 망을 구성하는 hierarchical 계념을 차용할 수도 있는 것이고, 데이터를 많이 구성하는 것이 힘드니 Semi Supervised 나 Unsupvervised 계열 연구를 붙일 수도 있는 것이고, 시간이 되면 다양하게 해볼 수 있겠다. !

4. 성능 

기존적으로 해당 논문을 쓰던 시기에는 최고의 성능이였겠지만, ’18년 7월 4일 기준으로 5등 이라는 것은 어쩔 수 없는 사실..  참고로 EM 스코어는 정답지의 정답과 추축한 값의 Vector 유사도의 평균 정도로 이해하면 되고, F1 은 다들 아시는 것과 같이 Precision 과 Recall 의 조화 평균인데, Precision 은 답변이라고 생성해 낸 것을 Tocken 으로 나누었을대 얼마나 일치하느냐로 보면되고, Recall 은 전체 찾아야 하는 Answer(정답지) 중에 몇 Tocken 을 찾아 내었는냐가 되겠다.

5. 한계점 

MRC 를 현업에서 활용하고자 하면, 다소간의 문제가 발생하는데 현재 생각나는 것은 아래와 같은 것들이 있다.

(1) Document 를 Search 가 최종적인 성능에 많은 영향을 줌 

사용자가 문서를 선택하고 해당 문서에 질의하는 경우라면 상관이 없지만, 서비스 측면에서 보면 사용자는 Global Knowledge 에 질의를 하는 것이고, 서비스 시스템은 알아서 해당 문서를 찾고 답변을 찾아 줘야 하는데, 이때 결국은 해당 질의가 어떤 문서에서 답을 찾을 수 있느냐라는 문서 검색 문제가 발생하게 된다. 때문에 Search Engine 의 구성에 따라 최종 답변의 성능이 많은 영향을 받을 수 있다

(2) 복수의 Document 를 종합적으로 판단하여 결론을 내리는 문제

사람이라면 복수의 문서에서 지식을 파악하여 종합적인 결론을 내릴 수 있겠으나, 현재의 MRC 는 이러한 문제는 해결하지 못하고 있다.

(3) Data Set 문제 

한글 버전의 3Set (Context, Question, Answer) 데이터를 구하기가 힘들다.. 기본적으로 10만 셋 정도는 있어야 Base Train 이 가능하다고 이야기한다. 물론 다른 Domain 에 적용하기 위한 Fine Tunning 에는 훨신 적은 데이터로도 가능하다.

(4) Performance 문제 

여기서는 답변의 종료 지점을 찾기 위한 Reinforcement 기법 등은 적용되지 않았지만, 다른 MRC 알고리즘의 경우 Reinforcement  기법을 적용하는 경우도 있으며, 전체적으로 아키택쳐의 복잡도가 높은 기법으로, 실제 서비스시 적정 동접을 커버하기 위해 GPU 사용이 필요하거나 하는 서비스 구성 비용이 좀 비싸다는 문제가 있다.

6. 향후 과제 

(1) 뭔가 다른 테크닉들 추가해 보기 

Char, Word Embedding Layer 에 PreTrained 된 ELMO 기법을 적용해 본다던지, 데이터 확보를 위해서 Semi Supervised 나, Unsupervised 개열 연구를 적용해본 다던지 다른 방면의 연구들을 빠르게 적용해 볼 필요가 있겠다.

(2) Global Knowledge 문제.. 

시스템 레벨에서 Ensemble 을 어떻게 효과적으로 할 것인지 조금 고민할 거리가 있지 않을가 싶다. 예를 들면, 질의에 해당하는 복수의 문서를 검색하여, 복수의 문서에 대해서 MRC 를 실행하고, 그 결과를 다시 모아서, Context 로 구성후에 다시 MRC 를 돌리면 어떻게 될까? 개인적으로 한번 해보고 싶다.

7. 관련 정보 추천 

Source: medium.com/@joealato/attention-in-nlp-734c6fa9d983

MRC 의 역사와 현재 주요 연구에 대해서 정말 잘 정리한 블로그를 발견하였다.  언넝 하나씩 찾아서 공부하고 나름대로 정리해 보도록 하겠다.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *