Más contenido relacionado La actualidad más candente (18) 私がチャレンジしたSBMデータマイニング3. 自己紹介(1)
筑波大の
筑波大のM1の学生
専門は
専門はHPC
・クラスタコンピューティング
・スーパーコンピュータ
・グリッドコンピューティング
テーマの例
・簡便にボランティアコンピューティングを実現するためのフレームワーク
・仮想マシンを用いた分散システムの耐故障性評価環境
etc……
2008年7月12日 SBM研究会 3
4. 自己紹介(2)
物作りが大好き
物作りが大好き
りが大好
・いろいろ作った
いろいろ作
最近だとひらめいった
だとひらめいったー
・最近だとひらめいったーとか
学部3 (2年前
年前)
・学部3年(2年前)の時に
SBMにハマる
SBMにハマる
今回の
今回の話
2008年7月12日 SBM研究会 4
5. 自己紹介(3) with はてブ
はてブ
主に使うSBMははてブ
ブログのブクマ数 = 794
サービスの置いてあるアドレスのブクマ数 = 736
合計 = 1530
余談: みなさんはどれぐらいブクマされてます?
2008年7月12日 SBM研究会 5
9. 発表の方針
発表の
SBMデータマイニングサービス開発体験記
・別に、深い洞察があるわけではないです^^;
・泥臭い話をしようかと思います
・誰でもできると伝えたい
俺の屍を越えて行け!!
2008年7月12日 SBM研究会 9
10. アジェンダ
各SBM関連のサービス開発記
・開発を始めた経緯
・Kikker
・はてブおせっかい
・はてブまわりのひと
・Kookle
個人による高性能データマイニングの可能性
Future of SBM
まとめ
2008年7月12日 SBM研究会 10
11. やっと肝心の
やっと肝心の話が始まります
肝心
2008年7月12日 SBM研究会 11
12. 開発に至った経緯
開発に った経緯
Ceekz氏がはてブニュースとい
うサービスを作った
ベイズ推定によってはてブの
ホッテントリを自動分類
これはすばらしいものだ!
しかし、並びかえただけでフィル
タリングとかをしているわけじゃ
ない
情報収集の手間はそれほど
変わらない
http://labs.ceek.jp/hbnews/
自分専用のフィルタリングがいい
2008年7月12日 SBM研究会 12
14. アジェンダ
各SBM関連のサービス開発記
・開発を始めた経緯
・Kikker
・はてブおせっかい
・はてブまわりのひと
・Kookle
個人による高性能データマイニングの可能性
Future of SBM
まとめ
2008年7月12日 SBM研究会 14
15. Kikker
学習するユーザーカスタマイズドなニュースサイト
・ユーザ(はてブの)ごとにページを推薦
・学習機能付き
2008年7月12日 SBM研究会 15
16. 全体動作
0. Kikkerがはてブをクロールして各ページの情報を集める(常に)
1.ユーザ登録
1.1 はてなのアカウントを設定
1.2 自身の興味のあるキーワードを重みとともに登録
2.ユーザがKikkerにアクセス
3.Kikkerが各ページについて評価値を計算.評価の高かったN
ページをユーザに推薦
4.ユーザが推薦されたページを閲覧すると、Kikkerがそのページ
を対象ユーザの趣向であると学習
5. ステップ2に戻る
2008年7月12日 SBM研究会 16
17. 評価値の計算方法
評価値の
アルゴリズム
・ベクトル計算
・ページ内容のベクトルとユーザの趣向のベクトルの角度(距離)を計算
・得られた値はすなわち評価値.対象のページが対象の
得られた値はすなわち評価値 対象のページが対象の
評価値.
ユーザにどれだけお めかを意味
にどれだけお薦 意味する
ユーザにどれだけお薦めかを意味する
ユーザの趣向ベクトル
ユーザの趣向ベクトル
?
ページの内容ベクトル
ページの内容ベクトル
2008年7月12日 SBM研究会 17
19. ページの内容を表現するベクトル
ページの内容を表現するベクトル
する
ページ内の各単語ごとの重み
・意味は見ていない
Ex)[SBM,web,ajax]=[10,10,40]
ベクトルの抽出
1.はてブのキーワードを集める
2.ページの内容を形態素解析して
単語に分解(1のも含む)
3.名詞だけ選択
3.各単語の重みとTF・IDFで決定
4.重みの上位N個と手順1のキーワードで
ベクトルを構成
2008年7月12日 SBM研究会 19
20. 形態素解析
対象言語の文法の知識(文法のルールの集まり)や辞書
(品詞等の情報付きの単語リスト)を情報源として用い、
自然言語で書かれた文を形態素(Morpheme, おおまか
にいえば、言語で意味を持つ最小単位)の列に分割し、
それぞれの品詞を判別する作業を指す。
(http://ja.wikipedia.org/wiki/%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90)
Mecab
・日本ではchasenの次に有名?
・言語がJavaだったのでJavaポート版のSenを使用
2008年7月12日 SBM研究会 20
21. TF-IDF
単語の文章中での重みの指標
ある単語iのドキュメントjの中での重みを求めたい
計算するために必要な情報
・TF:対象ドキュメント中の対象単語の出現数
(文書長で割って正規化する場合もある)
・N:世界中に存在するテキストの数
・DF:対象単語を含むドキュメントの数
検索エンジンを使えばオケ
・Yahoo APIを叩く
・ http://nais.to/~yto/clog/2005-10-12-1.htmlを参照
2008年7月12日 SBM研究会 21
23. ユーザの趣向を表現するベクトル
ユーザの趣向を表現するベクトル
する
各ユーザは自身の趣向を表現したベクトルを持つ
・見たページの趣向を自分に足しこむ
・はてブでブクマしたページから学習
(ユーザ登録時の一回だけ)
・ユーザがKikkerに勧められたページを
閲覧するとKikkerが学習
・自身でも指定可能
学習の仕方については
後で説明します
2008年7月12日 SBM研究会 23
25. ベクトル間の角度(距離)の計算
ベクトル間
計算方法
・式に2つのベクトルをつっこんでやる
・下の式のSc
Scがすなわち評価値で、あるページがあるユーザに
Sc
どれだけお薦めかという値
・各ページについて求めたら、ソートして上位のものを推薦
2008年7月12日 SBM研究会 25
26. 全体動作
0. Kikkerがはてブをクロールして各ページの情報を集める(常に)
1.ユーザ登録
1.1 はてなのアカウントを設定
1.2 自身の興味のあるキーワードを重みとともに登録
2.ユーザがKikkerにアクセス
3.Kikkerが各ページについて評価値を計算.評価の高かったN
ページをユーザに推薦
4.ユーザが推薦されたページを閲覧すると、Kikkerがそのページ
を対象ユーザの趣向であると学習
5. ステップ2に戻る
2008年7月12日 SBM研究会 26
27. 学習の仕組み
学習の仕組み
ユーザが推薦されたページを見るたびに学習
・ユーザが見たページのベクトルをそのユーザの趣向ベクトル
に足しこむ
ユーザがお勧めされたページのうちのどれを実際に見たか
知る必要がある
・推薦ページのリストのURLはKikkerのサイトのものにしてお
き、ユーザには一回転送することでアクセスさせる
2008年7月12日 SBM研究会 27
31. ひとまず出来上がったけど
ひとまず出来上がったけど
出来上
ベクトルの計算処理は妥当な処理時間で行えた
ただ、ページ情報のクロールが重すぎ
Yahooに異様な数のクエリを投げているのでバンされるの
ではないか・・・・・
2008年7月12日 SBM研究会 31
32. クエリを減らす工夫
クエリを らす工夫
文章中の全てのキーワードをYahooに検索かけるのは無理
・bulkfeedsのキーワード抽出APIで間引きをする
クエリの数はかなり減らせた
重みの情報も取れればよかったけど、それはできなかった
・mecabの辞書が持っている生起コストを使う
よくわからないけどTF-IDFのIDFと置き換えてOKらしい by ceekz氏
クエリの数を0にできた。わーい。
(参照: http://labs.cybozu.co.jp/blog/kazuho/archives/2006/04/summarize.php)
2008年7月12日 SBM研究会 32
33. よりよい精度を求めて
よりよい精度を
精度
推薦の精度はあまり高くない気がする
・キーワード抽出の精度が低い?
・タグやキーワードが分散し過ぎていてベクトルによる類似度計算がうまくいっていな
い
Future Work!!!!!
前者の問題を改善する方法
・少なくともタグの揺らぎはどうにかしたいところ
ウェブ?Web?はてなブックマーク?はてブ?
後者の問題を改善する方法
・潜在的意味インデキシング(Latest Semantic Indexing:LSI)という手法がある
・特徴を表現するのに最適なベクトル空間を見つけて、元の空間からその空間に写像してしまう (ベクト
ル空間の圧縮?)
・おおざっぱに言うと、必要最低限のキーワード(元のキーワードに対応しない場合もあるが)だけを使うと
いう感じ
・ベクトルの次元も小さくなるので計算量も減らせる
35. そんな事
そんな事はどうでもいいですよね
2008年7月12日 SBM研究会 35
36. アジェンダ
各SBM関連のサービス開発記
・開発を始めた経緯
・Kikker
・はてブおせっかい
・はてブまわりのひと
・Kookle
個人による高性能データマイニングの可能性
Futue of SBM
まとめ
2008年7月12日 SBM研究会 36
37. はてブおせっかい
はてブ
・各人のブックマーク履歴を
利用して推薦を行う
・Kikkerと異なりページの
内容の情報は使わない
・アルゴリズムは
コラボレイティブフィルタ
・ユーザ登録不要
2008年7月12日 SBM研究会 37
38. コラボレィティブフィルタ
p1 p2 p3 p4 p5 p6 p7
Bob ○ ○ ○
Tom ○ ○ ○ ?→○ ?→×
Joe ○ ○ ○
John ○ ○ ○
Tom[i] =( (sim(Tom,Bob)*Bob[i] + sim(Tom,Joe)*Joe[i] + sim(Tom,John)*John[i])/3 > 閾値 )
2008年7月12日 SBM研究会 38
41. 余談: 労力のお話
労力のお
のお話
システムの大部分はKikkerと共通であったため、新たに実
装したのは計算アルゴリズムのところだけ
そんなわけで実装は一日で終了
実装で大変なのはクローリングやらDB周りの処理であって、
推薦のための計算処理自体は大した労力は必要ない
(ということはクローリング周りをみんなで共通化できるとうれしいかも)
42. ひとまず出来上がったけど
ひとまず出来上がったけど
出来上
計算処理が重すぎてユーザがイライラ
・Kikkerでは転置インデックスを作ることで全てのページに
対して計算を試行することは避けられていた
・はてブおせっかいはそれはできない
解決策
・計算処理で利用するユーザとページをどうにかして間引く
仕組みが必要か
ユーザに関してはユーザのクラスタリングで対応できない
だろうか?
2008年7月12日 SBM研究会 42
43. アジェンダ
各SBM関連のサービス開発記
・開発を始めた経緯
・Kikker
・はてブおせっかい
・はてブまわりのひと
・Kookle
個人による高性能データマイニングの可能性
Future of SBM
まとめ
2008年7月12日 SBM研究会 43
44. はてブまわりのひと
はてブ
・はてブのお気に入り、られを見てクラスタリング
・自分の周りで
クネクネしてる
のは誰?
・自分はどこらへ
んとクネクネして
るの?
2008年7月12日 SBM研究会 44
49. アジェンダ
各SBM関連のサービス開発記
・開発を始めた経緯
・Kikker
・はてブおせっかい
・はてブまわりのひと
・Kookle
個人による高性能データマイニングの可能性
Future of SBM
まとめ
2008年7月12日 SBM研究会 49
51. Kookleを作ろうと思った経緯
ろうと思った経緯
いくつかのサイトで分類法としてディレクトリによる方法とタ
グによる方法の違いが考察されていた
ディレクトリでのファイル管理をタグに置き換えることは簡単
そうだ (ディレクトリ -> タグ)
・ディレクトリ名をタグとしてファイルに付けるだけだし・・・
逆(タグ -> ディレクトリ)はできるかな?
55. 共起頻度
あるタグとあるタグがどれだけ同時に利用されたか
全タグ x 全タグのテーブルを作ればよい
・ほとんどの箇所に値がない疎なテーブル
・ハッシュを使えば空間効率がよい
クローリング時に集計
Ex)[web][ajax][mixi]とタグ付けされたブクマがあったとする
table[“web”][“ajax”]++;
table[“web”][“mixi”]++;
table[“ajax”][“web”]++;
table[“ajax”][“mixi”]++;
table[“mixi”][“web”]++;
table[“mixi”][“ajax”]++;
58. アルゴリズムを考える
アルゴリズムを
仮定2
○共起頻度の関数
関連するタグの共起頻度は高い
co-occur (tag1,tag2)
Co-occur(web,sns)
Web 政治
is high.
SNS Blog スキャンダル 外交 Co-occur(政治,外交)
is high.
上のような構造があるとすれ
のような構造があるとすれ
構造 Co-occur(web,外交)
is low.
のように観測
観測されるはず
ば右のように観測されるはず
61. アルゴリズムの図示1
アルゴリズムの
ステップ1:ソート
ステップ ソート ステップ2:分割
ステップ 分割
WIDTH WIDTH^2 WIDTH^3
タグ数
ステップ3:親
ステップ 親の決定 ※図では一部の接続のみ表示
では一部 接続のみ
一部の のみ表示
64. タグごとのサイト集計1
タグごとのサイト集計
ごとのサイト
各タグのページにはそのタグが多くつけられたサイト
サイトを列挙したい
サイト
ページじゃなくてサイト!
ページじゃなくてサイト
じゃなくてサイト
個々のページについてのブクマは、そのページを含むサイトに対して
のブクマと認識しなければならない
あるページのURLから、それを含むサイトをどう判断する?
http://d.hatena.ne.jp/kanbayashi/20080713/p1 なら
http://d.hatena.ne.jp/ かな?
http://d.hatena.ne.jp/kanbayashi/ かな?
それとも http://d.hatena.ne.jp/kanbayashi/20080713 かな?
65. タグごとのサイト集計2
タグごとのサイト集計
ごとのサイト
感覚的なルールに基づいて判断
・http:/XXXX/YYYY/ZZZZ/SS?QQ=Q
サイトはhttp:/XXXX/YYYY と判断
・http:/XXXX/ZZ?QQ=Q
サイトはhttp:/XXXX/ と判断
・http:/XXXX/YYYY/SS?QQ=Q
サイトはhttp:/XXXX/YYYY と判断
要はサイトのURLは最大で第一パス区切りまでというルール
サイトの は最大で第一パス区切りまでという
パス区切りまでというルール
(ブログやホスティングサイトを想定すると、それなりにうまくいく)
66. タグごとのサイト集計
タグごとのサイト集計3
ごとのサイト
前のスライドの説明で示したように、かなり適当
サイトURLの判断を誤った場合のためにリカバー用リンク(抽出し
たサイトURLとタグ名を用いてGoogleとはてブで検索) を設置
最悪、ユーザがサイトの
最悪、ユーザがサイトのURLを見つけられる
を
でも、やっぱりもっとちゃんとした手法で対応するのがベスト
・ソーシャルな枠組みでページURLとサイトURLの対応付けをして、そ
の結果をウェブAPIで提供してくれる人とかいないかな・・・
73. アジェンダ
各SBM関連のサービス開発記
・開発を始めた経緯
・Kikker
・はてブおせっかい
・はてブまわりのひと
・Kookle
個人による高性能データマイニングの可能性
Future of SBM
まとめ
2008年7月12日 SBM研究会 73
77. アジェンダ
各SBM関連のサービス開発記
・開発を始めた経緯
・Kikker
・はてブおせっかい
・はてブまわりのひと
・Kookle
個人による高性能データマイニングの可能性
Future of SBM
まとめ
2008年7月12日 SBM研究会 77
78. Future of SBM
正直よくわからない
ただなんとなく、人と人の関係をもっとうまく使う事が必要なの
ではないかと思う
Ex)
・ はてブのお気に入り機能をもっとうまく生かすようなもの
・・・・とか?
マイニングももっと進んでいくだろう
企業がやるとした時に、必要な計算処理を提供するための
コストはペイするの?
2008年7月12日 SBM研究会 78
79. アジェンダ
各SBM関連のサービス開発記
・開発を始めた経緯
・Kikker
・はてブおせっかい
・はてブまわりのひと
・Kookle
個人による高性能データマイニングの可能性
Future of SBM
まとめ
2008年7月12日 SBM研究会 79
80. まとめ
4つのサービスの開発について説明した
・Kikker、はてブおせっかい、はてブまわりのひと、Kookle
・概要や工夫した点、展望について述べた
・同じようなものを作るための情報は網羅したつもり
・SBMのデータマイニングは楽しい
個人によるデータマイニングとSBMについての展望を述べた
みんなもSBMのデータを
いじって遊ぼう!
2008年7月12日 SBM研究会 80