NL-037, Read + Verify: Machine Reading Comprehension with Unanswerable Questions (2019-AAAI)

MRC 리더보드보면 verify라고 해서 BERT+verify 등으로 써있는데 verify가 무엇인지 알아보자!

0. Abstract

  • Unanswerable questions을 하는 MRC의 이전 연구에서는 "no-answer"을 할 확률을 계산하여 진행하였다.
  • 하지만 이러한 방법은 predicted answer에 대해 제대로 되는 것에 대한 검증이 없어서 잘 안된다고 함.
  • 여기서는 read-then-verify system을 제시한다.
    • 이는 neural reader로 정답 후보자를 추출하고 no-answer 확률을 계산할 뿐 아니라 leverages an answer verifier to decide whether the predicted answer is entailed by the input snippets. (즉, predicted answer이 입력에 대해 제대로 구했는지 검증을 한다는 것 같음)
  • 게다가 two auxiliary losses을 사용하여 reader가 정답을 잘 추출하고 no-answer을 잘 검출하도록 도운다.
  • 또한 세 개의 다른 구조를 제안하여 SQuAD 2.0에서 2018년 8월 28일 기준 SOTA라고 한다.
    • 지금(2019년 5월) 기준에서는 MRC 모든 SOTA는 BERT을 사용하는 추세이다.
    • 따라서 모델의 변경보다 pre-trained model이 더 중요한 시대라고 볼 수 있으나, 모델의 구성또한 성능 차이를 나타낼 수 있기 때문에 중요한 MRC 논문은 읽어 보는 게 좋다고 생각함... 
    • 즉 내가 직접 MRC 모델을 구성한다고 하면 BERT+기본 MRC 모델을 가져다가 사용하는 식으로 가야하지 않을까?

1. Introduction

  • NLP에서 MRC가 매우 중요하다. 이를 통해 기술의 진보가 이루어지고 있다.
  • 하지만 이것에도 가정이 있으니... 질문에 대한 정답이 context passage에 있다는 가정이다.
    • 그래서 모델들은 정답이 context passage에 있음을 체크하지 않고 가장 그럴듯한 text span을 선택하는 식이다.
  • 최근에 SQuAD 2.0이 나왔고 이는 unanswerable case 또한 존재한다.
    • 이것을 다루기 위해 더 넓은 linguistic 현상을 (negation, antonymy, entity change) 인지해야 한다.
  • 기존의 방법은 shared-normalization이라 해서 "no-answer" score와 answer span score 사이을 normalization하여서 질문에 대한 정답이 답할 수 있는지에 대한 확률을 구하였다.
    • 하지만 이러한 방법은 질문에 대해 answerability (대답을 할 수 있는지) 을 고려하지 않는다.
  • 여기서는 answerability가 질문이 정답을 가질 수 있는지
  • legitimacy는 text에서 추출한 것이 passage와 question을 뒷받침 할 수 있는지를 의미한다.
    • 이 논문에서 제안한 시스템은 read-then-verify이다. (즉 출력을 verify 하는 것을 추가함)
    1. Passage에 대한 question에 대한 정답과 no-answer 확률을 각각 도출함.
    2. 이렇게 도출한 정답이 적절한지 확인을 한다.
  • 이 연구에 대한 contribution은 총 3가지라고 볼 수 있다.
    1. Two auxiliary losses을 제안하여 정답 추출과 no-answer 검출을 각각 잘 다룰 수 있게 한다.
      • 여기서는 두 번째 step에서 정답 후보에 대해 verifying을 하는 과정이 있기 때문에 모든 질문에 대답을 해야하는 식이다.
      • 전의 연구에서는 unanswerable question에 대해서는 가능성 있는 정답 후보를 뽑아내도록 학습을 하지 않았다.
      • 이 논문은 질문에 대해 정답이 있는지 상관없이 independent span loss을 사용하여 해결한다.
      • no-answer 검출에 충돌하지 않도록 multi-head pointer network을 사용하여 두 가지의 span score을 생성한다.
        • 하나는 normalized with the no-answer score이고
        • 다른 하나는 auxiliary loss이다.
        • 위 말은 뒤에서 loss을 정의할 때 자세히 살펴보자.
      • 또한 다른 independent no answer loss을 제안하여 answer 추출의 shared normalization을 고려하지 않고 no-answer 검출에 집중하도록 한다.
    2. Verifying phase을 제시한다.
      • 이는 질문에 대한 답변을 가지고 질문과 비교를 해보는 것인 거 같음.
      • 이것은 답변할 수 없는 질문들 같은 경우는 보통 몇개의 passage word와 question word을 비교해보면 알 수 있다.
      • Figure 1에 나온 예시를 보면,
        • 질문: 프랑스는 어떤 지역입니까?
        • 답변: 노르망디는 프랑스의 지역입니다.
      • 우리는  쉽게 이것이 no-answer이라는 것을 알 수가 있다.
      • 이러한 현상은 anyonym(익명)과 mutual exclusion(상호 배제)에서 좀 더 명확하다.
        • 예를 들면, 질문: 열대 우림의 쇠태에 관한 것
        • 답변: 열대 우림의 확산에 관한 것
        • 이러한 답변은 옳지 않다는 것이다.
      • 이러한 고안은 NLI task에서 얻었다고 한다.
      • 총 3가지 모델로 연구를 진행하였는데
        1. 두 개의 문장을 일렬로 해서 받는 것 (concat해서 입력이 되는 것 같음)
        2. 두 문장의 interaction을 관찰
        3. 이 두가지를 hybrid로 사용하는 것
    3. 마지막으로 이 시스템은 SQuAD 2.0에서 평가되었고 SOTA이다.
      • ELMO을 이용했을 때와 verify을 이용했을 때 각각 성능이 높아졌다.
      • 즉 모델+ELMO+verify을 하게 되서 74.8, 74.2 F1 score이 dev set과 test set의 성능이라고 함.

