9차시. 임베딩 이해
1. 8차시에서 놓친 질문 하나
출처: 원본 PDF 09차시_임베딩이해.pdf 3쪽 · 쪽 그림 3쪽
지난 차시에 이런 코드를 썼습니다.
emb = OpenAIEmbeddings(model="text-embedding-3-small")
store = FAISS.from_documents(chunks, emb)
found = store.similarity_search("환불 규정", k=3)그런데 이상하지 않았나요? 문서에는 "반품 절차"라고만 적혀 있는데, "환불 규정"이라고 물어도 그 문단이 찾아졌습니다.
🤔 어떻게 이런 일이 가능할까?
"환불"과 "반품"은 글자가 하나도 안 겹칩니다.
"규정"과 "절차"도 마찬가지입니다.
Ctrl+F로 찾으면 절대 안 나옵니다.
그런데 어떻게 찾아냈을까요?
그 비밀이 바로 임베딩입니다.
1-1) 키워드 검색의 한계
⚠️ 글자가 겹쳐야만 찾는다면
사용자가 이렇게 물으면 전부 실패합니다:
· "환불" 로 검색 → 문서엔 "반품"이라 적힘 → ❌
· "비밀번호 변경" → 문서엔 "패스워드 재설정" → ❌
· "얼마예요?" → 문서엔 "가격은 100,000원" → ❌
· "고장났어요" → 문서엔 "제품 불량 시" → ❌
사용자는 문서와 똑같은 단어를 쓰지 않습니다.
그래서 키워드 검색만으로는 RAG를 만들 수 없습니다.
해결책은 두 가지입니다.
① 동의어 사전을 사람이 계속 관리한다 (지옥입니다)
② 의미로 검색한다 ← 우리가 쓰는 방법