ONNX 模型库
返回模型

说明文档

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 特有优势

  1. 性能:ONNX Runtime 提供优化的推理,在生产工作负载中通常比 PyTorch 更快
  2. 可移植性:可在多种平台上运行(Windows、Linux、macOS、Android、iOS、Web)
  3. 硬件支持:针对不同硬件优化(CPU、GPU、NPU、TPU)
  4. 内存效率:相比 PyTorch 模型内存占用更低
  5. 生产就绪:更适合在生产环境中部署

限制与注意事项

  1. 领域特定性:该模型主要在圣经文本上训练,在类似的宗教或历史文本上可能表现更好。
  2. 文字规范化:根据您的使用场景,输入文本可能需要规范化(移除变音符号/元音标记)。
  3. 长度限制:最大序列长度为 313 个标记。更长的文本将被截断。
  4. 字符准确率:51.09% 的字符级准确率表明仍有改进空间,尽管 BLEU 和 chrF 分数表明翻译质量合理。
  5. 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}}
}

相关模型

致谢

  • 基础模型: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