某些特殊情况匹配排序会有错)

#5
by bash99 - opened
This comment has been hidden

比如下面客服Q&A对(内部自动化测试例子),当地名特征不明显时。
用户提问: "恒康国际标准生命怎么走?",
Q&A列表中两个答案:
"恒康国际标准生命地址是多少?",
"恒康国际标准生命电话是多少?"
从语言角度应该是答案1相似度更高。

# Requires sentences-transformers>=3.0.0

from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
import numpy as np

model_name_or_path="Alibaba-NLP/gte-multilingual-base"
model = SentenceTransformer(model_name_or_path, trust_remote_code=True)

input_texts = [
    "恒康国际标准生命怎么走?",
    "恒康国际标准生命地址是多少?",
    "恒康国际标准生命电话是多少?"
]

embeddings = model.encode(input_texts) # embeddings.shape (4, 768)

# normalized embeddings
norms = np.linalg.norm(embeddings, ord=2, axis=1, keepdims=True)
norms[norms == 0] = 1
embeddings = embeddings / norms

# sim scores
scores = (embeddings[:1] @ embeddings[1:].T)

print(scores.tolist())
# 实际输出
# [[0.8871776461601257, 0.8946419954299927]]

虽然这些可以靠reranker之类的解决,但是其它几个常见嵌入模型(bge/m3, jina v2 zh, bce 还有MTEB榜单考前而且参数量同级别的模型都排序正确)。
内部还有一些测试用例,gte比较难的几个反而通过了,这个认为很简单的却没过。

Alibaba-NLP org

这类case我们记下来了,下个版本会fix

当前还是推荐用rerank模型来解决这种细粒度的排序问题

Sign up or log in to comment