[Amazon Transcribe活用例]メールに添付された音声ファイルを自動で音声認識させる仕組みを作ってみた(留守電文字起こしシステム)

メール送付された音声ファイルに対してさらに**Amazon Transcribe**による文字起こしを行い、わざわざ音声を再生しなくても留守電の内容を把握できるシステムを作ってみたのでAmazon Transcribeの活用例としてご紹介します。
2020.02.10

はじめに

こんにちは、CX事業本部の若槻です。

わたしが現在利用しているIP電話サービス(楽天モバイルSMARTalk)には、不在着信時の留守電を音声ファイル(wav形式)にしてメール送付してくれる機能があります。留守電の内容を確認したいときにはメールに添付された音声ファイルを再生して聞けばいいのでこれはこれで便利です。

しかし、もっと便利さを突き詰めたい!ということで、メール送付された音声ファイルに対してさらにAmazon Transcribeによる文字起こしを行い、わざわざ音声を再生しなくても留守電の内容を把握できるシステムを作ってみたのでAmazon Transcribeの活用例としてご紹介します。

Amazon Transcribeとは

  • https://aws.amazon.com/jp/transcribe

Amazon Transcribe は、自動音声認識 (ASR、automatic speech recognition) と呼ばれる深層学習プロセスを使って迅速かつ高精度に音声をテキストに変換します。Amazon Transcribe は、カスタマーサービスの通話の文字起こし、クローズドキャプションや字幕の自動作成、完全に検索可能なアーカイブを作成する際におけるメディア資産のメタデータの生成に使用できます。 Amazon Transcribe Medical を使用すると、医療関連の音声をテキストに変換する機能を臨床ドキュメントアプリケーションに追加できます。

  • https://docs.aws.amazon.com/ja_jp/transcribe/latest/dg/what-is-transcribe.html

現在、日本語 (ja-JP)を含む31の言語の音声認識に対応しています。

システム構成・動作概要

システムの動作の概要は以下の通り。

  1. 発信者はSMARTalkの電話番号に架電し、不在着信となる
  2. 発信者は留守電音声を登録する
  3. SMARTalkは留守電音声を添付した留守電通知メールをOffice 365に送信する
  4. Office 365は留守電通知メールをSESに自動転送する
  5. SESは受信したメールをS3バケット(Prefix:mailraw/)にPUTする
  6. S3 PUTトリガーで起動したLambdaはS3バケットに格納されたメールデータを取得する
  7. Lambdaはメールデータから留守電音声ファイルをパースしてS3バケットにPUTする
  8. Lambdaは留守電音声ファイルに対するAmazon Transcribeジョブをキックする
  9. Amazon TranscribeはS3に格納された音声ファイルを取得し、音声認識ジョブを実行する
  10. Amazon Transcribeはジョブ実行が完了したら音声認識結果のファイル(JSON)をS3バケットに保存する
  11. Lambdaは音声認識結果のファイルをS3バケットから取得する
  12. Lambdaは音声認識結果を記載したTrelloカードを作成する
  13. ユーザーはTrelloのカードで留守電の内容を把握する

システム構成は以下の通り。

image.png

なお、Amazon SESはap-northeast-1(東京)リージョンでは現在時点でまだ利用できないため、代わりにeu-west-1(アイルランド)リージョンを利用しました。

構築手順

構築手順とソースコードはGithubにアップしているので興味のある方は御覧ください。

動作確認

  • SMARTalkの電話番号に架電し、留守電を登録する。

  • SMARTalkのポータル画面を見ると、留守電が音声データとして登録されています。 image.png

  • Office 365のメッセージ追跡ログを見ると、留守電通知メールがSESのメールアドレスに自動転送されています。 image.png

  • S3バケットを見ると、mailraw/プレフィクスでメールデータが格納されています。 image.png

  • さらにS3バケットのトップを見ると、音声ファイルが格納されています。 image.png

  • Amazon Transcribeのジョブ一覧を見ると、音声認識ジョブが作成されています。 image.png

  • CloudWatch LogsでLambdaの実行ログを見ると、IN_PROGRESSの間でTranscribeジョブが実行され、19秒の音声ファイルでジョブ実行に100秒近くを要したことが分かります。 image.png

  • Trelloのリストを見ると、指定した件名でカードが作成されています。 image.png

  • カードを開くと、メール本文の上部赤枠内に文字起こし結果が確認できます。 image.png

  • 文字起こし結果と実際に話した内容の比較

漢字変換や文節の分け方は概ね合っており、留守電の内容が把握できる精度の文字起こし結果を得ることができました。

### 文字起こし結果
お 世話 に なっ て おり ます 私 クラス メソッド サポート の 若月 と 申し ます お 問い合わせ 頂い て おり まし た ラムダ の 実行 間隔 の 件 に つい て お 電話 さ せ て いただき まし た 改めて お 電話 差し上げ ます 失礼 いたし ます
 ### 実際に話した内容
お世話になっております。わたしクラスメソッドサポートの若槻と申します。お問い合わせ頂いておりましたLambdaの実行間隔の件についてお電話させて頂きました。改めてお電話差し上げます。失礼いたします。

おわりに

Amazon Transcribeの活用例のご紹介でした。

以前まではAmazon Transcribeは日本語に対応していなかったので、わたしは同様の機能を実現するためにMicrosoft Power AutometeとGoogle Cloud Speechを利用したシステムを作成して利用していましたが、昨年10月についに日本語対応がリリースされたので、今回AWSに移植をしてみたという経緯がありました。

参考になれば幸いです。

以上