Paper Review

[Paper Review] Dense passage retrieval for Open-Domain Question Answering 리뷰

cherie-ssom 2024. 11. 24. 14:51

이전에 읽었던 논문이었지만, RAG에 대한 공부를 하게 되면서 다시 읽고 정리하고자 했다.

 

Dense Passage Retriever (DPR)는 Facebook AI에서 제안한 문서 검색 모델로, 특히 오픈 도메인 질문 응답(Open-Domain Question Answer, ODQA)에서 질문과 문서를 밀집 벡터(dense embedding)로 표현하여 유사도를 계산하여 효과적으로 검색하는 데 사용할 수 있게 만든다는 것이 주요 아이디어이다. 

1. Background

기존에 retrieval에 활용했던 TF-IDF와 BM25와 같은 방법론들은 다의어와 동음이의어와 같이 문맥의 이해가 필요한 부분을 해결하지 못한다는 문제가 있었다.

 

예시를 들어보자면, 

Q. Who is the bad guy in lord of the rings?

A. Sala Baker is best known for portraying the bad guy Sauron in the Load of the Rings trilogy

 

이렇게 키워드가 겹칠 때 잘 동작을 한다. 하지만 bad guyvillain이라는 단어로 바뀌게 된다면 같은 의미지만 term이 달라졌기 때문에, 해당 대답이 포함된 passage(document)를 잘 retrieve 하지 못할 수 있다.

 

따라서, 이러한 방법을 해결할 수 있는 dense embedding에 집중했다. 

dense embedding을 활용하게 되면 단어의 의미를 여러 차원에다 분산하여 표현하기 때문에 유사도를 계산할 수 있고, 문맥을 반영할 수 있다는 장점이 있었다.   

 

dense embedding을 활용하게 되면 bad guy와 villain에 대한 representation이 embedding space에서 가까운 위치게 있기 때문에, 이를 잘 retrieve 할 수 있다. 

 

하지만, 이렇게 일반적으로 좋은 dense vector들을 표현하기 위해서는 아주 많은 양의 데이터가 필요하다. 즉, Question과 Context 쌍의 Label 된 데이터가 필요한 데다 기존 연구들에서 TF-IDF와 BM25보다 월등히 높은 성능을 보이지도 않았다. 

 

조금 더 자세히 말하자면, 기존의 ORQA 선행연구에서도 Inverse Cloze Task(ICT)를 이용해서 dense retriever에 대한 추가적인 pre-training을 진행했고, 이 성능이 BM25를 능가하긴 했으나 여기에도 한계점이 존재했다.

 

1. ICT pre-training의 경우 너무 많은 계산량을 필요로 한다.

2. 일반적인 문장이 그 질문을 대체할 수 있을지에 대해 명확하지 않다. (Question이 아니라 context(passage, document라고 이해..)에서 일부를 발췌해서 그 text 자체를 Question으로 활용하기 때문에, 제대로 대체하고 있는지 명확하지 않다)

3. context encoder에 대한 추가적인 fine-tuning 없이 충분하지 않을 수 있다.  

 

* Inverse Cloze Task(ICT)

- 질문과 문서 간의 관계를 학습시키기 위해 사용되는 self-supervised 학습 기법 중 하나

- 본래 Cloze Task는 문장에서 특정 단어를 빈칸으로 만들고 이를 예측하도록 훈련하는 것인데, ICT는 이를 문서 수준으로 확장해서 문서의 일부를 질문으로 나머지를 문맥(답변)으로 사용한다. 

- 그렇게 Q-C positive pair로 Retreiver를 학습한다. 

 

따라서, 본 연구에서는 이러한 기존 방법론들의 한계를 해결하기 위해, Dense embedding model을 구축하되, 추가적인 pre-training 없이, 적은 수의 Question-Passage pair 만으로 좋은 모델을 만들고자 했다. 이를 통해 나온 Dense Retriever를 Dense Retreiver Pair(DPR)이라고 한다. 

2. Methodology

먼저, 간단하게 말하자면 DPR은 Reader 보다는 Retreival의 성능 향상에 집중했다. 질문(Question)과 문서(Passgage)를 각각 벡터화한 후, 이 벡터 간의 내적(dot product)을 계산해 관련성(relevance)을 평가한다. 이때, 높은 유사도를 가진 top-k개의 passage를 효과적으로 추출한다. 

 

2-1. 구성 요소

  • Question Encoder: 질문을 dense embedding으로 변환
  • Context Encoder: 문서를 dense embedding으로 변환

일단, embedding이 필요하다. 

Query, Passage 각각 독립적인 BERT를 활용했으며, [CLS] 토큰을 임베딩으로 활용했다. 

즉, [CLS] 토큰은 질문이나 문서 전체 문맥을 요약한 대표 벡터 역할을 하며 이 출력 벡터를 dense embedding으로 표현해서 Query와 Passage 간의 유사도를 계산할 수 있게 했다. 

 

