最近 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.git
cd seamless_communication
git checkout c82b98 # (Optional) 這是筆者最後測試的版本
pip install .
這東西要裝蠻久的,可以考慮借用 Colab 的超強網路快速搭建環境出來用。如果是在自己的 Conda 環境裡面,還需要額外裝一個 libsndfile
套件:
conda install -y -c conda-forge libsndfile
目前有 seamlessM4T_large
與 seamlessM4T_medium
可以選用,參數量分別為 2.3B 與 1.2B 兩種規模,首先初始化一個 Translator
出來:
import torch
from seamless_communication.models.inference import Translator
model = "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 = results
print(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 Recognitioneng
與 cmn
是語言代碼,分別是「英文」與「普通話」的意思。詳細的代碼列表可以參考這個檔案或者原論文第 14 頁。根據論文所述,有些語言只支援文字,有些語言只支援語音,而目前支援語音的部份約有三十幾種語言。在 T2ST
與 T2TT
裡面,必須要給 src_lang
代表來源語言是什麼。
回傳的 translated_text
, wav
, sr
分別是翻譯後的文字、音檔內容與音檔的 Sample Rate 等資訊,這裡可以透過 torchaudio
將結果存為音檔:
import torchaudio
torchaudio.save("output.wav", wav.squeeze(0).cpu(), sr)
如果是使用 Jupyter Notebook 或 Colab 也可以直接將音檔播放出來:
from IPython.display import Audio
Audio(wav.squeeze(0).cpu(), rate=sr)
上面合成出來的英文語音,聽起來還算不錯。接下來我們將同樣這段語音轉回中文看看:
results = translator.predict(
input="result_t2st.wav",
task_str="S2ST",
tgt_lang="cmn",
)
translated_text, wav, sr = results
print(translated_text) # 這是一個美好的日子
這樣就完成反向轉換了,同樣可以用上述方法播放出來聽看看。
筆者嘗試了一些不同的句子,發現效果落差挺大的。撇除中文的口音與機械音很重以外,當文本長度拉長時,轉換出來的語音就會開始變的很奇怪。有些句子就算很短,也會有瘋狂跳針的情況。目前測試下來,雖然是個有趣的模型,但顯然還不夠強大,看來我們距離萬能的翻譯蒟蒻問世還有一段距離需要努力。