【问题标题】:tf-idf documents of different length不同长度的tf-idf文件
【发布时间】:2016-09-26 13:28:40
【问题描述】:

我在网上搜索了有关在文档长度非常不同的情况下标准化 tf 等级的信息 (例如,文档长度从 500 字到 2500 字不等)

我发现的唯一规范化是关于在文档长度中划分词频,因此导致文档长度没有任何意义。

这种方法虽然对于标准化 tf.如果有的话,它会导致每个文档的 tf 等级有一个非常大的偏差(除非所有文档都是从几乎相同的字典构建的,使用 tf-idf 时不是这种情况)

例如,让我们获取 2 个文档 - 一个包含 100 个唯一单词,另一个包含 1000 个唯一单词。 doc1 中的每个单词的 tf 为 0.01,而 doc2 中的每个单词的 tf 为 0.001

这会导致 tf-idf 等级在匹配 doc1 的单词时自动大于 doc2

有没有人建议更合适的归一化公式?

谢谢

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

我的想法是从所有文档中计算最大词频,然后通过将每个词频除以最大值来归一化所有词

很想知道你的想法

【问题讨论】:

    标签: python normalization tf-idf textblob


    【解决方案1】:

    您的分析目标是什么?

    如果您的最终目标是比较文档之间的相似性 (et simila),您不应该在 tfidf 计算阶段担心文档长度。这就是原因。

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

    document1 = "apple apple banana"
    document2 = "apple apple apple apple banana banana"
    
    documents = (
        document1,
        document2)
    

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

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

    from sklearn.feature_extraction.text import TfidfVectorizer
    tfidf_vectorizer = TfidfVectorizer()
    tfidf_matrix = tfidf_vectorizer.fit_transform(documents)
    

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

    from sklearn.metrics.pairwise import cosine_similarity
    cosine_similarity(tfidf_matrix[0], tfidf_matrix[1])
    

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

    在这种情况下,您可以看到余弦相似度不受文档长度的影响,并且捕获了原始文档中术语的相对分布相同的事实!如果您想将此信息表示为文档之间的“距离”,那么您可以简单地这样做:

    1 - cosine_similarity(tfidf_matrix[0], tfidf_matrix[1])
    

    当文档相似(不管它们的长度)时,该值将趋于 0,当它们不相似时,该值将趋于 1。

    【讨论】:

    • 当我们想使用 TFIDF 向量作为文本分类的特征时呢?正如 OP 所说,文档长度会对这些值产生影响……但这对分类有影响吗?
    • 您好,我有一个疑问。我有两个不同形状的向量(在执行 tfidf 转换之后)。现在,当我在这些向量上尝试 cosine_similarity 时,它给了我一个错误,说维度不兼容。有没有办法克服这种情况?
    • @akshitbhatia 你得到了不同的形状向量,因为向量中的每个元素都对应一个术语。您应该只包含所有文档中出现的术语,或者将所有其他文档中的术语设置为零。
    猜你喜欢
    • 2010-12-31
    • 2017-03-31
    • 2015-05-07
    • 2020-09-27
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2012-11-20
    相关资源
    最近更新 更多