• 検索結果がありません。

検索精度に関する 考察

ドキュメント内 JAIST Repository https://dspace.jaist.ac.jp/ (ページ 48-52)

第 5 章 ま と めと 今後の課題

A.2 検索精度に関する 考察

本節ではStaged LSHにおけ る ハッ シュ 探索, スク リ ーニン グ, 精査の各工程を 正解指 紋がパスする 確率を 求め, 検索精度に大き な影響を 与え る ハッ シュ 値のビッ ト 数について 1つの最適解を 求める 。

こ こ でいう 正解指紋と は、 ク エリ 指紋の元と なっ た音楽と 同じ 音楽から 生成さ れた指紋 のこ と である 。 逆に不正解指紋と は, ク エリ 指紋の元と なっ た音楽と は別の音楽から 生成 さ れた指紋のこ と である 。 “一致な し”と いう 検索結果も 存在する が, こ れは正解指紋と も 不正解指紋と も 異な る 。

精度に は指紋生成ア ルゴリ ズム に 起因する も のと 指紋検索ア ルゴリ ズム に 起因する も のが考え ら れる が, 本稿では指紋生成に関し て は十分な精度が保証さ れて いる 想定で, 指 紋検索に関する 精度を 考察する 。

A.2.1 不正解指紋が精査を パスし て し ま う 確率

ま ずは検索精度について 考え る 。 検索精度を 確保する 上では, 異なる 音楽の指紋のハミ ン グ距離がある 程度離れて いる こ と が最低限必要である 。 でき ればε2よ り 大き いこ と が 望ま し い。 さ も なく ば, 不正解の音楽を 検索結果と し て 返す恐れが生じ る 。 誕生日のパラ ド ッ ク ス に よ れば, 乱数を 大量に 発生さ せる と , 同じ 値が複数回発生(衝突)し て いる 確 率は直感よ り も 高い。 こ こ では4096ビッ ト のHiFP2.0の指紋について 誕生日のパラ ド ッ ク スを 考慮し て も 千万曲の指紋同士が互いにε2よ り 離れて いる こ と を 確認し て おき たい。

ま ず, 2指紋Rf p, Wf pのハミ ン グ距離がε2以下である 確率は, 指紋が乱数と みな せる な ら ば次のよ う に表さ れる 。

P2,2 = P[HD(Rf p, Wf p)≤ε2]

= 1

2L2

ε2

X

i=0

L2Ci (A.1)

こ れを 3指紋, 4指紋, · · ·, N指紋と 増やし て いく と ,

P2,N < 1− {1−P2,2}{1−2P2,2} · · · {1−(N −1)P2,2}

≃ 1− {1−NP2,2}(N−1)/2

≃ 1−exp

"

−N(N −1) 2 P2,2

#

(A.2) と な る 。 こ こ で途中計算の簡単化のためN は奇数, N ·P2,2 ≪ 1と し た。 N が偶数の場 合も 最終的な 式は同じ である 。 こ の式を L2 = 4096, ε2 = 1024, N = 107の条件で計算す る と P2,N ≃0である 。 つま り HiFP2.0が生成する 指紋が乱数に近け れば, 千万曲の指紋

実際にはHiFP2.0が生成する 指紋は必ずし も 乱数と はみな せな い。 特に4096ビッ ト の 先頭付近は0である こ と が多い。 指紋DB内にハミ ン グ距離の近い指紋がある 場合の対応 について は今後の課題と する 。

な お数値計算には次のMathematicaスク リ プト を 実行し た。

l2 = 4096;

e2 = 1024;

n = 10^7;

p22 = 2^(-l2) * Sum[l2!/k!/(l2-k)!, {k,0,e2}];

p2n = 1 - Exp[-n*(n-1)/2 * p22];

Print[N[p2n]];

A.2.2 正解指紋が精査を パスでき ない確率

歪んだク エリ 指紋と 正解指紋のハミ ン グ距離を 考え る 。 も し こ のハミ ン グ距離が精査の 閾値ε2よ り 大き いよ う では, どれだけハッ シュ 探索と スク リ ーニン グを チュ ーニン グし て も 検索は必ず失敗する 。 確率計算を する と , 指紋はL2ビッ ト である から , 歪み率pber >0 のク エリ 指紋Qf pと 正解指紋Rf pのハミ ン グ距離がε2よ り 大き い確率は,

P2 = P[HD(Qf p, Rf p)> ε2]

= 1−

ε2

X

i=0

h

L2Ci·(pber)i(1−pber)L2−ii (A.3) である 。 L2 = 4096, ε2 = 1024の条件の下, 歪み率を 変え な がら こ の式の確率を 計算し た も のを 図A.1に 示す。 歪み率pber ≤ 0.22であれば, 0.99以上の確率で正解指紋は精査を パスする 。 HiFP2.0の指紋の歪み率(ビッ ト エラ ー率)は文献[1]では最大0.15であり , こ の時P2 = 1.0×10−62である ので, 正解指紋が精査を パスでき ない心配はほと んど 不要で ある 。

0 0.2 0.4 0.6 0.8 1

0 0.1 0.2 0.3 0.4 0.5 確率P2

歪み率

図 A.1: ク エリ 指紋の歪みによ り 正解指紋が精査を パスし な い確率

な お数値計算には次のMathematicaスク リ プト を 実行し た。

l2 = 4096;

e2 = 1024;

n = 10^7;

For[i = 1, i <= 50, i = i + 1, pber = i / 100;

p2 = 1 - Sum[l2!/(k!*(l2-k)!) * pber^k * (1-pber)^(l2-k), {k,0,e2}];

Print[N[pber], " ", N[p2]];

];

A.2.3 正解指紋がスク リ ーニン グを パスでき ない確率

