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

はじめに

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

f:id:shirowanisan:20210123175215p:plain

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

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

f:id:shirowanisan:20210123182057p:plain

テキスト処理ライブラリ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