库名称:transformers
语言:
- 多语言
- 孟加拉语
- 捷克语
- 德语
- 英语
- 爱沙尼亚语
- 芬兰语
- 法语
- 古吉拉特语
- 豪萨语
- 印地语
- 冰岛语
- 日语
- 哈萨克语
- 高棉语
- 立陶宛语
- 拉脱维亚语
- 波兰语
- 普什图语
- 俄语
- 泰米尔语
- 土耳其语
- 乌克兰语
- 科萨语
- 中文
- 祖鲁语
许可证:apache-2.0
基础模型:answerdotai/ModernBERT-large
标签:
数据集:
- ymoslem/wmt-da-human-evaluation
模型索引:
- 名称:机器翻译质量评估
结果:
- 任务:
类型:回归
数据集:
名称:ymoslem/wmt-da-human-evaluation
类型:QE
指标:
- 名称:皮尔逊相关系数
类型:Pearson
值:0.4589
- 名称:平均绝对误差
类型:MAE
值:0.1861
- 名称:均方根误差
类型:RMSE
值:0.2375
- 名称:R平方
类型:R2
值:0.2106
指标:
新版本:ymoslem/ModernBERT-large-qe-v1
机器翻译质量评估
该模型是基于answerdotai/ModernBERT-large在ymoslem/wmt-da-human-evaluation数据集上微调的版本。
在评估集上取得了以下结果:
模型描述
该模型用于机器翻译(MT)系统的无参考质量评估(QE)。
训练过程
训练超参数
该版本模型使用tokenizer.model_max_length=512
。完整长度8192的模型可在此处找到:ymoslem/ModernBERT-large-qe-v1。
训练过程中使用的超参数如下:
- 学习率:8e-05
- 训练批次大小:128
- 评估批次大小:128
- 随机种子:42
- 优化器:使用OptimizerNames.ADAMW_TORCH_FUSED,beta=(0.9,0.999),epsilon=1e-08,无额外优化器参数
- 学习率调度器类型:线性
- 训练步数:10000
训练结果
训练损失 |
周期 |
步数 |
验证损失 |
0.0631 |
0.1004 |
1000 |
0.0674 |
0.0614 |
0.2007 |
2000 |
0.0599 |
0.0578 |
0.3011 |
3000 |
0.0585 |
0.0585 |
0.4015 |
4000 |
0.0579 |
0.0568 |
0.5019 |
5000 |
0.0570 |
0.057 |
0.6022 |
6000 |
0.0568 |
0.0579 |
0.7026 |
7000 |
0.0567 |
0.0573 |
0.8030 |
8000 |
0.0565 |
0.0568 |
0.9033 |
9000 |
0.0564 |
0.0571 |
1.0037 |
10000 |
0.0564 |
框架版本
- 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-maxlen512-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的sep_token
为'</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())