지난 포스팅에서는 Extraction-based MRC와 Genration-based MRC에 대해 다루었다. MRC는 문서가 주어졌을 때, 그 문서 내에서 질문의 답을 찾는 것이다.
흔히 인터넷에서 검색하는 것을 생각하면 특정 문서에서 질문을 하는 것이 아닌, 대규모의 문서들이 있는 곳에서 질문을 한다. 이러한 Task를 Open-Domain Question Answering라고 하며, 대규모의 문서 중에서 질문에 대한 답을 찾는 것이다. 질문에 대한 답을 찾기 위해서는 먼저 어떤 문서에 답이 있을 지를 알아내야 한다. 이 과정을 Passage Retrieval이라 한다. 이번 포스팅에서는 Passage Retrieval에 대해 살펴볼 것이다.
- Passage Retrieval : 질문에 맞는 문서를 찾는 것
Overview of Passage Retrieval
Passage Retrieval의 전반적인 흐름을 보면, query와 passage를 입력받아 embedding을 하고, 어떤 passage가 query와 가장 유사한지 ranking을 하여 최종 retrieved passage를 도출한다.
벡터화된 Passage를 이용하여 Passage간 유사도를 계산할 수 있다.
Passage를 vectorize하는 방법에는 크게 두 가지가 있다.
- Sparse Embedding
- Dense Embedding
먼저 Sparce Embedding에 대해 살펴보자.
Sparse Embedding
Sparse하다는 말은 0이 아닌 값이 적게 있다는 의미이다며, 대표적인 Sparse Embedding방법으로 Bag-of-Words가 있다. 문서를 Embedding Space로 mapping하기 위해서 모든 문서에 존재하는 단어들에 대해 해당 문서에 존재하면 1, 아니면 0으로 하여 벡터로 표현한다.
■ Sparse Embedding 과정 (Bag-of-Words방법)
(1) Bow를 구성하는 방법
- unigram (1-gram): It was the best of times → It, was, the, best, of, times
- bigram (2-gram): It was the best of times → It was, was the, the best, best of, of times
- unigram은 단어 하나를 기준으로 하여 있는지 없는지 확인하고, bigram은 단어 두개를 기준으로 하여 있는지 없는지 확인한다.
(2) Term value를 구성하는 방법
- Term이 document에 등장하는지 (binary)
- Term이 몇번 등장하는지 (term frequency), 등. (e.g. TF-IDF → 후반부에 설명 예정)
■ Sparse Embedding 특징
- Dimension of embedding vector = number of terms이므로 단어가 많아질 수록 vector사이즈가 증가한다.
- Term overlap을 파악할 때 유용하다.
- 의미(semantic)가 비슷하지만 다른 단어인 경우 비교할 수 없다. query에 존재하는 단어가 많은 passage를 찾을 때 유용할 수 있다.
TF-IDF (Term Frequency – Inverse Document Frequency)
- Term Frequence (TF) : 단어의 등장 빈도
- Inverse Document Frequency (IDF) : 단어가 제공하는 정보의 양
아래의 예시를 보면 It, was, the, of는 비교적 정보가 적으므로 IDF가 작을 것이고, best, times는 더 많으므로 IDF가 클 것이다.
■ Term Frequence (TF)
해당 문서 내에 존재하는 모든 단어에 대해 등장 빈도를 counting 한다. couning된 숫자를 해당 문서 내의 총 단어 개수로 나누면 TF값이 된다.
■ Inverse Document Frequency (IDF)
IDF는 전체 문서에서 해당 단어가 등장한 document가 얼마나 있는지 비교하여 단어가 제공하는 정보의 양을 나타낸다. 해당 단어가 등장한 document가 적으면 분모가 작아져서 IDF값이 커진다. 반대로 a, the, be동사와 같이 대부분의 문서에 존재하는 단어는 IDF값이 작을 것이다.
$$ I D F(t)=\log \frac{N}{D F(t)} $$
- Document Frequency (DF) : Term t가 등장한 document의 개수
- N: 전체 document의 개수
■ TF-IDF
위에서 구한 TF와 IDF를 곱하면 TF-ID Embedding이 완성된다.
■ 예시
- Tokenization : 공백을 기준으로 하지 않고 다양한 tokenizer 사용 가능한지?
def tokenize(x):
return x.split(" ")
- TF (각 문서에서 해당 단어가 몇번 등장했는지)
- IDF (전체 문서와 해당 단어가 나온 문서 비교)
- TF-IDF = TF x IDF
TF-IDF 이용한 유사도 계산
Question에 대한 TF-IDF와 Document에 대한 TF-IDF를 내적하여 유사도를 구한다.
BM25
BM25는 TF-IDF를 바탕으로 문서의 길이까지 고려한 Sparse Embedding기법이며, 평균 문서 길이보다 더 짧은 문서에서 단어가 등장한 경우, 그 문서에 대한 가중치를 높인다.
'AI > 딥러닝' 카테고리의 다른 글
[MRC] Retrieval, Scaling up with FAISS (2) | 2021.10.17 |
---|---|
[MRC] Passage Retrieval – Dense Embedding (0) | 2021.10.17 |
[MRC] Generation-based MRC (0) | 2021.10.13 |
[MRC] Extraction-based MRC (0) | 2021.10.13 |
[MRC] MRC 개념 / 종류 / 평가 방법 , Python Unicode , Tokenization , KorQuAD (0) | 2021.10.13 |
댓글