2017-11-23 8 views
0

각 문서에서 정확히 하나의 단어로 작성된 큰 사전, 즉이 문서가 구성된 어휘가 있습니다. 나는이 두 문서를 서로 비교하고, 두 개의 문서를 매우 다르게 선언 할 수있는 값을 계산하고 싶습니다. 그보다는 매우 비슷합니다.두 문서를 비교하십시오.

단어가 두 문서에 모두 포함되어 있지만 거의 다른 문서에 포함되어 있지 않은 경우 두 문서의 유사성이 강화됩니다.이 두 단어에서만 발생하는 고유 단어이기 때문입니다.

단어가 두 문서에 포함되어 있지만 다른 문서에도 포함되는 경우 두 문서의 유사성이 약화됩니다. 두 단어가 유사하지 않게되므로 일반적인 단어이기 때문입니다.

어떤 방법을 사용해야합니까? TF-IDF? 다른?

답변

1

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에 대한 공식 것 같다.