ス ク リ ーニン グに ついて も , 正解指紋がパス でき な いこ と はあま り な い。 ク エリ 指紋 Qf rと 正解指紋Rf rのハミ ン グ距離がε1よ り 大き い確率は, フ レ ーム がL1ビッ ト である から ,

P1 = P[HD(Qf r, Rf r)> ε1]

= 1−

ε1

X

i=0

h

L1Ci·(pber)i(1−pber)L1−ii (A.4) である 。 L1 = 96, ε1= 24の条件の下, 歪み率を 変え な がら こ の式の確率を 計算し たも の を 図A.2に示す。 歪み率pber ≤0.16であればスク リ ーニン グで検出でき る 確率は0.99以 上である 。

0 0.2 0.4 0.6 0.8 1

0 0.1 0.2 0.3 0.4 0.5 確率P1

歪み率

図 A.2: ク エリ 指紋の歪みによ り 正解指紋のフ レ ームがスク リ ーニン グを パスし ない確率 な お数値計算には次のMathematicaスク リ プト を 実行し た。

l1 = 96;

e1 = 24;

n = 10^7;

For[i = 1, i <= 50, i = i + 1, pber = i / 100;

p1 = 1 - Sum[l1!/(k!*(l1-k)!) * pber^k * (1-pber)^(l1-k), {k,0,e1}];

Print[N[pber], " ", N[p1]];

];

A.2.4 LSH のハッ シュ 値にビッ ト エラ ーがある 確率

以上から , 検索全体の精度はほと んど ハッ シュ 探索の成功確率のみに左右さ れる 。 そこ でク エリ 指紋の1フ レ ーム のハッ シュ 値に rnビッ ト よ り 多く のビッ ト エラ ーがある 確率 を 求める と 次の通り である 。

P0 = P[Hash(Qf r)6= Hash(Rf r)]

= 1−

rn

X

i=0

h

L0Ci·(pber)i(1−pber)L0−ii (A.5) こ れがハッ シュ 探索1回の失敗確率である 。 Staged LSHではハッ シュ 探索を 最大でnm回 (nm = (Lf p−Lf r+ 32)÷32 = 126)繰り 返す。 nm回全て 失敗する 確率は

Pall =P0 nm

(A.6) である 。 最終的に, Staged LSHの検索全体と し て の精度は1−Pallにほぼ等し い。

Pallは図A.3のよ う にな る 。 歪み率pber ≤0.25ま でを 想定し , 隣接LSHの探索対象の ハミ ン グ半径rn = 0,1,2と し た。

0 0.2 0.4 0.6 0.8 1

0 10 20 30 40 50

確率 1 - Pall

ハッシュ値のビット数 L0

rn = 0 rn = 1 rn = 2

図 A.3: ハッ シュ 探索が126回全て 失敗する 確率 数値計算には次のMathematicaスク リ プト を 実行し た。

nm = 126;

pber = 0.25;

Print["0 0 0 0"];

For[l0 = 1, l0 <= 50, l0 = l0 + 1, pall0 = N[(1 - (1-pber)^l0)^nm];

pall1 = N[(1 - Sum[l0!/(k!*(l0-k)!) * pber^k * (1-pber)^(l0-k), {k,0,1}])^nm];

pall2 = N[(1 - Sum[l0!/(k!*(l0-k)!) * pber^k * (1-pber)^(l0-k), {k,0,2}])^nm];

Print[l0, " ", pall0, " ", pall1, " ", pall2];

];

A.2.5 ハッ シュ 値のビッ ト 数の最適値

ハッ シュ 値のビッ ト 数L0の最適解を 求める 。 L0が大き いと , 衝突の発生確率が下がる ので検索速度は向上する が, ク エリ 指紋の歪みがハッ シュ 値に波及し やすく なる ので精度 が落ち る 。 ま たハッ シュ テーブルのメ タ データ が大き く な る と いう 問題も ある 。

そこ で一つの最適解は, ク エリ 指紋の歪み率pberの許容上限を 設定し , その範囲内で例 え ばPall <0.05に な る よ う な 最大のL0を 選ぶこ と である 。 図A.3に おいて Pall <0.05 に抑え る には, rn= 0な ら ばL0 = 13, rn = 1な ら ばL0 = 20, rn = 2な ら ばL0 = 26が それぞれ最適である 。 な お rn = 0について は, Yangの研究[4]でも L0 = 13が最適と さ れて いる 。

ハッ シュ テーブルのメ タ データ のサイ ズに ついて 考え る と , 図2.14のデータ 構造な ら ば2L0 ·4バイ ト にな る 。 表A.3に示す通り , 千万曲の指紋DBと ハッ シュ テーブル(本体 データ)の合計サイ ズが約10GBである こ と を 考え る と , いずれも メ タ データ のサイ ズは 比較的小さ い。 ただし 組込み用途ではコ スト の観点から 10GBのDRAMを 用意する よ り , 小容量の高速メ モリ と 大容量の低速メ モリ を 組み合わせて 使う こ と が考え ら れる 。 そ の 場合, 256MiBも ある と 現時点では小容量の高速メ モリ を 圧迫し かねな いため, も う 少し ハッ シュ のビッ ト 数を 減ら すか, 1隣接を 採用する べき である 。

表 A.3: ハッ シュ 値のビッ ト 数と ハッ シュ テーブルのメ タ データ のサイ ズ ハッ シュ 値のビッ ト 数L0 メ タ データ のサイ ズ(2L0 ·4バイ ト )

13 32KiB

20 4MiB

26 256MiB

ドキュメント内 JAIST Repository https://dspace.jaist.ac.jp/ (ページ 48-52)

関連したドキュメント