我尝试了不同的方法来处理 句子相似度 ,即:
en_core_web_md
和 en_core_web_lg
.sentence-similarity
和 sentence-transformers
, 我试过 distilbert-base-uncased
等模型, bert-base-uncased
或 sentence-transformers/all-mpnet-base-v2
.spacy-universal-sentence-encoder
, 同款 en_use_md
和 en_use_cmlm_lg
.然而,虽然这些模型通常正确地检测等效句子的相似性,但在输入否定句时它们都失败了。例如,这些 相反的句子 :
返回 0.931 的相似度 与模型
en_use_md
.但是,可以考虑的句子非常相似 :
返回 较小的相似度:0.914 .
我的问题是 : 有没有办法解决?在计算相似度时,是否有其他模型/方法考虑了句子的肯定/否定性质?
最佳答案
处理否定是 NLP 中的难题之一。
许多相似性方法将通过平均一个句子中的单词向量来工作,在这种情况下,一个句子是另一个句子加上单词“not”的向量,这不会有很大不同。对立面通常也经常一起讨论,因此在这个意义上它们是“相似的”,这就是 NLP 中通常使用“相似”一词的方式。
有一些方法可以解决这个问题,通常用于情感分析,但它们通常不会“正常工作”。如果你能缩小你期望看到的否定类型,你可能会取得更大的成功。 negspaCy是一个非官方的 spaCy 组件,可以帮助检测命名实体的否定,例如,这在医学文本中通常很有用(“没有癌症”)。但是你必须弄清楚如何处理这些信息,这对相似性分数没有帮助。
使用训练有素的模型来分类 ,您可能会很幸运。蕴涵 - 对某个陈述是否暗示、矛盾或与另一个陈述无关进行分类。
关于python - 句子相似性模型不捕获相反的句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69374258/