首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Okapi模式的文档相似度计算

基于Okapi模式的文档相似度计算
EN

Stack Overflow用户
提问于 2012-06-13 18:21:46
回答 1查看 383关注 0票数 1

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

我希望使用Okapi相似度方案和Lucene计算文档集合中的文档之间的相似度

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

代码语言:javascript
复制
idfOfQueryTerm = log (totalNumIndexedDocs - docFreq + 0.5)/(docFreq + 0.5)

然后,我将使用sum of (idfOfQueryTerm) from 1 to nidfOfQueryDoc= sum of (idfOfQueryTerm),然后对于每10个文档(包括查询文档),i l根据首先选择的查询文档的查询术语,通过这个等式计算文档的总词频。

代码语言:javascript
复制
tfOfDocument={2.2 * termFrq }/ { 1.2 * ( 0.25 + 0.75 * docLength / this.avgDocLength ) + termFrq }

因此,我将以10个tfOfDocument值结束,每个文档一个值和一个idfOfQueryDoc值。

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

1)查询单据与单据#B= idfOfQueryDoc* tfOfDocument #B的相似度

2)查询单据与单据#B= idfOfQueryDoc* tfOfDocument #B* tfOfDocument#queryDoc的相似度

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

在计算文档相似度时,上述两种方法中哪种方法最优?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-13 19:49:28

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

代码语言:javascript
复制
sim(query, doc) = sum(t in terms(query), freq(t, query) * w(t, doc))

其中(来自第二个链接,略有修改,因为我认为链接中的公式是不正确的)

代码语言:javascript
复制
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)是您的idfOfQueryTermfreq(t, doc)是术语t在文档doc中的频率。

选择b=0.25和k=1.2时,您会得到

代码语言:javascript
复制
w(t, doc) = idf(t) * 2.2*freq(t, doc) / (1.2*(0.25+0.75*ls(doc)) + freq(t, doc))

注:这两个链接给出的公式略有不同,尽管区别主要在于权重,而不是基本原理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11012846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档