🚀 用於日語的SpeechT5(TTS任務)
本項目是針對日語語音合成(文本轉語音)對SpeechT5模型進行微調的成果,在JVS數據集上完成訓練。該模型利用了包含100位說話者的JVS數據集,從中精心製作了說話者嵌入,根據男女聲類型進行區分,生成了獨特的說話者嵌入向量。這個16維的說話者嵌入向量旨在提供獨立於任何特定說話者的語音質量。
模型基於 microsoft/speecht5_tts 進行訓練,使用由 Open Jtalk 驅動的改進型分詞器。
🚀 快速開始
安裝依賴
pip install transformers sentencepiece pyopnjtalk
下載修改後的代碼
curl -O https://huggingface.co/esnya/japanese_speecht5_tts/resolve/main/speecht5_openjtalk_tokenizer.py
運行示例代碼
(SpeechToTextPipeline
尚未發佈。)
import numpy as np
from transformers import (
SpeechT5ForTextToSpeech,
SpeechT5HifiGan,
SpeechT5FeatureExtractor,
SpeechT5Processor,
)
from speecht5_openjtalk_tokenizer import SpeechT5OpenjtalkTokenizer
import soundfile
import torch
model_name = "esnya/japanese_speecht5_tts"
with torch.no_grad():
model = SpeechT5ForTextToSpeech.from_pretrained(
model_name, device_map="cuda", torch_dtype=torch.bfloat16
)
tokenizer = SpeechT5OpenjtalkTokenizer.from_pretrained(model_name)
feature_extractor = SpeechT5FeatureExtractor.from_pretrained(model_name)
processor = SpeechT5Processor(feature_extractor, tokenizer)
vocoder = SpeechT5HifiGan.from_pretrained(
"microsoft/speecht5_hifigan", device_map="cuda", torch_dtype=torch.bfloat16
)
input = "吾輩は貓である。名前はまだ無い。どこで生れたかとんと見當がつかぬ。"
input_ids = processor(text=input, return_tensors="pt").input_ids.to(model.device)
speaker_embeddings = np.random.uniform(
-1, 1, (1, 16)
)
speaker_embeddings = torch.FloatTensor(speaker_embeddings).to(
device=model.device, dtype=model.dtype
)
waveform = model.generate_speech(
input_ids,
speaker_embeddings,
vocoder=vocoder,
)
waveform = waveform / waveform.abs().max()
waveform = waveform.reshape(-1).cpu().float().numpy()
soundfile.write(
"output.wav",
waveform,
vocoder.config.sampling_rate,
)
✨ 主要特性
- 針對性微調:針對日語語音合成任務對SpeechT5模型進行微調,適配日語語音特點。
- 多樣化說話者嵌入:利用JVS數據集製作說話者嵌入,區分男女聲類型,生成獨立於特定說話者的語音質量。
- 改進型分詞器:採用基於Open Jtalk的改進型分詞器,確保更準確的文本轉語音轉換。
📚 詳細文檔
模型描述
請參考 原始模型卡片。本項目修改後的代碼遵循MIT許可證。
開發背景
開發此模型的動機源於SpeechT5 TTS中明顯缺乏日語生成模型,或者說此類模型極為稀缺。此外,Open Jtalk(pyopenjtalk)的g2p功能使我們能夠實現與英語模型相近的詞彙表。需要注意的是,特殊修改和增強主要應用於分詞器。與默認設置不同,我們改進後的分詞器會單獨提取並保留除發聲以外的字符,以確保更準確的文本轉語音轉換。
侷限性
該模型存在一個已知問題,當輸入多個句子時,後半部分可能會出現較長的靜音。在問題解決之前,建議將每個句子分開單獨生成,作為臨時解決方案。
📄 許可證
模型繼承了 JVS語料庫 的許可證。
🔗 相關文獻
- Shinnosuke Takamichi, Kentaro Mitsui, Yuki Saito, Tomoki Koriyama, Naoko Tanji, and Hiroshi Saruwatari, "JVS corpus: free Japanese multi-speaker voice corpus," arXiv preprint, 1908.06248, Aug. 2019.