首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tf-以色列国防军不同长度的文件

tf-以色列国防军不同长度的文件
EN

Stack Overflow用户
提问于 2016-09-26 13:28:40
回答 1查看 7.4K关注 0票数 10

当文档长度非常不同时(例如,文档长度从500字到2500字不等),我搜索了关于规范tf等级的网页。

我发现的唯一的规范化讨论是将术语频率除以文档的长度,从而导致文档的长度没有任何意义。

但是,这种方法对tf的规范化来说是非常糟糕的方法。如果有的话,这会导致每个文档的tf等级有很大的偏差(除非所有文档都是从几乎相同的字典中构造的,而使用tf-国防军时则不是这样)。

例如,让我们拿两个文件-一个由100个独特的词,另一个1000个独特的词。doc1中的每个单词的tf为0.001,而在doc2中,每个单词的tf为0.001。

这使得tf-idf等级在与doc1匹配时会自动大于doc2。

有没有人建议一个更合适的正规化配方?

谢谢

编辑我还看到了一种方法,说明我们应该用文档的最大术语频率除以每个文档,这也解决不了我的问题

我所想的是,从所有文档中计算出最大术语频率,然后通过将每个术语频率除以最大值来规范所有术语。

想知道你是怎么想的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-19 17:22:08

你分析的目的是什么?

如果您的最终目标是比较文档之间的相似性(et相似),那么您不应该在tfidf计算阶段考虑文档长度。这就是为什么。

tfidf在公共向量空间中表示文档。如果然后计算这些向量之间的余弦相似性,余弦相似度将补偿不同文档长度的影响。其原因是余弦相似性评估向量的方向,而不是它们的大小。我可以用python向您展示这一点:考虑以下(哑)文档

代码语言:javascript
复制
document1 = "apple apple banana"
document2 = "apple apple apple apple banana banana"

documents = (
    document1,
    document2)

这些文件的长度不同,但内容相同。更准确地说,两个文档中术语的相对分布是相同的,但绝对项频率不是。

现在,我们使用tfidf在公共向量空间中表示这些文档:

代码语言:javascript
复制
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)

我们使用余弦相似性来评估这些矢量化文档的相似性,只看它们的方向(或方向),而不考虑它们的大小(即它们的长度)。我正在评估文档一和文档二之间的余弦相似性:

代码语言:javascript
复制
from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity(tfidf_matrix[0], tfidf_matrix[1])

结果为1。记住,当两个向量具有完全相同的方向时,它们之间的余弦相似性等于1,当它们是正交的时等于0,当向量具有相反的方向时等于-1。

在这种情况下,您可以看到余弦相似性不受文档长度的影响,而是捕捉到原始文档中术语的相对分布是相同的事实!如果要将此信息表示为文档之间的“距离”,则只需:

代码语言:javascript
复制
1 - cosine_similarity(tfidf_matrix[0], tfidf_matrix[1])

当文档相似时(不管它们的长度如何),这个值将趋向于0,而当文档不同时,这个值将趋于1。

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

https://stackoverflow.com/questions/39704220

复制
相关文章

相似问题

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