SeamlessM4T-v2 T2ST/T2TT Lite Model

Extracted from facebook/seamless-m4t-v2-large, containing only T2ST and T2TT components.

Original Model: facebook/seamless-m4t-v2-large

Official Documentation: SeamlessM4T-v2 Documentation

Note: This package only reorganizes publicly available weights from Meta's original model for T2ST/T2TT usage. No new training or fine-tuning is introduced. All rights of the model and weights belong to their original owner.

Supported Features

  • T2TT (Text-to-Text Translation): Multilingual text translation
  • T2ST (Text-to-Speech Translation): Text-to-speech translation with voice control
  • Multi-Speaker Support: 200 different speaker voices
  • 96 Languages: Supports text translation and speech synthesis

Included Components

Model Weights

  • text_encoder: Text encoder (shared by T2TT and T2ST)
  • text_decoder + lm_head: Text decoder (T2TT)
  • t2u_model: Text-to-unit encoder-decoder (T2ST, contains t2u_encoder and t2u_decoder)
  • vocoder: HiFi-GAN vocoder, includes 200 speaker embeddings (T2ST)
  • shared.weight: Shared word embeddings
  • lang_embed: Language embeddings

Model Size

  • Original Model: ~8.6 GB
  • Lite Model: ~6.2 GB
  • Removed Weights: 802 (speech_encoder)
  • Space Saved: ~2.4 GB

Usage Examples

1. Basic T2TT: Text-to-Text Translation

from transformers import SeamlessM4Tv2Model, AutoProcessor

# Load model
model = SeamlessM4Tv2Model.from_pretrained("jaman21/seamless-m4t-v2-t2tt-t2st")
processor = AutoProcessor.from_pretrained("jaman21/seamless-m4t-v2-t2tt-t2st")

# Translate text
text_inputs = processor(text="Hello, how are you?", src_lang="eng", return_tensors="pt")
output_tokens = model.generate(**text_inputs, tgt_lang="fra", generate_speech=False)
translated_text = processor.decode(output_tokens[0].tolist()[0], skip_special_tokens=True)
print(translated_text)  # "Bonjour, comment allez-vous?"

2. Basic T2ST: Text-to-Speech Translation

import torchaudio

# Translate text to speech
text_inputs = processor(text="Hello world", src_lang="eng", return_tensors="pt")
audio_array = model.generate(**text_inputs, tgt_lang="cmn", generate_speech=True)[0].cpu().numpy().squeeze()

# Save audio (sample rate: 16000 Hz)
torchaudio.save("output.wav", audio_array, 16000)
# Use different speaker IDs (0-199) to get different voice characteristics
text_inputs = processor(text="Good morning!", src_lang="eng", return_tensors="pt")

# Speaker 0 - default voice (pretrained)
audio_spk0 = model.generate(**text_inputs, tgt_lang="spa", generate_speech=True, speaker_id=0)

# Speaker 5 - different voice (pretrained)
audio_spk5 = model.generate(**text_inputs, tgt_lang="spa", generate_speech=True, speaker_id=5)

# Speaker 42 - another voice option (pretrained)
audio_spk42 = model.generate(**text_inputs, tgt_lang="spa", generate_speech=True, speaker_id=42)

# Note: Different speaker_id may have different effects in different target languages
# Try values between 0-199 to find the voice that best suits your use case

3. Generate Both Text and Speech Simultaneously

# Generate both translated text and speech in one call
text_inputs = processor(text="How can I help you?", src_lang="eng", return_tensors="pt")

# Set return_intermediate_token_ids=True to get both outputs
outputs = model.generate(
    **text_inputs,
    tgt_lang="deu",
    generate_speech=True,
    return_intermediate_token_ids=True
)

# Extract text
translated_text_tokens = outputs[1]  # Text tokens
translated_text = processor.decode(translated_text_tokens[0].tolist(), skip_special_tokens=True)

# Extract audio
audio_waveform = outputs[0].cpu().numpy().squeeze()

print(f"Translated text: {translated_text}")
print(f"Audio shape: {audio_waveform.shape}")

4. Advanced Generation Strategies

# Beam search for better quality (slower)
text_inputs = processor(text="The quick brown fox jumps", src_lang="eng", return_tensors="pt")
outputs = model.generate(
    **text_inputs,
    tgt_lang="jpn",
    generate_speech=False,
    num_beams=5,              # Use beam search
    max_new_tokens=256,
    early_stopping=True
)

# Sampling for more diverse output
outputs = model.generate(
    **text_inputs,
    tgt_lang="kor",
    generate_speech=False,
    do_sample=True,           # Enable sampling
    top_k=50,
    top_p=0.95,
    temperature=0.8           # 0.0-1.0: lower is more deterministic, higher is more random (affects translation quality)
)

5. Batch Processing Multiple Texts

# Process multiple texts at once
texts = [
    "Hello, how are you?",
    "What is your name?",
    "Nice to meet you!"
]

text_inputs = processor(text=texts, src_lang="eng", return_tensors="pt", padding=True)
output_tokens = model.generate(**text_inputs, tgt_lang="ita", generate_speech=False)

# Decode all outputs
translations = processor.batch_decode(output_tokens, skip_special_tokens=True)
for orig, trans in zip(texts, translations):
    print(f"{orig} -> {trans}")

6. Control Generation Length and Quality

text_inputs = processor(text="Translate this sentence", src_lang="eng", return_tensors="pt")

# Higher quality but more computationally expensive
high_quality_output = model.generate(
    **text_inputs,
    tgt_lang="rus",
    generate_speech=True,
    speaker_id=10,
    num_beams=5,              # Beam search
    max_new_tokens=512,       # Allow longer output
    length_penalty=1.0,       # No length penalty
    early_stopping=True,
    use_cache=True            # Accelerate generation
)

# Faster generation speed, acceptable quality
fast_output = model.generate(
    **text_inputs,
    tgt_lang="rus",
    generate_speech=True,
    speaker_id=10,
    num_beams=1,              # Greedy decoding for better translation quality (slower)
    max_new_tokens=256,
    use_cache=True
)

7. GPU/CPU Usage

import torch

# Move model to GPU if available
device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)

# Process inputs on the same device
text_inputs = processor(text="Hello", src_lang="eng", return_tensors="pt")
text_inputs = {k: v.to(device) for k, v in text_inputs.items()}

# Generate
with torch.inference_mode():  # More efficient than torch.no_grad()
    outputs = model.generate(**text_inputs, tgt_lang="cmn", generate_speech=True)

License

Same as the original model: CC-BY-NC-4.0

For commercial use, please refer to Meta's licensing terms.

References

Downloads last month
22
Safetensors
Model size
2B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Paper for jaman21/seamless-m4t-v2-t2tt-t2st