SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

テキスト・ネットワーク分析統合プラットフォームを学ぶ

テキスト・ネットワーク分析統合プラットフォーム
第1回:データ構造の詳細、APIの概要、アプリ構築

インターネットのコミュニケーション履歴情報をネットワークとして捉える

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)を参照ください。

次のページ
分析フレームワーク

この記事は参考になりましたか?

テキスト・ネットワーク分析統合プラットフォームを学ぶ連載記事一覧
この記事の著者

村上 明子(ムラカミ アキコ)

日本アイ・ビー・エム(株)東京基礎研究所 主任研究員1999年日本アイ・ビー・エム(株)入社。以後、同社東京基礎研究所において自然言語処理の研究に従事。テキスト・マイニング・ツールIBM TAKMIの研究開発において、品詞管理や辞書作成などを担当した。昨今では、電子メールや掲示板など人と人のコミュニケーションの文書を対象としたコミュニケーション分析をなどを行っている。ほかに著書として「チャンス発見の情報技術(東京電機大学出版)(共著)」、訳書として「Google Hacks 第2版、第3版(オライリージャパン)(共訳)」がある。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4097 2009/07/15 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー