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 で作成した音声ファイルをパイプラインに投入します。