Unsupervised Question Answering by Cloze Transition Paper 대충 요약.

오늘은 2019 ACL에 accept된 Patrick Lewis의 "Unsupervised Question Answering by Cloze Transition"에 대해 리뷰할 것이다. 


이 논문을 읽은 이유는 현재 맡고 있는 프로젝트가 규정과 관련된 문서 검색 및 QA system의 초기 버전을 만드는 것이기 때문에 QA 부분을 해결하기 위해 읽게 되었다.



애초에 Question Answering의 Data를 수집하는 것은 상당히 번거롭다는 사실들을 잘 알고 있을 것이다. 특히 Specific한 Domain에 대해 QA system을 만든다는 것은 수 만개의 노가다 작업이 필요하다.

예를 들어 내가 법률에 대한 QA System을 만든다고 가정하자. 법률에 대한 전문가가 아니라면 법률 ontology를 구축하는 데 상당히 어려움이 있을 뿐더러 Knowledge Base를 이용하여 지식 추출을 하는 데에 있어서도 상당히 한계가 있다는 것을 알 수 있다. 

따라서, 이 논문에서 QA에 대한 data를 자동적으로 만드는 방법을 강구하게 되었고 나름 나쁘지 않은 결과를 얻을 수 있었다.

간략하게 설명하자면 unsupervised 방법을 통해서 (context, question, answer)에 대한 tripple을 뽑고 bert를 이용한 모델을 통해 QA Model을 학습한다.

이 논문이 기여하는 바는 다음과 같다.
1) 처음으로 Unsupervised Extractive QA에 대한 아이디어를 제공하였다. 
2) 초기 supervised model에 비교해 SQuAD 데이터에서 준수한 F1 Performance를 보여주었다.
3) EQA에서 few-show learning의 방법에 대한 실험을 진행했다.


Unsupervised Extractive QA



위의 그림이 현 논문에서 설명하고 있는 Unsupervised Learning 기법에 대해 모든 것을 설명한다.
먼저 question $q$, context paragraph $c$, 에대해 answer $a = (b,e)$를 생성해야하며, $b$와 $e$는 context $c$에서 나타나는 character index를 의미한다.
간단히 생각하면, generative model $p(q, a, c)$를 supervision없이 생성하는 것이며, 그 후 $p_r(a|q,c)$인 discriminative model을 학습하는 것이다.

이 generator $p(q,a,c) = p(c)p(a|c)p(q|a,c)$이 역방향으로 data를 생성한다는데 (?) 솔직히 뭔말인지 모르겠고,

간단히 생각하면 먼저 context를 sampline하는 $p(c)$, 그리고 context로부터 답을 만들어내는 확률 (이는 나중에 설명할 cloze완 연관있다. context로부터 바로 답을 만든다는게 조금 의아할 수 있지만 지금은 넘어가자.) $p(a|c)$, 그리고 주어진 answer와 context로부터 question을 생성할 $p(q|a,c)$를 곱해서 generator를 만든다고 생각하자.

2.1 Context and Answer Generation

$p(c)$야 뭐 paragraph c를 뽑는 것이니 이해가 잘 간다.
$p(a|c)$는 무엇을 의미하는 것일까?
먼저, 우리는 context c로부터 답이 될만한 요소를 뽑아야만 한다. 왜냐하면 unsupervised QA 자체에서 질문을 통해 대답할만한 요소들의 후보를 만들어야 하기 때문이다. 이 논문에서 대답할만한 요소들의 후보로 두 가지를 산정했다.
1) Noun Phrases : 명사구
2) Named Entity: 개체명

이렇게 되면, For many years the London Sevens was the last tournament of each season but the Paris Sevens became the last stop on the calendar in 2018. 이라는 paragraph context에서 (2) 개체명으로 정답후보를 뽑을 경우 굵은 글씨와 같은 개체명들이 대답 후보로 쓰인다는 것이다.


2.2 Question Generation

자 이제, 각 context로부터 대답할 수 있는 대답 후보들이 뽑혔으니 이 대답 후보들이 나오기 위한 조건, question을 생성해야 한다. 여기에 가장 핵심적인 부분이 등장한다.

$p(q|a,c) = p(q|q') * p(q'|a,c)$

먼저 cloze generation 부분인 $q' = cloze(a,c)$와, 자연스러운 문장으로 바꾸는 $p(q|q')$ translation 과정으로 나뉜다.

2.2.1 Cloze Generation

Cloze Generation은 answer를 mask한 것을 의미한다.
즉 아까 예시 context c와 정답 후보 2018을 이용하여 question을 생성한다면,

For many years the London Sevens was the last tournament of each season but the Paris Sevens became the last stop on the calendar in __.와 같이 sentence를 남기게 된다.

2.2.2 Cloze Translation

위와 같이 생성된 $q'$에 대해 실제 QA task에서 물어볼듯한 형태의 질문으로 변형을 해야한다. 이 논문에서는 총 4가지의 방법을 실행했다.

1) Identity Mapping
Masking된 token을 wh* word로 교체 (무작위 선택 혹은 heuristic한 방법)

2) Noisy Clozes:
Maksing된 token을 먼저 삭제한 후, 뒤죽박죽 섞거나 sentence에서 단어 몇 개를 blank 후 sentence 앞에 wh* word를 붙임.

3) Rule-based:
Heliman and Smith (2010)에서 사용된 rule-based 사용

4) seq2seq:
cloze와 natural question을 translate해주는 seq2seq 모델 사용

2.3 Question Answering

1) Training a separate QA System (BERT)

2) Using Posterior

다른 방법으로는 highest posterior $p(a|c,q)$를 통해 a를 찾아내는 것이다. 
 
2.4 Unsupervised Cloze Translation

Unsupervised Neural Machine Translation의 아이디어를 사용하여 nonparallel corpora를 이용하여 question (target)과 cloze question의 mapping function을 구하는 것이다. 이를 위해 cloze question corpora와 natural question Q corpora가 필요하다. --> natural question q가 필요하기 때문에 이 부분은 사실 내 프로젝트 목표와 맞지 않아 자세히 읽지 않았다.

Cloze Corpus

cloze corpus는 아까 고려했던 Noun Phrase, Named Entity mention answer span을 이용하였으며, 그 cloze question의 boundary는 sentence 전체거나 answer를 갖고 있는 절로 정하여 약 5백만 개의 question을 만들었다. (wikipedia 이용)

Question Corpus

wikipedia에서  wh* word로 시작하고 물음표로 끝나는 문장들을 모조리 수집하였다. 중복을 제거했을 때 약 100M개의 질문을 수집했고 500만개의 question을 sampling하여 corpus Q를 만들었다.

이후 Lample et al. (2018)에 따라, cloze question을 natural question으로 번역하고 그 반대도 번역하는 번역 모델인 $p_{s->t}(q|q')$와  $p_{t->s}(q'|q)$를 만들었다.

denoising autoencoding과 cross-domain training을 이용하여 in-domain training이 이루어졌다는데, 솔직히 잘 모르겠다. 이에 관련된 논문은 나중에 읽어 보겠다.

그에 따라 다음과 같은 결과가 나왔다.


뒷 부분에는 내가 필요한 부분이 없어서 읽지 않았다. 이상 대충 요약본이였다.

의문점) (1) NER system은 뭘 사용한건지 
(2) end-to-end는 불가능한걸까?
(3) seq2seq에서 외부 corpora쓰는게 불편하다 다른 방법 없나?

댓글