返回模型
说明文档
MarianMT ONNX 模型:撒马利亚希伯来语 ↔ 撒马利亚阿拉米语翻译
模型描述
这是一个 ONNX(开放神经网络交换) 格式的双向翻译模型,基于 Helsinki-NLP/opus-mt-sem-sem 微调而成,用于 撒马利亚希伯来语 与 撒马利亚阿拉米语 之间的翻译。该模型通过特殊语言标签(>>smp<< 和 >>sam<<)支持双向翻译。
ONNX 转换带来以下优势:
- 更快的推理速度,配合优化的 ONNX Runtime
- 跨平台部署(CPU、GPU、移动设备、边缘设备)
- 更低的内存占用,相比 PyTorch 模型
- 生产环境就绪,适用于各种运行环境
原始 PyTorch 模型请参见:johnlockejrr/marianmt-smp-sam
模型详情
- 模型类型:Seq2Seq (Marian) - ONNX 格式
- 基础模型:Helsinki-NLP/opus-mt-sem-sem
- 语言:撒马利亚希伯来语 ↔ 撒马利亚阿拉米语
- 方向:双向
- 词表大小:33,702 个标记(2 个额外特殊标记:
>>smp<<和>>sam<<) - 模型参数:61,918,208
- 输入/输出最大长度:313 个标记
- 格式:ONNX(开放神经网络交换)
训练详情
训练配置
- 训练轮次:96.35(计划 100 轮,在第 29,000 步提前停止)
- 批次大小:每设备 16
- 有效批次大小:32(含梯度累积)
- 学习率:1e-5
- 预热步数:1,000
- 权重衰减:0.01
- 梯度累积步数:2
- 优化器:AdamW,带重启的余弦学习率调度
- 精度:bfloat16 (BF16)
- 训练时间:约 47.8 分钟(2,866 秒)
数据集
- 训练集:9,610 个句对(4,805 个原始双向配对)
- 验证集:1,080 个句对(540 个原始配对)
- 测试集:108 个句对(54 个原始配对)
- 总数据集:10,798 个双向句对,来自圣经平行文本
- 格式:管道分隔 CSV,列名:Book|Chapter|Verse|Samaritan|Aramaic
- 文字:两种语言均使用希伯来文字
该数据集包含撒马利亚希伯来语和撒马利亚阿拉米语(塔古姆语)的平行圣经文本,训练数据中包含双向内容以实现双向翻译。
训练过程
训练过程采用:
- 提前停止耐心值:5 个评估步
- 每 500 步评估一次
- 最佳模型检查点:checkpoint-26500(BLEU:60.48)
- 最终检查点:checkpoint-29000(BLEU:59.72,96.35 轮后)
注:ONNX 模型由训练好的 PyTorch 模型转换而来,保留了相同的性能指标。
性能
评估指标(测试集)
- BLEU 分数:59.72(最佳:60.48,checkpoint-26500)
- chrF 分数:77.91
- 字符准确率:51.09%
这些指标与原始 PyTorch 模型完全相同,因为 ONNX 转换是无损的。
训练指标
- 最终训练损失:0.722
- 最终评估损失:0.825
- 最佳 BLEU(验证集):60.48,第 26,500 步
安装
pip install onnxruntime transformers
如需 GPU 加速(可选):
pip install onnxruntime-gpu
使用方法
使用 ONNX Runtime 推理
import numpy as np
from transformers import AutoTokenizer
import onnxruntime as ort
# 加载分词器
tokenizer = AutoTokenizer.from_pretrained("johnlockejrr/marianmt-smp-sam-onnx")
# 加载 ONNX 模型
session = ort.InferenceSession("model.onnx")
# 从撒马利亚希伯来语翻译到撒马利亚阿拉米语
text_smp = "אחר הדברים האלה היה דבר יהוה אל אברם"
input_text = f">>smp<< {text_smp}"
inputs = tokenizer(input_text, return_tensors="np", max_length=313, truncation=True)
# 准备 ONNX 输入(转换为 numpy 数组)
onnx_inputs = {
"input_ids": inputs["input_ids"].astype(np.int64),
"attention_mask": inputs["attention_mask"].astype(np.int64),
}
# 运行推理
outputs = session.run(None, onnx_inputs)
output_ids = outputs[0]
# 解码输出
translation = tokenizer.decode(output_ids[0], skip_special_tokens=True)
print(translation)
使用 Optimum 实现无缝 ONNX 推理
from optimum.onnxruntime import ORTModelForSeq2SeqLM
from transformers import AutoTokenizer
# 加载模型和分词器
model = ORTModelForSeq2SeqLM.from_pretrained("johnlockejrr/marianmt-smp-sam-onnx")
tokenizer = AutoTokenizer.from_pretrained("johnlockejrr/marianmt-smp-sam-onnx")
# 从撒马利亚希伯来语翻译到撒马利亚阿拉米语
text_smp = "אחר הדברים האלה היה דבר יהוה אל אברם"
input_text = f">>smp<< {text_smp}"
inputs = tokenizer(input_text, return_tensors="pt", max_length=313, truncation=True)
# 生成翻译
outputs = model.generate(**inputs, max_length=313, num_beams=4, length_penalty=0.6)
translation = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(translation)
# 从撒马利亚阿拉米语翻译到撒马利亚希伯来语
text_sam = "בתר ממלליה אלין הוה מלל יהוה עם אברם"
input_text = f">>sam<< {text_sam}"
inputs = tokenizer(input_text, return_tensors="pt", max_length=313, truncation=True)
outputs = model.generate(**inputs, max_length=313, num_beams=4, length_penalty=0.6)
translation = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(translation)
批量推理
from optimum.onnxruntime import ORTModelForSeq2SeqLM
from transformers import AutoTokenizer
model = ORTModelForSeq2SeqLM.from_pretrained("johnlockejrr/marianmt-smp-sam-onnx")
tokenizer = AutoTokenizer.from_pretrained("johnlockejrr/marianmt-smp-sam-onnx")
texts = [
">>smp<< אחר הדברים האלה היה דבר יהוה אל אברם",
">>sam<< בתר ממלליה אלין הוה מלל יהוה עם אברם"
]
inputs = tokenizer(texts, return_tensors="pt", padding=True, max_length=313, truncation=True)
outputs = model.generate(**inputs, max_length=313, num_beams=4, length_penalty=0.6)
translations = tokenizer.batch_decode(outputs, skip_special_tokens=True)
for translation in translations:
print(translation)
语言标签
该模型使用特殊语言标签来指示翻译方向:
>>smp<<- 撒马利亚希伯来语(源语言)→ 撒马利亚阿拉米语(目标语言)的前缀>>sam<<- 撒马利亚阿拉米语(源语言)→ 撒马利亚希伯来语(目标语言)的前缀
这些标签必须放在输入文本的开头,以正确控制翻译方向。
ONNX 特有优势
- 性能:ONNX Runtime 提供优化的推理,在生产工作负载中通常比 PyTorch 更快
- 可移植性:可在多种平台上运行(Windows、Linux、macOS、Android、iOS、Web)
- 硬件支持:针对不同硬件优化(CPU、GPU、NPU、TPU)
- 内存效率:相比 PyTorch 模型内存占用更低
- 生产就绪:更适合在生产环境中部署
限制与注意事项
- 领域特定性:该模型主要在圣经文本上训练,在类似的宗教或历史文本上可能表现更好。
- 文字规范化:根据您的使用场景,输入文本可能需要规范化(移除变音符号/元音标记)。
- 长度限制:最大序列长度为 313 个标记。更长的文本将被截断。
- 字符准确率:51.09% 的字符级准确率表明仍有改进空间,尽管 BLEU 和 chrF 分数表明翻译质量合理。
- ONNX 限制:某些高级生成功能(如带温度的采样)相比 PyTorch 可能支持有限。束搜索和贪婪解码完全支持。
引用
如果您使用此模型,请引用:
@misc{marianmt-smp-sam-onnx,
title={MarianMT ONNX Model for Samaritan Hebrew ↔ Samaritan Aramaic Translation},
author={johnlockejrr},
year={2025},
howpublished={\url{https://huggingface.co/johnlockejrr/marianmt-smp-sam-onnx}}
}
相关模型
- PyTorch 版本:johnlockejrr/marianmt-smp-sam - 用于研究和开发的原始 PyTorch 模型
致谢
- 基础模型:Helsinki-NLP/opus-mt-sem-sem
- 训练框架:Hugging Face Transformers
- ONNX 转换:Optimum / ONNX Runtime
- 数据集:撒马利亚希伯来语和撒马利亚阿拉米语平行圣经文本
模型卡联系方式
如有问题、议题或贡献,请访问模型仓库:https://huggingface.co/johnlockejrr/marianmt-smp-sam-onnx
johnlockejrr/marianmt-smp-sam-onnx
作者 johnlockejrr
translation
↓ 1
♥ 0
创建时间: 2025-11-01 23:31:06+00:00
更新时间: 2025-11-02 06:18:43+00:00
在 Hugging Face 上查看文件 (15)
.gitattributes
README.md
added_tokens.json
config.json
generation_config.json
onnx/decoder_model.onnx
ONNX
onnx/decoder_model_merged.onnx
ONNX
onnx/decoder_with_past_model.onnx
ONNX
onnx/encoder_model.onnx
ONNX
source.spm
special_tokens_map.json
target.spm
tokenizer.json
tokenizer_config.json
vocab.json