2. Background

  • 현재 간단하게 unanswerable MRC에 대해 간단히 소개하자.

2.1 Task Description

  • Context passage와 question이 주어지면, 모델은 answerable question을 찾을 뿐 아니라 unaswerable case인지 알아야 한다.
  • 단어의 토큰들은 다음과 같이 표시한다.
    • Pssage:  
    • Question:  
    • l_p와 l_q는 passage와 question의 lenght이다.
  • 우리가 원하는 것은 다음과 같이 표시한다.
    • Answer:  
    • l_a와 l_b가 정답의 boundary이다. (시작과 끝)

2.2 No-Answer Reader

    • 은 passage에 있는 token들을 말하는 것 같음.
    • 은 question에 있는 token들을 말하는 것 같음.
    • 여기서 vj의 weighted sum을 통해 t라는 question을 embedding한 dense vector을 구한다.
      • 이 때 weight은 vj로 oj을 구한 것을 이용한다. (matrix 곲을 통해)
      • 주어진 question vj의 oj의 softmax 값이 weight가 된다.
    • 이렇게 question을 하나의 vector인 t로 만들고 이와 passage와의 pointer network의 인풋으로 들어간다.
      • 그 결과 alpha, beta는 start와 end의 span score이 나오게 되는 것이다.
  • 이전 연구에서는 no-answer score z을 예측하는 식으로 object function을 구성한다.
    • shared softmax function을 통하여 no-answer score와 span scores 사이를 normalize을 하게 되고 식은 다음과 같다.
    • 여기서 a와 b는 start와 end의 ground truth 값이다.
    • delta는 question에 대답할 수 있으면 1이고 아니면 0이다.
    • Inference할 때는, no-answer score에 threshold을 주어서 판별한다.
    • 이 논문에 대한 내용은 아니지만, 이것이 왜 잘 작동하는 지 생각해보자.
      • 대답 가능 → delta=1 → z는 분모에만 있으니 작아져야함. 즉 no-answer score은 작아져야하고 → a, b위치에서의 start, end의 확률이 커질수록 log안의 값이 커짐 → L은 minimize
      • 대답 불가능 → delta=0 → z는 분모분자에 있으니 이를 빼내주면 1-sigma/(e^z+simga) 이렇게 바뀔 것 → -가 붙어있으므로 분모에만 있는 z는 커져야하고 즉 no-answer score은 커져야 함 → z를 고정시키고 식 변형전에서 살펴보면 모든 위치에서의 start, end의 확률이 모두 0에 가까워야만, 분모가 작아지고 log안의 값이 커짐 → L은 minimize
      • 즉 이렇게 설정한 loss은 no-answer과 predicted start, end 확률을 answerable에 상관없이 잘 학습하게 된다. (신기하군)

