许可证:bigscience-bloom-rail-1.0
数据集:
- unicamp-dl/mmarco
- rajpurkar/squad
语言:
- 法语
- 英语
任务标签:文本排序
基础模型:
- cmarkea/bloomz-3b-dpo-chat
Bloomz-3b 重排序模型
本重排序模型基于cmarkea/bloomz-3b-dpo-chat模型构建,旨在衡量问题(查询)与上下文之间的语义相关性。通过标准化评分,它有助于筛选开放域问答(ODQA)场景中检索器输出的查询/上下文匹配结果,并以比检索器更高效的建模方式重新排序结果。但由于其高计算成本,此类建模方式不适合直接用于数据库搜索。
该模型设计为语言无关,支持法语和英语。因此,它能在跨语言场景中有效评分,且不受单语言场景(英语或法语)行为的影响。
数据集
训练数据集由mMARCO数据集(包含查询/正例/困难负例三元组)和SQuAD的"train"拆分数据(通过将同一主题但不同查询集的上下文作为困难负例生成三元组)组成。最终将三元组展平为查询/上下文句子对,正例标记为1,负例标记为0。每对中的查询和上下文语言随机均匀选择法语或英语。
评估
使用SQuAD的"validation"拆分评估模型性能。选取每个段落的第一个问题及其对应段落(应被Oracle模型排为Top-1的上下文),其他同主题不匹配的上下文视为困难负例。评估语料包含1204个待排序的查询/上下文对。
同语言评估(法语/法语)
模型(法语/法语) |
Top均值 |
Top标准差 |
Top-1 (%) |
Top-10 (%) |
Top-100 (%) |
MRR (x100) |
Top平均分 |
Top分数标准差 |
BM25 |
14.47 |
92.19 |
69.77 |
92.03 |
98.09 |
77.74 |
NA |
NA |
CamemBERT |
5.72 |
36.88 |
69.35 |
95.51 |
98.92 |
79.51 |
0.83 |
0.37 |
DistilCamemBERT |
5.54 |
25.90 |
66.11 |
92.77 |
99.17 |
76.00 |
0.80 |
0.39 |
mMiniLMv2-L12 |
4.43 |
30.27 |
71.51 |
95.68 |
99.42 |
80.17 |
0.78 |
0.38 |
RoBERTa (多语言) |
15.13 |
60.39 |
57.23 |
83.87 |
96.18 |
66.21 |
0.53 |
0.11 |
bloomz-560m-reranking |
1.49 |
2.58 |
83.55 |
99.17 |
100 |
89.98 |
0.93 |
0.15 |
bloomz-3b-reranking |
1.22 |
1.06 |
89.37 |
99.75 |
100 |
93.79 |
0.94 |
0.10 |
跨语言评估(法语/英语)
模型(法语/英语) |
Top均值 |
Top标准差 |
Top-1 (%) |
Top-10 (%) |
Top-100 (%) |
MRR (x100) |
Top平均分 |
Top分数标准差 |
BM25 |
288.04 |
371.46 |
21.93 |
41.93 |
55.15 |
28.41 |
NA |
NA |
CamemBERT |
12.20 |
61.39 |
59.55 |
89.71 |
97.42 |
70.38 |
0.65 |
0.47 |
DistilCamemBERT |
40.97 |
104.78 |
25.66 |
64.78 |
88.62 |
38.83 |
0.53 |
0.49 |
mMiniLMv2-L12 |
6.91 |
32.16 |
59.88 |
89.95 |
99.09 |
70.39 |
0.61 |
0.46 |
RoBERTa (多语言) |
79.32 |
153.62 |
27.91 |
49.50 |
78.16 |
35.41 |
0.40 |
0.12 |
bloomz-560m-reranking |
1.51 |
1.92 |
81.89 |
99.09 |
100 |
88.64 |
0.92 |
0.15 |
bloomz-3b-reranking |
1.22 |
0.98 |
89.20 |
99.84 |
100 |
93.63 |
0.94 |
0.10 |
实验表明跨语言场景对模型行为影响较小。若用于重排序和过滤检索器的Top-K结果,可设置0.8的阈值过滤上下文,从而减少RAG类应用中的噪声问题。
使用方法
以下示例基于Transformers库的Pipeline API:
from transformers import pipeline
reranker = pipeline(
task='text-classification',
model='cmarkea/bloomz-3b-reranking',
top_k=None
)
query: str
contexts: List[str]
similarities = reranker(
[
dict(
text=context,
text_pair=query
)
for context in contexts
]
)
score_label_1 = [
next(item['score'] for item in entry if item['label'] == 'LABEL_1')
for entry in similarities
]
contexts_reranked = sorted(
zip(score_label_1, contexts),
key=lambda x: x[0],
reverse=True
)
score, contexts_cleaned = zip(
*filter(
lambda x: x[0] >= 0.8,
contexts_reranked
)
)
引用
@online{DeBloomzReranking,
AUTHOR = {Cyrile Delestre},
ORGANIZATION = {Crédit Mutuel Arkéa},
URL = {https://huggingface.co/cmarkea/bloomz-3b-reranking},
YEAR = {2024},
KEYWORDS = {NLP ; Transformers ; LLM ; Bloomz},
}