音声合成のために日本語を音素に変換する

はじめに

近年の音声合成は以下のような構造をとることが多いです。

f:id:shirowanisan:20210123175215p:plain

今まで私は主に音響モデル部分を中心に記事を書いてきました。

しかし意外と重要なのがこのテキスト処理部分です。今回はテキスト処理についてまとめていきます。

f:id:shirowanisan:20210123182057p:plain

テキスト処理ライブラリpyopenjtalk

私も最初は自分でテキスト処理の部分を作っていたのですが、なかなか難しいです。

そこで色々調べてみたところ、pyopenjtalkというテキスト処理のライブラリを知りました。

結論から言うと、日本語のテキスト処理に関してはpyopenjtalkライブラリを使っていればそれで問題ないレベルで素晴らしいライブラリです。

GitHub - r9y9/pyopenjtalk: Python wrapper for OpenJTalk

pypenjtalkの環境構築

pyopenjtalkは環境構築が少し難しいです。

そこでgoogle colabでpyopenjtalkの環境構築が含まれているものを見つけました。

こちらはespnetと呼ばれるE2E音声合成ライブラリのデモnotebookですが、以下のnotebookの上から2ブロック目までを実行すれば、pyopenjtalkの環境構築が完了し、pyopenjtalkをimportできるようになります。

https://colab.research.google.com/github/espnet/notebook/blob/master/espnet2_tts_realtime_demo.ipynb#scrollTo=qYJvy5Q7foG4

pyopenjtalkの使い方

環境構築が終われば、以下のようにpyopenjtalkを使って音素を取得することができます。

import pyopenjtalk
text = "こんにちは"
phones = pyopenjtalk.g2p(text, kana=False)
print(phones)

出力

k o N n i ch i w a

まとめ

もともと自分でMeCabやら色々使ってテキスト処理をしていましたが、こんな便利なライブラリがあるなら早めに使っていれば良かったです。

参考文献

https://www.youtube.com/watch?v=BZxqf-Wkhig&feature=youtu.be

GitHub - espnet/espnet: End-to-End Speech Processing Toolkit