ステップ 4: データ可視化用に Amazon Comprehend 出力を準備する - Amazon Comprehend

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ステップ 4: データ可視化用に Amazon Comprehend 出力を準備する

データ可視化を作成する際に感情分析ジョブとエンティティ分析ジョブの結果を準備するには、 AWS Glue と Amazon Athenaを使用します。このステップでは、Amazon Comprehend の結果ファイルを抽出します。次に、データを調べ、自動的に AWS Glue Data Catalogの表にカタログ化する AWS Glue クローラーを作成します。その後、サーバーレスでインタラクティブなクエリサービスである を使用して Amazon Athena、これらのテーブルにアクセスして変換します。このステップが完了すると、Amazon Comprehend の結果はクリーンになり、可視化できる状態になります。

PII エンティティ検出ジョブの場合、出力ファイルは圧縮アーカイブではなくプレーンテキストです。出力ファイル名は入力ファイルと同じで、末尾に .out が付加されます。出力ファイルを抽出する手順は必要ありません。をスキップして にデータをロードします AWS Glue Data Catalog

前提条件

始める前に、ステップ 3: Amazon S3 上のドキュメントに対する分析ジョブの実行 を完了します。

出力をダウンロードする

Amazon Comprehend は Gzip 圧縮を使用して出力ファイルを圧縮し、tar アーカイブとして保存します。出力ファイルを抽出する最も簡単な方法は、output.tar.gz アーカイブをローカルにダウンロードすることです。

このステップでは、感情とエンティティの出力アーカイブをダウンロードします。

各ジョブの出力ファイルを見つけるには、Amazon Comprehend コンソールの分析ジョブに戻ります。  分析ジョブは出力用の S3 の場所を提供し、そこに出力ファイルをダウンロードできます。 

出力ファイルをダウンロードするには (コンソール)
  1. Amazon Comprehend コンソールのナビゲーションペインで、[分析ジョブ]に移動します。

  2. 感情分析ジョブ reviews-sentiment-analysis を選択します。

  3. [Output] (出力) で、[Output data location] (出力データの場所) の隣に表示されるリンクをクリックします。これにより、S3 バケットの output.tar.gz アーカイブにリダイレクトします。

  4. [Overview] (概要) タブで、[Download] (ダウンロード) を選択します。

  5. コンピュータ上で、アーカイブの名前を sentiment-output.tar.gz に変更します。出力ファイルにはすべて同じ名前が付いているので、感情ファイルとエンティティファイルを追跡しやすくなります。

  6. ステップ 1 ~ 4 を繰り返して、 reviews-entities-analysis ジョブの出力を検索してダウンロードします。コンピュータ上で、アーカイブの名前を entities-output.tar.gz に変更します。

各ジョブの出力ファイルを検索するには、分析ジョブの JobId を使用して出力の S3 ロケーションを検索します。次に、cp コマンドを使用して出力ファイルをコンピュータにダウンロードします。

