의미 검색 (Semantic Search)
의미 검색 (Semantic Search)
검색 엔진을 만들 때 키워드 매칭만으로는 부족할 때가 많아요. 문장 임베딩을 쓰면 질문과 의미가 비슷한 문서를 벡터 거리로 찾을 수 있어서, "의미 검색"이 가능해져요.
흐름
- 문서들을 임베딩으로 미리 변환해 둔다.
- 질문을 같은 모델로 임베딩한다.
- 질문 벡터와 문서 벡터 사이의 유사도를 계산하고 높은 순서대로 뽑는다.
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