기술나눔

Elasticsearch는 관련성 점수(TF-IDF, BM25 등)를 이해합니다.

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Elasticsearch에서 관련성 점수는 검색 결과의 품질과 순위를 결정하는 검색 기능의 핵심입니다. Elasticsearch가 관련성 점수, 특히 TF-IDF 및 BM25 알고리즘을 계산하는 방법을 이해하는 것은 검색 성능과 결과를 최적화하는 데 중요합니다. 이 기사에서는 이 두 가지 알고리즘과 Elasticsearch에서의 적용을 심층적으로 살펴보겠습니다.

1. 관련성 점수 소개

관련성 점수는 검색 결과가 사용자의 쿼리와 얼마나 일치하는지를 측정한 것입니다. Elasticsearch는 복잡한 알고리즘을 사용하여 각 문서와 쿼리의 관련성 점수를 계산합니다. 점수가 높을수록 문서와 쿼리 간의 일치 정도가 높아집니다. 전자 상거래 웹 사이트 및 지식 기반과 같은 애플리케이션 시나리오에서 관련성 점수는 사용자가 필요한 정보를 빠르게 찾을 수 있는지 여부를 직접적으로 결정합니다.

2. TF-IDF 알고리즘

2.1 정의 및 원리

TF-IDF(용어 빈도-역 문서 빈도)는 문서 세트 또는 코퍼스의 문서 중 하나에 대한 단어의 중요성을 평가하는 데 사용되는 고전적인 정보 검색 알고리즘입니다. 이는 두 부분으로 구성됩니다.

  • TF(Term Frequency) 용어 빈도 : 단어 빈도, 즉 문서에 단어가 나타나는 횟수입니다. 계산 공식은 다음과 같습니다. TF = (문서에 단어가 나타나는 횟수) / (문서에 있는 총 단어 수).
  • IDF(역문서빈도) : 역 문서 빈도, 즉 문서 모음에서 단어의 일반적인 중요성입니다. 계산 공식은 다음과 같습니다: IDF = log((문서 모음의 총 문서 수) / (단어를 포함하는 문서 수 + 1)).

2.2 장점과 단점

TF-IDF 알고리즘은 간단하고 효율적이지만 분명한 한계도 있습니다. 예를 들어 문서 길이, 검색어 위치 등의 요소를 고려하지 않고, 빈도가 높은 단어를 지나치게 강조하는 경향이 있습니다.

3. BM25 알고리즘

3.1 정의 및 원리

BM25(Best Matching 25) 알고리즘은 TF-IDF 알고리즘을 개선하고 확장한 것으로, 관련성 점수를 계산할 때 문서 길이, 검색어 위치 등 더 많은 요소를 도입합니다. BM25 알고리즘의 주요 목적은 특히 대규모 문서 컬렉션을 처리할 때 검색 결과의 품질을 향상시키는 것입니다.

BM25 알고리즘의 기본 공식은 다음과 같습니다.

[
텍스트{점수}(D, Q) = 합계_{i=1}^{n} 텍스트{IDF}(q_i) cdot frac{f(q_i, D) cdot (k_1 + 1)}{f(q_i, D) + k_1 cdot (1 - b + b cdot frac{|D|}{텍스트{평균}})}
]

안에, 디.디. 문서를 나타냅니다. 큐큐 쿼리를 나타냅니다. 치 치_이 쿼리의 용어를 나타냅니다. f(q_i, D)는 q_i의 약어이다.에프(,) 어휘 항목을 나타냅니다. 치 치_이문서에서 디.디.주파수, ∣ 디 ∣ |디| 문서 표현 디.디.길이, 평균 텍스트{평균}평균 문서 컬렉션에 포함된 모든 문서의 평균 길이를 나타내며, 케이 1 케이_1케이1 그리고 비비 조정 가능한 매개변수입니다.

3.2 장점과 단점

BM25 알고리즘은 TF-IDF 알고리즘에 비해 다음과 같은 장점이 있습니다.

  • 문서 길이 정규화: 단어 빈도에 대한 문서 길이의 희석 효과를 고려합니다.
  • 단어 빈도 포화 조정: 단어 빈도의 채도를 조정하는 로그 함수를 도입하여 빈도가 높은 단어에 대한 지나친 강조를 방지합니다.
  • 문서 빈도 포화도: 문서 빈도의 영향을 조정하기 위해 문서 빈도의 포화 계수가 도입되었습니다.

그러나 BM25 알고리즘도 복잡하므로 최상의 결과를 얻으려면 여러 매개변수를 조정해야 합니다.

4. Elasticsearch의 애플리케이션

4.1 버전 차이

Elasticsearch 버전 5.0 이전에는 관련성 채점을 위해 기본적으로 TF-IDF 알고리즘이 사용되었습니다. 버전 5.0부터 Elasticsearch는 실제 애플리케이션에서 더 나은 성능을 발휘하기 때문에 기본적으로 BM25 알고리즘을 사용합니다.

4.2 디버깅과 최적화

Elasticsearch가 쿼리에 대한 문서의 관련성 점수를 계산하는 방법에 대한 통찰력을 얻으려면 다음을 사용할 수 있습니다._explain API. 이 API는 개별 구성 요소(예: 하위 쿼리, 요인, 정규화 등) 및 전체 점수에 대한 특정 기여도를 포함하여 문서의 각 쿼리 용어 점수에 대한 설명을 반환할 수 있습니다.

예를 들어 다음 명령을 사용하여 특정 쿼리에 대한 TF-IDF 또는 BM25 점수를 볼 수 있습니다.

GET /my_index/_search
{
  "explain": true,
  "query": {
    "match": {
      "text": "this is the first document"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

4.3 실제 적용 시나리오

전자상거래 사이트에서는 '휴대폰'이라는 키워드를 입력하여 검색할 수 있습니다. Elasticsearch는 "휴대폰"이 포함된 모든 문서를 색인화하고 BM25 알고리즘을 사용하여 관련성 점수를 계산합니다. 점수가 높은 문서는 검색 결과에서 더 높은 순위를 차지하므로 사용자 경험이 향상됩니다.

5. 요약

Elasticsearch의 관련성 점수 매기기 메커니즘은 복잡한 알고리즘을 기반으로 하며 그 중 TF-IDF와 BM25 알고리즘은 두 가지 중요한 점수 알고리즘입니다. 이러한 알고리즘의 원리와 적용을 이해하는 것은 Elasticsearch의 검색 성능과 결과를 최적화하는 데 중요합니다.알고리즘 매개변수를 조정하고_explain 디버깅을 위한 API,