出力ファイルをダウンロードするには (AWS CLI)
  1. 感情分析ジョブの詳細を表示するには、以下のコマンドを実行します。sentiment-job-id を、保存した感情 JobId と置き換えます。

    aws comprehend describe-sentiment-detection-job --job-id sentiment-job-id

    JobId を見失った場合は、以下のコマンドを実行してすべての感情ジョブを一覧表示し、ジョブを名前でフィルタリングすることができます。

    aws comprehend list-sentiment-detection-jobs --filter JobName="reviews-sentiment-analysis"
  2. OutputDataConfig オブジェクト内の S3Uri 値を検索します。S3Uri 値の形式は次のようになります: s3://amzn-s3-demo-bucket/.../output/output.tar.gz この値をテキストエディタにコピーします。 

  3. 感情出力アーカイブをローカルディレクトリにダウンロードするには、以下のコマンドを実行します。S3 バケットパスを、前の手順でコピーした S3Uri に置き換えます。path/ を、ローカルディレクトリへのフォルダパスと置き換えます。名前 sentiment-output.tar.gz は元のアーカイブ名に置き換わるため、感情ファイルやエンティティファイルを追跡しやすくなります。

    aws s3 cp s3://amzn-s3-demo-bucket/.../output/output.tar.gz path/sentiment-output.tar.gz
  4. エンティティ分析ジョブの詳細を表示するには、以下のコマンドを実行します。

    aws comprehend describe-entities-detection-job --job-id entities-job-id

    JobId が不明な場合は、次のコマンドを実行してエンティティジョブをすべて一覧表示し、ジョブを名前でフィルタリングします。

    aws comprehend list-entities-detection-jobs --filter JobName="reviews-entities-analysis"
  5. エンティティのジョブの説明内の OutputDataConfig オブジェクトから、S3Uri 値をコピーします。

  6. エンティティ出力アーカイブをローカルディレクトリにダウンロードするには、以下のコマンドを実行します。  S3 バケットパスを、前の手順でコピーした S3Uri に置き換えます。path/ を、ローカルディレクトリへのフォルダパスと置き換えます。名前 entities-output.tar.gz は元のアーカイブ名に置き換わります。

    aws s3 cp s3://amzn-s3-demo-bucket/.../output/output.tar.gz path/entities-output.tar.gz

出力ファイルを抽出する

Amazon Comprehend の結果にアクセスする前に、感情とエンティティのアーカイブを解凍します。ローカルファイルシステムまたはターミナルのいずれかを使用してアーカイブを解凍できます。 

macOS を使用する場合は、GUIファイルシステムのアーカイブをダブルクリックして、アーカイブから出力ファイルを抽出します。

Windows を使用する場合は、7-Zip などのサードパーティーツールを使用してGUI、ファイルシステム内の出力ファイルを抽出できます。Windows で、アーカイブ内の出力ファイルにアクセスするには 2 つの手順を実行する必要があります。  最初にアーカイブを解凍し、次にアーカイブを抽出します。 

出力ファイルを区別できるように、感情ファイルの名前を sentiment-output に、エンティティファイルの名前を entities-output に変更します。

Linux または macOS を使用している場合は、標準のターミナルを使用できます。  Windows を使用している場合、tar コマンドを実行するには Cygwin などの Unix スタイルの環境にアクセスできる必要があります。

感情出力ファイルを感情アーカイブから抽出するには、ローカルターミナルで次のコマンドを実行します。

tar -xvf sentiment-output.tar.gz --transform 's,^,sentiment-,'

--transform パラメーターは、アーカイブ内の出力ファイルにプレフィックス sentiment- が追加され、ファイル名が sentiment-output に変更されることに注意してください。これにより、感情とエンティティの出力ファイルを区別し、上書きを防ぐことができます。

エンティティ出力ファイルをエンティティアーカイブから抽出するには、ローカルターミナルで次のコマンドを実行します。

tar -xvf entities-output.tar.gz --transform 's,^,entities-,'

--transform パラメーターは、出力ファイル名にプレフィックス entities- を追加します。

ヒント

Amazon S3 のストレージコストを節約するために、アップロードする前に Gzip でファイルを再度圧縮できます。は tar アーカイブからデータを自動的に読み取ることができないため、元のアーカイブ AWS Glue を解凍することが重要です。ただし、 AWS Glue は Gzip 形式のファイルから読み取ることができます。

抽出したファイルをアップロードする

ファイルを抽出したら、バケットにアップロードします。がデータを正しく AWS Glue 読み取るには、感情とエンティティの出力ファイルを別々のフォルダに保存する必要があります。バケットに、抽出されたセンチメント結果用のフォルダと、抽出されたエンティティ結果用の 2 つ目のフォルダを作成します。フォルダは、Amazon S3 コンソールまたは AWS CLIで作成できます。

S3 バケットに、抽出された感情結果用のフォルダ 1 つと、エンティティ結果ファイル用のフォルダ 1 つを作成します。次に、抽出した結果ファイルをそれぞれのフォルダにアップロードします。 