3. Approach

  • Read-then-verify 시스템을 제안한다.
  • 첫 번째로 extract a candidate answer와 detect unanswerable을 한다.
  • 그 다음, answer verifier을 이용하여 legitimacy of the predicted answer을 검사하게 된다.
  • 이것을 위해, two novel auxiliary losses와 three different 구조의 answer verifier을 제안한다.

3.1 Reader with Auxiliary Losses

  • 이전의 no-answer reader에서 jointly learning answer extraction과 no-answer detection 하는 것에는 2가지 문제가 있다. (즉 background에서 L_joint의 문제점이 있다는 것)
  1. 이전의 readers은 candidate answers for unanswerable questions을 하도록 학습되지 않았다.
    • 여기 시스템은 다음 step이 verifying stage for all questions이기 때문에 대답할 수 없는 질문이라할 지라도 span을 고르도록 학습을 해야한다는 것 같음.
  2. No-answer detection에서 span scores와 no-answer score간의 shared normalization 때문에 충돌이 발생할 수 있다.
    • 왜냐하면 normalized scores은 언제나 1이다.
    • 이 때, over-confident span 확률이 unconfident no-answer probability을 유발할 수 있고 반대도 마찬가지이다.
    • 즉 모델이 질문에 대답할 수 있는 유무랑 예측한 span이랑 확률적으로 더해서 1이라는게 이상하다는 것인 거 같음. (대답할 수 있는지는 따로 확인하고, 정답을 예측하는 것도 따로 하는게 낫다는거 같음. 그러기 위한 loss은 다음 section을 보자.)
    • 이 것은 Clark 연구에서 부정확한 prediction on no-answer score을 보여준다는 것을 보였다고 함.
  • 이것에 대한 이슈를 해결하기 위해 two auxiliary losses을 제안한다.

3.2 Independent Span Loss

  • 이 loss는 answer extraction을 하도록 설계된 것이다.
  • unanswerable case또한 positive example로 간주한다.
    • 그렇다면 정답을 무엇으로 예측하게 해야할 까??
    • SQuAD 2.0에서는 unanswerable question에서 사람이라면 골랐을 만한 정답이 annotated (gold answer)가 되어있는데 이를 이용했다고 함.
  • 식은 다음과 같다.
      • 여기서 multi-head pointer network을 사용했다고 함.
      • multi-head가 transformer에서 말하는 것의 개념인 것 같음. 즉 pointer network에서 attention(weight)의 값을 구할 때를 말하는 것?
      • Multiple heads는 같은 네트워크이고 파라미터만 다른 것이다.
      • tilda(a)와 tilda(b)는 augmented ground-truth answer boundaries이다.
      • The final span probability is obtained using a simple mean pooling over the two pairs of softmax normalized span scores.
      • 위 영문이 무슨 말인지 생각해보면, 3.3에서 최종 loss에서 보면 L_joint에 쓰이는 span range a,b와 L_indep-1에 쓰이는 span range tilda(a)와 tilda(b) 두 개의 head로 부터 구해진 것이 있다는 것이다.
      • 따라서 최종 span 확률은 a와 tilda(a)을 평균낸다는 의미이다.

