计算单词之间的相关系数?

时间:2012-10-16 15:15:36

标签: math statistics correlation text-analysis

对于文本分析程序,我想分析文本中某些单词的共现。例如,我想看到,例如“巴拉克”和“奥巴马”这两个词比其他词更常出现(即具有正相关性)。

这似乎并不那么困难。但是,说实话,我只知道如何计算两个数字之间的相关性,而不是文本中两个单词之间的相关性。

  1. 我怎样才能最好地解决这个问题?
  2. 如何计算单词之间的相关性?
  3. 我想过使用条件概率,例如巴拉克奥巴马比奥巴马巴拉克更有可能;然而,我试图解决的问题更为根本,并不依赖于单词的排序

4 个答案:

答案 0 :(得分:3)

Ngram Statistics Package (NSP)正致力于此任务。他们有一个paper online来描述他们使用的关联度量。我自己没有使用过这个包,所以我不能评论它的可靠性/要求。

答案 1 :(得分:1)

解决问题的简单方法是将数据整形为2x2矩阵

            obama | not obama
barack      A       B
not barack  C       D

并对矩阵中所有出现的二元组进行评分。这样你可以使用简单的chi平方。

答案 2 :(得分:1)

我不知道这是如何做到的,但我可以想出一种粗略的方法来定义捕获单词邻接的相关概念。

假设文本的长度为N,说它是一个数组

text[0], text[1], ..., text[N-1]

假设文本中出现以下单词

word[0], word[1], ..., word[k]

对于每个单词[i],定义长度为N-1

的向量
X[i] = array(); // of  length N-1

如下:如果该字是第i个字或第(i + 1)个字,则向量的第i个条目为1,否则为0。

// compute the vector X[i]
for (j = 0:N-2){
  if (text[j] == word[i] OR text[j+1] == word[i])
    X[i][j] = 1;
  else
    X[i][j] = 0;
}

然后你可以计算单词[a]和单词[b]之间的相关系数作为X [a]和X [b]之间的点积(注意点积是这些单词相邻的次数)除以长度(长度是单词出现次数的平方根,也就是两倍)。称此数量为COR(X [a],X [b])。显然COR(X [a],X [a])= 1,如果单词[a],单词[b]经常相邻,则COR(X [a],X [b])更大。

这可以从“邻近”概括为近似的其他概念 - 例如我们可以选择使用3个字(或4,5等)块。人们还可以添加重量,如果需要,也可以做更多的事情。如果有任何有用的话,就必须进行实验,看看哪些是有用的。

答案 3 :(得分:0)

这个问题听起来像一个二元组,一个由两个“标记”组成的序列,在更大的文本体中。请参阅this Wikipedia entry,其中包含更常见的n-gram问题的其他链接。

如果您想进行全面分析,您很可能会接受任何给定的单词并进行频率分析。例如,“巴拉克奥巴马是总统的民主党候选人”这句话有8个字,所以有8个选择2 = 28个可能的对。

然后,您可以询问统计问题,例如“奥巴马跟随'巴拉克'有多少对,以及其他一些词(不是'奥巴马')跟随'巴拉克'有多少对?在这种情况下,那里有7对包括'Barack',但只有一对是与'奥巴马'配对。

对每个可能的单词对执行相同的操作(例如,“候选人有多少对”跟随'?'),并且您有一个比较基础。