模型概述
模型特點
模型能力
使用案例
🚀 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



