使用预训练的 BERT 模型进行语义搜索,给出具有高度相似性的不相关结果

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

我正在尝试创建一个语义搜索系统,并尝试了 SentenceTransformers 库中的多个预训练模型:LaBSE、MS-MARCO 等。该系统在首先以高概率返回相关文档方面运行良好,但问题是不存在的文档相关的概率也相对较高。因此,确定什么是相关的、什么是不相关的截止阈值变得很困难。

为了计算向量相似度,我尝试了 Elasticsearch 近似 KNN 和 FAISS,两者结果相似。还检查了与 Scikit-learn 的精确余弦相似性。

我的语料库一般有15-30个单词的句子,输入句子是< 10 words long. Example is given below

语料库文本1:是一家时装屋。我们设计、制造和零售男士和女士服装 输入句子1:男士时尚 余弦相似度1:0.21

语料库文本2:是一款披萨外卖应用 输入句子2:个人贷款 余弦相似度2:0.16

请建议可能适合此目的的预训练模型。

我已经尝试了许多预训练模型,例如来自句子转换器的 LaBSE、ms-marco-roberta-base-v3,但在所有模型中都看到了相同的行为。期望不同句子的嵌入具有较小的余弦相似度

elasticsearch bert-language-model knn semantic-search
1个回答
0
投票

如果您还没有这样做,请查看对称和非对称语义搜索之间的区别以及专门为此训练的相应模型:

https://www.sbert.net/examples/applications/semantic-search/README.html#symmetry-vs-ametry-semantic-search

据我从您的用例中了解到,您可能会通过非对称搜索获得更好的结果。

您可能还想看看 Weaviate。对于矢量搜索,他们实现了自动剪切功能:

https://weaviate.io/developers/weaviate/search/similarity#autocut

Autocut取正整数参数N,看距离 在每个结果和查询之间,并在之后停止返回结果 第 N 次“跳跃”距离。例如,如果六个距离 closeText 返回的对象为 [0.1899, 0.1901, 0.191, 0.21, 0.215, 0.23] 那么 autocut: 1 将返回前三个对象,autocut: 2 将返回除最后一个对象之外的所有对象,而 autocut: 3 将返回所有对象 物体。

Weaviate 还有一个很好的混合搜索实现(结合向量和词法搜索),也可能对您有所帮助。

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