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

今まで私は主に音響モデル部分を中心に記事を書いてきました。
しかし意外と重要なのがこのテキスト処理部分です。今回はテキスト処理についてまとめていきます。

テキスト処理ライブラリpyopenjtalk
私も最初は自分でテキスト処理の部分を作っていたのですが、なかなか難しいです。
そこで色々調べてみたところ、pyopenjtalkというテキスト処理のライブラリを知りました。
結論から言うと、日本語のテキスト処理に関してはpyopenjtalkライブラリを使っていればそれで問題ないレベルで素晴らしいライブラリです。
GitHub - r9y9/pyopenjtalk: Python wrapper for OpenJTalk
pypenjtalkの環境構築
2021-03-24以降
v0.1.0がリリースされたことにより、LinuxかMacならば、単にpip installするだけでインストールできるようになりました。
pip install pyopenjtalk
2021-03-24より前
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
参考:
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