文本聚类算法


17

我有一个问题,就是将大量句子按其含义分组。当您有很多句子并想按其含义对它们进行分组时,这类似于一个问题。

建议使用什么算法来做到这一点?我不知道簇的数量(随着更多数据的到来,簇也可以改变),通常用什么特征来表示每个句子?

我现在正在尝试使用最简单的功能,将单词列表和句子之间的距离定义为:

在此处输入图片说明

(A和B是句子A和B中的相应单词集)

真的有道理吗?

我正在尝试将scikit库中的Mean-Shift算法应用于此距离,因为它不需要预先提供多个簇。

如果有人会建议解决问题的更好方法/方法,将不胜感激,因为我还是这个话题的新手。

Answers:


13

检查Stanford NLP Group的开源软件(http://www-nlp.stanford.edu/software),尤其是Stanford Classifierhttp://www-nlp.stanford.edu/software/classifier.shtml) 。该软件以编写Java,可能会令您满意,但也具有某些其他语言的绑定。请注意,许可 -如果您打算在商业产品中使用其代码,则必须获得商业许可。

另一套有趣的开源库,即IMHO,适合该任务以及更多其他功能,是用于机器学习GraphLab的并行框架http://select.cs.cmu.edu/code/graphlab),其中包括集群库,实现了各种集群算法(http://select.cs.cmu.edu/code/graphlab/clustering.html)。它实现了模型,因此特别适用于海量数据(如您所拥有的数据MapReduce,因此支持多核多处理器 并行处理

您最有可能了解以下内容,但是为了以防万一,我会提到它。自然语言工具包(NLTK)Pythonhttp://www.nltk.org)包含聚类/分类/分类文本模块。检查中的有关章节NLTK Bookhttp://www.nltk.org/book/ch06.html

更新:

说到算法,您似乎已经尝试了大部分算法scikit-learn例如本主题提取示例中所示的示例:http : //scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf.html。但是,您可能会发现有用的其他库,这些库实现了多种聚类算法,包括非负矩阵分解(NMF)。这样的库之一是Python矩阵分解(PyMF),其主页位于https://code.google.com/p/pymf,源代码位于https://github.com/nils-werner/pymf。另一个甚至更有趣的库(也是基于Python的)是NIMFA,它实现了各种NMF算法http//nimfa.biolab.si。这是一篇研究论文,描述了NIMFAhttp : //jmlr.org/papers/volume13/zitnik12a/zitnik12a.pdf。这是其文档中的一个示例,该示例为主题聚类的非常相似的文本处理问题提供了解决方案:http : //nimfa.biolab.si/nimfa.examples.documents.html


1
非常感谢您提供如此详尽的回复。我将审阅您的所有建议,并尝试大量工作!我还发现,在无监督的文本数据聚类中,胡萝卜2工具确实做得很好。发布链接,以供将来参考http://project.carrot2.org/
Maxim Galushka,2014年

@MaximGalushka:非常欢迎!我很想知道您的发现以及您最终将取得的进展。随时在这里发布或直接与我联系。
Aleksandr Blekh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.