2

我正在做一个项目,我需要根据它们的相似程度对句子进行分组。

例如,这些句子需要分组到一个集群中:

  1. 苹果第一季度的巨额收益仍然低于华尔街
  2. Apple 公布 2013 年第一季度收益:创纪录的 545 亿美元收入。
  3. 苹果公布了创纪录的收入和利润;iPhone 销量跃升近 30%。

标题不断出现,所以我可能需要即时安排和修改集群。目前我正在使用 Monge-Elkan 算法来识别两个字符串的相似程度,但我不知道如何对它们进行聚类。

在互联网上搜索让我相信我需要使用 K-Means 算法对内容进行分组,但我不知道如何继续我拥有的内容。

让事情变得稍微复杂的是我将它托管在 Google App Engine 上,所以我不能使用文件系统。

4

2 回答 2

3

编辑距离度量不太可能有效地模拟句子含义的相似性,我假设你在追求。将文本低级表示为字符串也是如此。

更好的方法是使用更高级别的表示,例如向量空间模型。在这里,您收集句子集合(语料库)中的所有唯一单词,并将它们中的每一个映射到一个数字。然后将每个文档(句子)表示为一个向量:

[w1_count, w2_count, ..., wN_count]

其中第 N 个元素是给定句子中第 N 个单词(映射到数字 N 的单词)的计数。

现在你可以在这个数据集上运行 k-means,但更好:

  1. 处理数据,使“Apple”等重要词的权重高于“on”或“in”等常用词。一种这样的技术是TF-IDF。然后用欧几里得距离在这个上面运行标准k-means。

  2. 更好的是,使用更高级别的工具,例如潜在语义分析潜在狄利克雷分配

如果您想使用现有方法,Simon G. 的回答为您指明了正确的方向,并且在此问题中回答了与距离覆盖的相似性。

于 2013-01-24T13:59:16.853 回答
2

首先,将您的相似之处变为不同之处,以便将它们视为距离

其次,使用多维缩放库将距离更改为空间中的点。

第三,对空间中的点使用常规 k-means。

于 2013-01-24T04:41:04.113 回答