TL;DR
글쓴이는 retrieval library 없이 BM25용 inverted index와 HNSW를 직접 구현해 NFCorpus 3,633개 문서와 SciFact 5,183개 문서에서 FAISS 및 완전탐색과 비교했습니다. 모든 검색 방식의 품질은 거의 같았지만, 이 규모에서는 dense matmul 기반 완전탐색이 직접 구현한 HNSW보다 10.9배와 18.3배 빨랐고 HNSW의 구축 비용도 훨씬 컸습니다. 실제 질의 시간은 검색보다 MiniLM-L6-v2 임베딩 생성이 87배 길었으며, 가장 큰 품질 향상은 BM25와 dense 결과를 RRF로 융합했을 때 발생했습니다. 다만 실험이 두 데이터셋과 한 장비에 국한돼 HNSW와 완전탐색의 crossover 지점은 아직 확정되지 않았습니다.
실용적 조언
- 문서 수가 수천 개 수준인 검색 시스템에서는 ANN index를 기본값으로 두기 전에 dense 벡터의 차원과 BLAS 기반 완전탐색 지연시간을 먼저 측정하는 편이 타당합니다. 이 실험에서는 3,633개 문서와 384차원 벡터의 exact 검색이 0.295ms였고 HNSW는 3.227ms였습니다. 실제 crossover를 찾으려면 고정된 데이터와 동일한 장비에서 corpus size를 연속적으로 늘리는 size sweep이 필요합니다.
- 검색 품질을 높이려면 BM25와 dense ranker를 각각 평가한 뒤 RRF 융합을 비교할 수 있습니다. 이 실험에서 RRF는 NFCorpus를 0.3162에서 0.3423으로, SciFact를 0.6644에서 0.6969로 높였고 융합 비용은 7.36μs였습니다. BM25의 NFCorpus 성능이 published figure보다 0.019 낮았으므로 stemming과 stopword 처리를 바꾼 변형도 별도로 검증해야 합니다.
섹션별 상세
용어 해설
- 계층적 탐색 소세계 그래프(HNSW)
- — HNSW는 고차원 벡터를 여러 계층의 그래프로 연결하고, 상위 계층에서 대략적인 위치를 찾은 뒤 하위 계층으로 내려가며 최근접 이웃을 탐색하는 구조입니다. 전체 벡터를 순회하지 않는 대신 그래프 이동과 거리 계산 비용을 사용합니다.
- BM25 검색 모델(BM25)
- — BM25는 문서 내 단어 빈도와 전체 문서에서의 희소성을 이용해 검색어와 문서의 관련도를 계산하는 전통적 검색 방식입니다. 이 글에서는 직접 만든 inverted index 위에서 동작하며 dense 검색 결과와 결합됩니다.
- 순위 상호성 융합(RRF)
- — RRF는 서로 다른 검색기가 반환한 문서 순위를 순위 역수 기반 점수로 합산하는 융합 방식입니다. 이 글에서는 BM25와 dense 검색의 순위를 결합해 단일 검색기보다 높은 nDCG@10을 얻는 데 사용됩니다.
- 역색인(Inverted Index)
- — Inverted index는 단어를 해당 단어가 포함된 문서 목록에 연결해 검색어가 등장한 문서를 빠르게 찾는 자료구조입니다. 글쓴이는 BM25 라이브러리 없이 이를 직접 구현하고 검색 성능을 측정했습니다.
- 근사 최근접 이웃 검색(ANN)
- — ANN은 모든 벡터와 정확히 비교하는 대신 일부 후보만 탐색해 최근접 이웃을 빠르게 찾는 방법입니다. HNSW의 efSearch 값을 조절하면 exact 검색에 대한 recall과 탐색 비용 사이의 균형을 바꿀 수 있습니다.
- 상위 10개 정규화 할인 누적 이득(nDCG@10)
- — nDCG@10은 검색 결과 상위 10개 문서의 관련도와 순서를 함께 평가하는 지표입니다. 이 글에서는 NFCorpus와 SciFact에서 exact 검색, HNSW, BM25와 RRF 융합의 검색 품질을 비교하는 기준으로 사용됩니다.
언급된 도구
flat index와 HNSW index를 포함한 dense retrieval 기준 구현과 비교 대상
BM25 검색 구현을 비교하는 기준 도구
BM25 검색 구현을 비교하는 기준 도구
NFCorpus와 SciFact의 dense query embedding 생성
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.