lightning talks at ec navi
TRANSCRIPT
Lightning Talk(s)
個人的な宣伝
チームラボ アルゴリズムコンテスト参加中
が多い人がグランプリ
この場でお願いするのは恐縮ですがぜひ をお願いします。
Buzzurl大好きです!!
本題
Similarity Join
大規模なデータ群から類似したデータを探す
例えば100万件の記事内で類似する文章を探す
など
普通に計算すればO(n^2)-n
ABCDE
ABCDE
普通に計算すればO(n^2)-n
ABCDE
ABCDE
普通に計算すればO(n^2)-n
ABCDE
ABCDE
普通に計算すればO(n^2)-n
ABCDE
ABCDE
普通に計算すればO(n^2)-n
ABCDE
ABCDE
1,000,000×1,000,000=1,000,000,000,
000
無理
大量のデータ群で効率的に類似検索を行うのがSimilarity Join
3つのアプローチ・Partition-base・Index-base・Prefix Filter
今日は「Prefix Filter」について
基本的な考え方
まずデータの最初の方だけを見てふるい分けをする
ふるいに残ったデータだけ比較処理を行う
数式prefix(x) ∩ prefix(y) != ∅のとき sim(x , y ) > threshold なら類似
※sim(x, y) は何かしらの類似度/距離算出アルゴリズム
prefix(x) ∩ prefix(y)
データx、yの前方nバイト/文字を抽出して比較をする
一致しない場合はふるい落とす
sim(x, y)
データx、yの類似度を算出しきい値を超えていえれば類似して
いるとみなす
数式おさらいprefix(x) ∩ prefix(y) != ∅のとき sim(x , y ) > threshold なら類似
※sim(x, y) は何かしらの類似度/距離算出アルゴリズム
どうなってれば類似している?
距離が近い=類似ユークリッド距離/マハラノビス距離/チェビシフ距離/ミンコフスキー距離/コサイン距離/編集距離/ジャッカード距離/マンハッタン距離/ハミ
ング距離・・・・・・
Prefix Filterでは「ジャッカード距離」「編集距離」
を用いる(事が多い)
ジャッカード距離(ジャッカード係数)
二つの集合の共通要素数を少なくとも1方にある要素の総数で割っ
たもの
X:{あ,え,い,う}Y:{え,お,あ}
X:{あ,え,い,う}Y:{え,お,あ}
X∩Y(共通要素):{あ,え}
X:{あ,え,い,う}Y:{え,お,あ}
X∩Y(共通要素):{あ,え}X∪Y(どちらかにある):{あ,い,う,え,お}
X:{あ,え,い,う}Y:{え,お,あ}
X∩Y(共通要素):{あ,え}X∪Y(どちらかにある):{あ,い,う,え,お}sim=|X∩Y|/|X∪Y|=2/5=0.4
主にふるい落しの時にジャッカード距離を使
う
prefix(x) ∩ prefix(y)
ちなみに「ジャッカード」ってなんか格好良い
ググってみたメーカー:PIJEL社ジャッカードストッキング素材:NYLON 85%, SPANDEX 15%カラー : ブラックサイズ : ワンサイズ
http://shopping.coneco.net/ca_316-pg_6-st_1903
編集距離(レーベンシュタイン距離)
ふたつの文書を何回置換/追加/削除したら同じ文字になるか
さだまさし田代まさし
田だまさし田代まさし
田代まさし田代まさし
二回置換すれば同じ文字になるから編集距離
「2」
レーベンシュタイン距離は類似度算出の際に
使う
sim(x, y)
ちなみに「レーベンシュタイン」ってなんか格好良い
ググってみた
数式にあてはめてみた
!= ∅のとき > threshold なら類似!
おさらい
まずデータの最初の方だけを見てふるい分けをする
ふるいに残ったデータだけ比較処理を行う
ふるい落し→
類似度算出→
文字列の比較の際はn-gramに分割して比較する
「あたたたたたた!」→あた たた たた たた たた たた
文字列の比較の際はn-gramに分割して比較する
2-gram
性能測定
2000件の文書で測定何件類似文があるかを探す。A:普通に比較B:Prefix Filter
結果A:450,525msB:3,282ms
ms
0 125,000 250,000 375,000 500,000
A:普通B:Prefix Filter
チューニングをしたらもっと速くなった。C:684msD:297ms
ms
0 125,000 250,000 375,000 500,000
A:普通B:Prefix FilterC:改善1D:改善2
(http://ameblo.jp/just-do-neet/entry-10219004506.html)
結論
超速い
参考文献論文がいっぱいでてます。http://www.cse.unsw.edu.au/~weiw/project/tutorial-simjoin-SEBD08.pdfhttp://www.cse.unsw.edu.au/~weiw/project/PPJoin-WWW08.ppthttp://www.bayardo.org/ps/www2007.pdfhttp://research.microsoft.com/users/skaushi/ssjoin.pdf
ご清聴ありがとうございました