Intelligent Technology's Technical Blog

株式会社インテリジェントテクノロジーの技術情報ブログです。

Open JTalk と Amazon Polly

こんにちは。中山です。
未来のコンピュータは、もれなくしゃべるそうです。
人間が話しかけたことに対して、同じように会話で応答する。人間にとっても、これがいちばん自然なインタフェースなのでしょう。
対話によるコンピュータとのやりとりに関しては、以前も以下のような記事を書いていました。

iti.hatenablog.jp

このときは、発話した音声をテキスト変換する仕組みについての記事でした。
今回はその逆。テキストを音声に変換して、コンピュータがしゃべる、という「音声合成」の仕組みについてです。
今回、オープンソースの音声合成システムとして有名らしい「Open JTalk」と、もうひとつ、昨年度に公開されて、すごいと話題らしい「Amazon Polly」について、比較・検証してみます。

Open JTalk を試す

日本語用音声合成システムである「Open JTalk」は、Linux 環境で動作する、ということですので、今回は Ubuntu(14.04.5)の上で、Open JTalk をインストールし、動かしてみます。

インストール

apt-get ツールを使ってインストールします。(実際には 1行で実行します。)

$ sudo apt-get install open-jtalk 
      open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001

この状態では「男性」の音声しかありませんので、「女性」の音声データもインストールしてみます。

$ wget http://downloads.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.6/MMDAgent_Example-1.6.zip
$ unzip MMDAgent_Example-1.6.zip
$ cd MMDAgent_Example-1.6/Voice
$ sudo cp -pr mei /usr/share/hts-voice
実行

Open JTalk の機能を試すためのスクリプト「jtalk.sh」を作って、それを実行してみます。

今回、発話させるテキストはこちら。

「うどんの日」の2日、本場さぬきうどん協同組合は高松市内町の高松三越前で、冷たいぶっかけうどん千食を振る舞い、買い物客らが厳しい暑さをしのごうと勢いよく麺をすすった。

これを、以下のようにファイル( voice.txt )に保存したものを使います。(実際には改行なしのテキストを格納します。)

$ cat voice.txt
「うどんの日」の2日、本場さぬきうどん協同組合は高松市内町の高松三越前で、
冷たいぶっかけうどん千食を振る舞い、買い物客らが厳しい暑さをしのごうと勢いよく麺をすすった。

以下のようにスクリプトを実行します。

$ ./jtalk.sh voice.txt

スクリプトの実行の結果、生成された音声合成結果はこちら。

アクセントなどはともかく、漢字もほぼ正確に読み取れており、精度としてはかなり高いのでは、と感じました。(1点だけ、「高松市内町」は「たかまつしない まち」ではなく、「たかまつし うちまち」が正しいです。あいだにスペースを入れると、正しく読めるようです。)

発話のアクセントについては、機械がしゃべっている、という感触は受けますが、これだけしゃべることができれば、とりあえず十分なのでは、とも感じます。(オプション設定で、ある程度は改善できる部分もあるのかもしれません。)
あとは、ひとつ Open JTalk の大きなメリットとしては、完全なオフライン環境でも、この音声合成機能が利用できること、だと思います。

Amazon Polly を試す

次に、Amazon Polly です。まずは AWS にログインして、「Polly」のページを開きます。

f:id:IntelligentTechnology:20170809131700p:plain:w480

「今すぐ始める」をクリックして、

f:id:IntelligentTechnology:20170809132107p:plain

このように、発話させるテキストを入力して、「音声を聴く」をクリックします。

結果はこちら。

・・・また Amazon にやられてしまいました。特に意識しなければ、人間がしゃべっていると言われてもすぐにはわからないレベル!

この Polly は、このような AWS コンソールの画面からだけではなく、もちろんプログラムからも呼び出すことができます。
今回は Python のサンプルコードを試してみます。(同じく Ubuntu 14.04.5 の環境で試してみました。)

まずは、「AWS SDK for Python (Boto3)」をインストールして、

# pip は Python 用のパッケージ管理ツール
$ pip install boto3

それから、以下も必要でした。

$ pip install python-dateutil

AWS への接続情報を設定します(参考。AWS コマンドラインインタフェース(AWS CLI)を事前にインストールし、利用できるようにしておくと良いでしょう。)。

Amazon Polly の機能を試すためのスクリプト「polly.py」を作成して、これを実行します。

実行は以下のようにして行います。(先ほどと同じく、テキストデータは「voice.txt」に格納されているものを利用します。)

$ python polly.py voice.txt

結果は、AWS コンソールから実行した場合と同様でした。

Amazon Polly の場合、ひとつネックがあるとすれば、オンライン環境でないと利用できない、ということでしょうか。

比較

Open JTalk と Amazon Polly のメリット・デメリットをまとめると、以下のようになります。

メリット デメリット
Open JTalk 無料で利用できる。オフラインでも利用できる。オプション指定できる項目が豊富。 機械的な発話になる。
Amazon Polly より人間に近い発話が可能。 オンラインでないと利用できない。現状、女性音声しかない。有料。

オンライン環境で、有料でもよい、というのであれば迷うことなく Amazon Polly ですが、どうしてもオフラインでないといけない、お金はかけられない、という環境であれば、Open JTalk を利用する、という選択肢もあると思います。(ただ、Amazon Polly は有料だといっても、こちらを見ると比較的安価で利用できるようですね。)

いずれにしても、音声インタフェースは、今後は、日々利用する普通のアプリにも、当たり前のように実装されていくと思いますので、こういった音声合成のツールについても、上手に利用して、アプリのユーザビリティを向上していくことが必要になってくるのだと思われます。