C.W.K.
Stream
Lesson 01 of 06 · published

키워드 검색이 무너지는 자리

~22 min · embeddings, search, intuition

Level 0Scout
0 XP0/41 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

키워드 갭

고전 검색 엔진과 SQL LIKE 쿼리는 문자 시퀀스를 매칭해. 의미는 절대 안 봐. "연간 결제 환불 정책" 으로 검색하면 "annual subscription cancellation" 라고 쓰여있는 문서는 0 hit. 의도는 같은데 단어가 한 글자도 안 겹치니까.

형태소 분석, 표제어 추출, 동의어 사전 정도로는 쉬운 케이스 (달리는 → 달리다, 저렴한 ↔ 싼) 만 잡고, 진짜 의미 갭이 생기면 다 무너져:

  • "메모리 누수 어떻게 고쳐?" 는 "가비지 컬렉션 디버깅" 을 못 잡아
  • "은행이 우리 대출 거절" 은 강둑(river bank) 기사도 똑같이 잘 잡아 (영문에서)
  • "PyTorch M3에서 느림" 은 "MLX로 Apple Silicon 학습 가속" 을 못 봐

대신 뭐가 필요해

의미가 곧 좌표 인 표현이 필요해. 같은 뜻인 두 글이 서로 가까운 좌표에 떨어지는 — 단어가 한 개도 안 겹쳐도. 그게 임베딩 이 주는 거고, 이 퀘스트의 나머지는 그걸 어떻게 ingest 하고, 저장하고, 검색하고, 프로덕션에서 신뢰할지를 다뤄.

본인 데이터로 갭 검증부터

벡터 검색 도입 전에 본인 코퍼스에서 갭이 진짜 있는지 증명해. 진짜 유저 쿼리 30개 + 지식 베이스 문서 30개 샘플링한 다음, 의미상 매칭은 명확한데 토큰 겹침이 0인 페어 가 몇 개인지 세. 많으면 벡터 검색 정당화됨. 거의 0이면 BM25 + 동의어 사전이 훨씬 싸고 충분해.

Code

한 줄로 갭 보여주기·python
from collections import Counter

query = 'refund policy for yearly plans'
doc   = 'how to cancel an annual subscription'

def token_overlap(a: str, b: str) -> int:
    a_tokens = Counter(a.lower().split())
    b_tokens = Counter(b.lower().split())
    return sum((a_tokens & b_tokens).values())

print(token_overlap(query, doc))   # 0 — 키워드 검색은 이걸 통째로 놓침
본인 코퍼스 audit·python
import csv
from pathlib import Path

pairs = csv.DictReader(Path('audit_pairs.csv').open())
zero_overlap = 0
for row in pairs:
    if token_overlap(row['query'], row['doc']) == 0 and row['relevant'] == 'yes':
        zero_overlap += 1
print(f'{zero_overlap} 개의 relevant pair 가 키워드 검색으로는 매칭 불가')

External links

Exercise

본인 지원 inbox 나 채팅 로그에서 진짜 질문 20개 뽑아. 각 질문마다 가장 가까운 정답 KB 글과 토큰 겹침 카운트해. 0인 게 몇 개인지 보고. 그 숫자가 벡터 검색 도입의 최소 동기야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.