レベル: 中級 村上 明子, 主任研究員, 日本アイ・ビー・エム(株)東京基礎研究所
2009年 7月 31日 インターネット上でのソーシャル・ネットワークサービス(SNS)やブログなどのサービスの普及により、人のコミュニケーションの履歴とそれに関連するテキストが多く取得できるようになりました。我々は、このような「コンテンツ」「人」、そしてその人の「行動」の履歴などのさまざまな情報を、テキストとネットワークの両方の観点から統合的に分析する技術を「ソーシャル・アナリティクス」と呼んでいます。これにより、1つの観点からだけではわからない新しい知識を得る、人の興味をモデル化して詳細に分析する、などといったことが可能です。
コミュニケーション履歴を分析する2つの方法
今まで、SNSやブログといったインターネットのコミュニケーションの履歴を分析する方法はいくつか提案されてきました。それらの分析は、主に「コンテンツ」であるテキストに着目したものと、「行動」に着目したものに分けることができます。
「コンテンツ」に着目したテキスト分析
コンテンツに着目したテキスト分析では、そのテキストから情報抽出技術によって取得した情報と、そのテキストに付随しているメタ情報(生成日時、生成した人、カテゴリ、等)を用いて分析を行います。IBMではこのようなテキスト分析技術として、テキストマイニング・システムを製品化(ICA:IBM Content Analyzer)しています。テキスト分析ではブログでどのような話題が多いのか時系列的に調べたり、ブログの筆者の性別・年代などがわかっている場合はそれらの部分集合を全体の集合と比較してその性別や年代に特化した興味を調べたりできます。また、一人のユーザーに着目すると、そのユーザーが読んだブログ集合を分析することで、どのような興味を持っているのかを調べることができ、それを基に広告などを配信することも可能です。
「行動」に着目した分析
一方、行動に着目した分析は、人とその人が行った行動、およびその対象コンテンツの関係を、誰と何、誰と誰が関係しているのかをベクトル表現などに表し、ネットワーク構造に変換して分析を行うものです。この分析では、行動の履歴が似ている人同士をクラスタ化してまとめたり、過去の行動の履歴を基に新しいコンテンツなどを推薦したりできます。Webでの購買サイトで「この商品を買ったお客様はこちらの商品も買っています」などのように表示される情報は、この分析の結果から提示されていると思ってよいでしょう。
これらの「コンテンツ」中心、「行動」中心の分析のどちらが適切な分析方法なのかは、データの性質や行動履歴の頻度によって変わってきます。テキスト分析・ネットワーク分析にはそれぞれに適したデータ構造があるため、従来は分析を行う際に基本的にどちらを中心とした分析にするかを事前に決定して、データ構造を作成しておく必要がありました。
今回紹介するテキスト・ネットワーク分析統合プラットフォーム(TExt and Network Analysis、以下、TENAと略します)は、「コンテンツ」および「人」とそれに付随する行動などの関係を「ネットワーク」として1つのデータ構造で保持し、それに対してアクセスできるフレームワークの提供により、2種の分析手法を1つのプラットフォーム上で実現します。実際にブログやSNSなどの履歴の分析を行ってみると、「行動にある特徴を持ったユーザー集合を同定し、そのユーザーが生成した日記のトピック傾向を知りたい」、「あるトピックについてブログを書いたユーザーの行動の他のブログの閲覧傾向を知りたい」といったような、テキストと行動にまたがった分析がしたくなるものです。本稿では、TENAのデータ構造およびAPI概要と、その上に構築可能なアプリケーションを、実例とともに紹介していきます。
テキスト・ネットワーク分析統合プラットフォーム:基本概念
TENAのデータ構造の特徴は「情報のすべてをネットワークとして捉える」という点にあります。
ここで言う「ネットワーク」とは、メタ情報の付与された「ノード」集合と、それらノードを結ぶ「リンク」からなるグラフ構造を表しています。ソーシャル・コンピューティングの中で中心的な役割を果たす「コンテンツ」と「ユーザー」は、このデータ構造ではネットワークの「ノード」として扱われます。
「コンテンツ」の例として、ブログの本文テキストやブログへのコメント、メール、メッセージなどといったテキストコンテンツはもちろん、「動画」や「音楽」そしてネット通販サイトなどにおける「商品」もコンテンツとして扱うことができます。「リンク」には、「状態」を表すリンクと「行動」を表すリンクの2種類があります。
「状態」を表すリンクとは、「ユーザー」と「ユーザー」が「友達である」といったユーザーノード同士の関係や、「ブログコンテンツ」に対する「コメント」などのテキストコンテンツ同士の関係を示すものです。もう1つのリンクの種類は、「ユーザー」が「ブログコンテンツ」を「読んだ」といった「行動」を表すものです。
図1に、このデータ構造の例を示します。この例では、ノードとしてユーザー(太郎、花子)、コンテンツとして音楽(ABC Song)、ブログ、商品(XYZ game)があります。そして、ユーザー:太郎が音楽を聞いたり、ブログを書いたりといった行動を行ったことが、リンクから読み取ることができます。
図1:データ構造の例
TENAはユーザーの行動履歴およびコンテンツをこのようなデータ構造のグラフデータベースとして扱います。以降、TENAの全体のフレームワークと、ノードとリンクがそれぞれどのようなスキーマで蓄積されているか、どのようなAPIによってアクセスできるのか実際の例を見ながら説明していきます。
TENAコモンストアと分析フレームワーク
TENAは分析プラットフォームとして図2に示すようなTENA分析統合プラットフォームを提供しています。
図2:TENA分析フレームワーク
クリックして拡大
TENA統合分析プラットフォームは、「TENAコモンストア」と「分析フレームワーク」から成り立ちます。前節で示したような抽象化されたネットワーク構造は、「TENAコモンストア」と呼ばれるデータストアに蓄積されます。
TENAコモンストアはグラフデータベースであり、ユーザー、コンテンツ、関係、行動といったすべての情報が蓄積されています。その上に共通に使われる分析機能を用意した「分析フレームワーク」が構築されます。
これは、例えばユーザーの興味をモデル化したり、ノードとリンクの情報から特殊なグラフ構造を作成してノード同士の類似度を計算したり、といったものです。そして、TENAコモンストアと分析フレームワークの情報を用いて、分析機能アプリケーションが構築されます。
TENAコモンストア:データ構造詳細とAPI例
TENAコモンストアでは、各ノードはどのような種類かを示す「NodeType」を持ち、これを参照することで人かコンテンツなのか判断できます。また、このノードには「ID」、「名前」や「生成日時」などのさまざまな情報を属性(attribute)として付与できます。さらに、コンテンツが本文やタイトルなどのテキスト情報を含んでいる場合、そのテキスト情報から言語処理を用いて抽出した情報(キーワードや嗜好情報など)も同様に属性として付与できます。
「リンク」には前述したように「状態」を表すリンクと「行動」を表すリンクの2種類があります。リンクはどのような関係を示しているかを表す「LinkType」を持っています。また、リンクには方向があり、ノードから出ているリンクをOutlink、ノードに入るリンクをInlinkと呼んでいます。また、「LinkType」によって始点と終点がどのような意味を表すのかを知ることができます。
リンクの具体例として「書いた」という関係を挙げてみましょう。Aという人がBというブログ記事を書いたとき、それを表すリンクは「書いた」というタイプとなり、始点がA、終点がBとなります。友人関係のように双方向の関係を示すときには、AからB、BからAのリンクを2つ用いて表します。また、リンクもノードと同様に属性を付与できます。
これらのノード、リンクに対する「NodeType」「LinkType」とそれぞれのタイプに応じて付与される属性はソーシャル・コンピューティングの種類(ブログ、SNSなど)によって違います。TENAでは一般的なソーシャル・コンピューティングの種類に対して、標準的なデータセットを用意しており、これを拡張して利用できます。
データ構造詳細
ブログデータセットの例
次の表1、表2に、ブログにおけるデータセットの例を示します。データ構造を規定する場合は、標準データセットを一部のみ利用することも、拡張して用いることも可能です。
表1:データセット(ブログ) ノード、リンクのタイプ(NodeType,LinkType)
| ラベル | 名前 | タイプ | 説明 |
|---|
| TEXTCONTENT | テキストコンテンツ | NodeType | ブログ、日記などのテキストが主体のコンテンツ | | COMMENT | コメント | NodeType | ブログや日記などに付与されたコメントなどのテキストを主体としたコンテンツ | | PERSON | ユーザーノード | NodeType | 行動を起こす人を表すノード | | WRITE | 書く | LinkType | 行動を表すリンク。テキストを主体としたコンテンツに対して人が「書く」というアクションを起こした時の関係 | | READ | 読む | LinkType | 行動を表すリンク。テキストを主体としたコンテンツに対して人が「読む」というアクションを起こした時の関係 | | NOTICE_READ | お知らせ(コンテンツ) | LinkType | 行動を表すリンク。コンテンツに対し、あるユーザーがそのコンテンツを読んだことを明示的に知らせるアクション(ex.拍手ボタンなど)。ユーザーとコンテンツの関係 | | DIG_PERSON | お知らせ(人) | LinkType | 行動を表すリンク。ユーザーに対し、あるユーザーがそのユーザーのブログやホームなどを訪れたことを明示的に知らせるアクション。ユーザーとユーザーの関係 | | BOOKMARK | ブックマーク | LinkType | 関係を表すリンク。あるユーザーが、別のユーザーのブログやホームを登録している関係。方向性あり。時刻情報はない | | FRIEND | 友人 | LinkType | 関係を表すリンク。あるユーザーが、別のユーザーと知り合いである関係。方向性あり。時刻情報はない(相互認証が必要なシステムのときには相互リンクとなる) | | CMT2BLOG | コメントからブログへのリンク | LinkType | 関係を表すリンク。コメントがブログ(TEXTCONTENT)へのコメントだということを示す |
表2:データセット(ブログ) ノード、リンクの属性(attributes)
| ラベル | 名前 | 何の属性か | 説明 |
|---|
| .personID | ユーザーID | PERSON | ユーザーを識別するID | | .textContent | テキストコンテンツ | TEXTCONTENT | テキスト本文 | | .textContentID | テキストコンテンツID | TEXTCONTENT | テキストコンテンツを識別するID | | .textContentTitle | テキストコンテンツタイトル | TEXTCONTENT | テキストのタイトル | | .comment | コメント | COMMENT | コメント本文 | | .commentID | コメントID | COMMENT | コメントコンテンツを識別するID | | .commentTitle | コメントタイトル | COMMENT | コメントのタイトル | .tkm_ja_base_word
.noun.general | 一般名詞 | TEXTCONTENT,
COMMENT | テキストコンテンツ、コメントコンテンツから抽出された一般名詞 | | .tena.keyword | キーワード | TEXTCONTENT,
COMMENT | テキストコンテンツ、コメントコンテンツから抽出されたキーワード | | .authorNodeID | ブログを書いたユーザーを表すNodeのID | TEXTCONTENT,
COMMENT | コンテンツを作成したユーザー。コンテンツのOutLinkのうち、「WRITE」タイプがさすPERSONノードの.personIDと同じ |
API例
TENAコモンストアは、データにアクセスするためのJava APIを提供します。基本的なAPIは以下の3つです。
1)条件に合致したノードの取得
IDや日付等で与えられた条件を満たす、ノードの一覧を返します。
2)ノードのOutlink/Inlinkの取得
指定されたノードから出ている/ノードへ入っているリンクの一覧を取得できます。LinkTypeによる絞込条件をつけることもできます。
3)ノードのAttributeの取得
ノードに付与された各種Attributeを返します。
これらのAPIを用いて、さまざまな分析が可能です。例えば、あるユーザーが作成したテキストコンテンツを取得したいときは、まずユーザーノードをIDなどで指定して取得し、そのOutlinkを[LinkType:Write]という条件の下で取得し、その先のコンテンツノードを取得することで実現できます。
このように、ネットワークの情報に自在にアクセスできるTENAコモンストアですが、ブログなど数万人から数百万人のユーザーがいるデータを扱う場合は、その行動履歴まで含んだデータは数十から数百ギガバイトになってしまいます。このようなサイズの場合は、通常データをハードディスク上に設置し、それに対してアクセスします。すると、APIの種類によってはランダムアクセスが大量に生じ、レスポンスタイムが遅くなります。そのため、TENAでは簡潔データ構造(Succinct Data Structure)と呼ばれるデータ構造を用意しています。簡潔データ構造とは、検索に対してなるべく小さい索引で、短い応答時間を実現するためのデータ構造です。この簡潔データ構造は索引データが小さいため、主記憶上でのアクセスが可能となります。
また、このデータへの変換を行っても提供可能なAPIはまったく等価のため、APIにアクセスするユーザーは背後のデータ構造が何であるかを意識する必要はありません。簡潔データ構造のアルゴリズムおよび実装は紙面の都合上詳細は 述べませんが、興味のある方は定兼先生による解説(PDF)を参照ください。
分析フレームワーク
TENAコモンストアを利用すると、ソーシャル・コンピューティング上でのコンテンツ、テキスト内容、およびユーザー行動の情報へのアクセスが可能となります。その情報を利用して、複数の分析アプリケーションから共通に利用される分析フレームワークは構築されます。例えば、テキスト情報に関連する分析フレームワークには、次のような情報を得るためのものがあります。
文書ベクトル
各テキストノードに含まれるキーワードの集合をベクトル表現に変換したもの。
行動マトリクス
ユーザーの読む、書くといった行動履歴別に、対象となったテキストコンテンツに含まれるキーワードをベクトル表現で表したもの。
興味マトリクス
ユーザーの過去の行動マトリクスを用いて、現在の興味をベクトル表現でモデル化したもの。キーワードに対して与えられる値は、現在に近いほど大きい値となる。
これら3つの分析フレームワークでは、特徴を表すためにベクトル表現を用いています。例えば文書に対しては、キーワードの出現頻度によってその文書の特徴を表すことができます。これをベクトルとして保持したものが文書ベクトルであり、文書同士の内容がどれくらい近いのか、どのようなキーワードが共通して出現しているのか、などをベクトルの数学的な演算で求めることができます。マトリクスとはベクトルが複数個集まった行列であり、同様にマトリクス同士の近さなどを求める演算を定義できます。
次回について
分析アプリケーションはTENAコモンストアで提供されるAPIと分析フレームワークから得られる文書ベクトルなどを用いて、ソーシャル・コンピューティング上での分析を可能とするものです。
分析アプリケーションは大きく分けて、コンテンツ推薦などユーザーが利用するための情報を提供するためのものと、マーケティング情報の取得などサイトのオーナー向けのビジネスインテリジェンス分析のためのものとがあります。
次回、具体的な分析アプリケーションを紹介するとともに、分析アプリケーションの中で、TENAコモンストアおよび分析フレームワークがどのように使われているのか、解説していきます。
著者について  | 
|  | 村上 明子(ムラカミ アキコ) - 1999年日本アイ・ビー・エム(株)入社。以後、同社東京基礎研究所において自然言語処理の研究に従事。テキスト・マイニング・ツールIBM TAKMIの研究開発において、品詞管理や辞書作成などを担当した。昨今では、電子メールや掲示板など人と人のコミュニケーションの文書を対象としたコミュニケーション分析をなどを行っている。ほかに著書として「チャンス発見の情報技術(東京電機大学出版)(共著)」、訳書として「Google Hacks 第2版、第3版(オライリージャパン)(共訳)」がある。 |
記事の評価
|