-
Notifications
You must be signed in to change notification settings - Fork 91
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
音声合成時に読み上げテキストの読みを表す音素列を指定する機能を追加 + 様々な改善 #118
Conversation
…ng of the text to be read during speech synthesis With this feature, it is possible to specify individual readings for homonyms such as "明日 (ashita/asu)" while maintaining the Kanji representation of the read text.
discordの議論で、「ん」ではなく「'」等を割り当てるのがよいかもという意見がありましたが、それについてはどうお考えですか? |
ここはちょっと迷ってて、学習時に『読めないファイルを無理やり読み込んで使う』を考慮しないのであれば「ん」でも問題ない気はしてます。最終的にはそちらの判断にお任せします。 |
@litagin02 ついでになりますが、28f254f にてライブラリ利用時に Gradio に依存しないようにしました。 というのも、Gradio は実は import 文の実行に2秒以上かかるなど、かなり重いライブラリです (実測値) 。 ライブラリとしての Note 一度同一プロセス内で Gradio が import されていればその後の Gradio の import 文実行時に再利用されるので、何度も import 文を通る分だけ再 import が発生して重くなる…といったことはないはずです。 |
…t_vits2 as a library librosa: Originally not used under style_bert_vits2/. pyannote.audio: Required only when using the "infer style vector from audio" function during inference, but it is currently almost unused. scipy: Because it was used in only one utility function that was not needed outside of training.
@litagin02 さらについでになりますが、ライブラリとしての
ライブラリ利用者としては、ほとんど使われていない余分な依存関係が削除できるので、site-packages 以下がより軽くなるほか、PyInstaller で exe 化する際の問題が減るなどメリットが大きいです。 |
…configs/default_paths.yml when running initialize.py If configs/paths.yml itself is included in version control, differences will occur when it is changed in each environment, which is troublesome.
…ion can't be obtained
この件ですが、結局学習時に『読めないファイルを無理やり読み込んで使う』際に「ん」の音素に誤った音が割り当てられる可能性を鑑み、代わりに「'」を割り当てるように変更しました。 Note 本来『読めないファイルを無理やり読み込んで使う』は学習後の品質を鑑みると望ましくないですし、わざわざ書き起こし文中で「'」に非言語音を割り当てている方は書き起こし文自体の品質が高いことが予想されるため、ほとんどのケースで問題は起こらないはずです。 さらについでになりますが、いくつか細かな改善を行いました。
|
Improve performance by pre-compiling regular expressions that are executed many times.
@litagin02 style_bert_vits2/ 以下の NLP 系関数は比較的呼び出し回数が多いため、(パフォーマンス比較は行えていませんが) 一定の効果があるものと思います。 |
概要
TTSModel.infer()
にオプションのgiven_phone
引数を追加し、ライブラリユーザーが音声合成時の読みを手動で設定できるようにします。ライブラリユーザーが
given_phone
引数を用意すれば、音声合成時の読み上げテキストを変更することなく、読み方が複数ある熟語の読み方を変更できます (「明日」を「アシタ」ではなく「アス」と読ませるなど) 。現在も辞書登録を行えば読み方が複数ある熟語の読みを変更できますが、一回限りの場合は辞書登録が面倒ですし、他の単語と被るために辞書登録できないケースもあります。そうした際に有用です。
具体的には、ライブラリとしての
style_bert_vits2
を活用したエディターで、難読地名や固有名詞など読みを正しく取得できない場合に、ユーザー側で当該単語を正しい読みに変更した上で再度音声合成するために必要です。また、上記変更に関連して、
g2p()
実行時かつraise_yomi_error=False
が指定されている場合に「読めない文字が抜けたように扱う」のではなく、「読めない文字は全て『ん』として扱う」ように変更しました。上記のエディターで単語の読みを編集する際、読めない文字が(最初から存在しなかったかのように)欠損していると、アクセント指定を行う際に支障するためです。
よくなること
style_bert_vits2
利用時の調声の幅が広がり、より実用的になるわるくなること
adjust_word2ph()
関数に、「与えられた given_phone」と「読み上げテキストから自動生成された generated_phone」を使って差分を取り、「word2ph」内の値の合計値を「given_phone」の長さ (=音素数) に一致させるための複雑怪奇なアルゴリズムが実装されているraise_yomi_error=False
でg2p()
を呼んだ時、pyopenjtalk で読みを取得できない文字の扱い方が若干変わることraise_yomi_error=True
でg2p()
を呼んだ時は影響しない読めないファイルも無理やり読んで学習に使う
を選択している場合のみ影響する