1

我发现 Okapi 相似度度量可用于从这里http://www2002.org/CDROM/refereed/643/node6.html和本文http://singhal.info/ieee2001.pdf计算文档相似度

我想使用带有 Lucene 的 Okapi 相似性方案计算文档集合的文档之间的相似性

例如,我的文档集合中有 10 个文档(doc #A、#B、#C、#D 等)。我将选择一个文档作为查询文档。说文档#A。然后对于查询文档的每个 term=1..n ,我将计算

idfOfQueryTerm = log (totalNumIndexedDocs - docFreq + 0.5)/(docFreq + 0.5)

那我就拿sum of (idfOfQueryTerm) from 1 to n; idfOfQueryDoc= sum of (idfOfQueryTerm) 然后对于每 10 个文档(包括查询文档),我会根据首先选择的查询文档的查询词,通过这个等式计算文档的总词频。

tfOfDocument={2.2 * termFrq }/ { 1.2 * ( 0.25 + 0.75 * docLength / this.avgDocLength ) + termFrq }

所以我最终会得到 10tfOfDocument个值,每个文档一个值,一个idfOfQueryDoc值。

然后我可以使用这两种方法计算查询文档与其他文档之间的相似度。

1)查询文档和文档#B=的相似性idfOfQueryDoc* tfOfDocument #B

2)查询文档和文档#B=的相似性idfOfQueryDoc* tfOfDocument #B* tfOfDocument#queryDoc

我想知道,我对 Okapi 相似度度量的理解是否正确?

以上两种方法中哪种方法最适合计算文档相似度?

4

1 回答 1

2

基于第一个链接,查询文档与另一个文档的相似度为:

sim(query, doc) = sum(t in terms(query), freq(t, query) * w(t, doc))

哪里(来自第二个链接,由于我认为链接中的公式不正确而略有修改)

w(t, doc) = idf(t) * (k+1)*freq(t, doc) / (k*(1-b + b*ls(doc)) + freq(t, doc))
ls(doc) = len(doc)/avgdoclen

并且idf(t)是您的idfOfQueryTerm,是文档freq(t, doc)中术语的频率。tdoc

选择 b=0.25 和 k = 1.2 你得到

w(t, doc) = idf(t) * 2.2*freq(t, doc) / (1.2*(0.25+0.75*ls(doc)) + freq(t, doc))

注意:这两个链接给出的方程式略有不同,尽管不同之处主要在于称重,而不是基本原理

于 2012-06-13T11:49:27.853 回答