의미 검색 (Semantic Search)

검색 엔진을 만들 때 키워드 매칭만으로는 부족할 때가 많아요. 문장 임베딩을 쓰면 질문과 의미가 비슷한 문서를 벡터 거리로 찾을 수 있어서, "의미 검색"이 가능해져요.

흐름

  1. 문서들을 임베딩으로 미리 변환해 둔다.
  2. 질문을 같은 모델로 임베딩한다.
  3. 질문 벡터와 문서 벡터 사이의 유사도를 계산하고 높은 순서대로 뽑는다.
from sentence_transformers import SentenceTransformer, util

model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
corpus = ["A man is eating food.", "A man is eating a piece of bread."]
corpus_emb = model.encode(corpus, convert_to_tensor=True)

query = "Someone is eating"
query_emb = model.encode(query, convert_to_tensor=True)
hits = util.semantic_search(query_emb, corpus_emb)

확인 포인트

  • 문서가 아주 많아지면 벡터 검색 인덱스(FAISS 등)를 붙여 확장해요.
  • util.semantic_search가 상위 결과와 점수를 돌려줘요.

출처: https://www.sbert.net/examples/sentence_transformer/applications/semantic-search/README.html

더 알아보기