# ODQA Survey
[Retrieving and Reading : A Comprehensive Survey on Open-domain Question Answering](https://arxiv.org/pdf/2101.00774.pdf) 논문을 읽고 번역, 재구성한 문서입니다.
## QA Structure
QA는 크게 **textual QA**와 **Knowledge Base QA**로 구분 할 수 있습니다. 구분 기준은 Answer를 어디에서 추출하냐 입니다.

**textual QA**: 비구조적 텍스트 문서에서 답변을 마이닝
**Knowledge Base QA** :미리 구성된 Knowledge Base에서 답변을 마이닝
우리가 수행해야 할 Competition은 textual QA에 속하며 두 가지의 task 중에 OpenQA에 속합니다.
**MRC**: 질문에 답하기 위해 문맥 구문을 읽고 이해 할 수 있는 것을 목표로 한다.
**OpenQA**: 지정된 Document 없이 주어진 질문에 답변하는 것이 목표
> 여기서 말하는 **OpenQA**는 Open Domain Question Answering을 뜻합니다.
전통적인 기법의 QA는 아래와 같은 시스템 구조이며 이 문서에서는 다루지 않습니다.
## Traditional OpenQA

**Question Analysis**: 질문 -> 검색 쿼리 생성 ( 질문을 미리 분류하여 성능을 높이는 것을 목표로 한다. )
**Document Retrieval**: 검색 쿼리를 사용하여 매칭되는 Docs를 찾는다.
**Answer Extracion**: 주어진 Docs에서 정답을 추출한다.
> Traditional OpenQA는 [여기서](https://hackmd.io/@cdll-lo-ol-lo-ol/H1bPAXVvd) 확인하시기 바랍니다.
## Modern OpenQA

Modern OpenQA는 다섯 가지의 Section으로 이루어져 있습니다.
1. Retriever
2. Document Post-processing
3. Reader
4. Answer Post-processing
5. Ends-to-Ends
## Retriever
**Retriever**는 일반적으로 IR(**Information Retreiver**)시스템으로 간주되며 하는 일은 아래와 같습니다.
- 정답을 포함하고 있는 관련 문서를 검색한다.
- 관련성(relevance)에 따라 내림차순으로 순위를 매기는 것을 목표로 한다.
어떻게 동작하냐에 따라서 세 종류로 분류됩니다.
- Sparse Retriever
- Dense Retriever
- Iterative Retriever
### Sparse Retriever
**Sparse Retriever**는 **TF-IDF**와 같이 고전적인 IR 기법을 사용하여 관련 문서를 검색하는 모듈입니다.
- **DRQA**
Modern OpenQA와 Classical IR techinuques를 합친 최초의 접근법입니다. bi-gram hasing과 TF-IDF matching을 통해서 문서를 검색합니다.
- **BERTserini**
**Lucene**을 기반으로 하는 **Anserini IR toolkit**을 사용하여 문서를 검색합니다.
document, paragraph, sentence 수준에서 다양한 텍스트 세분성(granularities of text
)을 사용하여 검색합니다.
### Dense Retriever
**Dense Retriever**는 질문과 문서의 유사도를 Scoring하는 방법에 따라 세 가지로 나뉩니다.
#### 01 Representation-based retriver

- R^3^
질문과 문서를 2개의 BERT모델로 각각 Encoding하고 두 Vector의 내적으로 relevance score를 구합니다.
- **ORQA**
2개의 BERT 모델로 질문과 문서를 각각 Encoding하고 두 vector의 내적으로 relevance score를 구합니다.
강력한 retriever를 만들기 위해서 ICT를 사용해서 retrieve를 사전학습합니다. (ICT: predicts its context given a sentence)
- **DPR**
2개의 BERT 모델을 사용, 하지만 위의 **ORQA**처럼 비싼 Cost의 Pre-train을 할 필요는 없다고 생각합니다.
그 대신에 pairwise question과 answer들을 통해 retriever를 학습시킬 수 있다고 생각합니다.
pairwise 하는 방식을 굉장히 잘 디자인해서 negative sampling으로 모델을 학습합니다.
pairwise: (Answer가 없는 문서와 같은 Batch 내에서 다른 Question과 짝을 이룬 문서의 쌍)
:::info
Representaion-based는 빠르지만 두 Encoding이 포착하는 상호관계가 매우 적다.
:::
#### 02 Interaction-based retriver

- [27]()번 눈문은 문서와 질문을 입력으로 받고 token-level-interaction을 모델링 합니다.
- [15]()번 논문은 Retriever와 Reader를 기반으로 하는 Supervised Multi Task Learning으로 같이 학습하는 것을 제안했습니다.
comprehension layer를 추가하여 answer span의 start와 end position을 예측합니다.
- [24]()번 논문은 BiDAF를 기반으로 하는 retriever layer가 추가되어서 relevance(관련성) score를 계산합니다.
- [32]()번 논문은 paragraph-level dense retriever와 sentence-level dense retriever가 BERT에 기반하여 구현됩니다.
그리고 이 과정을 이진 분류 문제로 간주합니다. Score가 아니라 관련 있음, 없음으로 판단.
질문과 문서를 입력으로 받고 \[CLS\] 토큰으로 관련성을 판단합니다.
- [15]()이나 [32]()번 처럼 paragraph, sentence를 다 사용하면 성능이 좋지만 계산 비용이 너무 커서 많은 문서에는 사용이 불가능합니다.
:::info
질문과 문서간의 풍부한 상호 작용을 기대할 수 있는 방법론이지만 계산 비용이 크다는 것이 단점입니다.
:::
#### 03 Representation-interaction retriver

이 방법론은 정확도랑 효율을 다 챙기기 위해서 나왔습니다.
- **ColBERT-QA**는 **ColBERT에 기반한 retriever**를 사용하여 질문과 문서의 simple token level 상호 작용을 함으로써 유사도를 계산합니다.
**DPR**과 유사한 방법으로 Score를 계산합니다.
- **SPARTA**는 neural ranker라는 것을 사용해 **non-contextualized encoded 질문**과 **contextualized encoded 문서**의 token-level-matchin을 계산합니다.
:::info
아직 많은 연구가 진행된 분야는 아닙니다. 문서의 representation을 미리 오프라인에서 계산하고 캐시할 것을 권장합니다.
즉, 문서별 Token Embedding은 변하지 않습니다.
:::
### Iterative Retriever
질문이 주어졌을 때 Large Collection에서 Multiple Step 동안 관련 문서를 찾는 것을 목표로 하는 방법입니다.
- Multi hop 문제를(우리랑 관련 없음) 풀기 위해서 많이 연구되었던 분야입니다.
1. Document Retrieval (문서 검색)
2. Query Reformulation (질의 재생성)
3. Retrieval Stopping (종료 조건)
- Step 단계마다 Search Query가 이전 상태에 기반하여 달라집니다.
이 문장이 의미하는 것은 **다음 Step이 Dense Retriever**라면 거기에 맞게 **Embedding 형태**로 변환하고 **Sparse Retriever**라면 **자연어 형태**로 변환 되는 것을 의미합니다.
#### 01 Document Retrieval
문서를 검색하는데 지금까지 배웠던 Retriever 들이 사용됩니다.
#### 02 Query Reformulation
이전 Query와 검색된 문서들을 기반으로 Query를 생성합니다.
#### 03 Retrieval Stopping Mechanism
반복을 많이 할 수록 검색 효율이 좋지 않습니다. 하지만 아직 적합한 종료 조건이 있지 않아서 Heuristic하게 종료 조건을 설정합니다.
- 직접 설정한 반복 횟수
- 문서의 최대 수
:::info
구현이 까다로워 보이고 이번 Competiton에서는 쓸 일이 없어 보입니다.
Multi-hop문제를 푸는데 유용해보입니다.
:::
## Document Post-processing
검색된 문서들에는 필연적으로 관련 없는 문서가 포함되기 마련입니다. (대게 한 개의 문서를 제외하고는 다 관련 없는 문서)
문서가 너무 많이 반환되게 되면 Reader의 성능이 떨어짐으로 **후 처리가 필요할 때 사용되는 모듈**입니다.
- R^3^는 Neural Passage Ranker와 Reader를 RL(Reinforcement Learning)을 사용하여 학습합니다.
- **DS-QA**는 Paragraph Selector를 추가해서 후 처리를 진행합니다. 후보 문서들중 답변을 포함할 확률을 Score로 나타내어 Noise를 제거합니다.
- [98]()번 논문은 질문이 주어졌을 때 답변이 나타날 가능도를 측정하여 문서에 점수를 부여합니다.
고전적인 방법부터 최신 방법까지 너무나도 많은 방법이 있습니다.
:::info
이 모듈은 문서의 순서를 재조정하는데에 초점을 맞춥니다. 하지만 Dense Retriever의 최신 경향이 문서의 순위도 Score로 매기는 추세임으로 이 모듈을 사용하지 않을 수도 있습니다.
:::
## Reader
**Reader**는 IR(**Information Retriever**)과 IE(**Information Extracion**)에 반하는 다른 QA의 main feature입니다.
**Reader**는 정렬된 문서들의 집합에서 질문에 대한 답변을 추론하는 것을 목표로 합니다.
Reader는 크게 두 가지 종류로 구분할 수 있습니다.
- **Answer Span**을 예측하는 Extractive Reader
- **Answer**를 생성하는 Generative Reader
### Extractive Reader
- 문서에 답변이 무조건 있다고 가정을 합니다.
- **DS-QA**는 Paragraph Selector가 선택한 Paragraph에서 **Answer Span**을 추출합니다.
- **DPR**은 passage가 answer를 가질 확률을 계산하고 BERT Reader를 사용하여 starting과 ending의 posion들을 정하고 조합함으로써 다수의 answer span을 생성합니다. 높은 확률을 정답으로 추출
위 방법과는 대조적인 방법으로 검색된 모든 문서들을 대상으로 answer span을 추출하는 방법들도 있습니다.
- **PRQA**는 검색된 문서를 paragraph으로 분리하고, POS, NE, TF등의 Feature들을 추출합니다. 그로고 질문과 paragraph들을 Bidirectional-LSTM에 Input으로 집어넣습니다.
Score 계산을 위해 unnormalized exponential function을 사용합니다.
## Answer Post-processing
**Answer Post Processing** 모듈은 마지막 최종 출력을 도와주는 모듈입니다.
기존 시스템에서 채택된 방법에는 두 가지 Category가 있습니다.
- **rule-based method**: [34](), [112]()
- **learning-based method**: [78](), [112]()
- [112]()번 논문은 "**strength-based re-ranker**"와 "**coverage-based re-ranker**"를 다른 **passage**들로부터 집계하여 final answer를 예측합니다.
[112]() : best performance
## End-to-end Methods
### 01 Retriever-Reader
- [15]()번 논문은 BiDAF 모델에 기반한 Reatriver, Reader을 Multi tasking learningd을 사용하여 동시에 훈련한다.
- [37]()번 논문은 IR 시스템을 OpenQA에 통합시키자고 주장을 하는 논문으로써 ORQA를 개발했습니다. BERT를 사용하여 Retriever와 Reader를 동시에 훈련합니다.
- [30]()번 논문은 ROME이라는 Pretrained된 Masked LM구조이며 Retriever와 Reader 도 모듈다 Neural Networks로 구현되어 있습니다.
### 02 Retriever-Only
Reader를 없앰으로써 효율을 올린 구조, 정확도는 낮아진다.
### 03 Retriever-Free
생성 모델에서 사용된다.
## 요약

## Thinking
