pipeline_tag: 文本排序
tags:
- transformers
- 信息检索
language: pl
license: apache-2.0
library_name: sentence-transformers
polish-reranker-large-mse
这是一个采用均方误差(MSE)蒸馏方法训练的波兰语文本排序模型,训练数据集包含140万条查询和1000万份文档组成的文本对。训练数据包含以下部分:1)波兰语MS MARCO训练集(80万条查询);2)翻译为波兰语的ELI5数据集(超50万条查询);3)波兰语医疗问答集(约10万条查询)。教师模型采用基于MT5-XXL架构的多语言大模型unicamp-dl/mt5-13b-mmarco-100k,学生模型选用波兰语RoBERTa。在MSE方法中,学生模型通过直接复现教师模型的输出来进行训练。
使用方式(Sentence-Transformers)
可通过sentence-transformers如下使用:
from sentence_transformers import CrossEncoder
import torch.nn
query = "如何活到100岁?"
answers = [
"需要健康饮食并坚持运动",
"应该饮酒狂欢、开快车",
"竞选期间政客们承诺要废除周日营业禁令"
]
model = CrossEncoder(
"sdadas/polish-reranker-large-mse",
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-mse"
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())
评估结果
该模型在波兰信息检索基准测试的Rerankers类别中取得NDCG@10分数60.27,详见PIRB排行榜。
引用文献
@article{dadas2024assessing,
title={评估波兰语文本排序模型的泛化能力},
author={斯瓦沃米尔·达达斯和马尔戈扎塔·格伦博维茨},
year={2024},
eprint={2402.14318},
archivePrefix={arXiv},
primaryClass={cs.CL}
}