노트 1만 개, 벡터 검색을 포기했어요 — 그런데 검색이 좋아졌습니다
요즘 유튜브를 열면 지식 그래프와 벡터 검색 강의가 쏟아져요. 저도 한동안 그 흐름을 따라갔어요. 노트가 1만 개쯤 쌓인 개인 지식창고가 있는데, 여기에 벡터 검색을 붙이면 뭔가 근사한 일이 일어날 거라고 믿었던 것 같아요.
결론부터 말씀드리면, 저는 얼마 전 벡터 검색을 접었어요. 그리고 검색은 오히려 좋아졌습니다.
믿음과 실측 사이
벡터 검색의 약속은 매력적이에요. 단어가 달라도 의미가 비슷하면 찾아준다. "회의 정리"라고 검색해도 "미팅 노트"가 나온다. 이론적으로는 그래요.
그런데 제 창고에서 실측을 해보니 이상한 숫자가 나왔어요. 노트 1만 719건 중에 임베딩이 만들어진 건 252건. 약 2퍼센트였어요. 나머지 98퍼센트 가까이는 벡터 검색의 눈에 아예 보이지 않는 상태였던 거예요. 그러니까 저는 한동안, 전체의 2퍼센트만 보는 검색기를 "의미 기반 검색"이라고 부르며 쓰고 있었던 셈이에요.
여기서 부끄러운 고백을 하나 하면, 이 사실을 안 건 검색기가 이상해서가 아니었어요. 에러가 난 적이 없거든요. 검색하면 뭐라도 나왔으니까요. 그게 함정이었어요. 틀린 결과는 에러를 내지 않아요. 그냥 조용히, 그럴듯하게 틀려 있을 뿐이에요.
오래된 기술이 이긴 날
그래서 제대로 붙여봤어요. 제 창고에서 나올 법한 질문 98개를 만들어 정답 노트를 미리 정해두고, 벡터를 섞은 검색과 BM25라는 오래된 키워드 검색을 같은 문제로 시험했어요. BM25는 1970년대 확률 검색 연구에 뿌리를 둔 기술이에요.
결과는 BM25 단독의 우세였어요. 벡터를 섞은 쪽이 점수를 더 얹어주지 못했어요. 어디까지나 제 데이터, 제 질문에서의 결과예요. 그리고 솔직하게 적어두면, 커버리지가 2퍼센트인 벡터 축은 애초에 공정하게 싸울 수 없는 상태였어요. 그러니 이 실험이 증명한 건 "벡터 검색은 열등하다"가 아니에요. 관리가 안 된 벡터 인덱스는 없느니만 못하고, 그걸 알아차리려면 재봐야 한다는 쪽이에요.
생각해보면 이유가 있어요. 개인 지식창고의 검색은 대부분 "내가 쓴 그 단어"를 다시 찾는 일이에요. 제가 "하네스"라고 적었으면 "하네스"로 검색해요. 낯선 문서를 의미로 더듬는 게 아니라, 아는 문서를 이름으로 부르는 거죠. 적어도 이런 사용 패턴에서는 키워드 일치가 의미 유사도만큼, 때로는 그보다 정확했어요. 게다가 전량을 커버하고, 임베딩 파이프라인이라는 관리 대상이 통째로 사라져요. 안 만들어도 되는 시스템은 고장도 안 나니까요.
규칙이 하나 남았어요
이 일에서 제가 얻은 건 "벡터 검색은 나쁘다"가 아니에요. 데이터가 다르면 결론도 달라질 거예요. 남은 건 규칙 하나예요.
멋있는 쪽을 고르기 전에, 내 데이터로 같은 문제를 두 번 풀어본다.
강의가 보여주는 데모는 강사의 데이터예요. 내 창고에서도 그런지는 재보기 전까지 모르는 거더라고요. 그리고 재는 데 필요한 건 대단한 게 아니었어요. 질문 목록 하나와 정답 목록 하나, 그걸 두 검색기에 넣어보는 일이었어요. 평가셋을 만드는 시간까지 합쳐도 하루가 안 걸렸어요.
기술 선택에서 제일 비싼 건 도입 비용이 아니라, 틀린 걸 옳다고 믿고 지내는 시간인 것 같아요. 그 시간은 에러 메시지가 알려주지 않으니까, 직접 재서 끊어내는 수밖에 없어요.
이것 저것 AI와 사는 이야기를 공유합니다. 목요일마다 보내드리고, 그 사이에 나눌 이야기가 생기면 한 번 더 찾아뵐게요.
