Views
No views yet
1from transformers import pipeline
2
3translator = pipeline('translation', 'billingsmoore/tibetan-to-english-translation')
4
5input_text = <your transliterated Tibetan text>
6
7translation = translator(input_text)
8
9print(translation)1from datasets import load_dataset
2from transformers import (
3 AutoTokenizer, DataCollatorForSeq2Seq,
4 AutoModelForSeq2SeqLM, Seq2SeqTrainingArguments,
5 Seq2SeqTrainer, EarlyStoppingCallback, Adafactor
6)
7import evaluate
8import numpy as np
9from accelerate import Accelerator
10
11data = load_dataset(<path_to_your_dataset>)
12
13checkpoint = "billingsmoore/tibetan-to-english-translation"
14tokenizer = AutoTokenizer.from_pretrained(checkpoint)
15data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=checkpoint)
16
17source_lang = 'bo'
18target_lang = 'en'
19prefix = "translate Tibetan to English: "
20
21def preprocess_function(examples):
22
23 inputs = [prefix + example[source_lang] for example in examples['translation']]
24 targets = [example[target_lang] for example in examples['translation']]
25
26 model_inputs = tokenizer(inputs, text_target=targets, max_length=128, truncation=True)
27
28 return model_inputs
29
30tokenized_dataset = dataset.map(preprocess_function, batched=True)
31
32metric = evaluate.load("sacrebleu")
33
34def postprocess_text(preds, labels):
35 preds = [pred.strip() for pred in preds]
36 labels = [[label.strip()] for label in labels]
37
38 return preds, labels
39
40
41def compute_metrics(eval_preds):
42 preds, labels = eval_preds
43 if isinstance(preds, tuple):
44 preds = preds[0]
45 decoded_preds = tokenizer.batch_decode(preds, skip_special_tokens=True)
46
47 labels = np.where(labels != -100, labels, tokenizer.pad_token_id)
48 decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)
49
50 decoded_preds, decoded_labels = postprocess_text(decoded_preds, decoded_labels)
51
52 result = metric.compute(predictions=decoded_preds, references=decoded_labels)
53 result = {"bleu": result["score"]}
54
55 prediction_lens = [np.count_nonzero(pred != tokenizer.pad_token_id) for pred in preds]
56 result["gen_len"] = np.mean(prediction_lens)
57 result = {k: round(v, 4) for k, v in result.items()}
58 return result
59
60early_stop = EarlyStoppingCallback()
61
62model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint, device_map="auto")
63
64optimizer = Adafactor(
65 model.parameters(),
66 scale_parameter=True,
67 relative_step=False,
68 warmup_init=False,
69 lr=3e-4
70)
71
72training_args = Seq2SeqTrainingArguments(
73 output_dir=".",
74 auto_find_batch_size=True,
75 predict_with_generate=True,
76 fp16=False, #check this
77 push_to_hub=False,
78 eval_strategy='epoch',
79 save_strategy='epoch',
80 load_best_model_at_end=True
81)
82
83trainer = Seq2SeqTrainer(
84 model=model,
85 args=training_args,
86 train_dataset=tokenized_dataset['train'],
87 eval_dataset=tokenized_dataset['test'],
88 tokenizer=tokenizer,
89 optimizers=(optimizer, None),
90 data_collator=data_collator,
91 compute_metrics=compute_metrics,
92 callbacks=[early_stop]
93)
94
95trainer.train()