AWS Lambda + AI = 音声文字起こしと感情分析 (その4:Comprehend)

AWSのホームページの初心者ハンズオンにある「AWS Lambda と AWS AI Services を組み合わせて作る音声文字起こし & 感情分析パイプライン 」の内容を自分のAWSアカウントでやってみました。

前回投稿の S3+Lambda+Transcribe をパイプラインを実装した続きで、4パート目です。
ざっくりと基本構成を図で表してみて、3パート目にComprehendを追加した構成です。

ちなみに、 Amazon Comprehend については、以前の投稿に

があります。

Comprehend の感情分析を確認する

「Launch Amazon Comprehend」をクリック

初期画面が表示される。

入力テキストエリア

サンプル文が入っている

出力テキストエリア

分析結果が表示されている

ハンズオンは楽しい!!

ポジティブが99%

ハンズオンは難しい!!

ネガティブが98%

出力用S3バケットへの音声ファイル出力をトリガーにするLambda関数の作成

「関数の作成」をクリック

「設計図の使用」をクリック

「S3-get-object-python」をクリック

「設定」をクリック

関数名は「comprehend-function」とした

ロール名は「comprehend-function-role」とした

S3トリガーは今回、出力用S3バケット
(mikolabo-serverless-output)

「.json」が付加するファイルが保存されたときに、発火する。

blueprint のLambda関数が表示される。

「関数の作成」をクリック

Lambda関数が作成された。

IAMロールを追加

「編集」をクリック

「 comprehend-function-role ロールを表示」
のリンクをクリック

「ポリシーをアタッチします」をクリック

関数名は「comprehend-function」とした

「AmazonS3FullAccess」をアタッチ

「ポリシーのアタッチ」をクリック

「ComprehendFullAccess」をアタッチ

「ポリシーのアタッチ」をクリック

「AmazonS3FullAccess」と
「ComprehendFullAccess」が
追加された。

Lambda関数の変更

「aws sdk python」を検索し、「AWS SDK for Python (Boto3)」のリンクをクリックし、「API リファレンス 」をクリックし、
左メニューの「TABLE OF CONTENTS」にある「TranscribeService」を選択し、「start_transcription_job()」を表示する。
「start_transcription_job()」の説明を参考にして、以下のように修正

(元々のブループリントのコード)

元々のブループリントのコード

下の内容でコードを変更した。

import json
import urllib.parse
import boto3

s3 = boto3.client('s3')
comprehend = boto3.client('comprehend')

def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    try:
        response = s3.get_object(Bucket=bucket, Key=key)

        body = json.load(response['Body'])
        transcript = body['results']['transcripts'][0]['transcript']

        sentiment_response = comprehend.detect_sentiment(
            Text=transcript,
            LanguageCode='ja'
        )

        sentiment_score = sentiment_response.get('SentimentScore')
        print(sentiment_score)
    except Exception as e:
        print(e)
        print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket))
        raise e

Lambda関数の実行結果確認

再度、S3バケット
「mikolabo-serverless-input」
に音声ファイルをアップロード

「アップロード」をクリック

Lambda関数の「モニタリング」→CloudWatchのログ で結果を確認

「モニタリング」
→「CloudWatchのログを表示」

ログストリームのリンクをクリック

今、保存した音声ファイルの感情の分析値
が表示されている。

「’Positive’: 0.9795219302177429,
‘Negative’: 0.0014370143180713058,
‘Neutral’: 0.019016480073332787,
‘Mixed’: 2.448657323839143e-05」
が感情の分析値になっている。

今回は、その4:パイプラインで文字起こしたテキストを Comprehend で感情分析します。
次回は、その5:Amazon Polly で作成した音声ファイルをパイプラインに投入します。