|
--- |
|
inference: true |
|
tags: |
|
- SeamlessM4T |
|
- seamless_m4t |
|
license: cc-by-nc-4.0 |
|
library_name: transformers |
|
--- |
|
|
|
# SeamlessM4T Medium |
|
|
|
SeamlessM4T is a collection of models designed to provide high quality translation, allowing people from different |
|
linguistic communities to communicate effortlessly through speech and text. |
|
|
|
This repository hosts 🤗 Hugging Face's [implementation](https://moon-ci-docs.huggingface.co/docs/transformers/pr_25693/en/model_doc/seamless_m4t) of SeamlessM4T. You can find the original weights, as well as a guide on how to run them in the original hub repositories ([large](https://huggingface.co/facebook/seamless-m4t-large) and [medium](https://huggingface.co/facebook/seamless-m4t-medium) checkpoints). |
|
|
|
SeamlessM4T Medium covers: |
|
- 📥 101 languages for speech input |
|
- ⌨️ [196 Languages](https://huggingface.co/ylacombe/hf-seamless-m4t-medium/blob/main/tokenizer_config.json#L1887-L2089) for text input/output |
|
- 🗣️ [35 languages](https://huggingface.co/ylacombe/hf-seamless-m4t-medium/blob/main/generation_config.json#L253-L288) for speech output. |
|
|
|
This is the "medium" variant of the unified model, which enables multiple tasks without relying on multiple separate models: |
|
- Speech-to-speech translation (S2ST) |
|
- Speech-to-text translation (S2TT) |
|
- Text-to-speech translation (T2ST) |
|
- Text-to-text translation (T2TT) |
|
- Automatic speech recognition (ASR) |
|
|
|
You can perform all the above tasks from one single model, [`SeamlessM4TModel`](https://moon-ci-docs.huggingface.co/docs/transformers/pr_25693/en/model_doc/seamless_m4t#transformers.SeamlessM4TModel), but each task also has its own dedicated sub-model. |
|
|
|
|
|
## 🤗 Usage |
|
|
|
First, load the processor and a checkpoint of the model: |
|
|
|
```python |
|
>>> from transformers import AutoProcessor, SeamlessM4TModel |
|
|
|
>>> processor = AutoProcessor.from_pretrained("facebook/hf-seamless-m4t-medium") |
|
>>> model = SeamlessM4TModel.from_pretrained("facebook/hf-seamless-m4t-medium") |
|
``` |
|
|
|
You can seamlessly use this model on text or on audio, to generated either translated text or translated audio. |
|
|
|
Here is how to use the processor to process text and audio: |
|
|
|
```python |
|
>>> # let's load an audio sample from an Arabic speech corpus |
|
>>> from datasets import load_dataset |
|
>>> dataset = load_dataset("arabic_speech_corpus", split="test", streaming=True) |
|
>>> audio_sample = next(iter(dataset))["audio"] |
|
|
|
>>> # now, process it |
|
>>> audio_inputs = processor(audios=audio_sample["array"], return_tensors="pt") |
|
|
|
>>> # now, process some English test as well |
|
>>> text_inputs = processor(text = "Hello, my dog is cute", src_lang="eng", return_tensors="pt") |
|
``` |
|
|
|
|
|
### Speech |
|
|
|
[`SeamlessM4TModel`] can *seamlessly* generate text or speech with few or no changes. Let's target Russian voice translation: |
|
|
|
```python |
|
>>> audio_array_from_text = model.generate(**text_inputs, tgt_lang="rus")[0].cpu().numpy().squeeze() |
|
>>> audio_array_from_audio = model.generate(**audio_inputs, tgt_lang="rus")[0].cpu().numpy().squeeze() |
|
``` |
|
|
|
With basically the same code, I've translated English text and Arabic speech to Russian speech samples. |
|
|
|
### Text |
|
|
|
Similarly, you can generate translated text from audio files or from text with the same model. You only have to pass `generate_speech=False` to [`SeamlessM4TModel.generate`]. |
|
This time, let's translate to French. |
|
|
|
```python |
|
>>> # from audio |
|
>>> output_tokens = model.generate(**audio_inputs, tgt_lang="fra", generate_speech=False) |
|
>>> translated_text_from_audio = processor.decode(output_tokens[0].tolist()[0], skip_special_tokens=True) |
|
|
|
>>> # from text |
|
>>> output_tokens = model.generate(**text_inputs, tgt_lang="fra", generate_speech=False) |
|
>>> translated_text_from_text = processor.decode(output_tokens[0].tolist()[0], skip_special_tokens=True) |
|
``` |
|
|
|
### Tips |
|
|
|
|
|
#### 1. Use dedicated models |
|
|
|
[`SeamlessM4TModel`] is transformers top level model to generate speech and text, but you can also use dedicated models that perform the task without additional components, thus reducing the memory footprint. |
|
For example, you can replace the audio-to-audio generation snippet with the model dedicated to the S2ST task, the rest is exactly the same code: |
|
|
|
```python |
|
>>> from transformers import SeamlessM4TForSpeechToSpeech |
|
>>> model = SeamlessM4TForSpeechToSpeech.from_pretrained("facebook/hf-seamless-m4t-medium") |
|
``` |
|
|
|
Or you can replace the text-to-text generation snippet with the model dedicated to the T2TT task, you only have to remove `generate_speech=False`. |
|
|
|
```python |
|
>>> from transformers import SeamlessM4TForTextToText |
|
>>> model = SeamlessM4TForTextToText.from_pretrained("facebook/hf-seamless-m4t-medium") |
|
``` |
|
|
|
Feel free to try out [`SeamlessM4TForSpeechToText`] and [`SeamlessM4TForTextToSpeech`] as well. |
|
|
|
#### 2. Change the speaker identity |
|
|
|
You have the possibility to change the speaker used for speech synthesis with the `spkr_id` argument. Some `spkr_id` works better than other for some languages! |
|
|
|
#### 3. Change the speaker identity |
|
|
|
You can use different [generation strategies](./generation_strategies) for speech and text generation, e.g `.generate(input_ids=input_ids, text_num_beams=4, speech_do_sample=True)` which will successively perform beam-search decoding on the text model, and multinomial sampling on the speech model. |
|
|
|
#### 4. Generate speech and text at the same time |
|
|
|
Use `return_intermediate_token_ids=True` with [`SeamlessM4TModel`] to return both speech and text ! |