如何组合彼此相似的文本问题?

问题描述 投票:-2回答:1

我有一个200k问题的数据集,我想通过相似性/重复将它们组合在一起。

我如何使用NLP /机器学习将这些问题按类似意图分组?

给出问题和问题清单,我如何找到相似或重复的问题?

有没有可以做到这一点的服务?

machine-learning nlp word2vec
1个回答
1
投票

通常,您希望将问题转换为抽象的数字格式(例如单个高维向量,或“词袋/向量”),然后可以从中计算问题之间的数字成对相似性。

例如:您可以将每个问题转换为单个单词的单词向量的简单平均值。 (这些单词向量可能来自您自己的训练语料库,完全匹配问题的使用领域,或者来自其他足够好的外部来源。)

如果单词向量是300维的,则将问题的所有单词 - 向量平均在一起,然后为您提供问题的300维向量。然后,您可以使用矢量相似性的典型度量,例如“余弦相似度”,从每对问题得到-1.0到1.0的数字,较大的值表示“更相似”。

这种简单的方法通常是一个很好的基线。更聪明地放弃一些单词,或通过观察到的重要性(例如通过“TF / IDF”加权)加权单词可以改善它。

但是还有其他方法可以获得可能比简单平均值更好的摘要向量。一种相对简单的算法,大致类似于创建单词向量的方式,称为“段落向量”,有时在流行的库(如Python gensim)“Doc2Vec”中调用。它不是一个简单的单词向量平均值,就像为全文创建一个合成的类似单词的标记一样,然后训练它在预测文本的单词时尽可能好。再次,一旦你有一个(例如)300维文本向量,计算余弦相似性可以排列问题的相似性。

还有一个名为“Word Mover的距离”的有趣算法,它将文本留作每个组成单词矢量的可变大小的包,就好像每个单词向量都是一堆意义。然后,它计算将桩从一个文本的堆形状移动到另一个文本的“努力” - 并且较少的努力似乎与人类的文本相似感很好地相关。 (然而,找到这些最小位移比简单的余弦相似性计算成本更高 - 因此这对于短文本或小型语料库,或者当您可以大规模并行化计算时效果最佳。)

一旦你有任何这些数字相似性测量工作,你也可以聚类算法来找到高度相关的问题组 - 通常一旦你有这些组,这些组中最常见的单词(而不是其他组),或人类编辑工作,可以命名组。

© www.soinside.com 2019 - 2024. All rights reserved.