Elastic Search

[Elasticsearch] TF/IDF, BM25, RRF

miin1635@ 2023. 12. 11. 10:20

엘라스틱서치에는 두 가지의 검색이 있다. 하나는 Keyword Search , 다른 하나는. Semantic Search이다. 

이 두 검색에는 소위 검색 결과 (즉, 검색 단어의 조건이 매칭되는 문서들)를 도출하는 알고리즘 (점수 계산 방식) 이 다른데, 각각의 알고리즘에 대해서 알아보자.  기본적으로 엘라스틱에서는 매치되는 점수가 높은  문서가 단어와 가장 relevant한 문서라 판단한다.

 

1. TF/IDF 

TF/IDF 알고리즘은 TF , 즉 하나의 문서에 얼마나 검색 단어가 있느냐  / (나누기) IDF, 즉 전체 문서들에서 이 단어가 얼마나 많이 들어있냐로 계산되며 수식은 아래와 같다. 

 

이 수식을 쉽게 파악하려면 파라미터들의 비례, 반비례 관계만 따지면 된다. 

정리해보자면, DF 가 높으면 높을 수록 점수가 높아지고, 반대로 전체 문서에서 검색 단어가 많이 쓰이면 그 만큼 의미가 적다 판단하고 점수를 내리게 된다. 

 

2. BM25

 

BM25는 TF/IDF 알고리즘에서 조금 더 편차를 줄인 방식이다. 먼저 수식을 보자 

 

여기서 추가되는 파라미터는 Qi (문장에서 i번째로 토큰화되는 단어, 예를 들어 Shame dragon을 검색하면 'Shame'과 'Dragon'으로 토큰화 되며, 'Shame'이 q1 이다.

 

검색이 어떻게 되는지 말로 설명하기 보다는 명확한 자료를 보는게 빠르겠다.

여기까지는 BM25와 별반 차이가 없어 보인다. 하지만 가장 중요한 차이는 해당 문서의 길이를 고려해 '특정 단어가 출현하는 빈도'를 보다 정밀하게 나타낸다.