计算一组句子的相似度得分

时间:2019-01-25 23:14:08

标签: machine-learning nlp word2vec doc2vec sentence-similarity

我的团队进行了很多聊天机器人培训,我正在尝试提出一些工具来提高我们的工作质量。在聊天机器人培训中,以多种不同的方式表达意图相同的意图的意图进行训练非常重要。理想情况下,集合中话语的语法几乎没有相似性。

以下是一个有意询问医疗保险范围的示例

话语集

  • 我的女儿有保险吗?
  • 我的儿子有医疗保险吗?
  • 我的儿子可以享受保险吗?

体面的讲话集

  • 如何查询我们是否为整个家庭提供保险?

  • 寻求医疗资格的详细信息

  • 是否有文件详细说明谁受我们的医疗保险政策保护?

我希望能够接受与意图相关的所有话语,并分析它们的相似性。我希望我的不良话语集具有较高的相似度得分,而我的一系列体面话语集具有较低的相似度得分。

我尝试过玩一些doc2vec教程,但是我感觉缺少一些东西。我一直看到这样的东西:

  • 训练一组数据,然后测量新句子与该组数据的相似性
  • 测量两个句子之间的相似度

我需要有一系列的句子,并了解它们之间的相似程度。

对实现这一目标有何建议?

回答一些问题:

  1. 是什么使坏话变得不好呢?话本身并不坏,这是它们之间缺乏多样性。如果大多数培训都像“糟糕”的设置,那么将不会正确地识别出种类繁多的真实用户话语。
  2. 您是否要发现新的意图?不,这是针对预发布培训的,旨在提高其有效性。
  3. 为什么不良话语的相似度得分高而体面的话语的相似度得分低?这是一个假设。我知道真实的用户话语是多种多样的,而且我发现我的培训师在进行培训,以相同的方式询问问题以及看不到良好的准确性结果时会陷入困境。改善话语的多样性往往会提高准确性。
  4. 我将如何处理此信息?我将使用它来评估意图培训的质量,以确定是否可能需要更多的培训。将来,随着语音的添加,我们可能会构建实时工具,以让培训师知道他们是否过于重复。

1 个答案:

答案 0 :(得分:0)

文本向量的大多数应用都受益于向量捕获文本的“基本含义”,而无需考虑词选择中的差异。

如果两个具有相似含义的完全不同的措词具有几乎相同的向量,则它被认为是一个功能,而不是缺陷。 (或者,如果某些相似性度量表明它们完全相似。)

例如,要构想一个类似于您的示例,请考虑以下两个措辞:

“兄弟的健康保险” “男性同胞医疗保险”

没有重复使用单词,但是可能的预期含义是相同的-因此,针对典型目的的良好文本向量化将创建非常相似的向量。使用这些向量或以其他方式使用词/词向量作为输入的相似性度量将表明非常高的相似性。

但是从您的澄清答案来看,您似乎实际上需要一个更肤浅的“相似性”度量。您想要一种可以揭示某些措辞何时在措辞上显示出多样性/差异的度量。 (特别是,您已经从其他因素(例如它们的手工方式)中知道,这些短语的组在语义上是相关的。)

您希望这种相似性度量显示的实际上是一种行为,许多使用文本向量的项目会认为这些向量是失败的。因此,诸如Word2Vec,段落向量(又称为“ Doc2Vec”)之类的语义方法可能是实现目标的错误工具。

仅基于文字或字符n-gram的简单度量可能会做得很好。

例如,对于两个文本A和B,您可以计算共享词的数量(同时出现在A和B中),然后除以A和B中唯一词的总数,得出0.0到1.0“单词选择相似度”数字。

并且,当针对一组先前的文本考虑一个新文本时,如果它与先前的文本的平均相似度很低,则对于您的目的而言将是“良好”的。

您不仅可以使用单词,还可以使用文本的所有n个字符子字符串(“ n-grams”),这可能有助于更好地突出显示单词形式或常见错别字之间的差异,这也可能对你的目的。

通常,我将通过scikit-learn文本向量化功能来获取想法:

https://scikit-learn.org/stable/modules/feature_extraction.html#text-feature-extraction