NL-037, Read + Verify: Machine Reading Comprehension with Unanswerable Questions (2019-AAAI)
MRC 리더보드보면 verify라고 해서 BERT+verify 등으로 써있는데 verify가 무엇인지 알아보자!
Reference
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 하는 것을 추가함)
- Passage에 대한 question에 대한 정답과 no-answer 확률을 각각 도출함.
- 이렇게 도출한 정답이 적절한지 확인을 한다.
- 이 연구에 대한 contribution은 총 3가지라고 볼 수 있다.
- 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 검출에 집중하도록 한다.
- Verifying phase을 제시한다.
- 이는 질문에 대한 답변을 가지고 질문과 비교를 해보는 것인 거 같음.
- 이것은 답변할 수 없는 질문들 같은 경우는 보통 몇개의 passage word와 question word을 비교해보면 알 수 있다.
- Figure 1에 나온 예시를 보면,
- 질문: 프랑스는 어떤 지역입니까?
- 답변: 노르망디는 프랑스의 지역입니다.
- 우리는 쉽게 이것이 no-answer이라는 것을 알 수가 있다.
- 이러한 현상은 anyonym(익명)과 mutual exclusion(상호 배제)에서 좀 더 명확하다.
- 예를 들면, 질문: 열대 우림의 쇠태에 관한 것
- 답변: 열대 우림의 확산에 관한 것
- 이러한 답변은 옳지 않다는 것이다.
- 이러한 고안은 NLI task에서 얻었다고 한다.
- 총 3가지 모델로 연구를 진행하였는데
- 두 개의 문장을 일렬로 해서 받는 것 (concat해서 입력이 되는 것 같음)
- 두 문장의 interaction을 관찰
- 이 두가지를 hybrid로 사용하는 것
- 마지막으로 이 시스템은 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인지 알아야 한다.
- 단어의 토큰들은 다음과 같이 표시한다.
- 우리가 원하는 것은 다음과 같이 표시한다.
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의 문제점이 있다는 것)
- 이전의 readers은 candidate answers for unanswerable questions을 하도록 학습되지 않았다.
- 여기 시스템은 다음 step이 verifying stage for all questions이기 때문에 대답할 수 없는 질문이라할 지라도 span을 고르도록 학습을 해야한다는 것 같음.
- 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을 제안한다.
- 최종 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라는 함수를 통과시킨다.
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을 이용해서 찾았다고 한다.
- 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
5.2 Ablation Study
- 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을 달성
댓글
댓글 쓰기