SlideShare uma empresa Scribd logo
1 de 12
研究課題:PPJoin ならびに PPJoin+の検証




             1
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
   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
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
α は、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
こちらのアルゴリズムを、先の「Algorithm 1」の12行目(A[y] ← A[y] + 1)と置き換
える。

Hmax はデータ x,y のそれぞれデータ長と、同一データの出現位置(i,j)、類似度の閾値 t の
値より推測される、データ群間のハミング距離の最大値である。
Hmax と、SuffixFilter により算出した実際のハミング距離を比較し、Hmax よりもハミ
ング距離の値が小さい(距離が近い)場合に類似データの候補として扱う、という流れの
処理となっている。

Suffix Filter のアルゴリズムは以下のようになっている。




                          6
まず、データ 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
   デ              ー          タ           件            数
     文字列長がまちまちで、データ群中に類似文章が含まれる文章データ群。
      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
閾値: 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
閾値: 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
件数が少ないほど、ふるい分けの際に取りこぼしているデータが多いと思われるが、その
分速度の向上に繋がっている要素もあるため、アルゴリズムの選択は用途に応じて判断を
するのが良いと思われる。

なお、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
閾値: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

Mais conteúdo relacionado

Mais de moai kids

Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3moai kids
 
"Programming Hive" Reading #1
"Programming Hive" Reading #1"Programming Hive" Reading #1
"Programming Hive" Reading #1moai kids
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDBmoai kids
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBmoai kids
 
Hadoop Conference Japan 2011 Fallに行ってきました
Hadoop Conference Japan 2011 Fallに行ってきましたHadoop Conference Japan 2011 Fallに行ってきました
Hadoop Conference Japan 2011 Fallに行ってきましたmoai kids
 
HBase本輪読会資料(11章)
HBase本輪読会資料(11章)HBase本輪読会資料(11章)
HBase本輪読会資料(11章)moai kids
 
snappyについて
snappyについてsnappyについて
snappyについてmoai kids
 
第四回月次セミナー(公開版)
第四回月次セミナー(公開版)第四回月次セミナー(公開版)
第四回月次セミナー(公開版)moai kids
 
第三回月次セミナー(公開版)
第三回月次セミナー(公開版)第三回月次セミナー(公開版)
第三回月次セミナー(公開版)moai kids
 
Pythonで自然言語処理
Pythonで自然言語処理Pythonで自然言語処理
Pythonで自然言語処理moai kids
 
HandlerSocket plugin Client for Javaとそれを用いたベンチマーク
HandlerSocket plugin Client for Javaとそれを用いたベンチマークHandlerSocket plugin Client for Javaとそれを用いたベンチマーク
HandlerSocket plugin Client for Javaとそれを用いたベンチマークmoai kids
 
Yammer試用レポート(公開版)
Yammer試用レポート(公開版)Yammer試用レポート(公開版)
Yammer試用レポート(公開版)moai kids
 
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)moai kids
 
中国と私(仮題)
中国と私(仮題)中国と私(仮題)
中国と私(仮題)moai kids
 
不自然言語処理コンテストLT資料
不自然言語処理コンテストLT資料不自然言語処理コンテストLT資料
不自然言語処理コンテストLT資料moai kids
 
n-gramコーパスを用いた類義語自動獲得手法について
n-gramコーパスを用いた類義語自動獲得手法についてn-gramコーパスを用いた類義語自動獲得手法について
n-gramコーパスを用いた類義語自動獲得手法についてmoai kids
 
Analysis of ‘lang-8’
Analysis of ‘lang-8’Analysis of ‘lang-8’
Analysis of ‘lang-8’moai kids
 
Androidの音声認識とテキスト読み上げ機能について
Androidの音声認識とテキスト読み上げ機能についてAndroidの音声認識とテキスト読み上げ機能について
Androidの音声認識とテキスト読み上げ機能についてmoai kids
 
Amebaサーチ使用傾向
Amebaサーチ使用傾向Amebaサーチ使用傾向
Amebaサーチ使用傾向moai kids
 
