TF-IDF

개발새발·2021년 10월 24일
0

algorithm

목록 보기
1/1

ElasticSearch 를 사용하다가 다른 분에게 'TF-IDF' 를 아냐는 질문을 받았다. ㅎ.. 아뇨..모르겠는데요.. 그래서 조사를 좀 해봤다.

찾아보니 검색엔진에서 일반적으로 score알고리즘을 사용하는데, 이 알고리즘에는 TF-IDF 가 있다. 가장 널리 사용되고 있는 오픈소스 검색엔진 lucene은 기존에 TF-IDF를 조금 변형한 형태의 score 알고리즘을 썼다고 한다. 하지만 최근 디폴트를 BM25 알고리즘으로 변형했다고 한다. 이렇게 되면서 lucene을 코어로 사용하는 elasticsearch도 최근버전에서 모두 BM25 를 기본 score 알고리즘으로 사용하고 있다고 한다. 하지만 나는 TF-IDF 가 알고싶음으로 BM25는 나중에 하는걸루 ㅎ


TF-IDF

여러 문서로 이루어진 문서군이 있을 때 어떤 단어가 특정 문서 내에서 얼마나 중요한 것인지를 나타내는 통계적 수치라고 한다. TF, IDF 별로 나눠서 설명할 수 있는데, 이들의 계산법이 또 따로 있다. 이 계산법이 너무 복잡하다. 간단히 정리하자면 아래와 같다.

TF-IDF = tfidf(t,d,D)=tf(t,d)×idf(t,D)

t는 term으로 단어,
d는 document로 문서 1개,
D는 Documnet로 문서 전체


TF = Term Frequency, 단어 빈도수

tf(t,d) = d에 t가 나오는 빈도수
d에 t가 많이 나올수록 좋다.

IDF = Inversed Document Frequency, 역문서 빈도

idf(t,D) = 전체 문서의 개수/t가 들어있는 문서의 개수
t가 나오는 d가 적을수록 좋다.


즉, 검색하려는 단어들에 가중치를 부여하여 검색하는 방법이라고 보면 될 것 같다.

*참고: https://m.blog.naver.com/duqrlwjddns1/221780750830 ,
https://wikidocs.net/31698 https://nesoy.github.io/articles/2017-11/tf-idf

profile
발새발개

0개의 댓글