GCP上のDebian環境へのESPnet導入

こんにちは、AIチームの杉山です。本年もよろしくお願いいたします。今年は音声処理にも力を入れていきたいと思います。
そこで今回はGCP上のVMインスタンスにESPnetを導入し、学習済みモデル(Eng.)でwavファイルを認識するまでの手順を紹介したいと思います。
OSの関係か、公式ドキュメント^1の手順通りに実行してもすんなりインストールできずかなり手こずったため、同じ状況で困っている人の役に立てばと、試行錯誤のあれこれをすっ飛ばして最終的な手順を共有させてもらいます。

ESPnetとは

ESPnetとはEnd-to-Endで音声処理を行うOSSで、Apache2.0ライセンスで開発されています。
特徴としてはDeep LearningベースでEnd-to-Endに処理を行うことができるため、ユーザーは音声認識/合成にこれまで必要だった各種モジュール(前処理・特徴量抽出・音響モデル・etc.)を意識することなく使用することができます。^2

私のように音声処理をやりたいが、Deep Learningは完全に理解した(?)ものの音声周りのバックグラウンドがなく旧来の音響/言語モデル型を0から勉強するのはちょっと…みたいな方が敷居を低く使えるソフトウェアとなっています。

環境

プラダクト適用時にはLinux系のサーバーで運用することを想定し、手元のMacではなくLinux環境に導入することを目指します。
ただし手元にLinux環境がなかったため、今回はGCEに以下のスペックのVMインスタンスを立ててそちらに導入します。

また、ESPnetのバージョンは0.5.3時点で検証を行いました。

パッケージのインストール

ESPnetのビルドに必要な各種パッケージをインストールします。

sudo apt-get install make git zlib1g-dev bc g++ automake autoconf bzip2 unzip sox libtool subversion gfortran cmake

コマンドにすると1行ですが、それなりの工数がかかって辿り着いた1行なので、これが皆さんのお役に立てば幸いです…!
(後段でビルドエラーが出る場合はこっそり教えてください;;)

ESP Netのインストール

まずはリポジトリからcloneしてきてmakeします。

git clone http://github.com/espnet/espnet.git
cd espnet/tools/
make -j n (n=vCPU*2が目安)

venv環境が作成されるので、そこに必要なパッケージをインストールします。

source ~/espnet/tools/venv/bin/activate
pip install warpctc-pytorch10-cpu
pip install protobuf -U

数値計算ライブラリをインストールします。

~/espnet/tools/kaldi/tools/extras/install_mkl.sh

最後にmakeして完成(それなりに時間がかかります)

make CUPY_VERSION='' -j 4

学習済みモデルでの音声認識

エラーなくインストールができていれば、これで音声認識を行うことができるようになっているため、実際に試してみましょう。
今回は簡単のために、学習済みのモデルを使用します。残念ながら日本語の学習済みモデルは含まれないため、英語のモデルのうちtedlium2.rnn.v1を使用します。
入力するファイルはwav形式である必要があり、16000kHzが標準なのでそれに従いました。
ここでは以下の文章を自分で読み上げ、上記形式で録音し入力として与えます。

My name is Sugiyama, and I am a data scientist.

実行するコマンドはこちら。

cd ~/espnet/egs/tedlium2/asr1/
../../../utils/recog_wav.sh --models tedlium2.rnn.v1 音声ファイル 

認識結果はこちら

私の発音のせいで一部正しく認識されていませんが、全体としては認識されている様子がわかると思います(汗)

終わりに

このように、公開済みモデルを用いることで簡単に音声認識を行うことができました。
これから先、日本語モデルの学習〜認識や、音声合成を検証していきたいと思います。

AI Shiftでは今後、テキストでの対話だけでなく音声を扱うプロダクトも開発していきます。
音声領域の新規プロダクト開発に興味のある方は、ぜひお話させてください!

参考文献

1.https://espnet.github.io/espnet/
2.https://www.slideshare.net/JiroNishitoba/20180609-chainer-meetupespnet