Amebaサーチのデータを用いた応用
Amebaサーチのデータを用いた応用Amebaサーチのデータを用いた応用
Amebaサーチのデータを用いた応用moai kids
 

Mais de moai kids (20)

Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3
 
"Programming Hive" Reading #1
"Programming Hive" Reading #1"Programming Hive" Reading #1
"Programming Hive" Reading #1
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDB
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Hadoop Conference Japan 2011 Fallに行ってきました
Hadoop Conference Japan 2011 Fallに行ってきましたHadoop Conference Japan 2011 Fallに行ってきました
Hadoop Conference Japan 2011 Fallに行ってきました
 
HBase本輪読会資料(11章)
HBase本輪読会資料(11章)HBase本輪読会資料(11章)
HBase本輪読会資料(11章)
 
snappyについて
snappyについてsnappyについて
snappyについて
 
第四回月次セミナー(公開版)
第四回月次セミナー(公開版)第四回月次セミナー(公開版)
第四回月次セミナー(公開版)
 
第三回月次セミナー(公開版)
第三回月次セミナー(公開版)第三回月次セミナー(公開版)
第三回月次セミナー(公開版)
 
Pythonで自然言語処理
Pythonで自然言語処理Pythonで自然言語処理
Pythonで自然言語処理
 
HandlerSocket plugin Client for Javaとそれを用いたベンチマーク
HandlerSocket plugin Client for Javaとそれを用いたベンチマークHandlerSocket plugin Client for Javaとそれを用いたベンチマーク
HandlerSocket plugin Client for Javaとそれを用いたベンチマーク
 
Yammer試用レポート(公開版)
Yammer試用レポート(公開版)Yammer試用レポート(公開版)
Yammer試用レポート(公開版)
 
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
 
中国と私(仮題)
中国と私(仮題)中国と私(仮題)
中国と私(仮題)
 
不自然言語処理コンテストLT資料
不自然言語処理コンテストLT資料不自然言語処理コンテストLT資料
不自然言語処理コンテストLT資料
 
n-gramコーパスを用いた類義語自動獲得手法について
n-gramコーパスを用いた類義語自動獲得手法についてn-gramコーパスを用いた類義語自動獲得手法について
n-gramコーパスを用いた類義語自動獲得手法について
 
Analysis of ‘lang-8’
Analysis of ‘lang-8’Analysis of ‘lang-8’
Analysis of ‘lang-8’
 
Androidの音声認識とテキスト読み上げ機能について
Androidの音声認識とテキスト読み上げ機能についてAndroidの音声認識とテキスト読み上げ機能について
Androidの音声認識とテキスト読み上げ機能について
 
Amebaサーチ使用傾向
Amebaサーチ使用傾向Amebaサーチ使用傾向
Amebaサーチ使用傾向
 
Amebaサーチのデータを用いた応用
Amebaサーチのデータを用いた応用Amebaサーチのデータを用いた応用
Amebaサーチのデータを用いた応用
 

Último

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Último (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

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

  • 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. 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. 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. α は、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. こちらのアルゴリズムを、先の「Algorithm 1」の12行目(A[y] ← A[y] + 1)と置き換 える。 Hmax はデータ x,y のそれぞれデータ長と、同一データの出現位置(i,j)、類似度の閾値 t の 値より推測される、データ群間のハミング距離の最大値である。 Hmax と、SuffixFilter により算出した実際のハミング距離を比較し、Hmax よりもハミ ング距離の値が小さい(距離が近い)場合に類似データの候補として扱う、という流れの 処理となっている。 Suffix Filter のアルゴリズムは以下のようになっている。 6
  • 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. デ ー タ 件 数 文字列長がまちまちで、データ群中に類似文章が含まれる文章データ群。  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. 閾値: 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. 閾値: 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. 件数が少ないほど、ふるい分けの際に取りこぼしているデータが多いと思われるが、その 分速度の向上に繋がっている要素もあるため、アルゴリズムの選択は用途に応じて判断を するのが良いと思われる。 なお、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. 閾値: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