Amazon Web Services ブログ

Amazon Comprehend を使用したカスタマーレビューからのセンチメントの検知

今日の社会では、パブリックコンテンツがこれまでにない重要性を持っています。カスタマーレビューからのデータは、それに関連するセンチメントの理解がビジネスに貴重な市場認識と早期かつ積極的に問題に取り組む能力を提供することから、消費関連の意思決定に対する洞察を得るためのツールとして使われています。

センチメント分析は、文書が肯定的、否定的、中立的、または混合的のどれであるかを計算によって判断するプロセスを使用します。Amazon Comprehend は、自然言語処理 (NLP) テキスト分析サービスで、キーフレーズ、挙げられた組織名、および言語と併せてセンチメントを検知し、ドキュメントコレクションからトピックモデリングを実行することを可能にするいくつかの API で構成されています。センチメントを検知するこのサービスの機能は、テキストの評価時にスコア付けのメカニズムと属性を使用する最先端のディープラーニングアルゴリズムを用いて行われます。Amazon Comprehend トレーニングデータセットは、世界で最も大規模な自然言語コレクションのひとつである Amazon.com からの製品説明と消費者レビューにあるデータを中心に構成されています。AWS は、言語の進化に遅れを取らないために新しいデータでの再訓練が継続的に行われる完全に訓練されたモデルを提供します。一般の機械学習では、大半のデータエンジニアと開発者に対して現在持っているものとは異なるスキルセットが求められます。Amazon Comprehend はこのギャップを取り除き、開発者がすでに持っているスキルを使って簡単に NLP を実行できるようにしました。

このブログ記事では、カスタマーセンチメントを検知するために、AWS のサービスを使って構築されたサーバーレスイベント駆動型アーキテクチャの一部として Amazon Comprehend を活用する方法を説明します。

ソリューションのアーキテクチャ概要

Amazon.com の製品レビューを取り上げて、一定のレビューのセンチメントを分類するために Amazon Comprehend を使ってみましょう。Amazon Echo、Amazon Echo Dot、および Amazon Echo Show のレビューを例として使用します。次に、ブランドを損なわないようにするために追加の架空サンプルデータをアップロードし、リコールされている欠陥、破損、または危険アイテムといったニュアンスを持つ否定的な製品センチメントの取得をシミュレートします。最後に、Amazon Athena を使用して否定的なレビューに対するインタラクティブなクエリを行い、レポートをエクスポートすることによって、ビジネスが即座に対策を講じられるようにします。

レビューのアップロード: ユーザーは、カスタマーレビューをテキスト形式でカスタマーレビューバケットにアップロードします。 

カスタマーレビューセンチメント分析関数: セキュアなレビューのアップロードが、レビューを一時ファイルにダウンロードし、それに対するテキスト分析を実行するように Amazon Comprehend を呼び出してから、肯定的、否定的、中立的、または賛否混合的な信頼スコアと共に全体的なセンチメントを CSV ファイルに出力するレビューセンチメント分析関数をトリガーする Amazon S3 イベントとして使用されます。センチメントが出力された CSV ファイルは、同じカスタマーレビューバケットのセンチメントフォルダに保存されます。

インタラクティブな SQL クエリ: Amazon Athena がレビュー結果のクエリに使用され、否定的なセンチメントに注目します。

ステップバイステップ設定

必要な AWS Identity and Access Management (IAM) ロールと、Amazon S3、AWS Lambda、および Amazon Comprehend API とのやりとりに必要な Lambda 関数をプロビジョニングするために AWS CloudFormation テンプレートをデプロイすることから始めます。

リージョン リージョンコード 作成
1 米国東部
(バージニア北部)
us-east-1  
  1. CloudFormation コンソールでスタックの作成ボタン (上記) をクリックします。関心がある場合は、ここで YAML テンプレートを見ることができます。
  2. テンプレートの選択ページで次へを選択します。
  3. 詳細の指定ページで次へを選択します。
  4. オプションページで、すべてをデフォルトにしたまま次へを選択します。
  5. レビューページで、CloudFormation が IAM リソースとカスタム名のついた IAM リソースを作成することを承認するボックスにチェックを入れます。
  6. 変更セットの作成を選択します。

