ANN 검색 근사 최근접 이웃 검색, Approximate Nearest Neighbor
ANN 검색(근사 최근접 이웃 검색, Approximate Nearest Neighbor)은 아주 많은 데이터 중에서 질문과 가장 비슷한 항목을 '정확히'가 아니라 '거의 정확하게' 대신 매우 빠르게 찾는 방법이다. 벡터 DB와 RAG 검색의 핵심 기술이다.
어떻게 작동하나
먼저 문서나 이미지를 임베딩 모델로 숫자 목록(벡터)으로 바꾸고, 이 벡터들을 빠르게 찾을 수 있도록 색인을 미리 만들어 둔다. 대표적인 색인 방식으로는 벡터를 비슷한 것끼리 묶음으로 나눠 두는 IVF, 가까운 벡터끼리 여러 층의 연결망으로 이어 두는 HNSW 등이 있다. 질문이 들어오면 질문도 같은 방식으로 벡터로 바꾸고, 색인을 따라가며 가능성 높은 후보만 골라 비교한다. 모든 데이터를 다 비교하지 않기 때문에 빠르지만, 결과가 진짜 가장 가까운 것과 조금 다를 수 있다.
왜 중요한가
정확한 최근접 이웃 찾기(KNN)는 데이터가 수백만~수십억 개로 늘어나면 질문 하나에도 모든 데이터와 거리를 계산해야 해서 너무 느리다. ANN 검색은 약간의 정확도를 양보하는 대신 검색 시간을 크게 줄여, 대규모 서비스에서 실시간 검색을 가능하게 한다. RAG에서 질문과 관련된 문서 조각을 찾아오는 단계, 시맨틱 검색, 비슷한 이미지·상품 추천 등이 모두 이 기술에 기대고 있다. 벡터 DB가 내세우는 핵심 기능도 결국 빠른 ANN 검색이다.
알아 둘 점
ANN 검색에는 속도와 정확도 사이의 줄다리기가 있다. 더 많은 후보를 살펴보도록 설정하면 정확도는 오르지만 느려지고, 반대로 하면 빨라지지만 놓치는 결과가 늘어난다. 진짜 가까운 항목을 얼마나 잘 찾아냈는지는 보통 재현율(recall)로 평가한다. 또 색인을 만들고 유지하는 데 메모리와 시간이 들기 때문에, 데이터 규모와 업데이트 빈도에 맞는 방식을 골라야 한다. 그래서 검색 품질을 더 높이려고 뒤에 리랭커를 붙이기도 한다.
예시
사내 문서 챗봇을 RAG로 만든다고 하자. 미리 사내 문서를 청킹하고 임베딩해 벡터 DB에 넣으면, 벡터 DB가 HNSW 같은 ANN 색인을 만들어 둔다. 직원이 질문하면 질문을 임베딩한 뒤 ANN 검색으로 가장 비슷한 문서 조각 몇 개를 순식간에 찾아 LLM에 함께 넘겨 주고, LLM은 그 내용을 바탕으로 답을 쓴다.