研究課題:PPJoin ならびに PPJoin+の検証




             1
1   はじめに
日々データが蓄積されていく CGM サービスにおいて、大量のデータの中から類似するデ
ータを抽出することはデータマイニングの観点で大事であるが、計算量が多く処理に時間
がかかるのが一般的で、大変な処理である。
前回、大量データ...
   Employs    prefix-filtering, position filtering and suffix filtering
         (Prefix Filter 以外にPosition Filter, Suffi...
5行目の
  p ← |x| − (t * |x|) + 1;
において、データ群の先頭から読み取るデータの範囲を計算している。
t は類似度の閾値(threshold)、x はデータ群、|x|はデータ長となる。
たとえば 10 文字のデータ郡...
α は、2データ間で閾値を満たす類似度の下限、ubound は同一データ出現位置から計算さ
れる類似度値の上限を意味している。α より ubound の値が小さい場合は、2データは類
似データとみなされない。

擬似コードの中では、α 値より ...
こちらのアルゴリズムを、先の「Algorithm 1」の12行目(A[y] ← A[y] + 1)と置き換
える。

Hmax はデータ x,y のそれぞれデータ長と、同一データの出現位置(i,j)、類似度の閾値 t の
値より推測される、デー...
まず、データ y の中間位置 mid を求め、中間位置に存在するデータ w を取得する。
その上で、5~6行目にて、データ x 中の w の場所を走査し、その場所を基点に前後でデ
ータを分割する。
イメージとしては以下引用する図のような形となる...
   デ              ー          タ           件            数
     文字列長がまちまちで、データ群中に類似文章が含まれる文章データ群。
      A:約 500 件(482 件)
  ...
閾値: 6
   0.

 閾値: 7
   0.                                                                       C : P Joi
                ...
閾値: 6
    0.

  閾値: 7
    0.                                                                  C : P Joi
                  ...
件数が少ないほど、ふるい分けの際に取りこぼしているデータが多いと思われるが、その
分速度の向上に繋がっている要素もあるため、アルゴリズムの選択は用途に応じて判断を
するのが良いと思われる。

なお、PPJoin+については、SuffixFilt...
閾値:0.9             閾値:0.8             閾値:0.7             閾値:0.6
MAXDEPTH      比較回数      抽出件数      比較回数      抽出件数     比較回数 ...
Upcoming SlideShare
Loading in …5
×

PP JoinならびにPP Join+の検証

3,091 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,091
On SlideShare
0
From Embeds
0
Number of Embeds
33
Actions
Shares
0
Downloads
24
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

PP JoinならびにPP Join+の検証

  1. 1. 研究課題:PPJoin ならびに PPJoin+の検証 1
  2. 2. 1 はじめに 日々データが蓄積されていく CGM サービスにおいて、大量のデータの中から類似するデ ータを抽出することはデータマイニングの観点で大事であるが、計算量が多く処理に時間 がかかるのが一般的で、大変な処理である。 前回、大量データ中の類似データを効率的に抽出するアルゴリズムとして「Similarity Join」「Prefix Filter」をテーマにレポートを作成したが、今回はその続編として、Prefix Filter アルゴリズムの発展系である「PPJoin」ならびに「PPJoin+」について調査を行っ た。 2 Similarity Join について Similarity Join 自体は広い概念で、「あるデータ群の中で類似しているデータを抽出する 」 というアルゴリズム全般を包括する言葉となっている。 [1] 上記のように、データ群中にお類似しているデータが存在した場合、似ているもの同士の ペアの結合(join)を行い、データを出力する、というアプローチである。 Similarity Join 全 般 に つ い て ま と め ら れ て い る 資 料 「 Similarity Join Algorithms:An Introduction」[2]を参照すると、Similarity Join には大別して以下の三通りのアプローチ が存在すると紹介されている。(p.27)  Partition-based  Filtering-based  Index-based 今回はこの中で、Filtering ベースのアプローチのひとつである「Prefix Filter」について 述べる。 3 Prefix Filter について Prefix Filter は、データの比較を行う際に先ずデータの先頭方面の値同士で比較を行い、 類似有無のふるい分けを行うアルゴリズムである。 3.1 Prefix Filter アルゴリズムの種類 Prefix Filter の手法については、数多くの論文が発表されている。  SSJoin[3]  Formalize the prefix-filtering principle and use it in a symmetric way  Access original record for verification (対称な方法でPrefix Filter を使用し類似検索を行う。オリジナルな データにアクセスして類似有無の確認を行う)  All-Pairs[4]  Use prefix-filtering in an asymmetric way (非対称な方法で Prefix Filter を使用して類似検索を行う)  PPJoin(PPJoin+)[5] 2
  3. 3.  Employs prefix-filtering, position filtering and suffix filtering (Prefix Filter 以外にPosition Filter, Suffix Filter を使用して類似検 索を行う) 3.2 今回採用したアルゴリズム 今 回 は Chuan Xiao 氏 が 2008 年 に 発 表 し た 論 文 「 Efficient Similarity Joins for Near Duplicate Detection 」[5]に掲載されている、PPJoin アルゴリズム、ならびに PPJoin+アルゴリズムのアプローチを参考に実装を行った。 3.2.1 Prefix Filter の基本的な考え方 PPJoin は Prefix Filter アルゴリズムの一種である。 Prefix Filter は数式で表すと、以下のような式で表現できる。 prefix( x) ∩ prefix ( y ) ≠ φ のとき sim( x, y ) > t であれば類似 x,y は任意のデータ群、 φ は空配列、t は任意の閾値(1 >= t >= 0)。 prefix(x)は先頭 N バイト/N 文字のデータ、sim(x,y)は何かしらの類似度もしく は距離を算出するためのアルゴリズム、という意味になる。 先頭のデータ同士を比較しなにかしら一致する場合(空配列で無い場合)、類似度を算出 し閾値以上であれば類似データとみなす、という流れになる。 3.2.2 PPJoin のアルゴリズム 先頭データの一致度・類似度を算出する手法として、他手法ではジャッカード係数やコサ イン距離、Overlap 係数などの数値を用いるケースがあるが、PPJoin では「2つのデータ 群を先頭から見たときにそれぞれに出現する同一データの出現位置」により一致度を判定 する。 な お 、 PPJoin の 「 PP 」 は 、 「 Positional filtering with the Prefix filtering-based algorithm.」の略とされている。 prefix( x) ∩ prefix ( y ) ≠ φ  の判定の際に、データの先頭部分を抜粋(Prefix Filtering)し た上で、共通データの出現位置(Positional Filtering)により一致度を判定する、という 流れである。 [6] 具体的な数式・アルゴリズムとして、PPJoin の論文中に記載されている擬似コードを引 用する。 3
  4. 4. 5行目の p ← |x| − (t * |x|) + 1; において、データ群の先頭から読み取るデータの範囲を計算している。 t は類似度の閾値(threshold)、x はデータ群、|x|はデータ長となる。 たとえば 10 文字のデータ郡x「ABCDEFGHIJ」において閾値が 0.8 の場合 p = 10 - (0.8 * 10) +1 = 3 となり、先頭3データを抜粋して評価対象とする、という形である。 Positional Filtering の閾値として、9行目で α ← (t / ( 1 + t ) ) * (|x| + |y|); のように値 α を計算している。 2データを先頭から走査した結果同一データが出現した際に、同一データの出現場所(i,j) を元に以下の式で ubound(upper bound:上限)の値を求め、値 α との比較を行う。 ubound ← 1 + min(|x| - i , |y| - j); データ群 x「ABCDEFGHIJ」、データ群 y「BCDFGHIJ」、閾値 0.8 の場合は以下のよ うになる。 α = (0.8 / ( 1 + 0.8 ) ) * (10 + 8) = 8 ubound = 1 + min(10 – 1 , 8 – 0) = 9 4
  5. 5. α は、2データ間で閾値を満たす類似度の下限、ubound は同一データ出現位置から計算さ れる類似度値の上限を意味している。α より ubound の値が小さい場合は、2データは類 似データとみなされない。 擬似コードの中では、α 値より ubound 値の方が大きい場合、配列 A[y]に数値を加算する ロジックになっている。A[y]について値が 0 のものは Verify の対象とならないため、結果 として α 値の方が ubound 値よりも大きい場合、そのデータについては類似データとして 扱われないことになる。 各データ群の評価終了後、Verify 関数により類似度を算出し、類似データの抽出を実施す る。 Verify 関数内の処理については、論文中の擬似コードを引用する。 Verify 内では基本的に、データ群 x とデータ群 y の Overlap 係数を算出し、類似度が α 値 より高い場合に類似データと判定している。 Overlap 係数は以下のように定義される。 O(x, y) = x ∩ y 3.2.3 PPJoin+のアルゴリズム PPJoin はデータの先頭部分のみを評価するアルゴリズムであったが、PPJoin+では先頭部 分に加えて、データ後方から再帰的にポジションを移動しデータのふるい分けを行うアル ゴリズムとなっている。 論文から擬似コードを引用する。 5
  6. 6. こちらのアルゴリズムを、先の「Algorithm 1」の12行目(A[y] ← A[y] + 1)と置き換 える。 Hmax はデータ x,y のそれぞれデータ長と、同一データの出現位置(i,j)、類似度の閾値 t の 値より推測される、データ群間のハミング距離の最大値である。 Hmax と、SuffixFilter により算出した実際のハミング距離を比較し、Hmax よりもハミ ング距離の値が小さい(距離が近い)場合に類似データの候補として扱う、という流れの 処理となっている。 Suffix Filter のアルゴリズムは以下のようになっている。 6
  7. 7. まず、データ y の中間位置 mid を求め、中間位置に存在するデータ w を取得する。 その上で、5~6行目にて、データ x 中の w の場所を走査し、その場所を基点に前後でデ ータを分割する。 イメージとしては以下引用する図のような形となる。 [6] 分割したデータを用いてハミング距離を算出し、先ほど算出した Hmax の値と比較する。 Hmax よりも値が小さい(距離が近い)場合は、分割したデータを基に SuffixFilter 処理を再 帰的に実施する。 再帰は任意で定めた最大回数(MAXDEPTH)まで繰り返す。 [6] このような形で、再帰的にデータを分割し、それぞれのハミング距離の計算を繰り返し行 っていくことでデータのふるい分けを行う手法が PPJoin+となる。 直感的に、データの先頭のみでふるい分けを実施するのに比べ、複数のデータ位置を基点 にふるい訳を複数回実施する方が不要な候補データの削除を効率的に行えるため、処理速 度としても有利になることが感じられる。 次項では、SSJoin、PPJoin、PPJoin+それぞれでどの程度のパフォーマンスの差が出るか、 実際に測定してみた。 4 性能測定 上述の PPJoin、PPjoin+、ならびに以前作成した研究レポート「Prefix Filter の検証」[7] にて紹介した SSJoin アルゴリズムを用いて、性能測定を行った。 ※ただし、SSJoin については筆者独自の解釈で拡張している箇所があるため、元論文記載 の内容と結果が異なる可能性があることをご了承いただきたい。 なお、検証用のプログラムは、論文を参考に Java 言語にてそれぞれ自作した。 4.1 条件 以下の条件で性能測定を実施した。 7
  8. 8.  デ ー タ 件 数 文字列長がまちまちで、データ群中に類似文章が含まれる文章データ群。  A:約 500 件(482 件)  B:約1,000 件(940 件)  C:約 2,000 件(1894 件)  アルゴリズム  A:SSJoin  B:PPJoin  C:PPJoin+  SuffixFilter の再帰回数上限(MAXDEPTH)は「3」で設定  データの扱い  文 字 列 デ ー タ を 2-gram 単 位 で 分 割 し 、 ト ー ク ン と し た 。 (ex. あいうえお → あい,いう,うえ,えお)  類似度の閾値  0.9  0.8  0.7  0.6  データの取得方法  HDD 上にあるファイルより読み取り、いったんすべての文章をメモリ上に格 納した上で計算を行った  検証マシンのスペック  Macbook Air  CPU:1.6GHz Core 2 Duo  Memory:2GB 4.2 結果 以下のような結果となった。 処理時間については、同一条件で5回試行し、その平均値を取った。 ○データ件数:500 件 閾値:0.9 閾値:0.8 閾値:0.7 閾値:0.6 処理時間 抽出件数 処理時間 抽出件数 処理時間 抽出件数 処理時間 抽出件数 (ms) (ms) (ms) (ms) A:SSJoin 3075.8 10 2916.6 21 2925.2 27 2903.8 28 B:PPJoin 303.6 11 863.4 21 2927.8 29 6258.8 29 C:PPJoin+ 70 11 110.4 20 227 27 481.6 27 8
  9. 9. 閾値: 6 0. 閾値: 7 0. C : P Joi P n+ B : P Joi P n 閾値: 8 0. A:SSJoi n 閾値: 9 0. 0 2000 4000 6000 8000 10000 12000 14000 16000 ○データ件数:1,000 件 閾値:0.9 閾値:0.8 閾値:0.7 閾値:0.6 処理時間 抽出件数 処理時間 抽出件数 処理時間 抽出件数 処理時間 抽出件数 (ms) (ms) (ms) (ms) A:SSJoin 5654.6 5 5713.8 7 6241.2 12 7162.8 15 B:PPJoin 537.4 8 1917.8 14 5647.4 18 14075 18 C:PPJoin+ 100.3 6 182.8 9 375.4 12 941.8 12 閾値: 6 0. 閾値: 7 0. C : P Joi P n+ B : P Joi P n 閾値: 8 0. A:SSJoi n 閾値: 9 0. 0 2000 4000 6000 8000 10000 12000 14000 16000 ○データ件数:2,000 件 閾値:0.9 閾値:0.8 閾値:0.7 閾値:0.6 処理時間 抽出件数 処理時間 抽出件数 処理時間 抽出件数 処理時間 抽出件数 (ms) (ms) (ms) (ms) A:SSJoin 26888 4 27759.5 12 27534 65 28583.5 78 B:PPJoin 9258.6 6 19448.2 11 44745.4 73 125722 93 C:PPJoin+ 454.8 6 793.6 10 2176.6 51 5142.4 67 9
  10. 10. 閾値: 6 0. 閾値: 7 0. C : P Joi P n+ B : P Joi P n 閾値: 8 0. A:SSJoi n 閾値: 9 0. 0 2000 4000 6000 8000 10000 12000 14000 16000 4.3 考察 4.3.1 処理速度 処理速度の面では、PPJoin+の優秀さが際立っている。 Prefix Filter によるふるい分けだけでなく、Suffix Filtering を再帰的に実施することで Overlap 係数による全文比較を行う回数を減らす事に成功していることが、速度の向上の 貢献している。 また、閾値を下げることによって、PPJoin ならびに PPJoin+の処理速度が線形に劣化し ていることが見て取れる。PPJoin は多くの場合で SSJoin より処理速度が優秀だが、今回 使用したデータセットでは閾値が 0.6 になった段階で SSJoin よりも処理速度が劣化してい る。 それぞれの閾値においての、PPJoin の Overlap 係数による比較回数を以下に記載する。 閾値:0.9 閾値:0.8 閾値:0.7 閾値:0.6 PPJoin:500 242 723 1859 4275 PPJoin:1000 547 1706 4504 10568 PPJoin:2000 4566 13229 33875 73620 閾値を下げることにより Overlap 係数による比較回数が増加することが、処理速度の劣化 に直結している様が見てとれる。 同様に、PPJoin+の Overlap 係数による比較回数を以下に記載する。 閾値:0.9 閾値:0.8 閾値:0.7 閾値:0.6 PPJoin+:500 25 26 27 27 PPJoin+:1000 11 12 12 12 PPJoin+:2000 32 50 64 67 ふるい分けが有効に作用し、Overlap 係数による比較回数を PPJoin に比べて大幅に削減 することに成功している。 4.3.2 抽出件数 類似データの抽出件数は、概ね PPJoin > SSJoin > PPJoin+ の順番で多くなっていることが見てとれる。 10
  11. 11. 件数が少ないほど、ふるい分けの際に取りこぼしているデータが多いと思われるが、その 分速度の向上に繋がっている要素もあるため、アルゴリズムの選択は用途に応じて判断を するのが良いと思われる。 なお、PPJoin+については、SuffixFilter の再帰回数の設定値変更により、速度/抽出件 数のチューニングが可能である。 次項では、PPJoin+の再帰回数のチューニングにより、結果がどのように変化をするか、 見ていきたいと思う。 5 チューニング PPJoin+の SuffixFilter の再帰回数を調節することで、どのような結果が出るか測定を行 った。 5.1 条件 以下の条件で性能測定を実施し、Overlap 係数の比較回数と類似データの抽出件数にどの ような変化があらわれたか確認をした。 なお、特記していない条件については、前項「4.性能測定」で実施した条件と同じ条件で 実施している。  アルゴリズム  C:PPJoin+  SuffixFilter の再帰回数  1 ※アルゴリズム的に PPjoin と同等になる。  2  3 ※結果は「4.性能測定」の実施結果と同等  4 5.2 結果 以下のような結果となった。 ○データ件数:500 件 閾値:0.9 閾値:0.8 閾値:0.7 閾値:0.6 MAXDEPTH 比較回数 抽出件数 比較回数 抽出件数 比較回数 抽出件数 比較回数 抽出件数 1 242 11 723 21 1859 29 4275 29 2 30 11 35 21 50 29 97 29 3 25 11 35 21 50 29 97 29 4 17 10 22 19 22 22 22 22 ○データ件数:1000 件 閾値:0.9 閾値:0.8 閾値:0.7 閾値:0.6 MAXDEPTH 比較回数 抽出件数 比較回数 抽出件数 比較回数 抽出件数 比較回数 抽出件数 1 547 8 1706 14 4504 18 10568 18 2 18 7 33 10 82 12 190 13 3 11 6 12 9 12 12 12 12 4 4 4 4 4 4 4 4 4 ○データ件数:2000 件 11
  12. 12. 閾値:0.9 閾値:0.8 閾値:0.7 閾値:0.6 MAXDEPTH 比較回数 抽出件数 比較回数 抽出件数 比較回数 抽出件数 比較回数 抽出件数 1 4566 6 13299 11 33875 73 73620 93 2 75 6 220 10 572 73 1457 91 3 32 6 50 10 64 51 67 67 4 4 4 4 4 13 12 13 13 5.3 考察 SuffixFilter の再帰回数を増やせば増やすほど、比較回数が減り速度が向上することが分 かった。ただし、極端に回数を増やすとデータセットによっては抽出精度が大幅に下がる ため、適切な値を調整して設定する必要がある。 今回使用したデータセットでは、再帰回数は2~3が適正値と判断できる。 6 考察とまとめ 大規模データ群の類似検索において、処理速度面での PPJoin+のアルゴリズムの優秀さが 確認できた。 また、SuffixFilter の再帰回数の調節により、抽出件数/処理時間の調節が行えることが 確認できた。再帰回数は、今回使用したデータセットでは2~3が適切な値であると確認 できた。 現在、筆者の関わっているシステムにて SSJoin のアプローチによる大規模データの類似 検索を実施しているが、SSJoin に比べて処理速度面の優秀さが際立っているため、段階的 に PPJoin+アルゴリズムに置き換えていこうと考えている。 今後は、類似手法のさらなるキャッチアップを行っていきたい。 また、今回については文章の比較でのみ確認を行っているが、画像データなど他データ形 式での確認も引き続き行っていきたい。 今回検証に使用した Java のプログラムコード、テストコード、ならびにデータセット群 は、参考資料として提示する。 7 参考文献・URL [1] http://d.hatena.ne.jp/blanc_et_noir/20081013/1223830866 より画像引用 [2] http://www.cse.unsw.edu.au/~weiw/project/tutorial-simjoin-SEBD08.pdf [3] Surajit Chaudhuri 「A Primitive Operator for Similarity Joins in Data Cleaning」 (2006) http://research.microsoft.com/users/skaushi/ssjoin.pdf [4] Roberto J. Bayardo 「Scaling Up All Pairs Similarity Search」(2007) http://www.bayardo.org/ps/www2007.pdf [5] Chuan Xiao「Efficient Similarity Joins for Near Duplicate Detection」(2008) http://www2008.org/papers/pdf/p131-xiaoA.pdf [6] http://www.cse.unsw.edu/~weiw/project/PPJoin-UTS-Oct-2008.pdf より画像引用 [7] 「Prefix Filter の検証」 http://www.slideshare.net/moaikids/prefix-filter-1126120 12

×