请问reranking的使用方式与示例代码是否一致?

#6
by IeohMingChan - opened

例如,我想测试lier007/xiaobu-embedding-v2模型的reranking能力,使用以下代码是否合理?

from sentence_transformers import SentenceTransformer
queries = ["如何在Python中读取JSON文件", "最佳的JSON解析库是什么", "JSON格式的基本规则"]
documents = ["Python中的JSON模块提供了loads和load方法来读取和解析JSON数据。",
"使用Python标准库中的json.loads()函数可以从字符串中加载JSON对象。",
"Pandas库也可以用来处理JSON数据,它有一个专门的函数read_json。",
"在Python中,requests库可以用来获取网络上的JSON数据。",
"JSON是一个快速的JSON解析库,适用于性能要求高的场景。",
"JSON是一种轻量级的数据交换格式,易于人阅读和编写。",
"JSON的基本结构包括对象(键值对集合)和数组(值的有序集合)。",
"JSON数据可以用Python字典来表示,其中键必须是字符串。"]
model = SentenceTransformer('lier007/xiaobu-embedding-v2')
embeddings_1 = model.encode(queries, normalize_embeddings=True)
embeddings_2 = model.encode(documents, normalize_embeddings=True)
similarity = embeddings_1 @ embeddings_2.T
print(similarity)

作为demo或者召回的结果(queries\documents量不大),上面的操作是可以的,得到的similarity(shape=(3,8))就表示3个queries和8个documents的相似度值。比如其中第0行的8个值就表示query0和所有documents的相似度,对其倒排后取topK即可

但是这种方式就是Bi-Encoder的方式?有cross-encoder的调用方式吗?还是这个模型微调的时候就是用的Bi-Encoder的方式?

是的,这个模型是Bi-Encoder;cross-encoder可以参考bge系列的reranker: https://huggingface.co/BAAI/bge-reranker-large

Sign up or log in to comment