RAG 업무를 맡으며 팀원이 추천해 준 논문인데 저자의 기법보다는 전반적으로 task의 흐름에 대해 잘 설명해 줘서 주의 깊게 읽은 논문이다.
RAG 성능을 끌어올리기 위한 새로운 기법을 알고싶은 분들보다는 LLM 시대 이전의 전반적인 ODQA가 어떤 식으로 이루어졌는지 상세한 과정을 알고 싶은 사람들은 한 번쯤 읽어보면 좋을것 같다.
Abstract & Introduction
이 논문에서 저자는 기존의 sparse한 retrieval 방법론들(TF-IDF, BM25)보다 뛰어난 성능을 보여주는 dense representation을 통한 retrieval 방법론을 제시한다.
당시의 Open-domain question answering(ODQA)는 크게 두 가지 모듈의 성능에 좌우되었다.
- Retriever: question에 대답하기 위해 적절한 상대적으로 작은 passage(구절)를 검색하는 작업
- Machine reader: retrieved된 context를 기반으로 적절한 정답을 만들어내는 작업
이 논문에서는 그중 retriever의 성능 향상에 초점을 맞추고 있다.
이제는 널리 알려진 이론이지만 Dense 방법론은 반의어, 다의어 등의 단어를 구분하고 문맥 간의 관계를 구분할 수 있는 등 word embedding과 동일한 장점을 가진다고 볼 수 있다. 즉, inner product를 통한 유사도 계산이라는 장점까지 그대로 가져와 최적화 목표가 된다.
물론 이러한 embedding model을 학습하기 위한 데이터나 자원에 대한 문제가 남아있기는 한데 최근에는 이미 이러한 방법론이 성능을 입증했고 투자가 더욱 많아지고 있으므로 크게 짚고 넘어갈 부분은 아닌듯하다.
저자는 이 논문의 contribution을 크게 두 가지 제시했는데 첫 번째로는 question과 passage에 대한 encoder를 학습한 것 만으로 기존 BM25기반 retrieval 성능을 뛰어넘은 것이고, 두 번째로는 retrieval의 성능 증가가 reader 모델의 QA task 성능 증가를 가져온다는 걸 입증했다는 점이다.
Dense Passage Retriever (DPR)
DPR task의 goal은 M개의 passages를 입력받으면 이걸 전부 저차원으로 임베딩하고 추후 question이 들어왔을 때 이와 관련된 top k 개의 passages들만 반환하는 것이다.
Overview
Question을 encoding하는 encoder E_Q와 passages들을 encoding하는 encoder E_P는 입력받는 Q, passages를 모두 d 차원으로 embedding 시키게 학습하고 유사도를 비교한다.
Encoder로는 BERT를 사용했고 d는 768을 사용했다. 정확히는 BERT의 [CLS] token을 사용했다고 한다. Inference에는 FAISS를 사용해 수십억 개의 passages들을 빠르게 비교했다.
Training
m개의 data를 한번에 학습하는데 이때 positive pair를 한 개 나머지는 전부 negative pair를 사용한다. Retrieval task에서 positive pair는 명확하지만 negative는 굉장히 많기 때문이다. 따라서 negative pair를 잘 뽑는 것도 상당히 중요한데 이는 실험의 세부파트에서 다룬다.
저자는 gold passage(batch 내의 다른 question과의 유사도가 높은 passage)와 1개의 BM25기반 유사 데이터(한 배치 내의 passages와 같은 수를 추가하게 됨)로 mini batch를 구성해 최고 성능을 도달했다고 한다.
Experimental Setup
이 부분은 제가 NLP를 자주 다뤄보지 않아 구체적인 설명은 어려워 중요한 부분만 짚고 넘어가겠습니다.
Selection of positive passages
QA 데이터셋을 가져올 때 Q와 A는 있어도 관련된 context를 구성하는 방법은 차이가 있다. TREC, WebQuesions, TriviaQA는 context만 제공하고 pair인지에 대한 정보가 없는데 BM25를 기반으로 100개를 뽑고 정답이 포함되지 않은걸 제거한다.
SQuAD나 Natural Question는 pair에 대한 정보가 있는데 저자가 원하는 전처리 방법과 달라 이러한 gold passage들을 candidate pool로 대체했다고 한다.
전처리 후에 데이터셋이 꽤 줄어든 걸 확인할 수 있다.
Experiments: Passage Retrieval
실험은 크게 Retrieval과 QA 두 파트로 이루어져 있는데 먼저 Retrieval 성능 실험을 설명한다. 아마 지금 논문을 읽는 사람들은 LLM 모듈의 발전으로 QA 쪽은 주의 깊게 읽을 필요는 적다고 본다.
위에서 언급한 대로 미니 배치(여기서는 128을 사용)만큼의 데이터와 하나의 BM25 negative passage를 사용해 데이터를 구성했다.
Retrieval 방식으로는 BM25와 DPR 각각을 사용해 top 2000 passages를 뽑았으며 이를 rerank 하였다.
Main Results
DPR을 사용했을 때 성능이 전반적으로 높으며 특히 k가 낮을 때 성능 차이가 두드러지는걸 알 수 있다.
SQuAD에서 DPR 은 BM25보다 살짝 낮은 성능을 보여주는데 이에 대한 저자의 평가가 인상 깊었다.
저자는 이를 SQuAD의 데이터셋 제작방식으로 인한 오류라고 추측했는데 왜냐하면 SQuAD는 annotator가 answer를 보고 이에 맞는 question을 제작하는 방식을 사용했고 이건 꽤 높은 어휘적 유사성을 유발하기 때문이다.(당시에는 이러한 점을 크게 신경 쓰지 못하고 제작한 것일 수도 있으나 어쨌든 데이터셋에 포함된 특정한 bias를 인지했고 평가 혹은 데이터셋 제작 시 신중을 기해야 함을 알 수 있는 부분이었다)