TF-IDF은 좋은 시작입니다.
문서의 텍스트 길이를 고려해도 개선 할 수 있습니다. 이것은 도서관 Lucene가하는 것입니다.
Lucene은 문서의 길이를 고려하여 TF-IDF 공식을 확장했습니다. 이는 인간의 직감에 더 부합하기 때문입니다. 결국, 한 단어로 된 문서에서 "고양이"라는 단어를 발견하면,이 단어는 천 단어가있는 문서의 단일 "고양이"와 비교할 때 더 관련이 있습니다.
그것은 루씬은 TF-IDF에 대한 확장 공식을 채택 것 같다 : 그 루씬은 BM25 ("가장 일치하는 25")라는 또 다른 알고리즘을 사용하여 진화 불구하고
log(numDocs/(docFreq + 1)) * sqrt(tf) * (1/sqrt(length))
numDocs = total number of documents
docFreq = in how many documents the word was found
tf = Term frequency in a specific document
length = How many words there are in the document
요즘 보인다. 전반적으로이 알고리즘은 TF-IDF보다 나은 결과를 생성하는 것 같습니다. 루씬 구현 점검이 위대한 blog article에 대한 자세한 내용은
IDF * ((k + 1) * tf)/(k * (1.0 - b + b * (|d|/avgDl)) + tf)
k = constant (typically 1.2)
tf = term frequency
b = also a constant which tunes the influence of the document length
|d| = document length
avgDl = average document length
IDF = log (numDocs/docFreq + 1) + 1
: 루씬에서 사용 BM25에 대한 공식 것 같다.