推理:true
标签:
- SeamlessM4T
- seamless_m4t
许可证:cc-by-nc-4.0
库名称:transformers
管道标签:文本转语音
SeamlessM4T 中型
SeamlessM4T 是一系列旨在提供高质量翻译的模型集合,使来自不同语言社区的人们能够通过语音和文本轻松交流。
此仓库托管了 🤗 Hugging Face 的 SeamlessM4T 实现。您可以在原始中心仓库中找到原始权重以及运行指南(大型 和 中型 检查点)。
🌟 SeamlessM4T v2 是此版本的改进版,采用了新颖的架构,已在此发布](https://huggingface.co/facebook/seamless-m4t-v2-large)。
这个新模型在质量和语音生成任务的推理速度上均优于 SeamlessM4T v1。
🤗 Transformers 也支持 SeamlessM4T v2,更多信息请参阅 此新版本的模型卡片 或直接查看 🤗 Transformers 文档。
SeamlessM4T 中型支持:
这是统一模型的“中型”变体,无需依赖多个独立模型即可执行多种任务:
- 语音到语音翻译(S2ST)
- 语音到文本翻译(S2TT)
- 文本到语音翻译(T2ST)
- 文本到文本翻译(T2TT)
- 自动语音识别(ASR)
您可以通过单一模型 SeamlessM4TModel
执行上述所有任务,但每个任务也有其专用的子模型。
🤗 使用方式
首先,加载处理器和模型的检查点:
>>> from transformers import AutoProcessor, SeamlessM4TModel
>>> processor = AutoProcessor.from_pretrained("facebook/hf-seamless-m4t-medium")
>>> model = SeamlessM4TModel.from_pretrained("facebook/hf-seamless-m4t-medium")
您可以无缝地将此模型用于文本或音频,生成翻译后的文本或语音。
以下是使用处理器处理文本和音频的方法:
>>>
>>> from datasets import load_dataset
>>> dataset = load_dataset("arabic_speech_corpus", split="test", streaming=True)
>>> audio_sample = next(iter(dataset))["audio"]
>>>
>>> audio_inputs = processor(audios=audio_sample["array"], return_tensors="pt")
>>>
>>> text_inputs = processor(text = "Hello, my dog is cute", src_lang="eng", return_tensors="pt")
语音
SeamlessM4TModel
可以无缝生成文本或语音,几乎无需修改。让我们以俄语语音翻译为目标:
>>> 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()
通过基本相同的代码,我已将英文文本和阿拉伯语语音翻译为俄语语音样本。
文本
类似地,您可以从音频文件或文本生成翻译后的文本,使用相同的模型。只需向 SeamlessM4TModel.generate
传递 generate_speech=False
即可。
这次,我们翻译成法语。
>>>
>>> output_tokens = model.generate(**audio_inputs, tgt_lang="fra", generate_speech=False)
>>> translated_text_from_audio = processor.decode(output_tokens[0].tolist(), skip_special_tokens=True)
>>>
>>> output_tokens = model.generate(**text_inputs, tgt_lang="fra", generate_speech=False)
>>> translated_text_from_text = processor.decode(output_tokens[0].tolist(), skip_special_tokens=True)
技巧
1. 使用专用模型
SeamlessM4TModel
是用于生成语音和文本的顶级转换器模型,但您也可以使用专用于任务的模型,无需额外组件,从而减少内存占用。
例如,您可以用专用于 S2ST 任务的模型替换音频到音频生成的代码片段,其余代码完全相同:
>>> from transformers import SeamlessM4TForSpeechToSpeech
>>> model = SeamlessM4TForSpeechToSpeech.from_pretrained("facebook/hf-seamless-m4t-medium")
或者,您可以用专用于 T2TT 任务的模型替换文本到文本生成的代码片段,只需移除 generate_speech=False
。
>>> from transformers import SeamlessM4TForTextToText
>>> model = SeamlessM4TForTextToText.from_pretrained("facebook/hf-seamless-m4t-medium")
不妨也试试 SeamlessM4TForSpeechToText
和 SeamlessM4TForTextToSpeech
。
2. 更改说话者身份
您可以使用 spkr_id
参数更改用于语音合成的说话者。某些 spkr_id
对某些语言效果更好!
3. 更改生成策略
您可以为语音和文本生成使用不同的 生成策略,例如 .generate(input_ids=input_ids, text_num_beams=4, speech_do_sample=True)
,这将依次对文本模型执行束搜索解码,对语音模型执行多项式采样。
4. 同时生成语音和文本
使用 return_intermediate_token_ids=True
与 SeamlessM4TModel
可同时返回语音和文本!