ColBERT 모델 구현을 위해 다시 관련 내용을 살펴보았다. 간단하게 정리한 내용을 공유하고자 한다. 자세한 내용은 직접 발표 영상을 보는 것을 추천한다.
영상링크: https://tv.naver.com/v/23650668
ColBERT 모델 특징
Late Interaction 방식의 도입
질의와 문서 간 관계를 구하는 것을 미뤄두고 미리 문서에 대한 모든 임베딩을 미리 구축해두는 방식을 사용함. 검색 단계에서는 Maxsim 방식을 도입하여 시간복잡도를 감소시키고, 효율적으로 Retrieval 및 Ranking 과정을 진행.
기존 BERT 모델과 동급의 성능
기존의 BERT 모델에서 단순화함으로써 발생하는 성능상의 핸디캡을 기본적으로 가지고 있음. 하지만, 중요한 Term에 가중치를 부여하는 효과를 통해 전통적인 Term 매칭의 장점을 가져옴으로써 성능(품질)을 보완할 수 있었음.
Re-ranking보다는 Full Retrieval 성능이 우위
ColBERT를 re-ranking에만 적용할 경우, retrieval에 걸리는 시간의 경우 130ms으로 full retrieval의 시간인 458에 비해 약 1/4로 감소시킬 수 있을 뿐만 아니라, MRR@10 기준 성능에서도 성능 손실이 거의 발생하지 않음. 하지만, 재현율을 기준으로 성능을 측정할 경우, 여전히 full retrieval 성능이 좋아, Naver에선 full retrieval 과정을 사용하기로 결정하였음.
ANN 인덱싱
Retirieval Cost 절감의 필요성
Retrieval 과정은 ColBERT 점수가 높을 것으로 예상되는 후보군을 선별하는 과정에 해당. 각 질의(Query) 임베딩에 대해 유사도가 높은 term 임베딩 후보군을 k개씩 가져옴. 그 후, 이 term 임베딩이 등장한 모든 문서의 목록을 가져옴. 이 때 사용되는 retrieval cost가 상당히 크며, 이를 줄이기 위한 노력이 필요.
ANN 알고리즘 적용을 통한 Cost 절감
*ANN: Approximate Nearest Neighbors
ANN은 근사적으로 가까운 벡터를 찾는 알고리즘으로써, 정확한 탐색을 포기하느 대신에 매우 빠르게 벡터를 찾을 수 있음. 이는 ColBERT의 점수가 높을 것으로 예상되는 문서 후보군을 가져오는 retrieval 과정에서의 cost를 줄일 수 있을 것으로 기대됨. Annoy, Faiss, Hnswlib 등의 라이브러리를 통해 적용이 가능함.
서비스 기준 ANN 응답시간
Naver 검색 서비스에 도입을 하기 위해선 실시간으로 처리해야할 검색량을 반영해야함. 검색유입 1500 QPS기준, ColBERT Retrieval에 사용할 수 있는 시간은 44.8ms에 해당하며, 각 Retrieval 과정에서 96회의 ANN 검색횟수가 필요하여, 매 ANN 응답마다 0.47ms안에 완료되어야함.
Customized ANN 적용
네이버 서비스에 적용가능한 수준의 응답(검색) 시간을 보여주는 것이 Hnswlib 뿐이므로 이를 적용하였음. 또한, 기존에 라이브러가 가지고 있는 느린 빌딩 속도의 경우 멀티쓰레드를 통해 해결할 수 있었음. 또한, 여러 검색 프로세스 실행을 통해 발생할 수 있는 Out of memory를 문제를 완화하는 mmap의 경우, Hnswlib 라이브러리 수정을 통해 지원할 수 있었음.
검색엔진 구현
BM25F에 비해 높은 계산 복잡도
동적 BM25F의 경우 query의 term 갯수, 문서에서의 term 등장빈도, section 갯수를 고려하여 기존 정적 BM25F에 비해 400배 높은 복잡도를 보여주었으나, ColBERT의 경우 이에 비해 약 80배 많은 계산 복잡도를 보여주고 있음. 이는 수십~수백 배 규모가 증가한 peta flops 연산이 가능한 클러스터가 필요하며, 장비, 공간 등의 문제가 발생함.
검색엔진 직접 구현을 통한 작동 시간 최적화
현재 과정에선, 각 컴포넌트를 독립적으로 활용한다는 기준, 5.3만 개의 문서에서 30~40초 정도가 필요하다. 이는 서비스에서 사용하기 어려우며, 아래와 같은 완화조건을 최대한 활용하여 시간을 줄일 필요가 있음. 이를 위해, 모든 컴포넌트가 검색엔진에 들어갈 수 있도록 Naver에서 low level로 직접 구현하였으며, 데이터의 형태를 document ID를 기준으로 단순화 시켰으며, ColBERT distance evaluator의 성능 최적화를 진행하였음.
최근 검색 모델에서의 적용
ColBERT의 한계와 기대
ColBERT가 나온지 얼마되지 않아 아직까지 기술의 Maturity가 높이 않음. 기존의 검색모델을 넘어서기까진 오랜 시간이 필요할 수 있으며, 본질적인 계산 복잡도로 인해 기존의 효율적인 검색 모델을 대체하기엔 어려울 가능성도 존재. 하지만, 최근의 검색 모델과 이에 특성을 이용할 경우, 검색품질 향상에 기여할 수 있을 것으로 기대됨
Two Stage LTR* 모델에서의 적용
*LTR: Learning to Rank
검색 모델의 품질을 향상하기 위해선 recall 및 precision 성능을 개선해야함. Recall은 대상을 풍부하게 하는 데에 목적이 있다면, precison의 경우 랭킹 과정에서의 순위를 정교화하는 데에 목적이 있음. 이에 대응하기 위해 후보군을 늘리거나, 고려하는 피처들을 늘릴 수 있으나, 연산 비용이 증가할 것 고려하여 효과적이면서도 효율적인 후보군 및 피처를 추가하는 것이 중요함. 이 때, ColBERT의 경우 첫 번째 랭킹 과정에서 BM25F 후보군에 ColBERT 후보군을 함께 더해 확장할 수 있으며, 두 번째 랭킹 과정에서 Tree 앙상블 모델에서 ColBERT 점수 피처를 추가적으로 고려할 수 있도록 할 수 있음. 이를 통해, BERT 수준의 Contextual한 부분을 고려할 수 있도록함.
총평
ColBERT 모델은 랭킹 모델링에 있어 좋은 성능을 보임과 동시에, 기존과 다른 접근 방식을 통해 contextual 임베딩을 고려하는 방법 중에서 시간 및 계산 복잡도가 매우 작은 편에 속한다. 이로써, 실제 서비스에 적용될 수 있는 가능성이 높아진 것은 맞으나, 여전히 기존의 검색 모델에 비해선 많은 리소스가 필요하며, 이를 어떻게 줄여나갈 지가 관건이 될 것으로 보인다. 이러한 맥락에서, Naver가 관련하여 얼마나 많이 노력하고 있는 지를 몸소 확인하고 이해할 수 있는 좋은 경험이었다. 또한, 모델링만 중요하다고 생각했던 나에게 신선한 충격을 주어, 관련 고정관념을 깨트리고 생각을 전환할 수 있는 좋은 기회가 되어주었다.
'Machine Learning' 카테고리의 다른 글
[Linux] 리눅스 기본 코드 정리 (0) | 2022.06.29 |
---|---|
(작성중) 멀티모달 연구의 필요성 (0) | 2022.06.27 |
[NLP] Task-Alignment Fine-Tuning(2차 파인튜닝) (2) | 2022.06.09 |
[NLP] ColBERT 논문 살펴보기 (0) | 2022.06.04 |
[NLP] Siamense Network를 이용한 Sentence Bert (S-BERT) (0) | 2022.05.10 |