pipeline_tag: text-ranking
tags:
- transformers
- information-retrieval
language: pl
license: apache-2.0
library_name: sentence-transformers
波兰语大型排序网络重排模型
这是一个采用RankNet损失函数训练的波兰文本排序模型,训练数据集包含140万条查询和1000万份文档组成的文本对。训练数据包含以下部分:1) 波兰语MS MARCO训练集(80万条查询);2) 翻译为波兰语的ELI5数据集(超50万条查询);3) 波兰语医疗问答集(约10万条查询)。
我们采用基于MT5-XXL架构的大型多语言重排模型unicamp-dl/mt5-13b-mmarco-100k作为教师模型,选择波兰语RoBERTa作为学生模型。与常见的将查询-文档对独立处理的逐点损失不同,RankNet方法基于查询和文档对计算损失,具体根据文档与查询相关性的相对排序计算损失。
训练时,我们使用教师模型评估检索阶段获取的文档相关性,按相关性分数排序后,构建了包含查询及每个查询20份有序文档的数据集。
💡 该方法被证明极为有效。本模型在波兰信息检索基准测试中表现优于教师模型,尽管参数量仅为教师模型的1/30,推理速度快33倍!💡
使用方式(Sentence-Transformers)
可通过sentence-transformers如下使用:
from sentence_transformers import CrossEncoder
import torch.nn
query = "如何活到100岁?"
answers = [
"需要健康饮食和坚持运动",
"应该喝酒、参加派对并开快车",
"竞选期间政客们承诺要废除周日禁商令"
]
model = CrossEncoder(
"sdadas/polish-reranker-large-ranknet",
default_activation_function=torch.nn.Identity(),
max_length=512,
device="cuda" if torch.cuda.is_available() else "cpu"
)
pairs = [[query, answer] for answer in answers]
results = model.predict(pairs)
print(results.tolist())
使用方式(Huggingface Transformers)
也可通过Huggingface Transformers使用:
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import numpy as np
query = "如何活到100岁?"
answers = [
"需要健康饮食和坚持运动",
"应该喝酒、参加派对并开快车",
"竞选期间政客们承诺要废除周日禁商令"
]
model_name = "sdadas/polish-reranker-large-ranknet"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
texts = [f"{query}</s></s>{answer}" for answer in answers]
tokens = tokenizer(texts, padding="longest", max_length=512, truncation=True, return_tensors="pt")
output = model(**tokens)
results = output.logits.detach().numpy()
results = np.squeeze(results)
print(results.tolist())
评估结果
本模型在波兰信息检索基准测试重排器类别中取得62.65的NDCG@10分数。详见PIRB排行榜。
引用文献
@article{dadas2024assessing,
title={评估波兰语文本排序模型的泛化能力},
author={斯瓦沃米尔·达达斯和玛乌戈热塔·格伦博维茨},
year={2024},
eprint={2402.14318},
archivePrefix={arXiv},
primaryClass={cs.CL}
}