🚀 日本語用SpeechT5 (TTSタスク)
このモデルは、JVS データセットを使用して、日本語の音声合成(テキスト読み上げ)用に微調整されたSpeechT5モデルです。JVSデータセットには100人の話者が含まれており、このデータセットから話者埋め込みを作成し、男性と女性の声のタイプに基づいて分離し、独自の話者埋め込みベクトルを生成します。この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,
)
✨ 主な機能
- 日本語音声合成:JVSデータセットを使用して日本語の音声合成に特化しています。
- 改良トークナイザー:Open Jtalkを使用したトークナイザーが改良され、より正確な音声合成を実現します。
📚 ドキュメント
モデルの説明
詳細は 元のモデルカード を参照してください。改良コードはMITライセンスの下で提供されています。
背景
このモデルを開発した動機は、SpeechT5 TTSにおける日本語生成モデルの不足にあります。また、Open Jtalk (pyopenjtalk) のg2p機能を利用することで、英語モデルに近い語彙を実現できました。特にトークナイザーに特殊な修正と改良を加え、発音以外の文字を個別に抽出して保持することで、より正確なテキスト読み上げ変換を実現しています。
制限事項
このモデルには、複数の文を入力した場合、後半部分に長い無音が生じるという既知の問題があります。この問題が解決されるまでの暫定的な解決策として、各文を個別に分割して生成することをおすすめします。
📄 ライセンス
モデルは JVS Corpus のライセンスを引き継いでいます。
🔗 関連文献
- 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.