抽出したファイルを Amazon S3 にアップロードするには (コンソール)
  1. で Amazon S3 コンソールを開きますhttps://console.aws.amazon.com/s3/

  2. [バケット] でバケットを選択し、[フォルダを作成] を選択します。

  3. 新しいフォルダ名に、sentiment-results を入力して、[保存] を選択します。このフォルダには、抽出された感情出力ファイルが含まれます。

  4. バケットの [概要] タブのバケットコンテンツのリストから、新しいフォルダ sentiment-results を選択します [アップロード] を選択します。

  5. [ファイル追加] を選択し、ローカルコンピュータから sentiment-output ファイルを選択して、[次へ] を選択します。

  6. デフォルトとして、「ユーザーの管理」、「他の のアクセス AWS アカウント」、「パブリックアクセス許可の管理」のオプションはそのままにしておきます。[Next (次へ)] を選択します。

  7. [ストレージクラス]で、[スタンダード]を選択します。[暗号化][メタデータ][タグ] のオプションはデフォルトのままにします。[Next (次へ)] を選択します。

  8. アップロードオプションを確認し、[アップロード] を選択します。

  9. ステップ 1 ~ 8 を繰り返して entities-results という名前のフォルダを作成し、その entities-output フォルダにファイルをアップロードします。

cp コマンドを使用してファイルをアップロードすると S3 バケットにフォルダを作成できます。

抽出したファイルを Amazon S3 にアップロードするには (AWS CLI)
  1. 感情フォルダを作成し、以下のコマンドを実行して感情ファイルをアップロードします。path/ を、抽出した感情出力ファイルのローカルパスに置き換えます。

    aws s3 cp path/sentiment-output s3://amzn-s3-demo-bucket/sentiment-results/
  2. エンティティ出力フォルダを作成し、以下のコマンドを実行してエンティティファイルをアップロードします。path/ を、抽出したエンティティ出力ファイルのローカルパスに置き換えます。

    aws s3 cp path/entities-output s3://amzn-s3-demo-bucket/entities-results/

データを AWS Glue Data Catalogに読み込む

結果をデータベースに取り込むには、 AWS Glue クローラー を使用できます。 AWS Glue クローラーはファイルをスキャンし、データのスキーマを検出します。次に、データを AWS Glue Data Catalog (サーバーレスデータベース) のテーブルに配置します。クローラーは、 AWS Glue コンソールまたは を使用して作成できます AWS CLI。

sentiment-results フォルダと entities-resultsフォルダを個別にスキャンする AWS Glue クローラーを作成します。の新しいIAMロールは AWS Glue 、S3 バケットにアクセスするためのアクセス許可をクローラーに付与します。このIAMロールは、クローラーの設定時に作成します。

