This model is an
optimized fine-tuned version of
Helsinki-NLP/opus-mt-id-en specifically designed for
real-time meeting translation from Indonesian to English.
1from transformers import MarianMTModel, MarianTokenizer
2
3# Load model and tokenizer
4model_name = "dhintech/marian-tedtalks-id-en"
5tokenizer = MarianTokenizer.from_pretrained(model_name)
6model = MarianMTModel.from_pretrained(model_name)
7
8# Translate Indonesian to English
9def translate(text):
10 inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=96)
11 outputs = model.generate(
12 **inputs,
13 max_length=96,
14 num_beams=3, # Optimized for speed
15 early_stopping=True,
16 do_sample=False
17 )
18 return tokenizer.decode(outputs[0], skip_special_tokens=True)
19
20# Example usage
21indonesian_text = "Selamat pagi, mari kita mulai rapat hari ini."
22english_translation = translate(indonesian_text)
23print(english_translation)
24# Output: "Good morning, let's start today's meeting."
1import time
2from transformers import MarianMTModel, MarianTokenizer
3import torch
4
5class OptimizedMeetingTranslator:
6 def __init__(self, model_name="dhintech/marian-tedtalks-id-en"):
7 self.tokenizer = MarianTokenizer.from_pretrained(model_name)
8 self.model = MarianMTModel.from_pretrained(model_name)
9
10 # Optimize for inference
11 self.model.eval()
12 if torch.cuda.is_available():
13 self.model = self.model.cuda()
14
15 def translate(self, text, max_length=96):
16 start_time = time.time()
17
18 inputs = self.tokenizer(
19 text,
20 return_tensors="pt",
21 padding=True,
22 truncation=True,
23 max_length=max_length
24 )
25
26 if torch.cuda.is_available():
27 inputs = {k: v.cuda() for k, v in inputs.items()}
28
29 with torch.no_grad():
30 outputs = self.model.generate(
31 **inputs,
32 max_length=max_length,
33 num_beams=3,
34 early_stopping=True,
35 do_sample=False,
36 pad_token_id=self.tokenizer.pad_token_id
37 )
38
39 translation = self.tokenizer.decode(outputs[0], skip_special_tokens=True)
40 translation_time = time.time() - start_time
41
42 return {
43 'translation': translation,
44 'time': translation_time,
45 'input_length': len(text.split()),
46 'output_length': len(translation.split())
47 }
48
49# Usage example
50translator = OptimizedMeetingTranslator()
51result = translator.translate("Apakah ada pertanyaan mengenai proposal ini?")
52print(f"Translation: {result['translation']}")
53print(f"Time: {result['time']:.3f}s")
1def batch_translate(sentences, translator):
2 results = []
3 total_time = 0
4
5 for sentence in sentences:
6 result = translator.translate(sentence)
7 results.append(result)
8 total_time += result['time']
9
10 return {
11 'results': results,
12 'total_time': total_time,
13 'average_time': total_time / len(sentences),
14 'sentences_per_second': len(sentences) / total_time
15 }
16
17# Example batch translation
18meeting_sentences = [
19 "Selamat pagi, mari kita mulai rapat hari ini.",
20 "Apakah ada pertanyaan mengenai proposal ini?",
21 "Tim marketing akan bertanggung jawab untuk strategi ini.",
22 "Mari kita diskusikan timeline implementasi project ini."
23]
24
25batch_results = batch_translate(meeting_sentences, translator)
26print(f"Average translation time: {batch_results['average_time']:.3f}s")
27print(f"Throughput: {batch_results['sentences_per_second']:.1f} sentences/second")
1@misc{marian-id-en-optimized-2025,
2 title={MarianMT Indonesian-English Translation (Optimized for Real-Time Meetings)},
3 author={DhinTech},
4 year={2025},
5 publisher={Hugging Face},
6 journal={Hugging Face Model Hub},
7 howpublished={\url{https://huggingface.co/dhintech/marian-tedtalks-id-en}},
8 note={Fine-tuned on TED Talks corpus with meeting-specific optimizations}
9}