【发布时间】:2018-05-28 20:18:22
【问题描述】:
我正在尝试用 Python 开发一个程序,该程序可以处理原始聊天数据并聚类具有相似意图的句子,以便将它们用作构建新聊天机器人的训练示例。目标是使其尽可能快速和自动化(即无需手动输入参数)。
1- 对于特征提取,我对每个句子进行标记、词干化并使用 Sklearn 的 TfidfVectorizer 对其进行矢量化。
2- 然后我使用 Sklearn 的 DBSCAN 对这些句子向量进行聚类。我选择了这种聚类算法,因为它不需要用户指定所需的聚类数量(如 k-means 中的 k 参数)。它丢弃了很多句子(将它们视为异常值),但至少它的聚类是同质的。
整体算法适用于相对较小的数据集(10000 句)并生成有意义的集群,但存在一些问题:
在大型数据集(例如 800000 个句子)上,DBSCAN 会失败,因为它需要太多内存,即使在云中强大的机器上进行并行处理也是如此。我需要一种计算量较小的方法,但我找不到另一种不会产生怪异和异质句子簇的算法。还有哪些其他选择?什么算法可以处理大量高维数据?
DBSCAN 生成的集群是具有相似措辞的句子(由于我的特征提取方法),但目标词并不总是代表意图。如何改进特征提取,以便更好地捕捉句子的意图?我尝试了 Doc2vec,但它似乎不适用于由句子大小的文档组成的小型数据集...
【问题讨论】:
标签: scikit-learn nlp cluster-analysis feature-extraction dbscan