如何使用聚类将具有相似意图的句子分组?

How to use clustering to group sentences with similar intents?

我正在尝试在 Python 中开发一个程序,该程序可以处理原始聊天数据并聚类具有相似意图的句子,以便将它们用作训练示例来构建新的聊天机器人。目标是使其尽可能快速和自动化(即无需手动输入参数)。

1- 对于特征提取,我对每个句子进行标记,提取其单词并使用 Sklearn 的 TfidfVectorizer 对其进行矢量化。

2- 然后我用 Sklearn 的 DBSCAN 对这些句子向量进行聚类。我选择这种聚类算法是因为它不需要用户指定所需的聚类数量(如 k-means 中的 k 参数)。它丢弃了很多句子(将它们视为异常值),但至少它的聚类是同质的。

整体算法适用于相对较小的数据集(10000 个句子)并生成有意义的聚类,但存在一些问题:

DBSCAN 的标准实现应该只需要 O(n) 内存。您不能低于此内存要求。但我在某处读到 sklearn 的 DBSCAN 实际上使用 O(n²) 内存,所以它不是最佳实现。您可能需要自己实现它,以使用更少的内存。

不要指望这些方法能够聚类"by intent"。无监督算法无法推断出意图。最有可能的是,集群将仅基于几个关键词。但这可能是人们说 "hi" 还是 "hello"。从无监督的角度来看,这种区别给出了两个很好的集群(和一些噪音,也许还有另一个集群 "hola")。

我建议根据您标记 "intent".

的子集训练 监督 特征提取