Meta SeamlessM4T 浅嚐翻译蒟蒻的滋味

简介

最近 Meta 释出了多语多模 AI 翻译模型 SeamlessM4T,宣称支援近 100 种语言,而且有开源模型权重,于是笔者就来体验了一下这个模型,看看翻译蒟蒻是否真要问世?

这个模型的参数量并没有很大,可以在 Google Colab 轻鬆跑起来,笔者将使用方法整理至这份 Demo 里面以供参考,目前这个模型的 License 为 CC By-NC 4.0 不可商用。

SeamlessM4T - Blog | GitHub | Official Demo | HF Space Demo | Paper

安装

运作 SeamlessM4T 需要安装 seamless_communication 套件,按照以下步骤执行:

git clone https://github.com/facebookresearch/seamless_communication.gitcd seamless_communicationgit checkout c82b98  # (Optional) 这是笔者最后测试的版本pip install .

这东西要装蛮久的,可以考虑借用 Colab 的超强网路快速搭建环境出来用。如果是在自己的 Conda 环境里面,还需要额外装一个 libsndfile 套件:

conda install -y -c conda-forge libsndfile

使用

目前有 seamlessM4T_largeseamlessM4T_medium 可以选用,参数量分别为 2.3B 与 1.2B 两种规模,首先初始化一个 Translator 出来:

import torchfrom seamless_communication.models.inference import Translatormodel = "seamlessM4T_large"  # or "seamlessM4T_medium"translator = Translator(    model,    vocoder_name_or_card="vocoder_36langs",    device=torch.device("cuda:0"),    dtype=torch.float16,)

佔用的 GPU Memory 约在 5 ~ 6 GB 左右,应该是普通显卡都能跑得动。接下来,我们先用文字转语音生成一段音档试试看:

results = translator.predict(    input="今天天气真好!",    task_str="T2ST",    src_lang="cmn",    tgt_lang="eng",    spkr=0,)translated_text, wav, sr = resultsprint(translated_text)  # It's a beautiful day!

其中 task_str 是任务名称,目前共支援五种任务:

S2ST - Speech-To-Speech TranslationS2TT - Speech-To-Text TranslationT2ST - Text-To-Speech TranslationT2TT - Text-To-Text TranslationASR - Automatic Speech Recognition

engcmn 是语言代码,分别是「英文」与「普通话」的意思。详细的代码列表可以参考这个档案或者原论文第 14 页。根据论文所述,有些语言只支援文字,有些语言只支援语音,而目前支援语音的部份约有三十几种语言。在 T2STT2TT 里面,必须要给 src_lang 代表来源语言是什么。

回传的 translated_text, wav, sr 分别是翻译后的文字、音档内容与音档的 Sample Rate 等资讯,这里可以透过 torchaudio 将结果存为音档:

import torchaudiotorchaudio.save("output.wav", wav.squeeze(0).cpu(), sr)

如果是使用 Jupyter Notebook 或 Colab 也可以直接将音档播放出来:

from IPython.display import AudioAudio(wav.squeeze(0).cpu(), rate=sr)

上面合成出来的英文语音,听起来还算不错。接下来我们将同样这段语音转回中文看看:

results = translator.predict(    input="result_t2st.wav",    task_str="S2ST",    tgt_lang="cmn",)translated_text, wav, sr = resultsprint(translated_text)  # 这是一个美好的日子

这样就完成反向转换了,同样可以用上述方法播放出来听看看。

结论

笔者尝试了一些不同的句子,发现效果落差挺大的。撇除中文的口音与机械音很重以外,当文本长度拉长时,转换出来的语音就会开始变的很奇怪。有些句子就算很短,也会有疯狂跳针的情况。目前测试下来,虽然是个有趣的模型,但显然还不够强大,看来我们距离万能的翻译蒟蒻问世还有一段距离需要努力。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章