S2TT(Speech-to-Text Translation)為將語音轉為文本的模型,轉譯語言可以選擇。不管是輸入及輸出都可以選擇語言,所涵蓋的語言代號請參考連結:SeamlessM4T語言別代號。本篇使用SeamlessM4T的S2TT功能,看看使用流程是否容易上手,以及翻譯結果的準確性。
SeamlessM4T的安裝參考SeamlessM4T安裝及使用環境建置
先導入模型,本次推出的SeamlessM4T有三種型號:seamlessM4T_large與seamlessM4T_large。small版本只支援少量語言。以large版本為例,執行以下程式碼後即已備好模型:
import torch
from seamless_communication.models.inference import Translator
*# Initialize a Translator object with a multitask model, vocoder on the GPU.*
translator = Translator(
"seamlessM4T_large",
"vocoder_36langs",
torch.device("cuda:0"),
torch.float16,
)
此步驟的用意為在GPU上初始化一個轉譯器,選用模型"seamlessM4T_large",以及聲碼器"vocoder_36langs",官方建議選擇半精度浮點數(float16)可能是因為要節省記憶體,但可能因此影響翻譯精準度。
而S2TT功能的輸入需為音檔格式,而音檔格式取樣率限定為16kHz,若音檔取樣率不是16kHz,MetaAI提供以下程式碼轉換供使用者轉換自己的音檔取樣率:
import torchaudio
resample_rate = 16000
waveform, sample_rate = torchaudio.load(<path_to_input_audio>)
resampler = torchaudio.transforms.Resample(sample_rate, resample_rate, dtype=waveform.dtype)
resampled_waveform = resampler(waveform)
torchaudio.save(<path_to_resampled_audio>, resampled_waveform, resample_rate)
我使用的音檔為英文語音: ”The weather forecast says it will rain tonight.”播放
將此音檔路徑丟入轉譯器translator中,設定模型為”s2tt”,目標語言為中文(官方公布的代碼為cmn),翻譯結果為”天气预报说今晚会下雨 ⁇”。
translated_text, _, _ = translator.predict(
"./input_s2tt.wav",
"s2tt",
tgt_lang="cmn"
)
print(translated_text) #天气预报说今晚会下雨 ⁇
不知為何他轉譯的中文後面有兩個問號,不過翻譯結果算是滿精準的。在使用流程上可以說是簡單容易好上手,讓筆者相當好奇背後的程式碼結構,非常值得研究。