임베딩·시맨틱 검색 초보 가이드: query/passage 접두어만 지켜라
요약: 임베딩(embedding)은 문장을 의미 좌표(숫자 벡터)로 바꿔, 단어가 한 글자도 안 겹쳐도 뜻이 가까우면 찾아주는 기술이다. LLM 없이도 '내 메모를 의미로 검색'이 5분이면 된다. 그리고 초보는 딱 한 가지만 지키면 된다 — query/passage 접두어를 모델이 시키는 대로 붙이는 것이다. 이 한 줄을 빼먹으면 같은 모델인데도 측정상 검색 적중률이 약 5% 떨어진다(공개 벤치 기준).
임베딩(embedding)은 문장을 의미 좌표(숫자 벡터)로 바꿔, 단어가 한 글자도 안 겹쳐도 뜻이 가까우면 찾아주는 기술이다. LLM 없이도 '내 메모를 의미로 검색'이 5분이면 된다. 그리고 초보는 딱 한 가지만 지키면 된다 — query/passage 접두어를 모델이 시키는 대로 붙이는 것이다. 이 한 줄을 빼먹으면 같은 모델인데도 측정상 검색 적중률이 약 5% 떨어진다(공개 벤치 기준).
한 줄 요약: 임베딩은 뜻을 지도 위 좌표로 찍는 자다. 비슷한 의미는 가까운 점이 되고, 검색은 '내 질문 점에서 가장 가까운 문서 점'을 고르는 일이다. 그래서 키워드가 안 겹쳐도("환불"↔"돈 돌려받기") 의미로 찾는다.
여기서 벡터(vector)는 방향과 크기를 가진 숫자들의 묶음이고, 코사인 유사도(cosine similarity)는 두 벡터가 이루는 각도로 '얼마나 같은 방향(=비슷한 뜻)인지'를 재는 값이다. 각도가 좁을수록 뜻이 가깝다.
시맨틱 검색은 무엇으로 이루어지나?#
모델 로드→encode(문장을 벡터로)→정규화→코사인 top-k 네 조각이고, LLM은 필요 없다. ① sentence-transformers로 임베딩 모델을 한 줄로 불러오고, ② 문서들을 encode해 벡터로 만들어 두고, ③ 질문도 같은 모델로 encode한 뒤, ④ 코사인 유사도가 가장 높은 top-k 문서를 꺼낸다. 답을 '생성'하지 않고 찾기만 하므로 가볍고 빠르다 — 노트북 CPU에서도 작은 모델(약 130MB, 384차원)이면 충분하다. RAG는 여기에 LLM을 한 단 더 얹은 것뿐이다.
| 용도 | 추천 모델 | 왜 |
|---|---|---|
| 영어·가벼움 | all-MiniLM-L6-v2 | 약 130MB·384차원, CPU에서 빠름 |
| 한국어·다국어 | multilingual-e5 | query/passage 접두어, 100여 언어 |
| 한국어·긴문서 | bge-m3 | 8K 토큰·다국어, 검색 강함 |
| 정밀도 더 | bge-reranker(나중) | top-k를 다시 정렬해 +정확 |
| 저장 | 코사인 전 정규화 | 안 하면 유사도가 깨짐 |
초보가 가장 많이 틀리는 한 가지는?#
접두어(prefix) 비대칭이다. e5 계열은 질문에 "query:", 문서에 "passage:"를 붙이도록 훈련됐고, 이걸 빼면 질문과 문서가 다른 공간에 찍혀 검색이 헛돈다(측정상 적중률 약 5% 하락). bge-m3도 검색용 instruction이 있다. 둘째 함정은 정규화다 — 코사인 유사도는 길이가 1인 벡터를 전제하므로, normalize_embeddings=True를 빼면 점수가 엉킨다. 셋째는 질의와 문서를 같은 모델로 encode해야 한다는 것(섞으면 의미가 안 맞는다). 이 셋만 지키면 초보 검색의 90%는 해결된다.
한국어면 어떤 모델을 고르나?#
다국어 모델이다. all-MiniLM 같은 영어 전용은 빠르지만 한국어 의미가 약해, 같은 뜻의 한·영 문장이 안 붙는다. multilingual-e5(접두어 필수)나 bge-m3(8K·MIT)를 골라라. 모델을 키우면 정확도는 오르지만 벡터 차원·용량·속도가 함께 커진다(예: 384→1024차원). 그리고 리더보드(MTEB)는 출발점일 뿐, 점수는 영어 위주라 한국어·내 도메인에선 직접 재야 한다. 작게 시작해 부족하면 한 단계씩 키워라.
직접 5분 안에 해보려면?#
가장 쉬운 길부터.
pip install sentence-transformers후, 한국어면 multilingual-e5나 bge-m3를 로드한다(영어 전용 피하기).- 문서를 encode할 때 정규화를 켜고, e5면 "passage:"/"query:" 접두어를 꼭 붙인다.
- 코사인 top-k로 몇 개 질문을 던져보고, 부족하면 한 번에 하나씩(모델→접두어→리랭커) 바꾸며 내 문서로 직접 측정하라.
참고 링크#
- sentence-transformers(임베딩·검색 라이브러리)
- MTEB(임베딩 벤치마크)
- multilingual-e5(다국어 임베딩)
- BGE-M3/FlagEmbedding(다국어·8K)
- all-MiniLM-L6-v2(가벼운 영어 임베딩)
참고: 차원·용량·점수는 2026년 공개 측정·모델카드 기준이며 언어·도메인·문서에 따라 달라진다. MTEB는 영어 비중이 커 한국어 성능을 보장하지 않으니 내 문서로 직접 재라(리더보드는 출발점). 임베딩 모델은 자주 갱신되니 분기별로 다시 본다.
Responses
No responses yet. Be the first to respond.