近年の音声合成は以下のような構造をとることが多いです。
今まで私は主に音響モデル部分を中心に記事を書いてきました。しかし意外と重要なのがこのテキスト処理部分です。今回はテキスト処理についてまとめていきます。
私も最初は自分でテキスト処理の部分を作っていたのですが、なかなか難しいです。そこで色々調べてみたところ、pyopenjtalkというテキスト処理のライブラリを知りました。結論から言うと、日本語のテキスト処理に関してはpyopenjtalkライブラリを使っていればそれで問題ないレベルで素晴らしいライブラリです。
v0.1.0がリリースされたことにより、LinuxかMacならば、単にpip installするだけでインストールできるようになりました。
pip install pyopenjtalk
pyopenjtalkは環境構築が少し難しいです。そこでgoogle colabでpyopenjtalkの環境構築が含まれているものを見つけました。以下のように環境構築をしてpyopenjtalkをインストールすれば動かすことが可能です。
!mkdir tools && cd tools && git clone https://github.com/r9y9/hts_engine_API.git
!mkdir -p tools/hts_engine_API/src/build && cd tools/hts_engine_API/src/build && \
cmake -DCMAKE_INSTALL_PREFIX=../.. .. && make -j && make install
!cd tools && git clone https://github.com/r9y9/open_jtalk.git
!mkdir -p tools/open_jtalk/src/build && cd tools/open_jtalk/src/build && \
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON \
-DHTS_ENGINE_LIB=../../../hts_engine_API/lib \
-DHTS_ENGINE_INCLUDE_DIR=../../../hts_engine_API/include .. && \
make install
!cp tools/open_jtalk/src/build/*.so* /usr/lib64-nvidia
!cd tools && git clone https://github.com/r9y9/pyopenjtalk.git
!pip install pyopenjtalk==0.0.3
参考:
環境構築が終われば、以下のようにpyopenjtalkを使って音素を取得することができます。
import pyopenjtalk
text = "こんにちは"
phones = pyopenjtalk.g2p(text, kana=False)
print(phones)
出力
k o N n i ch i w a
もともと自分でMeCabやら色々使ってテキスト処理をしていましたが、こんな便利なライブラリがあるなら早めに使っていれば良かったです。