6

我的主题是(一堆)文本的相似性和聚类。简而言之:我想将收集的文本聚集在一起,它们应该出现在最后有意义的集群中。为此,我到目前为止的方法如下,我的问题在于集群。目前的软件是用php编写的。

1) 相似性:我将每个文档视为“词袋”并将词转换为向量。我用

  • 过滤(仅“真实”单词)
  • 标记化(将句子分成单词)
  • 词干提取(将单词简化为基本形式;波特词干分析器)
  • 修剪(剪切频率过高和过低的单词)

作为降维的方法。之后,我使用余弦相似度(如网络上各种网站和此处所建议/描述的那样) 。

结果是这样的相似矩阵:

        A   B   C   D   E 
    A   0  30  51  75  80
    B   X   0  21  55  70
    C   X   X   0  25  10
    D   X   X   X   0  15
    E   X   X   X   X   0

A…E 是我的文本,数字是百分比相似度;越高,文本越相似。因为 sim(A,B) == sim(B,A) 只填充了一半的矩阵。所以文本 A 与文本 D 的相似度为 71%。

我现在想从这个矩阵中生成一个先验未知(!)个簇。集群应该一起代表相似的项目(直到某个停止标准)。

我自己尝试了一个基本的实现,基本上是这样的(60%作为固定相似度阈值)

    foreach article
      get similar entries where sim > 60
              foreach similar entry
              check if one of the entries already has a cluster number
              if no: assign new cluster number to all similar entries
              if yes: use that number

它起作用了(不知何故),但一点都不好,结果往往是怪物群。所以,我想重做这个,并且已经研究了各种聚类算法,但我仍然不确定哪一个效果最好。我觉得应该是凝聚算法,因为每一对文本一开始都可以看成一个簇。但问题仍然是停止标准是什么,以及算法是否应该将现有集群划分和/或合并在一起。

对不起,如果有些东西看起来很基础,但我在这个领域相对较新。谢谢您的帮助。

4

3 回答 3

2

由于你们都是该领域的新手,拥有未知数量的集群并且已经在使用余弦距离,我建议使用FLAME聚类算法。

它直观、易于实现,并且有多种语言的实现(虽然不是 PHP,主要是因为很少有人将 PHP 用于数据科学)。

更不用说,它实际上足以被大量人用于研究。如果不出意外,您可以了解在转移到另一个聚类算法时要解决的聚类算法的确切缺点。

于 2013-10-30T19:06:37.917 回答
1

试试看吧。那里有很多聚类算法,没有人会知道所有这些。此外,它还很大程度上取决于您的数据集和那里的聚类结构。最后,就余弦距离和 BofW 特征而言,也可能只有这一个怪物集群。

于 2012-04-10T16:28:07.680 回答
1

也许您可以将相似矩阵转换为相异矩阵,例如将 x 转换为 1/x,那么您的问题是对相异矩阵进行聚类。我认为分层集群可能会起作用。这些可能会对您有所帮助:层次聚类聚类相异矩阵

于 2013-12-29T06:40:43.223 回答