Passage Embedding은 어떤 문서(Passage)를 벡터로 변환하는 것을 말하며 지난 포스트에서는 Sparse Embedding에 관해서 알아보았다. Sparse Embedding은 벡터의 차원은 매우 크지만 0이 아닌값이 많지 않은 경우를 말한다. 차원의 수가 매우 큰 것은 compressed format으로 극복이 가능하지만 가장 큰 문제는 유사성을 고려하지 못한다는 점이다.
Dense Embedding은 sparse embedding의 단점을 보완한 것으로 이해할 수 있다. 매우 큰 차원을 작은 고밀도 벡터로 표현하게 된다. 또한 대부분의 요소는 0이 아닌 값을 갖게 되며 이렇게 표현할 경우 더이상 각차원이 특정 term에 대응되는 요소가 아니게 되며 보다 vector space상에서 위치하는 곳의 의미를 갖게 되는 것으로 이해할 수 있다.
sparse같은 경우 단어의 유무로 접근할때는 매우 유용할 수 있지만 의미론적으로 접근할때는 dense의 형태가 더 적합하다. 또한 sparse의 경우 임베딩이 구축되고 나서는 추가적인 학습이 불가능하지만 dense는 학습을 통해 임베딩을 업데이트할 수 있다. 따라서 어느 하나를 양자택일해서 사용하기 보다는 두개의 방법을 적절한 곳에 사용하는것이 더 높은 효율을 보일 수 있다.
Passage Retrieval 시스템에서의 dense embedding의 경우 BERT와 같은 encoder 모델을 사용하여 질문의 일정 차원의 벡터로 표현하고 여러 문서들 또한 같은 차원의 벡터로 표현함으로 둘 사이의 유사도를 구하여 랭킹을 매기는곳에 사용되고 있다.
BERT와 같은 PLM을 자주 사용하며 그 외 다양한 Network구조도 사용할 수 있다. 이 모델은 embedding을 하기 위한 모델이기 때문에 CLS토큰의 벡터를 사용하여 문서들을 표현하게 된다.
연관된 question과 passage dense embedding간의 거리를 좁히는 것(inner product를 높이는 것)을 목표로 하여 학습하게 된다.
연관된 question과 passage 간의 거리를 좁히는 것은 Positive라고 말하며 연관 되지 않은 question과 passage간의 embedding은 Negative라고 표현한다.
Negative Sampling을 하는 여러가지 방법은 랜덤하게 뽑을 수도 있고, 좀 더 헷갈리게 샘플링을 하려면 높은 TF-IDF 스코어를 가지지만 답을 포함하지 않은 데이터를 선택하는 방법 등이 있다.
Objective function은 아래와 같다.
Positive passge에 대한 negative log likelihood(NLL)loss를 사용한다. Positive의 관한 유사도를 분자에 있고 Positive와 Negative전부를 포함한 값이 분모에 위치하게 된다.
Passage와 query를 각각 embedding을 한 후, query로부터 가까운 순서대로 passage의 순위를 매긴다. Retrieval을 통해 찾아낸 Passage를 활용하여 MRC모델을 통해 답을 찾게 된다.
dense encoding을 개선하는 방법은 아래와 같다.