Blogical

AWS/Salesforceを中心に様々な情報を配信していきます(/・ω・)/

Amazon Polly(+Amazon Transcribe)で伝言ゲーム

こんにちは、ロジカル・アーツの井川です。

今日は Amazon Polly(+Amazon Transcribe) を使って、伝言ゲームをしたいと思います。

Amazon Pollyとは?

Amazon Polly は、文章をリアルな音声に変換するサービスです。テキスト読み上げができるアプリケーションを作成できるため、まったく新しいタイプの音声対応製品を構築できます。Polly は、高度なディープラーニング技術を使用したテキスト読み上げ (TTS) サービスで、自然に聞こえるように人間の音声を合成します。何十種類ものリアルな音声を多数の言語でサポートしているため、さまざまな国に対応した音声アプリケーションを構築できます。

Amazon Polly(深層学習を使用したテキスト読み上げサービス)| AWSより引用

使ってみる

実際にAmazon Pollyを使ってみます。

サンプルとして私の自己紹介の一部を使うことにします。

井川と申します。 ロジカル・アーツでは、AWSチームでエンジニアをやっています。

初めまして! - Blogicalより引用

まずは、AWSマネジメントコンソールのサービスからAmazon Pollyを選択します。 f:id:logicalarts:20200929094908p:plain

テキスト読み上げ機能の画面に移ったら、サンプルテキストを貼り付けます。
言語とリージョンは、日本語を選択します。 f:id:logicalarts:20200929095412p:plain

続けて、音声を聞くボタンを押すと、変換されて音声が流れます。
実際に変換された音声が以下になります。

イントネーションに多少問題はありますが、十分に理解できます。

それでは、Amazon Pollyで音声読み上げができたので、Amazon Transcribeによるテキスト化も使って、音声とテキストによる伝言ゲームをしてみたいと思います。

Amazon Transcribeについては、過去取り扱った記事があるので、よかったらご覧ください。 blog.logical.co.jp

伝言ゲーム

S3バケット作成

まず始めに、データ置き場としてS3バケットを作成します。
今回バケット名はblogical-dengon-gameとしました。 f:id:logicalarts:20200929105948p:plain

テキストの音声化

次に、Amazon Pollyでサンプルテキストを貼り付けて音声へと変換します。 今回はS3へ保存するので、S3に向けて合成を選んで、保存先のバケットを指定します。 f:id:logicalarts:20200929105955p:plain

合成を押すと、タスクが生成されるので、少し待つとタスクが完了してバケットに音声ファイルが保存されます。
※S3には、<タスクID>.mp3という名前で保存されます。 f:id:logicalarts:20200929110601p:plain

音声のテキスト化

Amazon Transcribeへ移り、Transcription jobsでCreate jobを押します。 任意のName、LanguageにJapanese、Input dataに先ほど作成したS3のファイルを指定します。 f:id:logicalarts:20200929111737p:plain

Nextを押し、Createを押してJobを作成します。
少し待つとJobが完了するので、Job一覧から個別選択して詳細を見てみます。 f:id:logicalarts:20200929112342p:plain

出力結果は、
以下 は と 申し ます ロジカル 熱 で は 映画 ブルー チーム で エンジニア を やっ て い ます
となりました。

ちょっと残念な結果です。メモ書きで伝えられても、通じませんね(^^)

繰り返し(伝言ゲーム)の結果

テキストから音声、音声からテキストを繰り返して伝言ゲームをしてみます。

1回目

入力テキスト
井川と申します。 ロジカル・アーツでは、AWSチームでエンジニアをやっています。

テキストから音声の結果

音声からテキストの結果
以下 は と 申し ます ロジカル 熱 で は 映画 ブルー チーム で エンジニア を やっ て い ます

2回目

入力テキスト
以下 は と 申し ます ロジカル 熱 で は 映画 ブルー チーム で エンジニア を やっ て い ます

テキストから音声の結果

音声からテキストの結果
井川 と 申し ます ロジカル 月 で は 映画 ブルー チーム で エンジニア を やっ て い ます

3回目

入力テキスト
井川 と 申し ます ロジカル 月 で は 映画 ブルー チーム で エンジニア を やっ て い ます

テキストから音声の結果

音声からテキストの結果
井川 と 申し ます ロジカル 好き で は 映画 ブルー チーム で エンジニア を やっ て い ます

結果を踏まえて

どうやら、私は映画ブルーチームの一員らしいです。。。
これでは意図したことが伝わっていないので、設定を加えてよりよい変換をさせたいと思います。

Amazon Polly レキシコン作成

サンプルテキストでは、井川(いかわ)と発音されていますが、実は井川(いがわ)です(^^)
単語の発音を指示するために、レキシコンファイルを用意します。

参考URL: レキシコンの管理 - Amazon Polly

今回は井川(いがわ)の発音ファイルとして以下を用意しました。

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0" 
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon 
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="ipa" xml:lang="ja-JP">
  <lexeme>
    <grapheme>井川</grapheme>
    <phoneme>Igawά</phoneme>
  </lexeme>
</lexicon>

Amazon Pollyのテキスト読み上げ機能の画面下部の、発音のカスタマイズを選択し、ファイルをアップロードします。
アップロードすると、適用するレキシコンが追加されます。 f:id:logicalarts:20200929122609p:plain

レキシコン適用後の音声は以下になります。

無事、井川(いがわ)となりました。

Amazon Transcribe カスタム語彙作成

テキスト化においては、人名などの固有名詞に問題があるので、カスタム語彙を作成することにします。

参考URL: カスタム語彙 - Amazon Transcribe

今回は以下の内容で、S3に保存しておきます。
※タブ区切りで書くので、タブを[TAB]と表記しています。

Phrase[TAB]IPA[TAB]SoundsLike[TAB]DisplayAs
いがわ[TAB][TAB][TAB]井川
ロジカルアーツ[TAB][TAB][TAB]ロジカル・アーツ
エーダブリューエス[TAB][TAB][TAB]AWS

Amazon Transcribeへいき、Custom vocabularyを選択します。
LanguageにJapaneseを選択、S3に保存したファイルを指定して、Create vocabularyを押します。
f:id:logicalarts:20200929124354p:plain

少し待って画像のようにReadyとなれば完了です。 f:id:logicalarts:20200929124802p:plain

それでは、カスタム語彙を使ったテキスト化を行います。

カスタム語彙の適用は、Create transcription jobのStep2 Optionalで指定します。 f:id:logicalarts:20200929125303p:plain

井川(いがわ)となった音声ファイルに、カスタム語彙適用のテキスト化を試してみます。
出力テキストは以下のようになりました。
井川 と 申し ます ロジカル・アーツ で は AWS チーム で エンジニア を やっ て い ます

成功です! これで伝言でも、私の自己紹介は正しく伝わることでしょう(^^)

まとめ

今回は伝言ゲームという形で、Amazon PollyとAmazon Transcribeの変換精度を見てみました。 デフォルトのままでは固有名詞の取り扱いに難がありましたが、レキシコンやカスタム語彙を用意することで対処できることがわかりました。
Amazon PollyにはSSML、Amazon TranscribeにはCustom language modelといったより精度を高めるための機能があるので、興味のある方はそちらにも手を出してみるとよいと思います。