句子相似度模型不能捕捉相反的句子

问题描述

我尝试了不同的方法来句子相似度,即:

  • 空间模型:en_core_web_mden_core_web_lg

  • 变形金刚:使用包sentence-similaritysentence-transformers,我尝试了distilbert-base-uncasedbert-base-uncasedsentence-transformers/all-mpnet-base-v2等模型。

  • 通用语句编码:使用包spacy-universal-sentence-encoder,模型en_use_mden_use_cmlm_lg

然而,虽然这些模型通常正确地检测到等值句子的相似性,但它们在输入否定句子时都失败了。例如,这些相反的句子:

  • 我喜欢雨天,因为它让我感到放松。&
  • 我不喜欢下雨天,因为它不会让我感到放松。&q;

返回与模型的相似度en_use_md

然而,可以被认为非常相似的句子非常相似:

  • 我喜欢雨天,因为它让我感到放松。&
  • 我喜欢雨天,因为它们让我感到平静。&

返回较小的相似度:0.914。

我的问题是:有什么办法可以解决这个问题吗?有没有其他模型/方法在计算相似度时考虑到句子的肯定/否定性质?


解决方案

您的问题很中肯,我相信每个人在某个时候都想过这个问题。

如果您想评估两个句子之间的逻辑联系,在一些预先确定的嵌入上使用余弦相似度或欧几里德距离是不够的。

两个句子之间的实际逻辑联系可以通过RTE任务(识别文本蕴涵)来确定。

多体裁自然语言推理(MultiGenre Natural Language Inference,MultiNLI):是一个专门针对TE(自然语言推理上下文中的文本蕴涵)任务而构建的数据集。本质上有三个标签(矛盾、中立和蕴涵)。

在宾夕法尼亚大道的另一端,人们开始排队等候 白宫之旅。

人们在宾夕法尼亚大道尽头排起了长队。

在这种情况下,这两个句子之间存在蕴涵。

HuggingFace也有一些为MNLI预先构建的模型。您可以检查distilbert-base-uncased-mnliroberta-large-mnli等专门针对此任务进行微调的模型,并将上述模型视为任务的起点。

相关文章