iT邦幫忙

0

Meta SeamlessM4T 淺嚐翻譯蒟蒻的滋味

  • 分享至 

  • xImage
  •  

簡介

最近 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_largeseamlessM4T_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 Translation
  • S2TT - Speech-To-Text Translation
  • T2ST - Text-To-Speech Translation
  • T2TT - Text-To-Text Translation
  • ASR - Automatic Speech Recognition

engcmn 是語言代碼,分別是「英文」與「普通話」的意思。詳細的代碼列表可以參考這個檔案或者原論文第 14 頁。根據論文所述,有些語言只支援文字,有些語言只支援語音,而目前支援語音的部份約有三十幾種語言。在 T2STT2TT 裡面,必須要給 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)  # 這是一個美好的日子

這樣就完成反向轉換了,同樣可以用上述方法播放出來聽看看。

結論

筆者嘗試了一些不同的句子,發現效果落差挺大的。撇除中文的口音與機械音很重以外,當文本長度拉長時,轉換出來的語音就會開始變的很奇怪。有些句子就算很短,也會有瘋狂跳針的情況。目前測試下來,雖然是個有趣的模型,但顯然還不夠強大,看來我們距離萬能的翻譯蒟蒻問世還有一段距離需要努力。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言