自然言語処理サービスの Amazon Comprehend についてまとめてみた #reinvent

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、藤本です。

AWS re:Invent 2017 にて自然言語処理(Natural Language Processing)サービスの Amazon Comprehend がリリースされました。弊社ブログでも既にいくつか記事が取り上げられています。

本エントリでは Amazon Comprehend をもう少し深掘りしてみます。

自然言語処理

Amazon Comprehend は自然言語処理サービスと記載しましたが、自然言語処理とは何でしょうか。普段私たちが使っている言葉(話している内容でも、書いている内容でも)が自然言語です。自然言語は人間にとっては今まで学んだことや経験から意味を理解することができますが、コンピュータには難しいです。自然言語をコンピュータに処理させる技術を自然言語処理と呼びます。

自然言語処理自体も多くの技術によって成り立っています。代表的なものをいくつかご紹介します。

  • 形態素解析 文章を単語、品詞などに分解します。文章はコンピュータにとっては文字の羅列です。どこからどこまでの文字が意味のある単位なのかを解析します。
  • 構文解析 文章の単語、品詞の関係性を解析します。品詞がどの品詞に係っているのかを解析します。
  • 照応解析 照応詞の指示対象を推定します。「それ」や「あれ」、「彼」や「彼女」が何を指しているのか解析します。

詳しく知りたい方は以下の記事が非常に分かりやすくまとめられています。

Amazon Comprehend と自然言語処理

Amazon Comprehend は機械学習を活用して、自然言語処理を提供するサービスです。機械学習には Amazon.com の商品説明や、商品レビューなどの大規模なコーパスなど様々な情報源から学習しています。日々学習し、結果の精度を向上させています。

現状 Amazon Comprehend でできることは以下の通りです。

対応している言語

主要言語の検出機能 100言語(日本語含む)
その他検出機能
Topic Modeling
英語、スペイン語

Entity の検出

単語、文章の集合(以下、ドキュメント)から Entity、および属するカテゴリを検出します。Entity は下記のカテゴリに属する単語、連語を指します。

Entity タイプ 説明
COMMERCIAL_ITEM プロダクト名を検出します Comprehend, RDS
DATE 日付や時刻を検出します 2017/12/01, 12:34:56
EVENT イベントに関するワードを検出します Halloween, christmas
LOCATION 国名、地名などを検出します Japan, Mt.Fuji
ORGANIZATION 会社名や、組織名を検出します Amazon, Republican
PERSON 人名を検出します ​Donald John Trump, ​Daisuke Sasaki
QUANTITY 数量を検出します ​115, one hundred fifteen
TITLE 創作物の名称を検出します ​Star Wars
OTHER 上記に属さない Entity を検出します Japanese

また Entity の検出は単語で判断しているわけではなく、文脈によって判断されます。同じ単語も文脈によっては結果が変わることもあります。

マネジメントコンソールから見る例

マネジメントコンソールで Comprehend を開くと、デフォルトで入力されている文章からどのような結果が返るのか見てみましょう。

「Amazon.com, Inc.」、「Starbucks」といった会社名がORAGANIZATION、「Seattle, WA」、「Portland」といった地名がLOCATIONとして検出されています。またそれぞれに信頼性といった情報も付与されています。

キーフレーズの検出

ドキュメントから重要なフレーズを検出、抽出します。ドキュメントの特徴的な名詞を得ることができます。ドキュメント群から抽出したフレーズでカテゴライズできたり、検索キーワードとして活用したりできるのかな。

マネジメントコンソールから見る例

先ほどと同じ文章からどのような結果が返るのか見てみましょう。

先ほどと結果は似ていますが、キーフレーズは Entity とは若干異なる単語の抽出となっています。あくまでも分類されたフレーズの抽出と、ドキュメントの中で重要と思われるフレーズの抽出は目的が異なるので結果も異なります。

主要言語の検出

ドキュメントがどの言語で記載されているのか検出します。その他検出が英語、スペイン語の 2種類に対して、主要言語の検出は 100種類の言語に対応しています。日本語も含まれています。

マネジメントコンソールから見る例

先ほどと同じ文章からどのような結果が返るのか見てみましょう。

サンプルは英語なのでenで検出されます。

日本語も検出できます。

感情の検出

ドキュメントがどのような感情で記載されているか検出します。下記4種類で結果を返します。

  • 肯定的
  • 否定的
  • 混在
  • 中立

エゴサしたくなりますね笑

マネジメントコンソールから見る例

先ほどと同じ文章からどのような結果が返るのか見てみましょう。

特に感情的な単語はないのでほぼ Neutral(中立)となっています。

ネガティブな文を入れてみます。

ネガティブの数値が高くなりました。

Topic Modeling

