企業がソーシャルメディアを使って製品や企業自体の評判を調べる傾向が顕著になっている。これに伴い、単語と定量的メトリクスを使い、文書に含まれる感情を分析するという独特の課題が現れている。
Subramanian Kartik氏とEMCのGreenplumチームはブログ記事をMapReduceとPythonのNatural Language Toolkitを使い、EMC GreenplumデータベースのSQL分析と組み合わせてスパースベクトルとK-平均法アルゴリズムを用いて分析するという研究プロジェクトを行った。
Subramanianは昨年のNoSQL Now 2011カンファレンスでこの研究について発表した。InfoQはこのプロジェクトと背後にあるアーキテクチャについてSubramanianに詳しい話を聞いた。
InfoQ:Greenplum研究プロジェクトのブログの感情分析とその背後にあるアーキテクチャについて教えてください。
Kartik: 感情分析は自然言語処理や計算言語学、テキスト分析を駆使して情報源であるブログから主題を抽出します。このような分析はソーシャルメディアの情報分析でとても一般的な方法になっています。また、この方法で電子情報開示のような定型的な情報を分析している顧客も多いです。分析のゴールは文書の集合の中の支配的な概念のパターンを見つけ、その概念と文書の部分集合を結びつけることです。ブログの分析で言えば、ブロガーが書いたある企業の製品やサービスについての記事の集合の中から主要なテーマを見つけ出すのがゴールです。
アーキテクチャには自然言語処理(非構造化データに適用される)や、構造化データの数値化、パターン認識のための機会学習アルゴリズム(普通は構造化データに適用される)というような技術が使われています。このアーキテクチャの面白いのはMap/Reduce(普通使われるのはHadoop)と従来のRDBMSを使ったSQLベースの分析を組み合わせることでこの課題を解決するという方法です。
InfoQ: どのような技術やプログラミングテクニック、アルゴリズムを使いましたか。
Kartik:EMC Greenplumデータベースの技術を使ってパターンを見つけるためにブログのコーパスを調べました。そもそもGreenplumは超並列処理リレーショナルデータベースなのですが、このような用途に向いています。というのは、GreenplumにはPerlやPythonのような高級言語で書かれたコードを使って構造化データと非構造化データを処理できる機能があるからです。コードはデータベース内で、GreenplumのMap/Reduceインターフェイスを使って実行できますし、SQLから呼び出せるユーザ定義関数から実行することもできます。データ処理のパイプラインはブログファイル(HTMLファイル)の取り込みと解析から始まります。それから、定量的なテキストメトリクスを定義し、数値ベクトルで各ブログを特徴付け、機会学習アルゴリズムを使ってブログを支配的なテーマ毎にクラスタ化します。処理結果は主要なテーマ毎にまとめられたクラスタ群、つまり、分析したブログのコーパスに現れた"感情"です。
今回のプロジェクトではGreenplumのPythonサポートを使いました。HTML解析やオリジナルテキストから語幹抽出や不要語の除去のためにPython Natural Language Toolkit (NLTK)を使うためです。また、抽出した語句のリストをリレーショナルデータベースに保存するのにもPythonを使います。この方法が美しいのはオープンソースのNLTKを変更せずに利用でき、Greenplumの中でMap/Reduceインターフェイスを使って直接呼び出せる点です。データベースのテーブルに語句のリストを保存したら、そのリストをコーパス全体を考慮して語句の定義がより明確な辞書に成形します。そして、計算言語学の標準的なメトリクスである語出現頻度と逆文書頻度(tf-idf)を使って各ブログの文書を独自のベクトルで表します。これでできたベクトル空間内で"距離"を定義し、教師なし学習やK平均法のような有名なクラスタリングアルゴリズムを使って、最終的な結果を得ます。これらの処理はすべてデータベース内で行われます。つまり、データをリレーショナルデータベースから取り出して処理する必要はありません。tf-idfもNLTKもK平均法もどこにでも説明があります(例えばWikipedia)ので、興味がある方は調べてみるといいでしょう。
InfoQ: 従来の関係データの分析と比べて、ブログデータを解析し分析する場合の最大の課題は何でしたか。
Kartik:人間の言語だということです。機械は人間の言語を様々な意味に解釈できてしまいます。しかし、各分野には固有の語句や略語があります。携帯電話についてのブログはヘルスケアについてのブログと大きく異なります。両方ともそれぞれの分野で特別な意味を持つ言葉を含んでいるからです。ソーシャルメディアに関するブログなら説明が必要な略語が大量に含まれています。tf-idfを使ったメトリクスは文書を特徴付ける方法であり、ブログのひとつの記事を特徴付けるのに使える方法です。実際にはひとつの記事の各部分で言及している話題や表現している感情が異なるかもしれません。より詳細に分析するにはトピックモデル(潜在的ディリクレ配分法)のようなもっと洗練された機会学習アルゴリズムが必要でしょう。感情を文単位に紐付けることで記事の変化を明らかにするという処理の仕方をする研究者もいます。自然言語処理に今後も盛んに研究される領域です。私たちが行った研究はこのとても複雑な領域の表面を引っ掻いたに過ぎません。対照的に関係データは普通、数値で表すことができますし、私たちにはSQLベースの分析には30年の経験があります。また、機械学習で利用できるツールや技法も成熟しています。なので、理解しやすいですし、簡単に実装できます。
InfoQ:Greenplumがこのプロジェクトから学んだNoSQLのデータパターンやベストプラクティスは何ですか。
Kartik: 最も重要な教訓は問題を解決するために使うべき技術に対して偏見を持ってはならないということです。この研究はHadoopでもできたかもしれませんが、Map/ReduceとSQLを使ってこのような問題をエレガントに解決できるということはこの両方の技術パラダイムの強さを示しています。データ量が増えると出現する支配的なデータパターンを見つけるにはデータを適切な場所で処理する必要がありますし、GreenplumのMPPアーキテクチャの計算能力を利用してデータベース内で処理を行う必要があります。データ量が増えれば、データをデータ処理するコンピュータのそばに置かなければなりません。そのようなことができる技術を選択するのが重要です。同様にオープンソースのツールを使うことも重要です。車輪の再発明をすることなくより多くの知的資本を利用できるからです。プラットフォームの基盤となるアーキテクチャとそのアーキテクチャにデータベース内でコードを実行する機能があったことが今回の研究で致命的に重要だったのです。
InfoQ: このプロジェクトのこれからの予定を教えてください。
Kartik:プロジェクトの成果物には顧客や社内の様々なユースケースに対応できるような能力がありますので、EMC WorldやVMWorldのような大規模なイベントTwitterフィードを分析したいと思っています。また、ある種の仮想化技術と連携されるのも面白いと思います。理論的にはトピックモデル(LDAのような)はk平均法に替わるクラスタリング技法として研究しがいがあると思います。Greenplumはどちらもデータベース内で実行できます。また、スケールは常に興味深いフロンティアであり続けます。複数の言語を分析ができるようにするにはさらなるイノベーションが必要です。
Srini Penchikala は現在セキュリティアーキテクトとして働いている。ソフトウエア製品管理で17年の経験を持つ。