模型简介
模型特点
模型能力
使用案例
🚀 mlotsawa-ground-small模型卡片
本模型是一个用于将藏传佛教文本翻译成英文的transformers机器翻译模型,是更大的MLotsawa项目的一部分。它能够帮助用户高效地完成藏传佛教文本的翻译工作,为相关研究和资料整理提供便利。
🚀 快速开始
本模型可直接用于翻译,也可进一步微调以提高性能。
直接使用
可以使用transformers管道直接进行翻译,如下方代码块所示:
from transformers import pipeline
pipe = pipeline('translation', 'billingsmoore/mlotsawa-ground-small', device='cpu') # select a device of your choice (i.e. 'cuda:0')
input = ["ཁྱེད་ལ་བསྟོད་ཅིང་གསོལ་བ་བཏབ་པའི་མཐུས༔",
"བདག་གི་ཚེ་བསོད་དཔལ་འབྱོར་རྒྱས་པ་དང་༔",
"འཇིགས་པ་བཅུ་དྲུག་རྐྱེན་ངན་བར་ཆད་སོལ༔"]
output = pipe(input)
translation = [elt['translation_text'] for elt in output]
print(translation)
上述代码将产生以下输出:
['Through the power of praising and praying to you', 'Increase my lifespan merit and prosperity', 'Remove the sixteen fears and obstacles of adversity.']
或者,也可以按照此处说明使用图形用户界面来使用该模型。
下游使用
可以通过额外的微调来提高该模型的性能。你可以使用更大的数据集进行微调以获得更好的通用性能,或者在特定的材料集上进行微调以提高对该子集(如大圆满文本)的翻译性能。
可以按照以下步骤对模型进行微调:
# Load Your Data
from datasets import load_dataset
dataset = load_dataset(<your dataset>)
# Load the Model and Tokenizer
from transformers import AutoTokenizer, DataCollatorForSeq2Seq, AutoModelForSeq2SeqLM
model = AutoModelForSeq2SeqLM.from_pretrained("billingsmoore/mlotsawa-ground-small", device_map="cuda:0") # this line assumes you want to use a single CUDA enabled gpu
tokenizer = AutoTokenizer.from_pretrained('billingsmoore/mlotsawa-ground-small')
data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=model)
# Preprocess the Data
def translation_preprocess_function(examples):
# Prepare translation inputs and targets
translation_inputs = ['Translate Tibetan to English: ' + example for example in examples['bo']]
translation_targets = [example for example in examples['en']]
# Tokenize translation inputs and targets
translation_model_inputs = tokenizer(translation_inputs, text_target=translation_targets,
max_length=256, truncation=True, padding="max_length")
return translation_model_inputs
tokenized_dataset = dataset.map(translation_preprocess_function, batched=True)
# Define Evaluation Metrics
import numpy as np
import evaluate
# Load BLEU and CHRF metrics
bleu_metric = evaluate.load("sacrebleu")
chrf_metric = evaluate.load("chrf")
ter_metric = evaluate.load("ter")
def postprocess_text(preds, labels):
preds = [pred.strip() for pred in preds]
labels = [[label.strip()] for label in labels]
return preds, labels
def compute_metrics(eval_preds):
preds, labels = eval_preds
if isinstance(preds, tuple):
preds = preds[0]
# Decode predictions and labels
preds = np.where(preds != -100, preds, tokenizer.pad_token_id)
decoded_preds = tokenizer.batch_decode(preds, skip_special_tokens=True)
labels = np.where(labels != -100, labels, tokenizer.pad_token_id)
decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)
# Postprocess text
decoded_preds, decoded_labels = postprocess_text(decoded_preds, decoded_labels)
# Compute BLEU score
bleu_result = bleu_metric.compute(predictions=decoded_preds, references=decoded_labels)
bleu_score = bleu_result["score"]
# Compute CHRF score
chrf_result = chrf_metric.compute(predictions=decoded_preds, references=decoded_labels)
chrf_score = chrf_result["score"]
# Compute TER score
ter_result = ter_metric.compute(predictions=decoded_preds, references=decoded_labels)
ter_score = ter_result["score"]
# Return rounded results
metrics = {
"bleu": round(bleu_score, 4),
"chrf": round(chrf_score, 4),
"ter": round(ter_score, 4)
}
#print("Computed Metrics:", metrics)
return metrics
# Set Up Training Arguments and Optimizer
from transformers import Seq2SeqTrainingArguments, Seq2SeqTrainer, Adafactor, EarlyStoppingCallback
from accelerate import Accelerator
accelerator = Accelerator()
optimizer = Adafactor(
model.parameters(),
scale_parameter=True,
relative_step=False,
warmup_init=False,
lr=3e-4
)
model, optimizer = accelerator.prepare(model, optimizer)
training_args = Seq2SeqTrainingArguments(
output_dir=f"output-dir", # select an output directory of your choice
auto_find_batch_size=True,
predict_with_generate=True,
fp16=False,
push_to_hub=False,
eval_strategy='epoch',
save_strategy='epoch',
num_train_epochs=100, # select your preferred number of training epochs
load_best_model_at_end=True,
)
trainer = Seq2SeqTrainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset['train'],
eval_dataset=tokenized_dataset['dev'],
processing_class=tokenizer,
optimizers=(optimizer, None),
data_collator=data_collator,
compute_metrics=compute_metrics,
callbacks=[EarlyStoppingCallback()]
)
trainer.train()
✨ 主要特性
- 特定领域翻译:专为藏传佛教文本翻译设计,能处理该领域复杂的语言和文化内容。
- 可微调性:既可以直接使用进行翻译,也能进一步微调以适应特定需求或提高性能。
📦 安装指南
文档未提及安装相关内容,故跳过此章节。
💻 使用示例
基础用法
from transformers import pipeline
pipe = pipeline('translation', 'billingsmoore/mlotsawa-ground-small', device='cpu') # select a device of your choice (i.e. 'cuda:0')
input = ["ཁྱེད་ལ་བསྟོད་ཅིང་གསོལ་བ་བཏབ་པའི་མཐུས༔",
"བདག་གི་ཚེ་བསོད་དཔལ་འབྱོར་རྒྱས་པ་དང་༔",
"འཇིགས་པ་བཅུ་དྲུག་རྐྱེན་ངན་བར་ཆད་སོལ༔"]
output = pipe(input)
translation = [elt['translation_text'] for elt in output]
print(translation)
高级用法
# Load Your Data
from datasets import load_dataset
dataset = load_dataset(<your dataset>)
# Load the Model and Tokenizer
from transformers import AutoTokenizer, DataCollatorForSeq2Seq, AutoModelForSeq2SeqLM
model = AutoModelForSeq2SeqLM.from_pretrained("billingsmoore/mlotsawa-ground-small", device_map="cuda:0") # this line assumes you want to use a single CUDA enabled gpu
tokenizer = AutoTokenizer.from_pretrained('billingsmoore/mlotsawa-ground-small')
data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=model)
# Preprocess the Data
def translation_preprocess_function(examples):
# Prepare translation inputs and targets
translation_inputs = ['Translate Tibetan to English: ' + example for example in examples['bo']]
translation_targets = [example for example in examples['en']]
# Tokenize translation inputs and targets
translation_model_inputs = tokenizer(translation_inputs, text_target=translation_targets,
max_length=256, truncation=True, padding="max_length")
return translation_model_inputs
tokenized_dataset = dataset.map(translation_preprocess_function, batched=True)
# Define Evaluation Metrics
import numpy as np
import evaluate
# Load BLEU and CHRF metrics
bleu_metric = evaluate.load("sacrebleu")
chrf_metric = evaluate.load("chrf")
ter_metric = evaluate.load("ter")
def postprocess_text(preds, labels):
preds = [pred.strip() for pred in preds]
labels = [[label.strip()] for label in labels]
return preds, labels
def compute_metrics(eval_preds):
preds, labels = eval_preds
if isinstance(preds, tuple):
preds = preds[0]
# Decode predictions and labels
preds = np.where(preds != -100, preds, tokenizer.pad_token_id)
decoded_preds = tokenizer.batch_decode(preds, skip_special_tokens=True)
labels = np.where(labels != -100, labels, tokenizer.pad_token_id)
decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)
# Postprocess text
decoded_preds, decoded_labels = postprocess_text(decoded_preds, decoded_labels)
# Compute BLEU score
bleu_result = bleu_metric.compute(predictions=decoded_preds, references=decoded_labels)
bleu_score = bleu_result["score"]
# Compute CHRF score
chrf_result = chrf_metric.compute(predictions=decoded_preds, references=decoded_labels)
chrf_score = chrf_result["score"]
# Compute TER score
ter_result = ter_metric.compute(predictions=decoded_preds, references=decoded_labels)
ter_score = ter_result["score"]
# Return rounded results
metrics = {
"bleu": round(bleu_score, 4),
"chrf": round(chrf_score, 4),
"ter": round(ter_score, 4)
}
#print("Computed Metrics:", metrics)
return metrics
# Set Up Training Arguments and Optimizer
from transformers import Seq2SeqTrainingArguments, Seq2SeqTrainer, Adafactor, EarlyStoppingCallback
from accelerate import Accelerator
accelerator = Accelerator()
optimizer = Adafactor(
model.parameters(),
scale_parameter=True,
relative_step=False,
warmup_init=False,
lr=3e-4
)
model, optimizer = accelerator.prepare(model, optimizer)
training_args = Seq2SeqTrainingArguments(
output_dir=f"output-dir", # select an output directory of your choice
auto_find_batch_size=True,
predict_with_generate=True,
fp16=False,
push_to_hub=False,
eval_strategy='epoch',
save_strategy='epoch',
num_train_epochs=100, # select your preferred number of training epochs
load_best_model_at_end=True,
)
trainer = Seq2SeqTrainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset['train'],
eval_dataset=tokenized_dataset['dev'],
processing_class=tokenizer,
optimizers=(optimizer, None),
data_collator=data_collator,
compute_metrics=compute_metrics,
callbacks=[EarlyStoppingCallback()]
)
trainer.train()
📚 详细文档
模型详情
模型描述
本模型是一个经过微调的T5模型(小尺寸),具有6000万个参数。它旨在将藏传佛教文本翻译成英文,期望输入为乌金体(Uchen script)。 该模型使用**getok**分词器。训练数据和过程的详细信息如下。
此模型是一个“基础”模型,虽然其性能相当不错,但它旨在作为基础,以便在更大的语料库或特定传统(如大圆满)的语料库上进一步微调,以提高翻译质量。
- 开发者:billingsmoore
- 模型类型:翻译
- 支持语言:藏语、英语
- 许可证:MIT
- 微调基础模型:google-t5/t5-small
模型来源
偏差、风险和局限性
本模型用于佛教文本的翻译。由于此类材料的复杂性和重要性,所有翻译都应视为初步结果,绝不能在没有经验丰富的人工翻译人员参与的情况下使用。
此外,该模型仅在藏传佛教材料上进行了训练,预计在其他材料(如藏语白话文)上的表现不佳。
训练详情
训练数据
该模型的训练数据包含861,417对来自佛教文本的翻译对。这些数据来自公开可用的材料,以及Monlam AI和藏传与喜马拉雅图书馆慷慨提供的材料。
训练过程
该模型进行了持续的预训练和微调,具体如下:
- 预训练:模型在训练数据上以3e-4的学习率进行了一个epoch的预训练。预训练目标仍然是原始的跨度损坏去噪任务,即对输入标记的随机跨度进行掩码,训练模型重建缺失的内容。这种预训练使模型能够适应新的分词器,并学习藏传佛教材料的语言和结构特征。
- 微调:使用Adafactor优化器和3e-4的初始学习率,在翻译对上对模型进行了50个epoch的微调。
评估
使用BLEU、chrF和TER在测试数据上对模型进行了评估,结果如下:
BLEU | chrF | TER |
---|---|---|
3.54 | 19.89 | 87.58 |
这些分数异常低,但实际翻译结果相对较好。以下是一些示例翻译:
摘自堪钦阿旺帕尔藏(Khenchen Ngawang Palzang)的《劝心向善之忠告》(Advice on Bending Mind Toward the Good),由约瑟夫·麦克莱伦(Joseph McClellan)翻译,宁杰·N.T.(Ninjyed N.T.)提供编辑协助,2024年。
原文 | 人工翻译 | 机器翻译 |
---|---|---|
གྲུབ་བརྒྱའི་སྤྱི་མེས་པཎ་ཆེན་བི་མ་ལ། ། བསམ་བཞིན་སྤྲུལ་པའི་ཟློས་གར་ཉེར་བཟུང་བ། ། རྒྱལ་བའི་དབང་པོ་ཀློང་ཆེན་རབ་འབྱམས་པ། ། འདི་ཙམ་མ་ཡིན་ཚེ་རབས་གཏན་གྱི་སྐྱབས། ། |
百位成就者之祖父——伟大的学者,毗玛拉米扎(Vimalamitra), 以及你,完全拥抱如意幻化之景象者, 征服者之王,龙钦饶降(Longchen Rabjam)—— 你是我永不失效的庇护所;不仅是现在,而且是我生生世世的依靠。 |
伟大的班智达毗玛拉米扎(Vimalamitra),百位成就者之祖先, 以游戏之形式显现, 胜利者之王,龙钦饶降(Longchen Rabjam), 不仅是现在,而且是我生生世世永恒的庇护所。 |
摘自色拉康卓(Sera Khandro)的《消除一切恐惧——向圣度母祈祷文(来自实相空行秘密宝藏)》(Protection from All Fears A Prayer to Ārya Tārā from the Reality Ḍākinīs’ Secret Treasury (Chönyi Khandrö Sangdzö)),由亚当·皮尔斯(Adam Pearcey)翻译,2025年。
原文 | 人工翻译 | 机器翻译 |
---|---|---|
ཀ་དག་སྤྲོས་བྲལ་འོད་གསལ་རིག་པའི་དབྱིངས༔ ལྷུན་གྲུབ་སྣང་ཆ་མ་འགགས་སྒྱུ་འཕྲུལ་གར༔ ཐུགས་རྗེ་རྒྱལ་བ་ཀུན་གྱི་ཡུམ་གཅིག་མ༔ རྗེ་བཙུན་ཨཱརྱ་ཏཱ་རེ་ཚེ་སྦྱིན་དཔལ༔ གསོལ་བ་འདེབས་སོ་རླུང་སེམས་དབང་བསྡུས་ནས༔ ཚེ་དང་བསོད་ནམས་འཕེལ་བར་མཛད་དུ་གསོལ༔ |
从本初纯净、无有造作的光明觉性空间中, 作为无有阻碍的自然显现之神奇幻化, 生起了慈悲者,一切胜利者之唯一母亲, 尊贵的圣度母(Ārya Tārā),赐予长寿之荣耀者, 我向你祈祷!掌控我的气和心, 并增长我的寿命和功德! |
在觉性空间——本初纯净、无有造作——之中, 自然显现之幻舞永不停息, 一切慈悲佛陀之唯一母亲, 尊贵的圣度母(Ārya Tārā),荣耀的度母, 我向你祈祷:掌控气和心, 并增长我们的寿命和功德! |
🔧 技术细节
本模型基于T5小尺寸模型进行微调,使用特定的分词器和训练策略,以适应藏传佛教文本的翻译任务。在预训练阶段,通过跨度损坏去噪任务让模型学习语言和结构特征;在微调阶段,使用Adafactor优化器和特定的学习率进行训练,以提高翻译性能。
📄 许可证
本模型使用MIT许可证。
模型卡片作者
billingsmoore
模型卡片联系方式
billingsmoore[at]gmail[dot]com



