Amazon Web Services ブログ

Amazon Comprehend – 継続的に学習される自然言語処理

数年前、私はメリーランド大学の図書館 をさまよい、What Computers Can’t Do というタイトルのホコリをかぶった古い本と、その続編 What Computers Still Can’t Do を見つけました。2冊めの本はより分厚く、コンピューター・サイエンスが学ぶべき価値ある領域であることを認識させる内容でした。このブログを書く準備をしている間に、私は最初の1冊の保存されたコピーを見つけ、面白い考えを見つけました。

人間は自然言語で記述された文脈依存する暗黙的な知識を必要とする文章を使い、理解しているので、同じように自然言語を理解し、翻訳できるコンピューターを作る唯一の方法は、チューリングが嫌疑していたように、多分コンピューターが世界について学ぶようにプログラムすることだろう。

これは、とても先見の明のある考えでした。そして、私は Amazon Comprehend についてお話したいと考えています。Amazon Comprehend は現実に世界のことを相当詳しく知っている新しいサービスで、そのことを共有できるのがとても幸せです。

Amazon Comprehend の紹介

Amazon Comprehend はテキストを分析し、最初にアフリカ語からヨルバ語まで、その間にある 98 以上の言語に始まり、見つけたことを教えてくれます。Amazon Comprehend は英語かスペイン語で記述されたテキストからエンティティ(人、場所、ブランド、製品、など)の違い、キーフレーズや感情(ポジティブ、ネガティブ、混合、中立)を識別し、キーフレーズやその他全ての情報を抽出することができます。最後に、Comprehend のトピックモデリングサービスが巨大なドキュメントセットの中から分析やトピックに基づくグルーピングのために複数のトピックを抽出します。

最初の4つの関数(言語検出、エンティティ分類、感情分析、そして、キーフレーズ抽出)はインタラクティブに利用することを想定してデザインされており、数百ミリ秒で結果を返します。トピック抽出はジョブベースのモデルとして動作し、抽出コレクションのサイズに応じて結果を返します。

Comprehend は継続的に学習される自然言語処理(NLP)サービスです。サービスが徐々に精度の高いものとなり、時が経つに連れより広範に適用可能となることを目標に、我々のチームに所属するエンジニアやデータサイエンティストは継続的にトレーニングデータを増やし、より良いものにしています。

Exploring Amazon Comprehend

コンソールで Amazon Comprehend を調べることができ、それから Comprehend の API を利用したアプリケーションを作ることができます。Amazon Comprehend API Explorer を練習すすため、Direct Connect に関する私の直近のブログから冒頭の段落を使ってみましょう。テキストボックスに単純にテキストを貼り付け、Analyze ボタンをクリックします:

Comprehend はテキストを高速に処理し、図で確認できるように識別したエンティティをハイライトし、クリックするとその他の全ての情報を利用可能にします:


結果のそれぞれのパートについて見てみましょう。Comprehend は私が提供したテキストにあるエンティティに関する多くのカテゴリ情報を検出することができます。


私のテキストで発見された全てのエンティティは下図の通りです(リスト形式や生のJSONフォーマットとしても表示可能です):


最初に表示されるキーフレーズは下記の通りです(残りは Show all をクリックすると確認することができます):


言語と感情はシンプルかつ率直です:


OK、これらはインタラクティブな関数です。バッチ関数について見てみましょう!私は既に数千もの私の古いブログが保存された S3 バケット、出力用の空のバケットを持っており、Comprehend がそれらにアクセスできるように IAM role を設定してあります。私はそれらの情報を入力し、バッチ処理を実行するため、Create job をクリックします。


コンソールで直近のジョブを確認することができます:


ジョブが完了すると、出力用の空のバケットに結果が出力されます:


デモ目的で、データのダウンロードとデータを確認することを確かめました(ほとんどの場合、データは可視化ツールか分析ツールに投入するすると思います):

$ aws s3 ls s3://comp-out/348414629041-284ed5bdd23471b8539ed5db2e6ae1a7
2017-11-25 19:45:09 105308 output.tar.gz
$ aws s3 cp s3://comp-out/348414629041-284ed5bdd23471b8539ed5db2e6ae1a7
download: s3://comp-out/348414629041-284ed5bdd23471b8539ed5db2e6ae1a7
$ gzip -d output.tar.gz
$ tar xf output.tar
$ ls -l
total 1020
-rw-r--r-- 1 ec2-user ec2-user 495454 Nov 25 19:45 doc-topics.csv
-rw-rw-r-- 1 ec2-user ec2-user 522240 Nov 25 19:45 output.tar
-rw-r--r-- 1 ec2-user ec2-user 20564 Nov 25 19:45 topic-terms.csv
$

