語(yǔ)音合成實(shí)戰(zhàn):用 mms-tts-uig-script_arabic-UQSpeech 讓應(yīng)用快速開(kāi)口說(shuō)話)
維吾爾語(yǔ)語(yǔ)音合成實(shí)戰(zhàn)用 mms-tts-uig-script_arabic-UQSpeech 讓應(yīng)用快速開(kāi)口說(shuō)話【免費(fèi)下載鏈接】mms-tts-uig-script_arabic-UQSpeech項(xiàng)目地址: https://ai.gitcode.com/hf_mirrors/ixxan/mms-tts-uig-script_arabic-UQSpeech想給應(yīng)用加上維吾爾語(yǔ)語(yǔ)音合成結(jié)果被卡了整整三天朋友阿迪力就遇上了主流云廠商的 TTS 服務(wù)商答復(fù)出奇一致——暫不支持該語(yǔ)種開(kāi)源方案要么沒(méi)有維吾爾語(yǔ)要么得自己攢數(shù)據(jù)從零微調(diào)。最后是mms-tts-uig-script_arabic-UQSpeech這個(gè)維吾爾語(yǔ)語(yǔ)音合成模型倉(cāng)庫(kù)解了他的燃眉之急。阿迪力做的是面向新疆本地市場(chǎng)的語(yǔ)言學(xué)習(xí) App用戶留言說(shuō)能不能加上維吾爾語(yǔ)發(fā)音。他翻遍了所有能找到的語(yǔ)音方案一度準(zhǔn)備放棄。結(jié)果這個(gè)倉(cāng)庫(kù)從 clone 到聽(tīng)到第一句維吾爾語(yǔ)只花了他十分鐘。它到底解決了什么難題一句話說(shuō)清價(jià)值先說(shuō)結(jié)論它把給應(yīng)用加維吾爾語(yǔ)語(yǔ)音這件事從幾乎不可能變成了十幾行代碼。為什么能這么輕它已經(jīng)在標(biāo)準(zhǔn)維吾爾語(yǔ)阿拉伯字母書寫上完成了微調(diào)你不需要訓(xùn)練數(shù)據(jù)它基于 Facebook MMS-TTS 架構(gòu)transformers 庫(kù)原生支持你不需要懂聲學(xué)模型它的體積還很克制——隱藏層 192 維、6 層網(wǎng)絡(luò)、詞表只有 41 個(gè)符號(hào)普通 CPU 就能實(shí)時(shí)出聲。三分鐘跑通先聽(tīng)到第一句維吾爾語(yǔ)再說(shuō)先別管原理讓耳朵先嘗到甜頭。把倉(cāng)庫(kù) clone 到本地git clone https://gitcode.com/hf_mirrors/ixxan/mms-tts-uig-script_arabic-UQSpeech裝好transformers和scipy之后寫一個(gè)不到二十行的腳本from transformers import VitsModel, VitsTokenizer import torch # 從本地目錄加載模型與分詞器權(quán)重就在倉(cāng)庫(kù)里 model VitsModel.from_pretrained(./mms-tts-uig-script_arabic-UQSpeech) tok VitsTokenizer.from_pretrained(./mms-tts-uig-script_arabic-UQSpeech) # 輸入維吾爾語(yǔ)你好模型輸出 16kHz 的波形 inputs tok(??????????, return_tensorspt) with torch.no_grad(): audio model(**inputs).waveform[0] # 取第 0 個(gè)樣本形狀 (采樣點(diǎn)數(shù),) import scipy.io.wavfile as wavfile wavfile.write(hello.wav, 16000, audio.numpy())跑完hello.wav就是一句清晰的維吾爾語(yǔ)問(wèn)候。全程沒(méi)有一行訓(xùn)練代碼。?一次真實(shí)接入把生詞本變成會(huì)說(shuō)話的單詞卡光出一個(gè) wav 不過(guò)癮我們做一個(gè)真正能用的東西命令行生詞朗讀工具。用戶在終端輸入維吾爾語(yǔ)單詞程序生成語(yǔ)音文件方便反復(fù)跟讀。第一步把文本轉(zhuǎn)語(yǔ)音封裝成函數(shù)關(guān)鍵不在于模型本身而在于把推理邏輯收斂成一個(gè)可復(fù)用函數(shù)之后無(wú)論接 CLI 還是 Web 都順手def synth(text: str, out_path: str): inputs tok(text, return_tensorspt) with torch.inference_mode(): # 推理模式比 no_grad 更省內(nèi)存 wav model(**inputs).waveform[0] wavfile.write(out_path, 16000, wav.numpy())第二步長(zhǎng)文本要切句而不是硬塞生詞都很短但教材段落往往幾百字。把整段一次塞進(jìn)去輸出序列會(huì)很長(zhǎng)內(nèi)存吃不消。我的做法是按句號(hào)、逗號(hào)把文本切開(kāi)逐句合成再拼接。這樣既穩(wěn)定將來(lái)想做逐句對(duì)齊也容易。第三步給設(shè)備選擇留個(gè)口子有 GPU 用 GPU沒(méi)有就 CPU兩行代碼的事model model.to(cuda if torch.cuda.is_available() else cpu)到這里工具就能用了。你會(huì)發(fā)現(xiàn)整個(gè)接入過(guò)程幾乎沒(méi)有模型魔法跟調(diào)一個(gè)普通函數(shù)差不多。過(guò)來(lái)人踩過(guò)的五個(gè)坑替你提前排掉這類模型 90% 的報(bào)錯(cuò)都集中在這幾個(gè)地方坑一忘了關(guān)梯度。直接model(**inputs)會(huì)把計(jì)算圖完整保留下來(lái)長(zhǎng)文本時(shí)內(nèi)存直接爆掉。務(wù)必包進(jìn)torch.no_grad()或torch.inference_mode()。坑二分詞器用錯(cuò)型號(hào)。必須用VitsTokenizer它的 pad 標(biāo)記是維吾爾字母?未知標(biāo)記是unk。要是手滑用了通用分詞器文本會(huì)被切得面目全非合成出來(lái)全是雜音。加載完順手print(tok.pad_token)確認(rèn)一下比事后排查強(qiáng)一百倍??尤龑?wav 前沒(méi)取[0]。waveform的形狀是(batch, 采樣點(diǎn)數(shù))直接轉(zhuǎn) numpy 寫文件會(huì)得到二維數(shù)組要么報(bào)錯(cuò)要么寫出刺耳噪聲。記住先取[0]??铀牟蓸勇蕦戝e(cuò)。這個(gè)模型固定輸出 16kHz。你按 44.1kHz 寫文件頭聲音會(huì)明顯變尖變快像開(kāi)了倍速。模型輸出多少文件頭就寫多少。??坑五輸入了模型不認(rèn)識(shí)的字符。它只認(rèn)阿拉伯字母書寫的維吾爾語(yǔ)拉丁轉(zhuǎn)寫、西里爾字母統(tǒng)統(tǒng)不在詞表里全都會(huì)落到unk讀出來(lái)就是噪聲。坦誠(chéng)的取舍它擅長(zhǎng)什么不適合什么擅長(zhǎng)的事標(biāo)準(zhǔn)維吾爾語(yǔ)的單說(shuō)話人朗讀自然度在開(kāi)源方案里相當(dāng)能打模型文件小、CPU 可跑、離線可用很適合教育類、工具類小應(yīng)用。不適合的也別硬上它只有一個(gè)說(shuō)話人num_speakers: 1換不了音色也沒(méi)有情感控制遇到網(wǎng)絡(luò)新詞、生僻符號(hào)會(huì)落到unk。更要緊的是許可證為 CC BY-NC 4.0非商業(yè)用途隨便用商用前務(wù)必先確認(rèn)授權(quán)邊界。橫向?qū)Ρ纫幌赂髲S TTS API 比它免費(fèi)、可控、能離線跟英文中文模型比它是維吾爾語(yǔ)這個(gè)語(yǔ)種里少數(shù)能直接落地的開(kāi)源選擇跟從零微調(diào) MMS 比它替你省掉了數(shù)據(jù)采集和 GPU 訓(xùn)練的時(shí)間成本。下一步行動(dòng)清單三十分鐘讓項(xiàng)目開(kāi)口說(shuō)話給你一份馬上能執(zhí)行的清單clone 倉(cāng)庫(kù)跑通上面的最小示例先親耳聽(tīng)一句維吾爾語(yǔ)把synth函數(shù)接進(jìn)你的項(xiàng)目換成真實(shí)業(yè)務(wù)文本打開(kāi)倉(cāng)庫(kù)里的config.json試著調(diào)speaking_rate和noise_scale感受語(yǔ)速與風(fēng)格的變化確認(rèn)使用場(chǎng)景符合 CC BY-NC 4.0 許可再談上線。讓程序開(kāi)口說(shuō)維吾爾語(yǔ)不需要高深門檻一個(gè)微調(diào)好的模型加十幾行代碼就夠了?,F(xiàn)在就去跑第一句吧——十分鐘后你聽(tīng)到的聲音就是最好的回報(bào)?!久赓M(fèi)下載鏈接】mms-tts-uig-script_arabic-UQSpeech項(xiàng)目地址: https://ai.gitcode.com/hf_mirrors/ixxan/mms-tts-uig-script_arabic-UQSpeech創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考