3.3 Independent No-Answer Loss

  • Multi-head pointer network을 통하여 confliction problem을 막으려고 했지만 no-answer score z와 span score을 같이 normalized 하는 L_joint loss만으로는 문제가 발생한다. 
  • 따라서 다음과 같은 loss을 제안한다.
    • sigma는 sigmoid 함수이다.
    • 이를 통해, shared-normalization을 고려하지 않고 no-answer score을 계산한다.
  • 최종 loss는 다음과 같다.
    • 와 는 hyper-parameter로 두 개의 auxiliary loss의 weight의 역할을 한다.
    • 즉 정리하자면 
      • L_joint는 원래 있던 loss인데 여기에는 두 가지 문제점이 있다.
      • 한 가지는, joint로 하면 span과 no-answer의 확률이 서로 연관하게 되니까 confident의 문제점
      • 두 번째는, no-answer에 대해서 정답을 유추하는 과정이 있어야 다음 step에서 사용할 수 있다.
      • 따라서 3.2 loss에서는 두 번째 문제를 고려해서 SQuAD 2.0에서의 gold answer을 이용했다. 또한 이 때, 첫 번째 문제를 고려해서 multi-head pointer network로 처리하였다.
      • 3.3 loss에서는 첫 번째 문제를 고려해서 no-answer score z에 집중하는 새로운 loss을 제안한 것이다.

3.4 Answer Verifier

  • Answer이 추출된 후, answer verifier을 통하여 answer과 question을 비교한다.
  • 비교를 통해 local textual entailment을 확인한다.
    • 즉 question과 answer간의 관계를 보고 제대로 답하였는지 확인을 하겠다는 것
    • 이 때, answer은 gold answers까지 포함한 것을 말한다.
  • 모델 그림은 다음과 같다.

3.5 Model-1: Sequential Architecture

  • 사실 이 모델은 transforemr을 사용했는데 pre-trained OpenAI GPT 을 이용한 것이다.
  • 그래서 Multi-layer Transformer decoder을 설명을 한다.
    • 입력은 answer sentence와 question와 extracted answer이 concat하여 들어가게 된다.
    • 정확히는 given answer sentence S, question Q, extracted answer A라고 하면
    • [S;Q;$;A]로 concat을 한다. 이 때 $는 delimiter token로 (구분 기호) openai GPT 학습할 때, 어떤 의미가 있었겠지?
    • 여기서 X에 입력이고 We는 token embedding matrix이고 Wp는 position embedding matrix이다.
    • 이렇게 h0을 설정하고 transformer을 n번 통과하여 출력을 도출한다.
    • 이 때 각 block은 multi-head self-attention을 사용했다고 한다.
    • Residual + layer normalization 또한 사용되었다.
  • 마지막 token activation 에 linear projection을 시켜서 softmax function을 시킨 출력이 no-answer 확률 y로 학습한다.
  • cross-entropy objective function을 최소화
    •  

3.6 Model-2: Interactive Architecture

  • local entailment relationships을 확인하기 위해서 interaction 구조를 제시한다.

3.6.1 Encoding

  • s는 given answer sentence이고 q는 question이다.
  • word embedding은 glove을 썼고 character-level embedding도 이용하였다.
  • 또한 binary feature로 EM feature을 (s에 있는 단어가 q에 있는 단어 인지) 가져다가 사용하였다.
    • 이 방법은 다른 논문들도 많이 사용했던 것으로 기억
    • 다른 논문은 POS tag 등 딴 것도 사용했었음 (ex. SDNet)
  • 이 때 BiLSTM은 weight-shared되는 것이다.

