句子相似度模型未捕获相反的句子

问题描述 投票:0回答:3

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

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

  • “我喜欢下雨天,因为它们让我感到放松。”
  • “我不喜欢下雨天,因为它们不会让我感到放松。”

返回与模型en_use_md

相似度0.931

但是,可以考虑的句子非常相似

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

返回较小的相似度:0.914

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

python nlp spacy huggingface-transformers sentence-similarity
3个回答
5
投票

你的问题很中肯,我相信这个想法在某个时候已经出现在每个人的脑海中。

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

两个句子之间的实际逻辑连接可以通过

RTE
任务(识别文本蕴涵)来确定。

多流派自然语言推理(MultiNLI):https://cims.nyu.edu/~sbowman/multinli/,是专门针对 TE(自然语言上下文中的文本蕴涵)任务构建的数据集推理)。本质上有3个标签(矛盾、中立和蕴含)。

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

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

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

HuggingFace 也有一些针对 MNLI 的预构建模型。您可以检查

distilbert-base-uncased-mnli
roberta-large-mnli
等模型,它们是专门针对此任务进行微调的,并将上述模型视为您任务的起点。


3
投票

处理否定是 NLP 中的难题之一。

许多相似性方法的工作原理是对句子中单词的向量进行平均,在这种情况下,一个句子是另一个句子加上单词“not”的向量,这不会有很大不同。对立面通常也经常一起讨论,因此它们在这个意义上是“相似的”,这就是 NLP 中通常使用“相似”一词的方式。

有很多方法可以解决这个问题,通常用于情感分析,但它们通常并不“有效”。如果你能缩小你期望看到的否定类型,你可能会取得更大的成功。 negspaCy 是一个非官方的 spaCy 组件,可以帮助检测命名实体的否定,例如,这在医学文本中通常很有用(“没有癌症”)。但你必须弄清楚如何处理这些信息,这对相似度分数没有帮助。

您可能会运气好,使用训练有素的模型来分类蕴涵——对某个陈述是否暗示、矛盾或与另一个陈述无关进行分类。


0
投票

我也遇到过类似的问题。你能想出一些解决办法吗?

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