🚀 用于日语的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.