我必须实现一个模块,其中我需要将具有相似含义的句子(字符串)分组到不同的集群中。我读到了k-means,EM聚类等等。但是我面临的问题是这些算法是用图上的矢量点来解释的。我没有得到如何为具有相似含义的句子(String)实现这些算法。请提出一些适当的方法。
例如, 让我们考虑一个教室场景.. 1)老师有充足的知识。 2)学生了解老师的教导。 3)老师有时在课堂上准时。 4)老师在课堂上听得见。
假设我们有这4个句子。然后看着它们我们可以说句子1和2具有相似的含义。但是第3和第4句既不相互关联也不相关。通过这种方式,我需要对句子进行分类。那怎么办呢?
答案 0 :(得分:2)
首先,您应该熟悉bag of words
概念。
基本思路是将句子中的每个单词映射到出现的次数,例如,句子hello world
,hello tanay
将被映射到
Hello World Tanay
1 1 0
1 0 1
这允许您使用标准方法之一。
另外值得看看TF/DF
它是否重新加权bag of words
表示中的单词,以及它们区分文档(或你的句子中的句子)的重要性
其次,你应该看看专门用于将词语聚类到概念的LDA。然而,它是由观点概念构成的。
对我来说最有希望听起来像这些方法的组合。生成bags of words
,使用bag of words
重新评估TF/DF
,运行LDA
并使用bag of words
概念扩充重新评估的LDA
,然后使用标准聚类算法。
答案 1 :(得分:2)
群集无法执行此操作。
因为它在数据中查找结构,但是您希望通过使用统计信息难以捕获的含义的抽象人类概念进行聚类...
因此,您首先需要解决使计算机理解语言的可靠任务。而不是基于“最佳匹配”,但足以量化相似性。
在这个方向上有一些尝试,通常涉及海量数据和深度学习。他们可以在一些玩具例子上做到这一点,比如“巴黎 - 法国+美国=?” - 有时候。 Google for IBM Watson和Google word2vec。
祝你好运。您将需要高性能GPU和Exabytes培训数据。