3.6.2 Inference Modeling

  • s와 q를 token 별로 내적을 하여 aij의 값을 생성하고 이를 softamx시켜서 얻은 것을 weight로 하여 b와 c로 각각 encoding을 하는 것이다.
  • 즉 bi는 si에서 온 값이고 cj는 qj에서 온 값이 되는 것이다.
  • 그 후 bi와 si을 F라는 함수를 통과시킨다.
    • 여기서 F는 weight-shared을 한다.
    • highway network 느낌이 난다. (MRC에서 항상 layer의 입력과 출력을 같이 가져가는 느낌을 풍김)
    • F는 BiLSTM, multilayer perceptron 등등이 될 수 있음. (concat도)
    • 하지만 여기서는 다음과 같이 Hu (2018a)가 사용했던 다음의 휴리스틱한 방법이 성능이 젤 좋았다고 한다.

3.6.3 Intra-Sentence Modeling

  • 이것은 Inference Modeling과 똑같은 진행이나, 와 를 attention 하는 것이 아니고 와 와 를 즉 본인 끼리 self-attention하는 것이다.
  • 즉 순서는 첫 째로 BiLSTM을 통과 시킨다. 이 때 BiLSTM은 와 가 다른 weight이다.
  • 두 번째로 위와 같은 attention 메커니즘을 통과시킨다.
    • aij을 구할 때, i=j이면 본인과 본인의 attention이기 때문에 aij=-inf로 설정하여 고려가 안되게 한다. (꼭 고려 안해야 하나? 라는 생각은 듬)
  • 세 번쨰로 F을 통과시켜 와  를 계산한다.

3.6.4 Prediction

  • 여기서도 을 바로 prediction에 사용하지 않고 intra-sentence modeling의 입력인  와 다음과 같이 BiLSTM을 통과시킨다.
  • 그리고 mean-max pooling을 통하여 두 문장에 대한 final representation summarize을 하게 되고 각각이 와 가 된다.
    • 여기서 BiLSTM을 통과시킨 것이 와 이 되는게 아니고 여기에 mean-max pooling을 했단 것 같은데 이게 정확히 무엇을 말하는지 모르겠음.
    • Figure 2에 그림을 보면 와 를 가지고 score을 뽑는 것 같음.
  • 와  모두를 concatenated 하여 feed-forward classifier에 넣어서 gelu acitvation을 가지고 projection sublayer와 softmax output sublayer을 통과시켠 no-answer 확률을 얻게 된다.
  • Objection functino은 모델1과 같이 log-likelihood 함수이다.

3.7 Model-3: Hybrid Architecture

  • Model-1과 Model-2을 ensemble 한다는 개념이다.
  • 실제로 간단하게 output vectors들을 concatenation 하여 사용하였다.
  • 실험 부분에 나오는지 모르겠지만, 학습을 end-to-end로 했는지 부분 부분으로 했는지에 대한 말은 없다. (실험 부분에 나옴)

4. Experimental Setup

4.1 Dataset

  • SQuAD 2.0으로 평가를 하였다.
  • 이는 unanswerable 질문도 55,375개가 있고 정말로 질문을 이해했는지 판단하기에 좋은 데이터 세트이다.

4.2 Training and Inference

  • 학습 내용
    • no-answer reader은 context passages로 학습이 되고 answer verifier은 oracle answer sentence로 학습이 된다.
      • no-answer reader에서 원래 질문에 대한 정답을 유추하고 이를 answer verifier로 검증하는 것이다.
      • 학습시에는 answer verifier에 no-answer reader에서 나온 결과를 넣는 것이 아니고 진짜 answer을 넣는다는 것 같다. (force teacher 처럼?)
    • Model-1은 unsupervised pre-training 된 것에 supervised fine-tunning을 한다.
      • 아마 unsupervised 학습은 직접하지 않고 openai gpt을 모델을 가져왔을 듯
    • Model-2은 supervised loss로 바로 학습하게 된다.
    • Model-3은 model-1과 model-2로 사전 학습 결과를 초기값으로 잡고 fine-tunning으로 한꺼번에 학습시켜준다.
  • 테스트 내용
    • 테스트 할 때는 reader가 candidate answer과 no-answer prob을 도출한다.
    • answer verifier은 그리고 extracted answer에 대해서 sentence-level probk을 도출한다.
    • 그리고 evaluation setting에 따라 위의 두 확률의 (reader에서 나온 NA prob과 answer verifier에서 나온 NA prob) 평균을 내어서 최종 unanswerable을 도출한다.
    • 최종 unanswerable이 일정 threshold을 넘어가면 unanswerable이고 안넘어가면 정담을 도출한 것을 가져간다.
    • 여기서는 dev set에서 maximize F1을 가지도록 threshold을 설정하였다.
      • default는 0.5인 듯?

