본문 바로가기

공부방/Elasticsearch

정확도 - Relevancy (Score 책정)

Elasticsearch의 검색 결과에는 스코어 점수가 표시가 됩니다.

이 점수는 검색된 결과가 얼마나 검색 조건과 일치하는지를 나타내며 점수가 높은 순으로 결과를 보여줍니다. 다음의 match 쿼리 결과를 살펴보겠습니다.Elasticsearch의 검색 결과에는 스코어 점수가 표시가 됩니다. 이 점수는 검색된 결과가 얼마나 검색 조건과 일치하는지를 나타내며 점수가 높은 순으로 결과를 보여줍니다. 다음의 match 쿼리 결과를 살펴보겠습니다.

 

GET my_index/_search
{
  "query": {
    "match": {
      "message": "quick dog"
    }
  }
}

 

각 검색 결과의 _score 항목에 스코어 점수가 표시되고 이 점수가 높은 결과부터 나타납니다.

그리고 상단의 max_score에는 전체 결과 중에서 가장 높은 점수가 표시됩니다.

Elasticsearch 는 이 점수를 계산하기 위해 BM25 라는 알고리즘을 이용합니다. BM은 Best Matching 을 뜻합니다.

 

다음은 BM25의 계산식입니다.
https://en.wikipedia.org/wiki/Okapi_BM25
 
복잡해 보이는 이 계산에는 크게 TF, IDF 그리고 Field Length 총 3가지 요소가 사용됩니다.
 

TF (Term Frequency)


용어의 빈도입니다.

용어가 자주 나올수록 우리가 찾고자 했던 결과일 확률이 높습니다.

도큐먼트 내에 검색된 텀(term)이 더 많을수록 점수가 높아지는 것을 Term Frequency 라고 합니다.

 

구글에서 "쥬라기 공원" 이라는 검색어로 검색을 한다고 가정 해 보겠습니다. "쥬라기 공원"이라는 단어가 5번 들어 있는 웹 페이지 보다는 10번 들어있는 웹 페이지가 내가 보고싶어 하는 정보가 있는 페이지일 확률이 높을 것입니다.

 

도큐먼트 내에 검색된 텀(term)이 더 많을수록 점수가 높아지는 것을 Term Frequency 라고 합니다.

 

포함하고 있는 텀이 증가할수록 TF 값도 증가를 하며, BM25에서는 최대 25까지 증가합니다. 즉 25 이상 부터는 TF 점수의 변화가 없습니다. TF 값도 증가를 하며, BM25에서는 최대 25까지 증가합니다. 즉 25 이상 부터는 TF 점수의 변화가 없습니다.

 

IDF (Inverse Document Frequency)


검색 결과 중 검색한 단어의 Frequency가 낮은 단어에 높은 추가 점수를 부여함.

 

 다시 구글에서 "쥬라기 공원" 이라는 검색어로 검색을 했을 때 "쥬라기" 또는 "공원" 중 어떤 단어든 포함하는 페이지들은 검색 결과에 나타날 수 있을 것입니다. 이 때 전체 검색 결과 중에 "쥬라기" 가 포함된 결과는 10개 "공원"이 포함된 결과는 100개 라고 가정한다면 흔한 단어인 "공원" 보다는 희소한 단어인 "쥬라기" 가 검색에 더 중요한 텀일 가능성이 높습니다. 검색한 텀을 포함하고 있는 도큐먼트 개수가 많을수록 그 텀의 자신의 점수가 감소하는 것을 Inverse Document Frequency 라고 합니다.
  앞의 검색 결과 중 값이 "The quick brown fox" 인 도큐먼트와 "Lazy jumping dog" 인 도큐먼트는 quick과 dog가 각각 한 번씩만 들어가지만 전체 인덱스를 놓고 보면 quick이 들어간 문서는 3개, dog이 들어간 문서는 4개 가 있어 quick 이 들어가 있는 결과가 점수가 높습니다. 전체 인덱스에 포함된 텀이 증가할수록 아래 그래프와 같이 IDF 감소하게 됩니다. (그래서 Inverse 입니다)

 

 

Field Length


도큐먼트에서 필드 길이가 큰 필드 보다는 짧은 필드에 있는 텀의 Score를 더 크게 책정


블로그 포스트를 검색하는 경우 검색 하려는 단어가 제목과 내용 필드에 모두 있는 경우 텍스트 길이가 긴 내용 필드 보다는 텍스트 길이가 짧은 제목 필드에 검색어를 포함하고 있는 블로그 포스트가 더 점수가 높게 나타납니다. 다음 lazy 를 검색한 쿼리의 결과를 살펴보겠습니다.