[CS224N] Lecture 10 - Question Answering

정세영·2021년 5월 19일
0

작성자 : 성신여자대학교 통계학과 정세영

우리가 매일같이 사용하는 Question Answering 예시: 구글링

Motivation

과거에는 수많은 웹문서 중에 관련 있는 문서 리스트를 반환해주는 정도였음
내 question에 더 구체화된 answer를 반환해줬으면 좋겠다 : Question Answering!

Question Answering의 기본적인 두 단계

Finding documents that contain an answer
: 기존의 검색 기반 시스템으로 굉장히 큰 데이터에 확장 가능
Finding an answer in the documents (Reading Comprehension)
: 위 검색 기반으로 좁혀진 document candidates에서 정답 search


Reading Comprehension의 역사

Machine Comprehension (Burge 2013) : MCTest corpus를 가지고 "답은 지문에 있어. 찾아봐" 하는 task (진전은 없었음)
MCTest 이후 매우 크게 구축한 train corpus와 신경망 구조를 통해 성능이 향상됨. 특히 SQuAD dataset이 굉장히 정교하게 구축되어 크게 기여하였고 지금까지 널리 사용되고 있음.

※ 과거 QA 모델은 주로 NER 기반으로 접근, 수작업이 굉장히 많이 들어가고 복잡함
image

SQuAD (Stanford Question Answering Dataset)

"답은 지문에 있어. 찾아봐" SQuAD

(v1.1)

  • 3 gold answers : answer의 변형에도 모델을 견고히 하기 위해 세 사람에게 답변을 얻음
  • 평가 지표
    - Exact match : 3개 중에 하나로 나왔으면 1, 아니면 0으로 binary accuracy
    - F1 : 단어 단위로 구한 F1-score 3개 중에 max one을 per-question F1-score로 두고 전체 macro average
    - punctuation과 a, an, the는 무시

(v2.0)

  • v1.1에서는 모든 question에 항상 answer가 존재하다보니 passage 안에서 문맥을 이해하지 않고 단순히 ranking task로 작동하는 문제점을 발견
  • v2.0에서는 dev/test 데이터 절반은 passage에 answer가 포함되어 있고 절반은 포함되어있지 않음
  • 평가 시 no answer를 no answer라고 해야 맞게 예측한 것
  • threshold를 두고 그 이하일 때는 예측한 answer를 뱉지 않음 (no answer)
  • leaderboard를 보면 v1.1때보다 평가수치는 떨어졌지만 v1.1보다 더 정교하게 맥락을 파악하고 있다는 결과

https://arxiv.org/pdf/1806.03822.pdf
https://dos-tacos.github.io/paper%20review/SQUAD-2.0/
온라인의 crowd worker들이 unanswerable question 직접 생성(즉, 기계적으로 생성된 것이 아니라 진짜 인간이 생성했으므로 질이 더 높음)
SQuAD 1.1에 자동 생성된 응답 불가능 질문들을 병합해 테스트한 결과 SQuAD 2.0의 dev셋보다 약 20% 가량 성능이 높아져, 상대적으로 SQuAD 2.0의 task가 더 어려운 것임을 확인
자동 생성 비교


SQuAD의 한계

  • only span-based answers
  • 현실의 본문-질문 (실제 마주하게 될 데이터)보다 쉽게 답변을 찾을 수 있는 구조 (우리가 현실에서 생각하는 질문과 구글링할 때 검색하는 질의문이 다른 것처럼)
  • 하지만 그럼에도 지금까지 QA 모델에 가장 많이 사용된 well-structured, clean dataset

KorQuAD (2.0)

한국어 위키백과로 데이터 구축
KorQuAD 설명https://www.slideshare.net/LGCNSairesearch/korquad-v20?ref=https://www.slideshare.net/LGCNSairesearch/slideshelf



Stanford Attentive Reader

  • simplest neural question answering system

  • Bi-LSTM 구조를 사용하여 각 방향의 최종 hidden state 둘을 concat하여 question vector로 사용
    question vector

  • passage의 각 단어 vector들도 똑같이 Bi-LSTM을 사용하여 각 단어 시점의 두 방향 hidden state를 concat하여 passage word vector로 사용
    passage vector

  • question vector를 모든 시점의 passage word vector와 attention을 구해서 passage에서 어디가 answer의 시작이고 끝인지를 학습하는 방식 (start token attention과 end token attention의 식이 학습시키는 가중치행렬만 다르고 구조가 똑같은 걸 볼 수 있는데, 이는 일반적으로 RNN에서 식의 구조는 똑같지만 forget gate나 input gate가 서로 다른 역할을 하는 것과 같은 이치라고 이해하면 된다.)



Stanford Attentive Reader++

L=logP(start)(astart)logP(end)(aend)L = -\sum logP^{(start)}(a_{start}) -\sum logP^{(end)}(a_{end})

  • 아까는 최종 hidden state만 가져왔던 걸 지금은 question의 모든 단어 시점 hidden state의 attention을 구해서 그 가중합을 question vector로 사용
    image
  • 3 layer Bi-LSTM 사용
  • passage word vector는 [기존 embedding vector + POS & NER tag one-hot encoding + frequency + question에 등장 여부, 단어간의 유사도] concat



BiDAF (Bi-Directional Attention Flow for Machine Comprehension)

  • Query(question)과 Context(passage) 사이에 attention flow layer가 bi-directional(양방향)으로 동작하는 게 핵심
    각각의 question word와 passage word 서로 간의 유사도 기반
    BiDAF

Sij=wsimT[ci;qj;ciqj]S_{ij} = w^T_{sim}[c_i;q_j;c_i○q_j]

: context word(i)와 query word(j)의 유사도 matrix


Context-to-Question attention : context word에 가장 관련있는 question word는?
αi=softmax(Si,:)\alpha^i = softmax(S_{i,:})
ai=j=1Majiqja_i = \sum_{j=1}^Ma^i_jq_j
C2Q

Question-to-Context attention : question word에 가장 관련 있는 context word는?
mi=maxjSijm_i = max_jS_{ij}
β=softmax(m)\beta = softmax(m)
c=i=1Nβicic' = \sum_{i=1}^N\beta_ic_i
Q2C


output of this layer

: bi=[ci;ai;ciai;cic]b_i = [c_i;a_i;c_i○a_i;c_i○c']



Reference

0개의 댓글