“topic-terms.csv” ファイル は共通のトピック番号(1つ目のカラム)内で関連付けられた言葉が集められています。ここでは最初の25行を記載します:

topic,term,weight
000,aw,0.0926182
000,week,0.0326755
000,announce,0.0268909
000,blog,0.0206818
000,happen,0.0143501
000,land,0.0140561
000,quick,0.0143148
000,stay,0.014145
000,tune,0.0140727
000,monday,0.0125666
001,cloud,0.0521465
001,quot,0.0292118
001,compute,0.0164334
001,aw,0.0245587
001,service,0.018017
001,web,0.0133253
001,video,0.00990734
001,security,0.00810732
001,enterprise,0.00626157
001,event,0.00566274
002,storage,0.0485621
002,datar,0.0279634
002,gateway,0.015391
002,s3,0.0218211

それから、”doc-topics.csv” ファイルは最初のファイルにあるトピックをどのファイルが参照しているかを示しています。再び、最初の25行を記載します:

docname,topic,proportion
calillona_brows.html,015,0.577179
calillona_brows.html,062,0.129035
calillona_brows.html,003,0.128233
calillona_brows.html,071,0.125666
calillona_brows.html,076,0.039886
amazon-rds-now-supports-sql-server-2012.html,003,0.851638
amazon-rds-now-supports-sql-server-2012.html,059,0.061293
amazon-rds-now-supports-sql-server-2012.html,032,0.050921
amazon-rds-now-supports-sql-server-2012.html,063,0.036147
amazon-rds-support-for-ssl-connections.html,048,0.373476
amazon-rds-support-for-ssl-connections.html,005,0.197734
amazon-rds-support-for-ssl-connections.html,003,0.148681
amazon-rds-support-for-ssl-connections.html,032,0.113638
amazon-rds-support-for-ssl-connections.html,041,0.100379
amazon-rds-support-for-ssl-connections.html,004,0.066092
zipkeys_simplif.html,037,1.0
cover_art_appli.html,093,1.0
reverse-dns-for-ec2s-elastic-ip-addresses.html,040,0.359862
reverse-dns-for-ec2s-elastic-ip-addresses.html,048,0.254676
reverse-dns-for-ec2s-elastic-ip-addresses.html,042,0.237326
reverse-dns-for-ec2s-elastic-ip-addresses.html,056,0.085849
reverse-dns-for-ec2s-elastic-ip-addresses.html,020,0.062287
coming-soon-oracle-database-11g-on-amazon-rds-1.html,063,0.368438
coming-soon-oracle-database-11g-on-amazon-rds-1.html,041,0.193081

Amazon Comprehend を利用したアプリケーションの構築

ほとんどの場合、アプリケーションに自然言語処理機能を追加するために Amazon Comprehend API を利用するでしょう。以下に、主要なインタラクティブ関数をまとめます:

DetectDominantLanguage – テキストに関する主要な言語を検出する。他の関数を利用する際にこの情報が必要となるので、この関数を最初に呼び出す。
DetectEntities – テキストにあるエンティティを検出し、JSON形式で結果を返す
DetectKeyPhrases – テキストにあるキーフレーズを検出し、JSON形式で結果を返す
DetectSentiment – テキストにある感情を検出し、POSITIVE/NEGATIVE/NEUTRAL、もしくは、MIXED を結果として返す

これらの関数それぞれに対応する4つの異なるタイプの(それぞれ Batch という接頭語が付けられた)関数も存在し、最高で 25 件のドキュメントを並列に処理することができます。それらはスループットが高いデータ処理パイプラインを構築する際に使うことができます。

以下に、トピック検出ジョブを生成・管理するために使うことができる関数をまとめます:

StartTopicsDetectionJob – ジョブを生成し、ジョブを開始する
ListTopicsDetectionJobs – 実行中ジョブ/最近実行したジョブのリストを取得する
DescribeTopicsDetectionJob – ジョブ 1 件の詳細情報を取得する

 

今すぐ利用可能です

Amazon Comprehend は今すぐ利用可能です。Amazon Comprehend を利用したアプリケーションを本日作り始めることができます!

Jeff (翻訳は SA川村 が担当しました。原文はこちら)