Statistics 基于关键字数的文档与其他文档相关的概率

Statistics 基于关键字数的文档与其他文档相关的概率,statistics,probability,Statistics,Probability,我有两个文档X和Y。如果用户搜索单词“Computer”,我希望根据关键字“Computer”显示最相关的文档。我的算法根据关键字在文档中出现的时间选择最相关的文档。唯一的问题是文档X有10个单词,其中单词“Computer”出现了两次,而文档Y有1000个单词,其中单词“Computer”出现了100次。从文件中的字数来看,说文件Y比文件X更相关是不对的 如何对此进行规范化,以获得最准确的相关文档 您描述的是使用搜索查询和文档之间的余弦相似性 余弦相似性 评估文本的余弦相似性的标准是为查询和文

我有两个文档X和Y。如果用户搜索单词“Computer”,我希望根据关键字“Computer”显示最相关的文档。我的算法根据关键字在文档中出现的时间选择最相关的文档。唯一的问题是文档X有10个单词,其中单词“Computer”出现了两次,而文档Y有1000个单词,其中单词“Computer”出现了100次。从文件中的字数来看,说文件Y比文件X更相关是不对的


如何对此进行规范化,以获得最准确的相关文档

您描述的是使用搜索查询和文档之间的余弦相似性

余弦相似性

评估文本的余弦相似性的标准是为查询和文档的每个部分创建一个稀疏向量。向量表示查询和文档的术语计数。为了简单起见,我将对稀疏向量使用python dict表示法

query = {"computer":1}
document = {"the":1, "computer":1, "was":1, ...} # 100 in total.
然后您需要计算:

cosine_similarity = dot(query, document) / (norm(query) * norm(document))
在本例中,我们可以通过乘以公共项的值来计算点积,并且可以使用平方根和来计算查询和文档的规范。下面是如何计算的示例

点积是两个向量中常见单词值的乘积之和

# Computer is the only common term, otherwise we would add the products
dot(query, document) = query['computer'] * document['computer'] = 1

norm(query) = sqrt(sum(value**2 for value in query.values())) = 1
norm(document) sqrt(sum(value**2 for value in query.values())) = 10

cosine_similarity(query, document) = dot(query, document) 
                          / (norm(query) * norm(document)) = 0.1
你可能会遇到的另一个问题是,有些词比其他词更常见。这将使匹配它们的条件变得不那么有用。出于这个原因,许多应用程序使用余弦相似性而不是简单的项计数。这将用术语计数乘以它们的相对稀有度
log(1/频率)
,而不是使用原始值

此外,您还可以找到许多很好的余弦相似性和tf idf实现,其中一个是在scikit learn中。既然你有一个搜索特定的问题,你可能想考虑Lucene,它也实现余弦相似性。 Jaccard相似性


有一个度量你可以考虑的是JACARD相似性。它更容易理解,但通常不如余弦相似性有效。Jaccard相似度定义为两个文档中的字数除以两个文档中的字数。用数学术语来说,交点除以并集。

刚刚给出了答案。你用什么语言工作?如果这是一种我知道的语言,我会推荐一个库。我使用的语言是php。谢谢David。我的问题并不是真正针对搜索。我从整体上看概括和排名。另一个很好的例子是,我把学生分成小组,让每个小组在调查中对自己进行排名。我通过挑选团队调查中排名第一的每个人来选择每个团队中表现最好的人。排名第一会让人产生偏见。现在,将每个团队的人排在最前面是不准确的,因为每个团队的人数并不相等。在这种情况下,在每个团队中挑选最佳表现者的最佳方法是什么?我不能100%确定我是否理解团队类比,但如果你遵循余弦相似性逻辑,它实际上是将匹配数除以两个文档中术语数的(几何)平均数。对于基于与给定术语的相关性对文档进行排序,最常用的度量是余弦相似性,因为它是标准化的,以防止大型文档仅仅因为其大小而获得更高的分数。顺便说一句。我添加了jaccard作为替代方案,因为如果不使用预打包的实现,它通常更容易理解和实现。然而,它通常不如tf idf的余弦相似性工作。