MPJoin を使った類似データ抽出 株式会社サイバーエージェント アメーバ事業本部 Ameba Technology Laboratory 服部 司
MPJoin を使った類似データ抽出
株式会社サイバーエージェント アメーバ事業本部 Ameba Technology Laboratory
服部 司
2 株式会社サイバーエージェント
・ データセットの中から類似したデータペアを素 早く探し出す。
今日紹介する話
3 株式会社サイバーエージェント
データと類似性
・どんなデータもベクトルで表現できる。(大抵は)
例 ) ソーシャルグラフ
user_01 : user_04 , user_10 , …
user_02 : user_33 , user_41 , … …
user_nn : user_02 , user_05 , …
* 1user 辺りそれぞれ double [] で書ける
4 株式会社サイバーエージェント
・ベクトルの類似性を図る尺度
<類似性> - Cosin、Jaccard、Overlap、相関係数
例 ) Jaccard
user A : 1、2、3、4、5
user B : 1、3、6、7
21
2121 ),(
VV
VVVVJaccard
Jaccard(userA, userB)
= 2 / 7
5 株式会社サイバーエージェント
普通に探す場合
nnnnnC 2
2
1)1(
2
12
・全ての組み合わせで類似性を計算する。
→ データ数 n が増えたら無理
例 ) n = 10^6 → 約5000億
6 株式会社サイバーエージェント
Similarity Join
・ 閾値 t ( 0 < t < 1)以上の類似性を持つ データペアを高速に取得する。
・ 種類
- MPJoin (2009) - PPJoin (2008) - SSJoin (2006)
7 株式会社サイバーエージェント
MPJoin
・ 明らかに似ているはずがないペアは計算しない。
- Filter を使って計算対象を絞り込む。 - Filter を潜り抜けたモノを実際に計算する。
・ Filterは以下の3種類
- Size Filtering
- Prefix Filtering
- Positional Filtering
8 株式会社サイバーエージェント
Size Filtering
・ データ長(特徴数)に大きな差があるペアは、似ているはずがない。
X : 1、2
Y : 1、3、6、7、9、11、15、21、33、101、…
例 )
正確な表現 )
tt
||||||
xyx
9 株式会社サイバーエージェント
Prefix Filtering
・ 先頭部分に似ている特徴が一切なかったら、似ているはずがない。
X : 2、4、5、6、9、11、15、21、33、101
Y : 1、3、7、8、9、11、15、21、33、101
例 )
正確な表現 )
x の先頭から長さ
と、y の先頭から長さ
の部分の中に、最低一個同じ素性が必要
1||||
1
yxx
t
t
1||||
1
yxy
t
t
10 株式会社サイバーエージェント
Positional Filtering
・ 先頭部分に同じ特徴が存在する場合、先頭以降を考慮して、 閾値を超えるかどうか考える。
X : 1、3、5、6、9、11、15、21、33、82
Y : 1、3、7、8、9、11、15、21、33、99、101、103
例 )
正確な表現 )
rrllOver
t
tyxyxyxx ,min),(||||
1
11 株式会社サイバーエージェント
実際の使用例
他にも使えそうな例
- Spam Filteringのテンプレート抽出*
- 一致・類似 テキストを 検索 Index に登録させない。
( * 世間的な利用例はこっち )
100倍以上速い
* 1万件のコメントから
類似投稿を抽出 (ms)
12 株式会社サイバーエージェント
応用例 : なう のフォロワー推薦
・ ある人とソーシャルグラフが似ている人* を探す。
・ データセット - 2011/4 時点での なう のフォロワー
user : ??,???,???
node : ??,???,??? ( ???? per 1 user)
・ 性能 - query : ???? - threshold : 0.3
→ 全計算の 1 / 7 程度
* 『ある人SGと閾値 t 以上の類似度のSGを持つ人』
(ms)
13 株式会社サイバーエージェント
TIPS・感想
・ 向いているデータ → 疎なデータで、サイズフィルタリングが効きやすいデータ - 画像 × - ソーシャルグラフ △ - テキスト ◎
・ 正直使えるケースは限定的。
- 現場で多い需要は、 『 データA と 最も似ているデータを探し出す 』
・・・が、大体のデータは殆ど似ていない。( 類似度で0.1以下が大半 )
14 株式会社サイバーエージェント
・ ソースの公開 ( Java )
- similarity-join-tools
( https://code.google.com/p/similarity-join-tools/ )
・ ブログ
- http://ameblo.jp/principia-ca/entry-10800180833.html
15 株式会社サイバーエージェント
ご清聴ありがとうございました!