基于tf-idf矩阵计算皮尔逊相关系数是否有意义,看看哪些术语与其他术语结合出现?它在数学上是否正确?
我的输出是一个相关矩阵,每个单元的每个单元格都有相关系数。
答案 0 :(得分:3)
这取决于您的定义'与其他术语组合使用'。为了澄清这一点:
当进行Pearson平均相关时,idf无关紧要。同一项的所有tf值将乘以相同的idf值,产生最终的tf-idf。 PMC在输入缩放方面是不变的,因此这里取消了idf。因此,你提出的想法中最重要的是tf。如果你甚至不计算idf,你可以保存一些计算,但如果你这样做,它就不会受到太大伤害。
现在关于tf的用法。让我们举个例子来弄清楚你可能需要什么:
让我们说TermA
Document1
经常出现在Document2
,TermB
。另一方面,Document1
会Document2
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和余弦相似性具有实现简单易行的绝对好处(余弦相似性稍微简单,因为规范化更容易),因此很难出错。