複数のドキュメントから LDA ベースの学習モデルを使用して、共通のトピックを判断することができます。例えば、「EC2 は秒単位で課金されるコンピュートサービスです」といったドキュメントから弊社ブログを読んでいる読者であれば、「AWS」という単語がなくとも AWS の話ということが判断できるかと思います。これはドキュメントに含まれる単語からトピックに関連付けて。ここでいう Topic はカテゴライズ、グルーピングのようなことを意味します。グループは特定の名称ではありません。Comprehend では数値の ID でグルーピングします。

Topic Modeling は S3 のドキュメント群を与えると 2つのファイルを生成します。

  • 単語と Topic の関連付けた CSV ファイル
    • 1行は Topic,Term,Weight の 3つの情報
    • Topic はグループの ID
    • Term はドキュメントから抽出された単語
    • Weight は単語の重要度
  • Topic とドキュメントの関連性評価した CSV ファイル
    • 1行は Docname,Topic,Proportion の 3つの情報
    • Docname はドキュメントのファイル名
    • Topic は一つ目の CSV ファイルで抽出したグループの ID
    • Proportion は関連度

サンプルから見る結果例

AWS が公開サンプルデータを S3(s3://public-sample-us-east-1/Sample.txt)に用意しています。このファイルには物理学や高調波など難しい用語の Wikipedia の内容が一行づつ格納されています。サイズは行数が 606、単語数が 117,949件含まれています。このデータを使って Topic Modeling します。設定はデフォルトのまま、10 の Topic に分類します。

結果からどのように分類されたか確認してみましょう。

まずは単語と Topic の関連付けた CSV ファイルです。一つ目の Topic は下記のような単語が分類されました。

topic,term,weight
000,cognitive,0.0508213
000,human,0.0181545
000,process,0.019357
000,cognition,0.0115279
000,brain,0.0101779
000,mental,0.00838119
000,style,0.00786231
000,refer,0.00849239
000,learn,0.0105929
000,loar,0.00621534

人や行動に関する単語が分類されている気がします。

二つ目の Topic は下記のような単語が分類されました。

001,model,0.0637164
001,size,0.0197475
001,year,0.0223847
001,chrysler,0.0183622
001,full,0.0177853
001,generation,0.0162592
001,seriar,0.0155608
001,chevrolet,0.0149851
001,cadillac,0.0128545
001,produce,0.0126167

こっちは車に関することがまとめられています!!こっちは分かりやすい!

もう一方のTopic とドキュメントの関連性評価した CSV ファイルも確認します。

docname,topic,proportion
Sample.txt:28,007,1.0
Sample.txt:63,006,1.0
Sample.txt:98,008,0.877854
Sample.txt:98,000,0.122146
Sample.txt:133,002,1.0
Sample.txt:168,000,1.0
Sample.txt:203,000,1.0
Sample.txt:238,000,1.0
Sample.txt:273,000,0.643693
Sample.txt:273,001,0.107316
Sample.txt:273,008,0.072461
Sample.txt:273,005,0.064356
Sample.txt:273,003,0.063804
<snip>
Sample.txt:560,001,1.0
<snip>

docnameにはファイル名:行数で一件一件のドキュメントを表しています。どうせならTopic 001にマッチするドキュメントを見てみましょう。本当に車に関係しているのでしょうか?サンプルデータの 560 行目です。

The Cadillac Ciel is a hybrid electric concept car created by Cadillac and unveiled at the 2011 Pebble Beach Concours d'Elegance. The Cadillac Ciel has a twin-turbocharged 3.6-liter direct injection V6 producing 425 horsepower and a hybrid system using lithium-ion battery technology. The Ciel is a four-seat convertible with a wheelbase of 125 inches. The concept car was developed at GM Design's North Hollywood Design Center.The Ciel comes with rear suicide doors, and the interior features a smooth wooden dashboard with a simple gauge look. The word "Ciel" is French for "sky"- which is what the designers had in mind when they made the vehicle.In 2012 and early 2013, Cadillac contemplated developing a production car based on the Ciel. However, in July 2013, they decided not to pursue the venture. At the 2013 Pebble Beach Concours d'Elegance, Cadillac unveiled a new concept, the Cadillac Elmiraj, which is similar in design to the Ciel, except it is a coupe. Both vehicle's were designed by Niki Smart.

おー、キャデラック・シエルの Wikipedia の内容ですね。間違いなく車のドキュメントです。

利用者はテストデータを与えることもなく、モデルを調整する必要がなく、ドキュメント群を渡すだけで分類してくれました。

まとめ

いかがでしょうか? Comprehend は何やら面白そうなサービスですが、他のサービスと比べて、どこでどう活用するのか難しいサービスだな、と直感では感じました。もっと深掘りして色々なユースケースのブログを書いてみたいと思います。