【发布时间】:2012-04-22 14:43:38
【问题描述】:
我的主题是(一堆)文本的相似性和聚类。简而言之:我想将收集的文本聚集在一起,它们应该出现在最后有意义的集群中。为此,我到目前为止的方法如下,我的问题在于集群。目前的软件是用php编写的。
1) 相似性: 我将每个文档视为“词袋”并将词转换为向量。我用
- 过滤(仅“真实”字词)
- 标记化(将句子拆分为单词)
- 词干(将词简化为其基本形式;Porter 的词干分析器)
- 剪枝(剪切频率过高和过低的词)
作为降维的方法。之后,我使用余弦相似度(如网络上各个站点上的建议/描述and here。
那么结果就是这样一个相似度矩阵:
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
它(不知何故)奏效了,但一点也不好,结果往往是怪物群。 所以,我想重做这个,并且已经研究了各种聚类算法,但我仍然不确定哪一个效果最好。我觉得应该是凝聚算法,因为每一对文本一开始都可以看成一个簇。但问题仍然是停止标准是什么,以及算法是否应该将现有集群划分和/或合并在一起。
对不起,如果有些东西看起来很基础,但我在这个领域相对较新。感谢您的帮助。
【问题讨论】:
-
你有没有得到任何好的答案?我什至不清楚集群应该在多少维度上工作......
标签: matrix machine-learning cluster-analysis distance similarity