【レポート】自然言語解析を体験 ~Amazon Translate, Amazon Polly, Amazon Transcribe, Amazon Comprehend ~ #AWSSummit

2020.09.09

せーのでございます。
本日は2020/09/08-2020/09/09にかけて行われたAWS Summit Onlineからセルフペースハンズオン「自然言語解析を体験 ~Amazon Translate, Amazon Polly, Amazon Transcribe, Amazon Comprehend ~ 」をレポートいたします。

スピーカーはアマゾン ウェブ サービス ジャパン株式会社 シニアアドボケイト 亀田 治伸 氏です。

アーカイブ

動画のアーカイブはこちらになります。

レポート

  • Amazon Translate: 複数言語に対応した翻訳サービス
  • Amazon Polly: 音声の読み上げ
  • Amazon Transcribe: Pollyの逆。音声を文字に起こしてくれる
  • Amazon Comprehend: 文字列の構造を解析したり感情を分析したりする

  • 各サービスのデモをマネージメントコンソールより表示

  • デモの流れ
    • Translateに英語の記事を貼り付け、日本語に変換
    • 変換された日本語をPollyで読み上げ、SSMLで補正。mp3ファイルでダウンロード
    • mp3ファイルをS3に配置しTranscribeで読み取って文字起こし。作成されたjsonファイルをS3に格納
    • ComprehendにTranslateで変換された日本語を投入して分析

ハンズオン

ここからはハンズオン資料を元に、実際に構築をしていきます。
リンク先からハンズオン資料をダウンロードします。

まずIAMロールを設定します。
ロールにはLambdaからTranslate、Polly、Transcribe、Comprehendに対するフルアクセスをつけます。

これでこのロールがついたLambdaからはそれぞれの自然言語サービスにアクセスできるようになりました。

Translate

Translateで英語のニュースを日本語に変換します。

まず英語のニュースを探します。BBCで適当な記事をコピペします。150文字くらいがいいそうです。

Microsoft has confirmed that it will release a second next-generation console after a leak prompted it to unveil the Xbox Series S.

マイクロソフトがXBoxの次世代機「XBox Series S」を正式発表した、というニュースです。これで132文字。

これをLambdaからTranslateのAPIを叩いて日本語に変換します。
Lambdaを新規に作ります。言語はPython3.8にします。
出来上がったら資料にあるコードをコピペします。

先程の英語記事をテストにセットしてテストしてみます。

{"text": "Microsoft has confirmed that it will release a second next-generation console after a leak prompted it to unveil the Xbox Series S."}

記事の翻訳がテスト結果に出てきます。これで成功。超カンタンですね。

マイクロソフトは、Xbox シリーズ S を発表するように指示されたリーク後、2 番目の次世代本体をリリースすることを確認しました。

ちなみに元記事の英語内容は、マイクロソフトがリークにより事前に漏れてしまった次世代コンソールであるXBox Series Sのリリースを正式に認めた、というものです。ちょっと文章が短すぎたか。。。
翻訳内容をコピーして、次のハンズオンにいきます。

Amazon Polly

次にこの内容をPollyを使って音声ファイルに変換します。これはマネージメントコンソールより直接行います。

Pollyを開いて「テキスト読み上げ機能」に文章を貼り付けます。

これはいい感じですね。確認したら「ダウンロード mp3」ボタンからダウンロードします。

Amazon Transcribe

mp3ファイルをTranscribeを使って文字起こししてみます。

S3に適当なバケットを作り、ファイルをアップロードします。

先程作ったIAMロールにS3へのアクセス権限を追加します。

LambdaコンソールからTranslateと同じように、今度はNode12.xでTranscribe用の関数を新規作成し、ハンズオン資料内のスクリプトをコピペします。

FilePathの部分をセットしたS3のパスに書き換えてテストを行います。テストの中身は特に使わないらしいのでそのままにしてテストボタンを押します。
テストが成功したのを確認して

Transcribeの画面を開きます。Transcription jobsを開いてしばらく待つとステータスがCompleteに変わります。

中身を開くと書き起こしがTextの部分に表示されています。

マイクロソフト は エックス ボックス シリーズ メス を 発表 する よう に 指示 さ れ た リーク 五 二 番 目 の 次世代 本体 を リリース する こと を 確認 し まし た

惜しい笑

Comprehend

Transcribeで書き起こした内容をComprehendで分析します。

LambdaでComprehend用の関数をPython3.8で新規作成します。この時リージョンをオレゴンに変更します。

ハンズオン資料にあるテスト用の文字列を使ってテストを作ります。

{
  "messageVersion": "1.0",
  "invocationSource": "DialogCodeHook",
  "userId": "1234567890",
  "sessionAttributes": {},
  "bot": {
    "name": "BookSomething",
    "alias": "None",
    "version": "$LATEST"
  },
  "outputDialogMode": "Text",
  "currentIntent": {
    "name": "BookSomething",
    "slots": {
      "slot1": "None",
      "slot2": "None"
    },
    "confirmationStatus": "None"
  },
  "inputTranscript": "あなたを攻撃します"
}

テストを走らせてみます。成功するとsentimentがNEGATIVEになっているのが確認できます。テストの内容は「あなたを攻撃します」なので、確かにネガティブな内容ですね。

テストの内容を「あなたを攻撃します」から「あなたが好きです」に変えるとsentimentがPOSITIVEに変わります。先程のニュース文でやってみるとNEUTRALに変わりました。

Kibanaで可視化

最後はComprehendで分析した結果をKibanaで可視化します。   オレゴンリージョンでCloud9を開いてデフォルトで新規に立ち上げます。その際デフォルトのインスタンス(t2.micro)はus-west-2dではサポートされていないので、サブネットをus-west-2d以外にします。

コマンドを使ってS3のバケットを新規作成します。

aws s3 mb s3://20200909transcribetsuyoshi --region us-west-2

ElasticSearch Serviceのドメインを新規に立ち上げます。

cloud9にてハンズオン資料内のコードをコピーし、必要なパスを設定したらRunします。

Kibanaを開いて設定を行うと、mp3ファイルの内容をTranscribeで書き起こしし、Comprehendで分析した結果がKibanaにて表示されていきます。

まとめ

以上、自然言語処理に関わるAWSサービスをハンズオンで体験してみました。
音声を書き起こしして、さらにその内容を分析にかけた上でグラフ化する、というところまでが自動で行われるのは、頭ではわかっていてもいざ体験してみるとすごいことだな、と思います。
今回のハンズオンではコンタクトセンターなどのユースケースが想定されていますが、他にも商品やサービスのアンケート結果の分析や、更に進んで動画コンテンツでの表情分析と音声分析を同時に行うなど、様々なケースが考えられます。
是非一度体験して見ることをおすすめします。