ElasticSearch - DFR에 대해 알아보자

2021. 8. 29. 21:37개발/DB

728x90
반응형

개요

DFR ( Divergence from Randomness ) framework

  • 똑똑하신 분들이 DFR에 대한 내용을 내놓았다.
  • 사실 가정이나 내용이 잘 이해가지 않는다.
  • 한 번 정리해보면서 그 내용을 이해해보도록 해보자.

정의

# 아래의 함수들은 우선 간단하게 표기했다.
boost = 1

def normalize(tf, c, avgfl, fl):
    return 1

def baseModel(stat, tfn):
    return 1

def afterEffect(stats, tfn):
    return 1

w = boost * baseModel({}, 1) * afterEffect({}, 1)

구성

해당 DFR의 경우 크게 3가지 구성 요소를 가진다.

  1. Base model
  2. After Effect
  3. Normalization

1. BaseModel

이 떄 G를 사용하면 아래와 같이 scoring function에 대한 내용이 나오는 것을 볼 수 있다.

from math import log

# BasicModelG, computed as log2(lambda + 1) + tfn * log2((1 + lambda) / lambda) from
# lambda, computed as F / (N + F) from

# F: total number of occurrences of term across all docs + 1
# N: total number of documents with field

def lambda_fn(F, N):
    return F / (N + F)

def baseModelG(stats, tfn):
    return log(lambda_fn(stats.F, stats.N) + 1, 2) + tfn * log( (1 + lambda_fn(stats.F, stats.N)) / lambda_fn(stats.F, stats.N))

2. After Effect

  • 이 after effect는 scoring 값을 tfn 값을 통해서 normalize를 하는 역할이다.
  • 아래는 after effect를 L ( Laplace's law of succession)의 식이다.
  • 아래의 함수를 보면 알 수 있듯이, 만약 해당 term이 나온 빈도수가 높아지게 되면 오히려 score는 떨어지게 되어있다.
  • 해석하면 많이 발생하는 term의 경우에는 낮은 가중치를 부여한다고 볼 수 있다.
def after_effect_l(tfn):
    return 1 / (tfn + 1)

3. Normalization

  • 기본적으로 해당 DFR에서는 TF값을 그대로 사용하지 않고, normalize로 변형된 형태로 사용한다.
  • ES 지원하는 함수는 no, h1, h2, h3, z 가 존재한다.
  • ES에서 나오는 식은 아래와 같다.
  • 해당 값을 tfn으로 사용하게 된다.
  • 아래는 H2 normalzation의 식이다.
from math import log

# tf: 해당 document에서 나타난 term의 갯수
# c: hyperparameter
# avgfl: 모든 document의 해당 field 평균 길이
# fl: 해당 document의 length

# NormalizationH2, computed as tf * log2(1 + c * avgfl / fl) from
def normalize_h2(tf, c, avgfl, fl):
    return tf * log(1 + c * avgfl / fl)

 

수식을 자세히 살펴보면 결국 tf에 특정 weight를 부여하여 normalize를 하는 것을 알 수 있다.

간단하게 말하자면 해당 term이 길이가 1000인 글에서 1번 나타나는 것과 100인 글에서 1번 나타나는 것은 그 중요도가 다르다고 볼 수 있다. 따라서 이에 따라 가중치를 부여하기 위한 것임을 알 수 있다. 아래는 fl (document length)값을 다르게 주었을 때, tfn 값이 달라지는 것을 보여준다.

tfH2 함수

출처

728x90
반응형