추가적으로 [CLS]를 사용하게 되면 다음과 같은 장점이 있다고 한다.

  • 문맥적 표현: 입력 텍스트 전체의 정보를 집약하여 dense embedding 품질을 향상
  • 효율적 비교: [CLS] 벡터 하나만으로 유사도를 계산, 속도와 효율성을 동시에 확보

 

2-2. 유사도 계산

 

유사도 계산의 경우, 심플하게 내적을 활용했다.

 

[출처] https://nlp.jbnu.ac.kr/papers/kcc2022_mrc_data_augmentation.pdf

 

 

2-3. DPR의 학습 과정 (DPR-Training)

 

DPR을 학습한다는 것은 연관된 Question-Passage 끼리 가까운 공간에 위치하는 vector space를 구축하는 것이다. 즉, Representation을 잘 만들어내는 encoder가 되게끔 학습하는 것이다. 

 

아까 언급했듯이, Question과 Passage 쌍이 서로 관련이 있으면 가까운 거리를 가지고 관련이없다면 큰 거리를 가지는 Representation을 산출하는 encoder로 만들어가는 것이다. loss는 아래와 같다.

 

instance 안의 passage 중에서 positive passage에 대한 log-likehood가 높아질수록 loss는 작아지고, 이 loss를 최소화하도록 학습한다. 

다시 말해 positive pair 간의 유사도를 높이고 무관한 문서와의 유사도를 낮추도록 학습한다는 말이다. 

 

그렇다면, positive passage와 negative passage가 무엇인가?

 

학습 데이터 구성

  • Positive Pair: 질문에 정답을 포함하는 문서(질문과 관련된 문서)
  • Negative Pair: 랜덤 샘플링된 문서 또는 관련성이 낮은 "Hard Negative" (무관한 문서)

이때, negative passage sampling 옵션은 아래의 3가지이다.

  1. Random : passage corpus로부터 무작위로 추출
  2. BM25 : BM25를 사용하여 return 된 passage 중에서, answer를 포함하고 있지 않지만, question에 해당하는 token을 많이 가진 것을 사용(즉, question과 높은 유사도를 가지고 있는 passage를 선택)
  3. Gold : training set에서 나타난 다른 question의 positive passage들을 사용

Gold와 BM25를 negative passage로 활용했을 때 가장 좋은 성능을 보였다고 한다.

 

In-batch negatives

 

Question embedding (q), Passage embedding (p)를 미니배치로 나타내고 이를 연산해서 얻어진 similarity matrix를 학습 시 재사용해서, question-passage pair에 대해서 학습을 진행했다. 

 

 

학습 방법에 대해서 다시 정리하자면, 다양한 방법으로 positive passage pair와 negative passage pair를 만들고, 각각의 인코더에서 embedding 된 벡터를 미니배치로 나타내 내적 후 이 similiarity를 계산 후 positive pair 간의 유사도를 높이고 무관한 문서와의 유사도를 낮추도록 학습한다.

 

2-4. DPR-Inference 단계

 

학습 후에 inference 단계에서는 FAISS를 사용해서 passage encoder의 임베딩 벡터를 미리 계산하고 새로운 질문이 입력으로 들어왔을 때, 연관된 passage를 빠르게 반환한다. 

 

3. Experiment

 

Question이 있을 때, Answer를 잘 찾아내는지에 대한 확률이 성능이 되는데, Table 2를 보면 SQuAD를 제외하고는 DPR의 성능이 BM25보다 뛰어난 것을 확인할 수 있다. 

k가 작을수록 성능 차이가 크다는 것을 의미한다.

또한, Table 3을 보면 batch size가 늘어날수록 전체 negative passage의 개수도 늘어난다는 것을 알 수 있다. 따라서, batch size를 늘릴수록 성능 향상이 이루어지는 것을 확인할 수 있다.  

 

마지막으로 End-to-End QA를 구현하기 위해 Retriever에 Reader를 붙여 Retriever로 부터 주어진 top-k개의 passage들에 대해 Reader가 최종 Answer를 도출해 낸다. DPR을 포함한 다양한 Retriever를 사용해서 ablation study를 진행했다.

 

각 Passage로부터 Answer를 추출하고 score를 매겨서 가장 높은 점수를 가진 것을 최종 정답으로 선택한다. 

Table 4에서 보이듯, SQuAD 데이터셋을 제외하고 모든 데이터셋에서 답변 성능이 우수함을 확인할 수 있다.

4. Summary

Dense Passage Retriever는 pre-training 없이 더 작은 데이터셋에서 효율적으로 Retriever의 성능을 향상시키는 것에 초점을 맞춘 연구이다. 이를 위해, 다양한 방법으로 positive passage pair(질문에 정답을 포함하는 문서)와 negative passage pair(질문과 무관한 문서)를 만들고, 유사도를 계산하여 질문에 정답을 포함하는 문서를 더욱 잘 찾아내게끔(유사도가 높은 것을 잘 찾아내게끔) 학습을 진행했다.