개발일반/도대체

도대체 유사도 검색은 뭘까? with LangChain .as_retriever() 분석

문괜 2024. 11. 8. 17:48
반응형

벡터 유사도 검색 aka. Vector Similarity Search 서로 다른 두 벡터의 유사도가 얼마나 높은지 확인하고 가장 높은 유사도를 갖은 벡터부터 나열하여 검색을 진행한다. 

 

기본적으로 벡터간의 비교를 하는것이기 때문에 우리가 예측하지 못하는 결과가 나올수 있고 특히 자연어나 객체를 Embedding을 하는 과정에 따라 차이가 발생할수 있다. 

 

그리고 이와 같은 Vector간의 유사도를 직접적으로 볼 수 있는 웹사이트로 Embedding Projector라고 있다. 

Embedding Projector

 

Embedding projector - visualization of high-dimensional data

Visualize high dimensional data.

projector.tensorflow.org

Embedding Project에서 Mother를 조회

이와 같이  Mother를 Word2Vec All으로 임베딩 했을 때의 유사도가 높은 단어들을 위와 같이 확인할 수 있다. 

(개인적으로 Mothers와 Mother가 가장 유사하다고 나오는데 뭔가 너무 당연한거 아닌가? 하는 생각이 들었다.)

 

이렇게 유사도를 바탕으로 조회에 오는것이 담겨있는게 .as_retriever이다. 특히, as_retriever의 파라미터들을 좀 더 자세히 파본다면 아래와 같이 나뉠 수 있다.

Parameters How it works
search_type 유사도 검색 방식을 설정으로 "similarity"(default), "mmr" 혹은 "similarity_score_threshold" 중 하나를 선택할 수 있다. 
많은 경우 MMR을 사용하는데 이에 대해서는 추후에 추가적으로 정리할 예정이다. 
search_kwargs 추가적인 반환 옵션과 search_type에서 지정한 옵션들에 대해 설정할 수 있다. 
kwargs 위에서도 보았듯이 사용하는 Vector Store별로 다양한 추가 설정이 받아야하는 값들이 다르다 그렇기에 사용하는 Vector Store에 맞춰 어떤 값이든 넣을 수 있다.

 

이렇게 벡터 유사도 검색에 대해 간단하게 알아 봤다. 다음으로는 이제 MMR에 대해서 정리해볼 예정이다.

반응형