: 提供されている CloudFormation テンプレートは、AWS サーバーレスアプリケーションモデル (AWS SAM) を使って記述されています。AWS SAM は、サーバーレスアプリケーション用の関数、API などに加えて、環境変数といったこれらサービスの機能の一部を定義する方法をシンプルにします。CloudFormation テンプレートに SAM テンプレートをデプロイするときは、SAM テンプレートを標準の CloudFormation に変換するための変換ステップが必要となるため、変更セットの作成ボタンを選択して変換を行う必要があります。

  1. 変更セットが変更の計算を終えるまで数秒間待ちます。画面は以下のようになります。
  2. 最後に実行選択して、CloudFormation にバックグラウンドでリソースを作成させます。それが終了するまで次のステップに進まずに待つ必要はありません。

Amazon Simple Storage Service (S3) バケットイベントトリガー:

IAM ロール、Lambda 関数、および S3 バケットがデプロイされたので、ここで Comprehend センチメント分析関数のための S3 イベントトリガーを作成するようにしましょう。

  1. Amazon S3 コンソールを開き「review-sentiment」で始まる新しい S3 バケットを選択します。
  2. プロパティを選択し、詳細設定セクションで Events ボックスを選択します。
  3. + 通知の追加を選択して以下を設定します。
    1. 名前: SentimentAnalysis
    2. イベント: ObjectCreate (All)
    3. サフィックス: .txt
    4. 送信先: Lambda 関数
    5. Lambda: review-sentiment-ComprehendSentimentAnalysis-XYZ
  4. 保存 を選択します。

 S3 でのカスタマーレビューのアップロード:

具体的なユースケースのため、Amazon Echo、Amazon Echo Dot、および Amazon Echo Show の上位カスタマーレビューを引用して、各レビューをテキストファイルにしました。

  1. 以下のレビュー 3 件をダウンロードします:
    1. review-B01DFKC2SO.txt
    2. review-B01J24C0TI.txt
    3. review-B0749WVS7J.txt

注: Amazon カスタマーレビューは商業用途向けにライセンス付与されていません。アプリケーションの実装時には、これらのデータを独自の認証済みデータソースに置き換えるようにしてください。

  1. コンソールから S3 バケットを選択し、各レビューテキストファイルを追加してアップロードを選択します。
  1. バケットをリフレッシュして、バケット内に以下のアウトプットがあることを確認します。

    注: これは、AWS が作成したイベント駆動型のサーバーレスアーキテクチャです。S3 バケットにアップロードされたレビューは Comprehend-SentimentAnalysis 関数をトリガーしたイベントとして見なされ、これによってセンチメントとセンチメント信頼スコアが S3 バケットの sentiment フォルダ内にある CSV に出力されます。
  2. ひとつのレビューを選択してからダウンロードを選択します。

    ”My brother Robert who has been bed ridden and paralyzed with Multiple Sclerosis from his neck down for more than 30 years now has a new friend named Alexa! He was in tears with happiness when Alexa played 70’s music, played Jeopardy, answered all his questions and wakes him up every morning. Thank you Amazon for giving my brother a new bedside companion.”
  3. sentiment フォルダを選択し、CSV ファイルを開いてその内容を表示します。

    センチメント情報はテキストの全体的なセンチメントを説明し、各ラベル (肯定的、否定的、中立的、または混合的) のセンチメントスコアも提供します。これらのセンチメントスコアのすべては MXNet ディープラーニングモデルから返され、1 をセンチメントラベルの完全な信頼とする、0 から 1 の間の浮動小数点数で表現されます。例えばこの CSV は、82% の肯定的センチメントスコア (信頼) での肯定的な全体的センチメントが Amazon Echo Dot レビューにあることを示しています。
  1. レビューデータを充実させるため、S3 バケットに戻って、ここにあるサンプルレビューデータから各テキストファイルをアップロードします。

S3 バケットにアップロードされた各レビューに対して Amazon Comprehend が呼び出されます。S3 に保存できるレビューの数には制限がないため、次のステップはレビュー全体をクエリし、ビジネスにとって最も重要な事柄を見つけることができるようにするものです。次のステップでは、現在 S3 にあるレビューをクエリしてから、否定的なレビューまでフィルタリングします。

Amazon Athena を使ったインタラクティブなクエリ

ここでは、SQL 文を使って最も強い否定的センチメントがあるレビューのすべてを降順で並べることによって、クエリをさらに一歩前進させます。ビジネスはこのクエリで、何から始めればよいか、およびサイクルを賢明に費やす箇所を正確に知ることができます。

