根据tf-idf值计算相关性?

时间:2012-04-18 15:27:50

标签: correlation tf-idf pearson

基于tf-idf矩阵计算皮尔逊相关系数是否有意义,看看哪些术语与其他术语结合出现?它在数学上是否正确?

我的输出是一个相关矩阵,每个单元的每个单元格都有相关系数。

  • ------- term1 term2 term3
  • term2
  • term2
  • TERM2

1 个答案:

答案 0 :(得分:3)

这取决于您的定义'与其他术语组合使用'。为了澄清这一点:

当进行Pearson平均相关时,

idf无关紧要。同一项的所有tf值将乘以相同的idf值,产生最终的tf-idf。 PMC在输入缩放方面是不变的,因此这里取消了idf。因此,你提出的想法中最重要的是tf。如果你甚至不计算idf,你可以保存一些计算,但如果你这样做,它就不会受到太大伤害。

现在关于tf的用法。让我们举个例子来弄清楚你可能需要什么:

让我们说TermA Document1经常出现在Document2TermB。另一方面,Document1Document2 f_{i,j}出现i。你会说这两个词一起出现吗?它们出现在同一文档中,但频率不同。如果您使用tf-idf的PMC,那么结果将是,它们不会共同发生(因为频率的差异)。

此时您还应注意PMC的值从-1到1。即你可以得到共同出现的词(PMC = 1),这些词是独立的(PMC = 0),而这些词是相反的(PMC = -1)。这适合您正在建模的域吗?如果没有,只需将1添加到PMC。

另一种选择是使用余弦相似性,它与PMC非常相似但具有一些不同的特征。此外,在其他一些情况下,您可能只对实际共生感兴趣,而不关心频率。

所有这些方法都是正确的'所以说。更重要的问题是,哪种方法最适合您正在建模的问题。在许多情况下,这在理论上无法确定,只能通过尝试不同的替代方案并测试哪一个最适合您的问题域。

编辑(关于以下评论的一些评论)

余弦相似性确实有帮助,但在这种情况下你必须以不同的方式思考。您当然可以为文档中的术语生成术语频率向量,然后计算这些文档术语 - 频率向量的余弦相似度。你正确地指出,这会给你相互匹配的帖子。但这不是我的意思。如果您有完整的术语 - 频率矩阵,您还可以生成向量,这些向量用于描述该术语在每个文档中出现的频率。您还可以计算这些向量的余弦相似度。这将为您提供基于文档共现的术语相似性。

以这种方式思考(但首先我们需要一些符号):

j表示术语F=(f_{i,j})_{i=1...N,j=1...M}出现在文档|F|_c中的次数(注意我在这里忽略了idf,因为它只会在处理术语时取消,而不是文档)。另外,让F表示整个文档 - 术语矩阵(术语以列和文档的形式排在行中)。最后,我们将调用l^2矩阵|F|_r,其中每个列根据F范数和l^2矩阵A^T进行归一化,其中每行根据A进行归一化到(|F|_r)*(|F|_r)^T 标准。当然,通常MxM表示(|F|_c)^T*(|F|_c) 的转置。在这种情况下,您可以根据术语

在所有文档之间保持正常的余弦距离
NxN

这将为您提供一个termA矩阵,用于描述文档的相似性。

如果您想要计算术语相似度,则只需计算

termB

它会为您提供一个p(termB | termA)矩阵,用于根据文档中的共同出现描述术语相似性。

请注意,PMC的计算基本上是相同的,只是在每个矩阵乘法中应用于行和列的归一化类型不同。

现在,对于您的其他帖子,您说您希望了解文档中出现p(termX)的可能性,termX也出现在同一文档中。或者说1. Count the number of documents in which `termA` appears (call it num_termA) 2. Count the number of documents in which both `termA` and `termB` appear (call it num_termA_termB) then p(termB | termA)=num_termA_termB/num_termA ,其中p(termB | termA ) == p(termA | termB)表示{{1}}出现在文档中的概率。这是一个完全不同的野兽,但再次计算起来非常简单:

{{1}}

这是共同发生可能性的实际统计测量。但是请注意,很可能关系{{1}}不会成立,所以这种共生的度量根本不可用于通过MDS进行聚类,这很可能(没有双关语)。

我的建议是尝试PMC和余弦相似性(正如你在上面看到的那样,它们只在规范化方面有所不同,因此它们应该快速实现两者),然后在聚类后检查哪一个看起来更好。

有一些基于一组文档聚类主题的更高级技术。还经常使用术语文档矩阵的主成分分析(PCA)或非负矩阵因子分解(有关更多信息,请参阅潜在语义分析或LSA)。但是,对于您的用例而言,这可能有点过分,而且这些技术要难得多。 PMC和余弦相似性具有实现简单易行的绝对好处(余弦相似性稍微简单,因为规范化更容易),因此很难出错。