| import torch |
| from transformers import AutoModelForSeq2SeqLM, AutoTokenizer |
| from IndicTransToolkit import IndicProcessor |
| |
| |
| DEVICE = "cuda" if torch.cuda.is_available() else "cpu" |
|
|
| src_lang, tgt_lang = "eng_Latn", "hin_Deva" |
| model_name = "ai4bharat/indictrans2-en-indic-1B" |
| tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) |
|
|
| model = AutoModelForSeq2SeqLM.from_pretrained( |
| model_name, |
| trust_remote_code=True, |
| torch_dtype=torch.float16, |
| attn_implementation="flash_attention_2" |
| ).to(DEVICE) |
|
|
| ip = IndicProcessor(inference=True) |
|
|
| input_sentences = [ |
| "When I was young, I used to go to the park every day.", |
| "We watched a new movie last week, which was very inspiring.", |
| "If you had met me at that time, we would have gone out to eat.", |
| "My friend has invited me to his birthday party, and I will give him a gift.", |
| ] |
|
|
| batch = ip.preprocess_batch( |
| input_sentences, |
| src_lang=src_lang, |
| tgt_lang=tgt_lang, |
| ) |
|
|
| |
| inputs = tokenizer( |
| batch, |
| truncation=True, |
| padding="longest", |
| return_tensors="pt", |
| return_attention_mask=True, |
| ).to(DEVICE) |
|
|
| |
| with torch.no_grad(): |
| generated_tokens = model.generate( |
| **inputs, |
| use_cache=True, |
| min_length=0, |
| max_length=256, |
| num_beams=5, |
| num_return_sequences=1, |
| ) |
|
|
| |
| with tokenizer.as_target_tokenizer(): |
| generated_tokens = tokenizer.batch_decode( |
| generated_tokens.detach().cpu().tolist(), |
| skip_special_tokens=True, |
| clean_up_tokenization_spaces=True, |
| ) |
|
|
| |
| translations = ip.postprocess_batch(generated_tokens, lang=tgt_lang) |
|
|
| for input_sentence, translation in zip(input_sentences, translations): |
| print(f"{src_lang}: {input_sentence}") |
| print(f"{tgt_lang}: {translation}") |
|
|