BM25란 무엇인가?
BM25(a.k.a Okapi BM25)는 주어진 쿼리에 대해 문서와의 연관성을 평가하는 랭킹 함수로 사용되는 알고리즘으로, TF-IDF 계열의 검색 알고리즘 중 SOTA 인 것으로 알려져 있다.
- 단어 빈도(TF - Term Frequency): 문서에서 특정 단어가 나타나는 횟수.
- 역문헌 빈도(IDF - Inverse Document Frequency): 단어가 전체 문서 집합에서 얼마나 희귀한지 측정.
- 문서 길이 보정: 문서의 길이에 따른 가중치 조정으로 긴 문서에 대한 편향 제거.
- 상세 공식과 그 설명은 ‣를 참고 부탁드립니다.
BM25의 특징
- 효율성: 대용량 데이터셋에서도 빠른 계산 가능.
- 정확성: 단순한 TF-IDF보다 향상된 정확도 제공.
- 간단한 구현: 복잡한 파라미터 조정 없이도 우수한 성능 발휘.
경쟁 알고리즘과의 비교
BM25와 비교되는 대표적인 알고리즘은 TF-IDF와 랭크넷(RankNet), 램버트(LambdaMART) 등의 머신러닝 기반 알고리즘입니다.
- TF-IDF는 문서 내에서 단어의 빈도와 전체 문서 집합에서 단어의 역문서 빈도를 사용하여 문서의 중요도를 평가합니다. 하지만 BM25는 단어 빈도의 포화도(saturation)와 문서 길이의 정규화를 고려하여 더 정교한 관련성 평가를 제공합니다.
- 머신러닝 기반 알고리즘은 대규모 데이터에서 학습을 통해 더욱 맞춤화된 검색 결과를 제공할 수 있지만, 학습과정이 복잡하고 자원을 많이 소모하는 단점이 있습니다.
BGE M3-Embedding이란?
M3-Embedding은 텍스트 임베딩 모델로, 다국어를 지원하며 다양한 검색 기능과 입력 길이에 걸쳐 뛰어난 성능을 보입니다. 100개 이상의 언어를 다루며, Dense Retrieval, Sparse Retrieval, Multi-Vector Retrieval 같은 복합적인 검색 기능을 동시에 수행할 수 있습니다. 또한 짧은 문장부터 최대 8,192 토큰에 달하는 긴 문서까지 처리할 수 있는 Multi-Granularity 특성을 가지고 있습니다.
M3-Embedding의 주요 특징
- 다국어 지원 (Multi-Lingual):
- 100개 이상의 언어에 대한 검색을 지원
- 다국어와 교차 언어 검색을 모두 수행가능
- 다중 기능성 (Multi-Functionality):
- Dense, Sparse, Multi-Vector Retrieval을 한 모델 내에서 모두 수행할 수 있어 다양한 정보 검색(IR - Information Retrieval) 작업에 적합
- 원래 다 각각 학습되고, 추후에 같이 hybrid 방식으로 사용했던 검색 방식을 다 사용할 수 있음.
- 각각 검색방식은 background에서 자세히 설명
- Self-knowledge distillation 방식으로 각 3가지 함수에서 나온 score를 통합해서 활용함
- 다중 입력 길이 (Multi-Granularity):
- 최대 8192 토큰까지 늘림, 이를 위해 batching strategy를 최적화 함
- 또한 문장, 문단 단위에서 모두 성능이 좋음
기술적 혁신
M3-Embedding은 다음과 같은 기술을 통해 이와 같은 높은 수준의 유연성을 구현했습니다.
- Self-Knowledge Distillation: 여러 검색 기능의 관련성을 통합하여 모델 훈련을 최적화하는 독특한 방식입니다.
- Efficient Batching Strategy: 다양한 길이의 시퀀스를 처리할 수 있도록 배칭 전략을 최적화하여 대규모 배치 크기를 관리하고 훈련 효율성을 높였습니다.
- 종합적인 데이터 큐레이션: 다국어 말뭉치에서 다양한 데이터를 수집하여 모델이 다국어 및 다기능성을 제대로 학습할 수 있도록 했습니다.
성능
M3-Embedding은 다국어(MIRACL) 및 교차 언어(MKQA) 검색 벤치마크에서 state-of-the-art 성능을 달성했습니다. Dense와 Sparse Retrieval 방식을 결합하여 긴 문서 검색에서도 기존 모델을 능가하는 성과를 보였습니다.
결론
M3-Embedding은 다국어, 다기능성, 다양한 길이의 입력을 지원하는 통합 임베딩 모델로, 연구자 및 실무자에게 유용한 고품질의 임베딩 솔루션을 제공합니다. 더 자세한 구현 정보와 코드는 GitHub의 FlagOpen/FlagEmbedding에서 확인할 수 있습니다.