임베딩

텍스트를 숫자 벡터로 바꾸는 것. Dense 검색의 기반.

개념

“사업기간”과 “용역기간”은 글자가 다르지만 뜻이 가깝다. 임베딩 모델은 이 둘을 벡터 공간에서 가까운 위치에 놓는다. 그래서 글자가 안 겹쳐도 검색된다.

모델 선택의 트레이드오프

큰 모델 (API)작은 모델 (로컬)
품질높음보통
비용호출당 과금무료
고유명사·표상대적으로 강함약함

우리는 **로컬 intfloat/multilingual-e5-small**을 골랐다 (ADR-006). API 비용 한도가 있고, 재인덱싱을 자유롭게 해야 했기 때문.

그 대가로 고유명사·표 검색이 약하다는 걸 처음부터 알고 있었고, BM25 하이브리드를 보완책으로 백로그에 뒀다.

프리픽스 규약

e5 계열은 텍스트 앞에 용도를 표시해야 제 성능이 난다.

질문:  "query: 사업기간이 어떻게 되나요?"
청크:  "passage: □ 사업기간 : 계약일로부터 3개월"

이걸 빠뜨리면 성능이 조용히 떨어진다. 에러가 안 나서 알아채기 어렵다.

토큰 제한

512토큰. 이걸 넘으면 잘린다 → 청크와 chunk_id 크기가 여기 맞춰져 있다.

관련

Dense 검색 · 청크와 chunk_id · BM25