[project#2] ColBERT

sujin·2024년 10월 25일
0

nlp_project2

목록 보기
8/8
post-thumbnail

ODQA 프로젝트 진행 중 다양한 Retrieval을 알게 되었다. 그 중 ColBERT와 관련된 내용을 작성해본다.

colBERT란 dense retrieval에서 일반적으로 사용하는 벡터 임베딩 기법과 sparse retrieval의 효율성을 결합한 모델이다.

4가지 단계로 진행된다.

  1. training
    문서와 쿼리 사이의 의미적 유사성을 반영하는 임베딩을 학습한다.
    쿼리 및 문서 임베딩: ColBERT는 쿼리와 문서를 각각 BERT를 사용해 임베딩 벡터로 변환한다. 이때 단순히 하나의 벡터로 문서나 쿼리를 표현하는 것이 아니라, 각 토큰마다 임베딩 벡터를 생성한다. 즉, 문서와 쿼리 모두 여러 개의 임베딩 벡터로 표현된다.
    MaxSim Loss: 훈련 시 쿼리와 문서 간의 유사도를 계산할 때, 쿼리와 문서의 각 토큰 임베딩을 비교하여 가장 유사한 토큰 페어의 유사도를 활용한다. 이를 통해 세밀한 토큰 수준에서 상호작용을 고려할 수 있다.

  2. indexing
    문서 컬렉션에 포함된 모든 문서의 임베딩을 미리 계산하고 저장하는 과정이다. 이 단계는 검색 시 빠른 성능을 제공하기 위해 매우 중요하다.
    문서 토큰 임베딩 계산: 훈련이 완료된 ColBERT 모델을 사용해, 데이터베이스에 있는 모든 문서의 각 토큰에 대한 임베딩을 계산한다. 일반적인 dense retrieval 모델은 문서 전체를 하나의 벡터로 변환하지만, ColBERT는 각 문서의 모든 토큰에 대해 개별 임베딩 벡터를 계산한다.

  3. searching
    검색과정에서는 주어진 쿼리와 데이터베이스에 있는 문서들 간의 유사도를 계산해 관련 문서를 반환한다.
    쿼리 토큰 임베딩 계산: 사용자가 입력한 쿼리에 대해 BERT를 사용하여 각 토큰의 임베딩 벡터를 계산한다. 이 벡터들은 인덱스에 저장된 문서 토큰 임베딩과 비교되어야 한다.
    유사도 계산 및 정렬: 문서의 모든 토큰에 대해 쿼리의 모든 토큰과 비교한 후, 가장 높은 유사도를 가진 토큰 간의 매칭 결과를 기반으로 문서 전체의 유사도를 계산한다. 이 유사도를 바탕으로 관련성이 높은 문서들을 정렬하여 검색 결과로 반환한다.

  4. inference
    reader 부분만 실행하면 된다.

실험 결과, DPR보다 colBERT의 성능이 더 우수했다. 이는 DPR이 문서나 쿼리를 단일 벡터로 표현하는 것과 달리, colBERT는 각 토큰마다 임베딩 벡터를 생성하여 문서와 쿼리를 여러 개의 임베딩 벡터로 표현함으로써 더 풍부한 문맥 정보를 반영할 수 있기 때문이라고 생각된다. 또한 BM25와 유사한 성능을 보였으며, Elastic Search를 사용한 Rerank를 Retrieval로 사용했을 때보다는 성능이 낮았다. Elastic Search의 Rerank가 colBERT보다 더 나은 성능을 보인 이유는, Rerank 과정에서 검색 결과의 품질을 추가로 향상시키고, Elastic Search가 대규모 데이터에서 더 효율적이고 최적화된 Retrieval을 제공하기 때문이라고 생각한다.

프로젝트의 마감일이 다가왔을 때 ColBERT를 사용하여 실험을 진행하였고 BM25만큼 성능이 잘 나오는 것을 확인해서 제출해보지 못한 것과 코드를 베이스라인 코드에 이식하지 못한 것이 아쉬움으로 남아있다.

profile
감자 그리고 NLP
post-custom-banner

0개의 댓글