gpt4 book ai didi

java - 使用 Okapi Scheme 计算文档相似度

转载 作者:行者123 更新时间:2023-11-30 04:45:38 26 4
gpt4 key购买 nike

我发现 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)

然后我将 (idfOfQueryTerm) 的总和从 1 到 nidfOfQueryDoc= (idfOfQueryTerm) 之和然后,对于每10个文档(包括查询文档),我将根据首先选择的查询文档的查询词,通过该方程计算文档的总词频。

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相似度度量的理解是否正确?

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

最佳答案

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

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) 是您的 idfOfQueryTermfreq(t, doc) 是术语 t 的频率code> 在文档 doc 中。

选择 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))

注意:两个链接给出的方程略有不同,尽管差异主要在于权重,而不是基本原理

关于java - 使用 Okapi Scheme 计算文档相似度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11012846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com