将单词聚类成组

时间:2012-12-07 18:53:53

标签: cluster-analysis k-means text-analysis

这是一个家庭作业问题。我有一个充满文字的巨大文件。我的挑战是将这些单词分类为充分代表单词的不同组/群。我处理它的策略是使用K-Means算法,如您所知,采用以下步骤。

  1. 为整个组生成k随机方法
  2. 通过将每个单词与最近的平均值
  3. 相关联来创建K个群集
  4. 计算每个群集的质心,这将成为新的意思
  5. 重复步骤2和步骤3,直到达到某个基准/收敛。
  6. 理论上,我有点得到它,但并不完全。我想在每一步,我都有与之相对应的问题,这些是:

    1. 我如何决定k随机方法,技术上我可以说5,但这可能不一定是一个好的随机数。那么这个k纯粹是一个随机数,还是实际上是由启发式驱动的,例如数据集的大小,所涉及的单词数等等。

    2. 如何将每个单词与最近的平均值相关联?从理论上讲,我可以得出结论,每个单词的距离与最近的均值相关联,因此,如果有3个均值,任何属于特定聚类的单词都取决于它具有最短距离的平均值。但是,这实际上是如何计算的?在两个单词“group”,“textword”和假设一个平均单词“pencil”之间,如何创建相似度矩阵。

    3. 如何计算质心?

    4. 当您重复步骤2和步骤3时,您假设每个先前的群集都是新数据集吗?

    5. 很多问题,我显然不清楚。如果有任何我可以阅读的资源,那就太好了。维基百科还不够:(

3 个答案:

答案 0 :(得分:11)

由于您不知道确切的群集数量 - 我建议您使用一种层次聚类

  1. 想象一下,所有的单词都只是非欧几里德空间中的一个点。使用 Levenshtein distance 来计算单词之间的距离(如果您希望检测字典相似单词的集群,则效果很好)
  2. 构建 minimum spanning tree ,其中包含您的所有单词
  3. 删除链接,其长度大于某些阈值
  4. 关联字词的字词是类似字词的集群
  5. 这是一个小例子:

    enter image description here

    P.S。你可以在网上找到很多论文,其中描述了基于最小生成树构建的聚类

    P.P.S。如果要检测语义相似字词的群集,则需要一些自动词库构造

    的算法

答案 1 :(得分:0)

你必须为k-means选择“k”是k-means的最大缺点之一。 但是,如果你在这里使用搜索功能,你会发现一些问题,这些问题涉及选择k的已知启发式方法。主要是通过多次比较运行算法的结果。

至于“最近”。 K-means实际上不使用距离。有些人认为它使用的是欧几里得,其他人说它是欧几里德的平方。从技术上讲,k-means感兴趣的是方差。它通过将每个对象分配给集群以使方差最小化来最小化整体方差。同样地,平方偏差的总和 - 一个对象对总方差的贡献 - 在所有维度上正好是欧氏距离平方的定义。由于平方根是单调的,你也可以使用欧氏距离。

无论如何,如果你想使用带有单词的k-means,你首先需要将这些单词表示为平方欧几里德距离有意义的向量。我认为这不容易,甚至不可能。

答案 2 :(得分:0)

关于距离:实际上,Levenshtein(或编辑)距离满足三角不等式。它还满足其他必要属性成为度量(并非所有距离函数都是度量函数)。因此,您可以使用此度量函数实现聚类算法,这是您可以用来计算相似度矩阵S的函数:

- > S_ {i,j} = d(x_i,x_j)= S_ {j,i} = d(x_j,x_i)

值得一提的是,Damerau-Levenshtein距离不满足三角不等式,所以要小心。

关于k-means算法:是的,在基本版本中,您必须手动定义K参数。对于给定的度量,算法的其余部分是相同的。