库名称: transformers
语言:
- 多语言
- 孟加拉语
- 捷克语
- 德语
- 英语
- 爱沙尼亚语
- 芬兰语
- 法语
- 古吉拉特语
- 豪萨语
- 印地语
- 冰岛语
- 日语
- 哈萨克语
- 高棉语
- 立陶宛语
- 拉脱维亚语
- 波兰语
- 普什图语
- 俄语
- 泰米尔语
- 土耳其语
- 乌克兰语
- 科萨语
- 中文
- 祖鲁语
许可证: mit
基础模型: FacebookAI/xlm-roberta-large
标签:
- 质量评估
- 回归
- 训练生成
数据集:
- ymoslem/wmt-da-human-evaluation
模型索引:
- 名称: 机器翻译质量评估
结果:
- 任务:
类型: 回归
数据集:
名称: ymoslem/wmt-da-human-evaluation
类型: QE
指标:
- 名称: 皮尔逊相关系数
类型: Pearson
值: 0.422
- 名称: 平均绝对误差
类型: MAE
值: 0.196
- 名称: 均方根误差
类型: RMSE
值: 0.245
- 名称: R平方值
类型: R2
值: 0.245
指标:
- 困惑度
- 平均绝对误差
- R平方值
机器翻译质量评估模型
本模型是基于FacebookAI/xlm-roberta-large在ymoslem/wmt-da-human-evaluation数据集上微调的版本。在评估集上取得如下结果:
模型描述
该模型用于机器翻译(MT)系统的无参考质量评估(QE)。
训练流程
训练超参数
训练过程中使用以下超参数:
- 学习率: 8e-05
- 训练批次大小: 64
- 评估批次大小: 64
- 随机种子: 42
- 优化器: 使用OptimizerNames.ADAMW_TORCH_FUSED,参数为betas=(0.9,0.999),epsilon=1e-08,无额外优化器参数
- 学习率调度器类型: 线性
- 训练步数: 20000
训练结果
训练损失 |
周期 |
步数 |
验证损失 |
0.0743 |
0.0502 |
1000 |
0.0598 |
0.0853 |
0.1004 |
2000 |
0.0745 |
0.0829 |
0.1506 |
3000 |
0.0726 |
0.0814 |
0.2008 |
4000 |
0.0872 |
0.0805 |
0.2509 |
5000 |
0.0715 |
0.0782 |
0.3011 |
6000 |
0.0819 |
0.0789 |
0.3513 |
7000 |
0.0733 |
0.0791 |
0.4015 |
8000 |
0.0748 |
0.0787 |
0.4517 |
9000 |
0.0759 |
0.0761 |
0.5019 |
10000 |
0.0725 |
0.0746 |
0.5521 |
11000 |
0.0745 |
0.0762 |
0.6023 |
12000 |
0.0750 |
0.0770 |
0.6524 |
13000 |
0.0725 |
0.0777 |
0.7026 |
14000 |
0.0737 |
0.0764 |
0.7528 |
15000 |
0.0745 |
0.0781 |
0.8030 |
16000 |
0.0750 |
0.0748 |
0.8532 |
17000 |
0.0765 |
0.0768 |
0.9034 |
18000 |
0.0750 |
0.0737 |
0.9536 |
19000 |
0.0759 |
0.0769 |
1.0038 |
20000 |
0.0752 |
框架版本
- Transformers 4.48.0
- Pytorch 2.4.1+cu124
- Datasets 3.2.0
- Tokenizers 0.21.0
推理
- 安装所需库
pip3 install --upgrade datasets accelerate transformers
pip3 install --upgrade flash_attn triton
- 加载测试数据集
from datasets import load_dataset
test_dataset = load_dataset("ymoslem/wmt-da-human-evaluation",
split="test",
trust_remote_code=True
)
print(test_dataset)
- 加载模型和分词器
from transformers import AutoModelForSequenceClassification, AutoTokenizer
import torch
model_name = "ymoslem/ModernBERT-large-qe-v1"
model = AutoModelForSequenceClassification.from_pretrained(
model_name,
device_map="auto",
torch_dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
model.eval()
- 准备数据集。每个源文本
src
和目标文本tgt
用sep_token
分隔,ModernBERT的分隔符是'</s>'
sep_token = tokenizer.sep_token
input_test_texts = [f"{src} {sep_token} {tgt}" for src, tgt in zip(test_dataset["src"], test_dataset["mt"])]
- 生成预测
如果打印model.config.problem_type
,输出是regression
。
您仍可使用"text-classification"流水线如下(参见流水线文档):
from transformers import pipeline
classifier = pipeline("text-classification",
model=model_name,
tokenizer=tokenizer,
device=0,
)
predictions = classifier(input_test_texts,
batch_size=128,
truncation=True,
padding="max_length",
max_length=tokenizer.model_max_length,
)
predictions = [prediction["score"] for prediction in predictions]
或者使用更精细的代码版本,速度稍快且提供更多控制
from torch.utils.data import DataLoader
import torch
from tqdm.auto import tqdm
def process_batch(batch, tokenizer, device):
sep_token = tokenizer.sep_token
input_texts = [f"{src} {sep_token} {tgt}" for src, tgt in zip(batch["src"], batch["mt"])]
tokens = tokenizer(input_texts,
truncation=True,
padding="max_length",
max_length=tokenizer.model_max_length,
return_tensors="pt",
).to(device)
return tokens
test_dataloader = DataLoader(test_dataset,
batch_size=128,
shuffle=False)
predictions = []
with torch.no_grad():
for batch in tqdm(test_dataloader, desc="推理进度", unit="batch"):
tokens = process_batch(batch, tokenizer, device)
outputs = model(**tokens)
logits = outputs.logits
batch_predictions = logits.squeeze()
predictions.extend(batch_predictions.tolist())