4.3 Implementation

  • 이 논문에선 base reader로 RMR을 (Reinforced Mnemonic Reader) 사용했다고 한다.
    • 이는 SQuAD 1.1에서 STTA 모델 중 한개이다.
  • 여기에 논문에서 제시한 auxiliary losses와 함께 no-answer obj을 학습시키는 방향으로 갔다.
  • ELMo도 추가적으로 사용하였다.
    • ELMo을 정확히 어떻게 사용한 거지? 
    • 기본 word embedding은 Glove을 사용했다고 했는데 추가 embedding feature로 사용한 것 같긴 한데..
  • 와 을 grid search로 [0.1, 0.3, 0.5, 0.7, 1.2] 중에서 dev set을 이용해서 찾았다고 한다.
    • 그 결과 는 0.3 는 1이 좋았다고 한다.
  • Hidden size는 300, dropout은 0.3으로 설정
  • Batch size: 48 for reader / 64 for Model-2 / 32 for Model-1,3
  • Glove 100D embeddings for reader와 300D embedding for Model2,3을 사용하였다고 한다.
  • Passage와 sentence는 300단어와 100단어를 넘지 않도록 처리하였다.

5. Evaluation

  • 이 논문이 현재 SOTA는 아니기에 간단히 그림으로만 첨부하겠음..

5.1 Main Results

5.2 Ablation Study

5.3 Error Analysis

  • Error을 분석하기 위해 dev set을 5개 class로 나누어서 실험을 진행하였다.
  • Case1: the question is answerable, the no-answer probability is less than the threshold, and the answer is correct.
  • Case2: the question is unanswerable, and the no-answer probability is larger than the threshold.
  • Case3: almost the same as case1, except that the predicted answer is wrong.
  • Case4: the question is unanswerable, but the no-answer probability is less than the threshold.
  • Case5: the question is answerable, but the no-answer probability is larger than the threshold.
  • 자세한 분석은 논문을 참고..
    • Verifier을 추가하면 (대답 불가능한 case) case2, 4에서 부터 대답할 수 없는 것에 대한 성능이 살짝 감소하지만 (대답 가능한 case) case1, 5에서는 성능이 확연히 오른다.
      • 즉 전체적으로는 answer verifier가 unanswerable한 것보다 answerable한 질문을 찾아내는데 더 잘 작동한다는 것이다.
    • 또한 case3, 4, 5가 잘못된 경우인데, case2가 가장 많은 error을 담고 있다.
    • 즉 bottleneck은 answer extraction 부분이 아닌, no-answer detection 부분에 있다고 한다.

6. Related Work

  • Reading Comprehension Datasets
  • Neural Networks for Reading Comprehension
  • Recognizing Textual Entailment
  • Answer Validation
  • 생략

7. Conclusion

  • Read-then-verify 시스템을 제안함.
  • 두 개의 auxiliary losses을 소개했고 이를 통해, answer extraction과 no-answer detection에 각각 집중할 수 있음.
  • Answer verifier은 predicted answer가 적절한지 판단해주는 역할을 함
  • SQuAD 2.0에서 SOTA을 달성
Reference

댓글