Athena コンソールで以下のコマンドを実行して、デフォルトデータベースに Athena テーブルを作成します。 重要: <bucket_name> を前の手順で作製した S3 バケットに入れ替えてください。

CREATE EXTERNAL TABLE IF NOT EXISTS default.ReviewSentimentAnalysis (
  `ImageLocation` string,
  `Timestamp` string,   
  `Sentiment` string,
  `Positive` string,
  `Negative` string,
  `Neutral` string,
  `Mixed` string
  )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = ',',
  'field.delim' = ','
) LOCATION 's3://<bucket_name>/sentiment/'

テーブルが正常に作成されたことを確認したら、以下の SQL 文をコピーして、エディタにペーストします。  Run Query を選択します。

SELECT * FROM default.ReviewSentimentAnalysis WHERE sentiment='NEGATIVE'
ORDER BY negative DESC

まとめ

要約すると、Amazon Comprehend は変化する意見と全体的なセンチメントの素早い認識を可能にすることによってカスタマーフィードバックに対する深い洞察を提供して、カスタマーを理解する時間と労力を削減します。これは、ダイナミックに変化するカスタマーのニーズを満たすために、即時的な調節を適用する機会も提供します。

NLP のトレーニングは困難で、非常に高い費用がかかる場合もあります。曖昧なセリフ、皮肉、そして純粋なテキストキャプチャでは分析されない可能性がある絵文字の象徴的表現を通じた言語の不明確性など、真のセンチメントをとらえるための道のりには多くの障害があります。これらすべての障害がセンチメントの理解をより困難にする可能性があるため、受け取る結果の品質に影響を及ぼす場合があります。 構造化されていないセンチメントのリッチテキストによる大規模なデータセットを使う場合でさえも、カスタマーのニーズに正しく応答する、またはそれらを予測するには相当な努力が必要となり得ます。これは、ML モデルを継続的なフィードバックループを通じて徐々に改善しながら、正確なセンチメント分類器を訓練し、ML テクニックを適用して系統的誤差をさらに減らすために用いられる最適なアルゴリズムを含んだ効率的な機会学習 (ML) モデルを構築するために必要なプロセスとスキルを有することをビジネスに要求します。

Amazon Comprehend は、データサイエンティストから差別化につながらない困難な作業を取り除き、アプリケーションまたは分析ソリューションへのこのサービスの容易な統合を可能にします。また、AWS で数百万ものレビューを同時にクエリし、関連のある情報のみを提示することもできます。このユースケース以外にも、Amazon Kinesis 使ったリアルタイムでのデータインジェスチョンの実行、または Amazon CloudWatch での定期的イベントなど、テキスト情報の収集には数多くの方法があります。さらに、センチメントを抽出して分析した後は、テキストデータに対して得ることができるその他多くの洞察があります。例えば、Amazon Redshift などのデータウェアハウスにデータの新規文字列をロードする、Amazon QuickSight などのビジネスインテリジェンス (BI) ツール内でデータを表示する、またはカスタマーサービスチームに通知するために、AWS の Simple Notification Service (SNS) をトリガーする否定的センチメントのレビューを S3 バケットにコピーすることができます。

これらすべてをサーバーレスアーキテクチャで行うことにより、サーバーについて一切考えることなくコードを記述して実行することが可能になります。結局のところ、ビジネスロジックの記述はあなたが書くコードのみであるべきです。AWS はこれからも変わらず、真に敏捷な方法でモデルを順次処理していきます。フィードバックをどんどんお寄せください。イマジネーションを解き放って #BuildOnAWS しましょう!


その他の参考資料

Amazom Comprehend と Amazon Quicksight を含む Amazon ML サービスを使ったソーシャルメディアダッシュボードの構築方法を学んでください。


今回のブログ投稿者について

Todd Escalona はソリューションアーキテクトとして、カスタマーの目標を理解するために耳を傾け、そこから遡って作業をしながら、エンタープライズカスタマーと新興企業コミュニティ内での AWS クラウドの拡大に時間を費やしており、要件を定義し、特定のユースケースに基づいたアーキテクチャ面でのガイダンスを提供して、スケーラブルで信頼性のある恒久的なアプリケーションとサービスの設計をお手伝いします。Todd は、人工知能、機械学習、およびサーバーレスイベント駆動型アーキテクチャなどの様々なテクノロジーに広がる関心を持っています。