文本语料库聚类

时间:2018-11-18 06:39:48

标签: machine-learning nlp cluster-analysis

我有27000个自由文本元素,每个元素约2-3个句子。我需要通过相似性将它们聚类。到目前为止,我取得的成功非常有限。我尝试了以下方法:

我使用Python Natural Language Toolkit删除了停用词,对其进行词形化和标记化,然后在将句子中的每个词插入Neo4j图形数据库之前为其生成了语义相似的词。然后,我尝试使用每个单词和相关单词的TF计数进行查询。效果不是很好,只能导致能够轻松计算两个文本项之间的相似度。

然后,我查看了Graphawares NLP library,以注释,丰富和计算每个文本项之间的余弦相似度。处理相似性4天后,我检查了日志,发现处理需要1.5年。显然,该插件的社区版本未得到优化,因此我认为它不适用于这种数据量。

然后,我编写了一个自定义实现,该实现采用与Graphaware插件相同的方法,但是形式要简单得多。我使用scikitlearn's TfidfVectorizer计算每个文本项与每个其他文本项之间的余弦相似度,并将其保存为Neo4j节点之间的关系。但是,使用27000个文本项可创建27000 * 27000 = 729000000关系!目的是使图进入Grephi,选择相似度超过X阈值的关系,并使用模块化聚类来提取聚类。处理时间约为4天,效果更好。处理不完整,当前正在运行。但是,我相信Grephi的最大边缘计数为1M,所以我希望这会限制我的操作。

因此,我转向了使用scikitlearn的KMeans,DBSCAN和MeanShift算法的更常规的ML技术。我正在聚类,但是当将其绘制在散点图上时没有分隔(如果有帮助,我可以显示代码)。这是使用DBSCAN的结果:

enter image description here

我用KMeans得到类似的结果。这些算法可以在几秒钟内运行,这显然使生活更轻松,但结果似乎很糟糕。

所以我的问题是:

  • 有更好的方法吗?
  • 我可以期望在自由文本中找到完全不同的集群吗?
  • 下一步我应该做什么?

非常感谢您。

1 个答案:

答案 0 :(得分:0)

我认为您的问题过于笼统,不足以解决Stack Overflow问题,但是给您一些提示...

  1. 您的数据是什么?您将详细讨论方法,而不是数据。您期望什么样的集群?

示例有用的描述:

  

我有很多简短的产品评论。我希望能够分开评价鞋子,帽子和冰箱。

  1. 您是否尝试过主题建模?这并不花哨,但它是将文本文档分类为群集的传统方法。如果您不熟悉,请从LDA开始。

  2. 您要查找重复项吗?如果您要查找抄袭或自动生成的垃圾邮件,请查看MinHash,SimHash和Python的FuzzyWuzzy库。

相关问题