データを にロードするには AWS Glue Data Catalog (コンソール)
  1. をサポートするリージョンにいることを確認します AWS Glue。別の地域にいる場合は、ナビゲーションバーの [地域セレクター] からサポートされている地域を選択します。をサポートするリージョンのリストについては AWS Glue、 グローバルインフラストラクチャガイドリージョン表を参照してください。

  2. で AWS Glue コンソールを開きますhttps://console.aws.amazon.com/glue/

  3. ナビゲーションペインで、[クローラー]、[クローラーの追加] の順に選択します。

  4. [クローラー名] に「comprehend-analysis-crawler」と入力し、[次へ] を選択します。

  5. [クローラーソースタイプ] で、[データストア]、[次へ] の順に選択します。

  6. [データストアの追加]で、次の操作を行います。

    1. [Choose a data store (データストアの選択) ] で [S3] を選択します。

    2. [条件]は空白にしておきます。

    3. [データをクロールする]で、[自分のアカウントで指定したパス]を選択します。

    4. [パスを含める]には、感情出力フォルダ s3://amzn-s3-demo-bucket/sentiment-results の S3 フルパスを入力します。

    5. [Next (次へ)] を選択します。

  7. [別のデータストアの追加][はい][次へ]の順に選択します。ステップ 6 を繰り返しますが、エンティティ出力フォルダの完全な S3 パス (s3://amzn-s3-demo-bucket/entities-results) を入力します。

  8. [別のデータストアの追加]で、[いいえ][次へ]の順に選択します。

  9. IAM ロールの選択 では、次の操作を行います。

    1. IAM 「ロールの作成」を選択します

    2. IAM ロール にglue-access-role「」と入力し、次へ を選択します。

  10. [このクローラーのスケジュールを作成][オンデマンドで実行][次へ] の順に選択します。

  11. [クローラーの出力を設定する]で、次の操作を行います。

    1. [データベース]で、[データベースを追加]を選択します。

    2. [Database name (データベース名)] に「comprehend-results」と入力します。このデータベースには、Amazon Comprehend の出力テーブルが保存されます。

    3. 他のオプションをデフォルト設定のままにして、[次へ] をクリックします。

  12. クローラー情報を確認してから、[終了]を選択します。

  13. Glue コンソールの [クローラー]comprehend-analysis-crawler を選択し、[クローラーを実行] を選択します。クローラーが終了するまでに数分かかることがあります。

S3 バケットへのアクセス許可 AWS Glue を提供する の IAMロールを作成します。次に、 AWS Glue Data Catalogにデータベースを作成します。最後に、データベース内のテーブルにデータをロードするクローラーを作成して実行します。 

データを にロードするには AWS Glue Data Catalog (AWS CLI)
  1. の IAMロールを作成するには AWS Glue、次の手順を実行します。

    1. 次の信頼ポリシーを というJSONドキュメントとしてコンピュータglue-trust-policy.jsonに保存します。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. IAM ロールを作成するには、次のコマンドを実行します。をローカルコンピュータのJSONドキュメントへのパスpath/に置き換えます。

      aws iam create-role --role-name glue-access-role --assume-role-policy-document file://path/glue-trust-policy.json
    3. が新しいロールの Amazon リソースナンバー (ARN) を AWS CLI 一覧表示したら、コピーしてテキストエディタに保存します。

    4. 次のIAMポリシーを というJSONドキュメントとしてコンピュータglue-access-policy.jsonに保存します。このポリシーは、結果フォルダをクロールする AWS Glue アクセス許可を付与します。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/sentiment-results*", "arn:aws:s3:::amzn-s3-demo-bucket/entities-results*" ] } ] }
    5. IAM ポリシーを作成するには、次のコマンドを実行します。をローカルコンピュータのJSONドキュメントへのパスpath/に置き換えます。

      aws iam create-policy --policy-name glue-access-policy --policy-document file://path/glue-access-policy.json
    6. がアクセスポリシーの を AWS CLI 一覧表示したらARN、コピーしてテキストエディタに保存します。

    7. 次のコマンドを実行して、新しいポリシーをIAMロールにアタッチします。を、前のステップでコピーARNしたIAMポリシーpolicy-arnに置き換えます。

      aws iam attach-role-policy --policy-arn policy-arn --role-name glue-access-role
    8. 次のコマンドを実行してAWSGlueServiceRole、 AWS マネージドポリシーをIAMロールにアタッチします。

      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole --role-name glue-access-role
  2. 次のコマンドを実行して、 AWS Glue データベースを作成します。

    aws glue create-database --database-input Name="comprehend-results"
  3. 次のコマンドを実行して、新しい AWS Glue クローラーを作成します。をロールARNの glue-iam-role-arnに置き換えます AWS Glue IAM。

    aws glue create-crawler --name comprehend-analysis-crawler --role glue-iam-role-arn --targets S3Targets=[ {Path="s3://amzn-s3-demo-bucket/sentiment-results"}, {Path="s3://amzn-s3-demo-bucket/entities-results"}] --database-name comprehend-results
  4. 次のコマンドを使用して、クローラーを起動します。

    aws glue start-crawler --name comprehend-analysis-crawler

    クローラーが終了するまでに数分かかることがあります。

分析するデータを準備する

これで、Amazon Comprehend の結果が入力されたデータベースができました。ただし、結果はネストされています。ネストを解除するには、 でいくつかのSQLステートメントを実行します Amazon Athena。 Amazon Athena は、Amazon S3 内のデータを標準 を使用して簡単に分析できるインタラクティブなクエリサービスですSQL。Athena はサーバーレスであるため、管理するインフラストラクチャがなく、 pay-per-query 料金モデルがあります。このステップでは、分析と視覚化に使用できる、クリーンアップされたデータを含む新しいテーブルを作成します。Athena コンソールを使用してデータを準備します。

データを準備するには
  1. https://console.aws.amazon.com/athena/ から Athena コンソールを開きます。

  2. クエリエディタで、[設定] を選択し、[管理] を選択します。

  3. [クエリ結果の場所] には、s3://amzn-s3-demo-bucket/query-results/ と入力します。これにより、実行する Amazon Athena クエリの出力を保存する という名前の新しいフォルダがバケットquery-resultsに作成されます。[Save] を選択します。

  4. クエリエディタで、[エディタ]を選択します。

  5. データベース でcomprehend-results作成した AWS Glue データベースを選択します。

  6. [テーブル] セクションには、sentiment_resultsentities_results という 2 つのテーブルがあります。テーブルをプレビューして、クローラーがデータを読み込んだことを確認します。各テーブルのオプション (テーブル名の横にある 3 つの点) で、[テーブルのプレビュー]を選択します。ショートクエリは自動的に実行されます。[結果] ウィンドウをチェックして、テーブルにデータが含まれていることを確認します。

    ヒント

    テーブルにデータがない場合は、S3 バケット内のフォルダを確認してみてください。  エンティティ結果用のフォルダが 1 つと、感情結果用のフォルダが 1 つあることを確認します。次に、新しい AWS Glue クローラーを実行してみてください。

  7. sentiment_results テーブルのネストを解除するには、次のクエリをクエリエディタに入力し、[実行]を選択します。

    CREATE TABLE sentiment_results_final AS SELECT file, line, sentiment, sentimentscore.mixed AS mixed, sentimentscore.negative AS negative, sentimentscore.neutral AS neutral, sentimentscore.positive AS positive FROM sentiment_results
  8. エンティティテーブルのネスト解除を開始するには、クエリエディタに次のクエリを入力し、[実行]を選択します。

    CREATE TABLE entities_results_1 AS SELECT file, line, nested FROM entities_results CROSS JOIN UNNEST(entities) as t(nested)
  9. エンティティテーブルのネスト解除を開始するには、クエリエディタに次のクエリを入力し、 [クエリを実行]を選択します。

    CREATE TABLE entities_results_final AS SELECT file, line, nested.beginoffset AS beginoffset, nested.endoffset AS endoffset, nested.score AS score, nested.text AS entity, nested.type AS category FROM entities_results_1

sentiment_results_final テーブルは以下のようになり、[ファイル][行][感情][ミックス][ネガティブ][ニュートラル][ポジティブ] という名前の列があるはずです。テーブルには、1 セルごとに値が 1 つ含まれている必要があります。[感情] 列には、特定のレビューについて最も可能性の高い全体的な感情が表示されます。[ミックス][ネガティブ][ニュートラル][ポジティブ] の各列には、感情のタイプごとにスコアが表示されます。

Athena 内の感情出力テーブルのスクリーンショット。

entities_results_final テーブルは以下のようになり、[ファイル][行][開始オフセット][終了オフセット][スコア][エンティティ][カテゴリ] という名前の列があります。テーブルには、1 セルごとに値が 1 つ含まれている必要があります。[スコア] 列には、検出したエンティティにおける Amazon Comprehend の信頼度が示されます。[カテゴリ] は、Comprehend が検出したエンティティの種類を示します。

Athena のエンティティ出力テーブルのコンソール表示。

これで Amazon Comprehend 結果が表にロードされたので、データから有意義なインサイトを可視化して抽出することができます。