乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-

Takuya Akiba
Takuya AkibaStudent at The University of Tokyo
乱択データ構造の最新事情
-MinHash と HyperLogLog の最近の進歩-
東京大学 情報理工学研究科 D2
秋葉 拓哉 (@iwiwi)
2014/05/29 @ PFI セミナー
背景
誰もが大量の集合・特徴ベクトルを処理したい!
• 文章 → 単語の集合 (bag of words)
• 商品 → 購買者
• 画像データ → 局所特徴量 (SIFT, SURF, …)
• ……
色々したいが,そのまま処理するのは困難
• データが大きすぎる
• 遅すぎる
1
Sketching による効率化
解決策:
集合そのものの代わりになる Sketch を使う
2
Sketch 𝑫(𝑺)
集合 𝑺
hoge
piyo
fuga
???
• 小さい!
• 効率的に処理ができる!
• ただし結果は推定になる
3
今日の話:集合 Sketching の最新技術
1. MinHash Sketches 入門
• 基礎的かつ強力な手法である MinHash を復習
(以降の話も両方 MinHash の派生系)
2. Odd Sketches による Jaccard 係数推定の進歩
• まず,現在よく用いられている 𝒃-bit MinHash を紹介
• 類似性が高い際 𝑏-bit MinHash が劣化する問題を解消
[Mitzenmacher-Pagh-Pham, WWW’14]
3. HIP Estimator による集合異なり数推定の進歩
• まず,現在よく用いられている HyperLogLog Counter を紹介
• 要素挿入時の情報を用い精度を改善,誤差 1.08/ 𝑚 → 0.87/ 𝑚
[Cohen, PODS’14]
WWW’14 Best Paper!
1. Min-wise Hashing 入門
※ この部分は岡野原さんの 2011 年の解説をベースにさせてもらっています
http://research.preferred.jp/2011/02/minhash/
4
Jaccard 係数
集合の類似度として Jaccard 係数を考えます
集合 𝑺 𝟏 と 𝑺 𝟐 の Jaccard 係数:
𝐽 𝑆1, 𝑆2 =
𝑆1 ∩ 𝑆2
|𝑆1 ∪ 𝑆2|
具体的な場面
• 文章の類似検索,重複検出
• 商品の推薦
集合の Jaccard 係数を推定したい気持ちになって下さい
5
MinHash Sketch 𝒌 = 𝟏
ハッシュ関数 ℎ を用意しておく
6
集合 𝑆
hoge
piyo
fuga
ℎ 𝑎 𝑎 ∈ 𝑆}
13
85
35
min ℎ 𝑎 𝑎 ∈ 𝑆}
13
全要素にハッシュ関数を適用 最小値だけを取り出す
Jaccard 係数推定の基礎
重要な性質
Pr min ℎ 𝑎 |𝑎 ∈ 𝑆1 = min ℎ 𝑏 |𝑏 ∈ 𝑆2
= 𝐽 𝑆1, 𝑆2
2 つの集合のハッシュ値の min が一致する確率は
Jaccard 係数に等しい!
※ハッシュ関数は完全にランダムに振る舞うと仮定
7
𝑆1 の Sketch 𝑆2 の Sketch
Jaccard 係数推定の基礎
なぜ? 具体例で考えてみます.
• 𝑆1 = 2,5,7,9 , 𝑆2 = 1,2,4,7,10
𝑆1 ∩ 𝑆2 = 2,7 .例えば 2 で一致する場合とは?
• arg min ℎ 𝑎 |𝑎 ∈ 𝑆1 = 2 ⇔ {2,5,7,9} で 2 が最強
• arg min ℎ 𝑏 |𝑏 ∈ 𝑆2 = 2 ⇔ {1,2,4,7,10} で 2 が最強
条件を合わせると,
• 2 で一致 ⇔ 1,2,4,5,7,9,10 = 𝑆1 ∪ 𝑆2 中で 2 が最強
一致するのは 7 でも良く,このように,要は
𝑆1 ∪ 𝑆2 中で最強のものが 𝑆1 ∩ 𝑆2 のいずれかであればよい.
その確率は: S1 ∩ 𝑆2 / S1 ∪ 𝑆2 = 𝐽 𝑆1, 𝑆2 .
8
最強=ハッシュ値が最低
𝒌-min MinHash Sketch
あとはこれを 𝑘 個並べると……!
𝒌-min MinHash Sketch
• 異なる 𝑘 個のハッシュ関数 ℎ1, ℎ2, … , ℎ 𝑘 を用意
• それぞれについてさっきの min を計算&保存
Jaccard 係数の推定
• 「一致した数 / 𝑘」により 𝐽 𝑆1, 𝑆2 を推定
推定値は unbiased (不偏)
また分散は 𝐽 1 − 𝐽 / 𝑘 になることが示せる
9
MinHash Family
こんな感じでハッシュ関数の最小値に注目する
Sketching の手法が一般に MinHash と呼ばれる.
(Jaccard 係数推定以外のことも色々できる.)
MinHash のバリエーション
• 𝑘 個の並べ方
– 𝑘-min Sketch (OddSketch はコレ)
– 𝑘-partition Sketch (HyperLogLog はコレ)
– Bottom-𝑘 Sketch (最近の All-Distances Sketches はコレ)
• ハッシュ値の使い方
– Full Ranks (さっきのやつはコレ)
– 𝑏-bit MinHash (Jaccard 係数でよく使われているヤツ)
– Base-𝑏 Ranks (HyperLogLog は Base-2 Ranks)
– ……
10
2. Odd Sketches による
Jaccard 係数推定の進歩
[Mitzenmacher-Pagh-Pham, WWW’14]
11
𝒃-bit MinHash
MinHash の改善できそうなところ
• さっきの MinHash ではハッシュ値をそのまま保存
• 各々に 32bit (or 64bit) も使うと個数 𝑘 をあまり増やせない
• 衝突を覚悟してもハッシュ値を小さくして,その分 𝑘 を
増やしてはどうか?
𝒃-bit MinHash [Li-König, WWW’10]
• 異なる 𝑘 個のハッシュ関数 ℎ1, ℎ2, … , ℎ 𝑘 を用意
• それぞれについてさっきの min を計算
• ハッシュ値の下位 𝑏 bit のみを保存
(データサイズは 𝑘𝑏 bit になる)
12
𝑏 = 1 という極端な場合が
実は一番性能が良かったり
𝒃-bit MinHash による Jaccard 係数推定
Jaccard 係数の推定:
𝐽 =
𝑛/𝑘 − 2−𝑏
1 −2−𝑏 と推定すれば良い (𝑛=一致箇所数)
一致確率にハッシュ値の衝突を加味して解析
• 各箇所の一致確率は 𝐽 + 1 − 𝐽 2−𝑏
• 𝐽 + 1 − 𝐽 2−𝑏 × 𝑘 = 𝑛 として解くと上が得られる
推定値は unbiased (不偏)
また分散は 1−𝐽
𝑘
𝐽 +
1
2 𝑏−1
になることが示せる
13
𝒃-bit MinHash が微妙な時
特に高い類似度の推定に興味がある時
𝒃-bit MinHash は実は微妙
なぜ?
• 類似度 𝐽 が 1 に近い時,2 つのスケッチはほぼ同じ
• 異なっている若干のビット数で,1 との差を見積もる
• つまり,1 との差を表現するのは全体のごく一部
そのような状況は少なくない
• 類似度 Top-10 を表示したい(→ 高い類似度のアイテムの精度が重要)
• Web ページの重複検出等で 𝐽 > 0.9 かを判定したい
14
𝒃-bit MinHash が微妙な時
• 類似度 𝐽 が 1 に近い時,2 つのスケッチはほぼ同じ
• 異なっている若干のビット数で,1 との差を見積もる
• つまり,1 との差を表現するのは全体のごく一部
15
[Figure 1, Mitzenmacher+, WWW’14]
Odd Sketches
そこで高い類似度での精度を重視し改善するのが
Odd Sketches [Mitzenmacher-Pagh-Pham, WWW’14]
着想
• XOR を活用する
• 共通部分を打ち消させる
• 異なっている部分の情報だけを綺麗に得る
Odd Sketches
Odd Sketches [Mitzenmacher-Pagh-Pham, WWW’14]
• まず集合の要素を 𝑘-min MinHash で 𝑘 個選ぶ
• 𝑛 bit のビットベクトル 𝑠 を用意,最初は全箇所 0
• 選ばれてる各要素 𝑎 について,𝑠 ℎ′ 𝑎 を反転する
𝑘 と 𝑛 がパラメータ.ℎ′: 値域 [1, 𝑛] のハッシュ関数を別途用意
17
集合 𝑆
hoge
piyo
fuga
1 piyo
2 hoge
𝑘-min MinHash
𝑘 = 2
0 1 0 0 1 0
Odd Sketch
𝑛 = 6
Odd Sketches
※注意:実際には元の集合からいきなり Odd Sketches を計算するので
はなく,集合の 𝑘-min MinHash Sketch の Odd Skech を計算します.
(擬似コードの 𝑆 は既に 𝑘-min MinHash Sketch)
18
Odd Sketches による Jaccard 係数の推定
𝐽 = 1 +
𝑛
4𝑘
ln 1 −
2 × Popcount odd 𝑆1 ⨂odd 𝑆2
𝑛
導出
• E MinHash 𝑘 𝑆1 Δ MinHash 𝑘 𝑆2 = 2𝑘 1 − 𝐽
• ポアソン分布への近似により E 𝑠𝑖 =
1−𝑒−2𝑚/𝑛
2
, E[Popcount] = 𝑛
1−𝑒−2𝑚/𝑛
2
• これを適当に解くと上が得られる
精度保証
• 実は Biased (だけど bias は 1 以下)
• この式自体の分散等のカッチリした bound は今のところ無い
論文中では良いパラメータ仮定の元で精度が良さそうな根拠を並べている.
実際にはパラメータも実験により決めており,このへんは若干イケてない.
19
XOR
1 の数
S1の Odd Sketch
対称差
𝑚 = MinHash 𝑘 𝑆1 Δ MinHash 𝑘 𝑆2
Odd Sketches が得をする感覚的説明
20
[Figure 1-2, Mitzenmacher+, WWW’14]
実験結果
他,論文中では実際の応用に組み込んでの結果なども示されてます.
21
[Mitzenmacher+, WWW’14]
3. HyperLogLog による
集合異なり数推定の進歩
[Cohen, PODS’14]
22
集合異なり数の計算
集合異なり数 (distinct counting)
• 重複を取り除き,異なるものの数を数えたい
• 例:[1, 3, 5, 1, 2, 3, 2] → {1, 2, 3, 5} → 4
具体的な場面
• ウェブページのユニークビジター数
• 単語の DF (document frequency) の計算 (tf-idf)
23
集合異なり数の計算
計算が “意外と” 難しい
• 既に全データある (batch) → sort して unique かける
• 少しずつ来る (stream) → set を用意して放り込む
どちらも線形のメモリを使ってしまう.
ユニークビジター数を監視したいとすると……
• 各ページについて set を用意?
• 各ページに線形のメモリは,メモリを使いすぎでは?
そこでやはり Sketching の出番!
現在最もよく使われているのが HyperLogLog Counter!
[Flajolet+, AOFA’07]
24
HyperLogLog のインパクト
Google
• PowerDrill (data analysis platform) にて使われている [Hall+, VLDB’12]
• その際行った改良についての論文も出ている [Heule+, EDBT’13]
Twitter
• Algebird (Abstract algebra library for Scala) に入っている
https://github.com/twitter/algebird/search?q=hyperloglog&ref=cmdform
Redis (open source key-value store)
• データタイプとして HyperLogLog が選べる
http://antirez.com/news/75
25
HyperLogLog (𝒌 = 𝟏)
HyperLogLog も MinHash の一種,ただし
ハッシュ値を Base-2 Ranks で扱う
Base-2 Ranks
• 𝑎 ∈ 𝑆 の Base-2 rank 𝜚ℎ 𝑎 ≔ ℎ 𝑎 の先頭の 0 の数
• 例:ℎ 𝑎 = 00010101010 ⋯ → 𝜚ℎ 𝑎 = 3
HyperLogLog 𝒌 = 𝟏
• 𝑝 = max 𝜚ℎ 𝑎 | 𝑎 ∈ 𝑆 を計算
• 2 𝑝
として推定
26
3個
一般に base-𝑏 rank は
− log 𝑏
ℎ(𝑎)
𝑛
(ℎ の値域を [1, n] として)
大きいヤツが珍しいので
max を覚える
𝑝 以上になるのは
確率 2−𝑝
なので的な
HyperLogLog (𝒌 > 𝟏)
Jaccard 係数の時同様, 𝑘 個並べて推定を強化する.
ただし,今回は入力を 𝒌 個に分割する.
HyperLogLog [Flajolet+, AOFA’07]
• 𝑘 = 2 𝑏 個のバケット 𝑀 𝑖 を用意
• ハッシュ値 ℎ 𝑎 の先頭 𝑏 bit でバケットに振り分け
• 各バケットで,Base-2 rank の max を保存
集合異なり数の推定
• 各バケットで推定値を計算
• それらの normalized bias corrected harmonic mean を取る
(式は若干大変なので論文を見て下さい)
27
ハッシュ値は勿論先頭 𝑏 bit を
捨てたものを使う
HyperLogLog
28
[Figure 2, Flajolet+, AOFA’07]
HyperLogLog の理論的な性能
精度
• 相対誤差は 1.04/ 𝑘,CV (NRMSE) は 1.08/ 𝑘
• 定数確率で 1 ± 𝜀 近似するために必要な空間は
𝑂 𝜀−2 log log 𝑛 + log 𝑛
スペース
• 各 𝑀 𝑖 の保存は 5 bit とかそんなもので良い → 5𝑘 bit
これは near-optimal であるらしい.
(漸近的性能はこれ以上の大幅な改善はできなさそう,ということ)
29
LogLog の名前を冠する所以
HyperLogLog の問題点
実は,値が大きくならないと滅茶苦茶
30
[Figure 2, Heule+, EDBT’13]
値が小さい時の対策
アルゴリズムを組み合わせる
• Linear Counting [Whang+, TODS’09] など
無理やり直す [Heule+, EDBT’13]
• 右図のような巨大な表を前計算
(Google PowerDrill にはこれが組み込まれている)
美しくない!
31
HIP Estimator
Historic Inverse Probability Estimator
[Cohen, PODS’14]
• 値が小さい時も推定が正確になる
• 漸近的な精度も大きく向上
着想
• HyperLogLog は near-optimal だったのでは?
• データ構造の最終状態から直接推定値を得るという仮定
• 最終状態だけでなく,計算途中の全ての状態を加味する
とどうか?
32
素晴らしい!
HyperLogLog with HIP Estimator
33
[Figure 4, Cohen, PODS’14]
データ構造に集合を流しこみつつ
最初から数の集計も進める
バケットを更新する度に
「この状況でここが更新される確率」
を使って集計値に加算する
HIP Estimator 仕組み&理論値
動作原理はシンプル
• 一般論:確率 𝑝 で発生 → 発生までの回数の期待値は 1/𝑝
• これに基づき,スケッチ値がそこで更新される条件付き
確率を考え,その逆数を足していけば良い
理論的解析
• CV (NRMSE) 3/4𝑘 ≈ 0.866/ 𝑘 (← HLL は 1.08/ 𝑘)
• 0.56 倍のレジスタ数で同じ精度
– カウンタ 𝑐 も新しく覚えておくことを加味しても優れている
HyperLogLog 以外でも,MinHash の変化を用いる時は常に適用可能
(例:All-Distances Sketches)
34
Historic Inverse Probability と呼ばれる所以
実験結果
35
[Figure 3, Cohen, PODS’14]
まとめ
背景
• 大量の集合を皆が扱いたい時代
• そのための基礎技術としての集合 Sketching を紹介
基礎
• 全ての基本:MinHash
• Jaccard 係数推定: 𝒃-bit MinHash
• 集合異なり数推定:HyperLogLog
最新
• Jaccard 係数推定(高類似度):Odd Sketches
• 集合異なり数推定:HIP Estimator
36
1 of 37

Recommended

Active Learning 入門 by
Active Learning 入門Active Learning 入門
Active Learning 入門Shuyo Nakatani
51.8K views60 slides
明日使えないすごいビット演算 by
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算京大 マイコンクラブ
63.4K views60 slides
RSA暗号運用でやってはいけない n のこと #ssmjp by
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
58.5K views32 slides
全力解説!Transformer by
全力解説!Transformer全力解説!Transformer
全力解説!TransformerArithmer Inc.
9.6K views43 slides
協調フィルタリング入門 by
協調フィルタリング入門協調フィルタリング入門
協調フィルタリング入門hoxo_m
46.2K views35 slides
lsh by
lshlsh
lshShunsuke Aihara
14.8K views16 slides

More Related Content

What's hot

数学カフェ 確率・統計・機械学習回 「速習 確率・統計」 by
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」Ken'ichi Matsui
96.6K views233 slides
バンディット問題について by
バンディット問題についてバンディット問題について
バンディット問題についてjkomiyama
4.6K views49 slides
目grep入門 +解説 by
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
89.4K views83 slides
近年のHierarchical Vision Transformer by
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision TransformerYusuke Uchida
13.9K views46 slides
暗号文のままで計算しよう - 準同型暗号入門 - by
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -MITSUNARI Shigeo
43.7K views39 slides
深層学習の数理 by
深層学習の数理深層学習の数理
深層学習の数理Taiji Suzuki
79.7K views182 slides

What's hot(20)

数学カフェ 確率・統計・機械学習回 「速習 確率・統計」 by Ken'ichi Matsui
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
Ken'ichi Matsui96.6K views
バンディット問題について by jkomiyama
バンディット問題についてバンディット問題について
バンディット問題について
jkomiyama4.6K views
目grep入門 +解説 by murachue
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
murachue89.4K views
近年のHierarchical Vision Transformer by Yusuke Uchida
近年のHierarchical Vision Transformer近年のHierarchical Vision Transformer
近年のHierarchical Vision Transformer
Yusuke Uchida13.9K views
暗号文のままで計算しよう - 準同型暗号入門 - by MITSUNARI Shigeo
暗号文のままで計算しよう - 準同型暗号入門 -暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
MITSUNARI Shigeo43.7K views
深層学習の数理 by Taiji Suzuki
深層学習の数理深層学習の数理
深層学習の数理
Taiji Suzuki79.7K views
僕がつくった 70個のうちの48個のWebサービス達 by Yusuke Wada
僕がつくった 70個のうちの48個のWebサービス達僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達
Yusuke Wada18.8K views
組み込み関数(intrinsic)によるSIMD入門 by Norishige Fukushima
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima47.6K views
プログラミングコンテストでの動的計画法 by Takuya Akiba
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba91.7K views
DockerコンテナでGitを使う by Kazuhiro Suga
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga18.8K views
モデル高速化百選 by Yusuke Uchida
モデル高速化百選モデル高速化百選
モデル高速化百選
Yusuke Uchida24.8K views
最近のDeep Learning (NLP) 界隈におけるAttention事情 by Yuta Kikuchi
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
Yuta Kikuchi72.3K views
Tensor コアを使った PyTorch の高速化 by Yusuke Fujimoto
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
Yusuke Fujimoto7.8K views
レコメンドアルゴリズムの基本と周辺知識と実装方法 by Takeshi Mikami
レコメンドアルゴリズムの基本と周辺知識と実装方法レコメンドアルゴリズムの基本と周辺知識と実装方法
レコメンドアルゴリズムの基本と周辺知識と実装方法
Takeshi Mikami38.5K views
画像キャプションの自動生成 by Yoshitaka Ushiku
画像キャプションの自動生成画像キャプションの自動生成
画像キャプションの自動生成
Yoshitaka Ushiku58K views
5分でわかるベイズ確率 by hoxo_m
5分でわかるベイズ確率5分でわかるベイズ確率
5分でわかるベイズ確率
hoxo_m161.4K views

Similar to 乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-

T77 episteme by
T77 epistemeT77 episteme
T77 epistemeえぴ 福田
663 views14 slides
LUT-Network ~本物のリアルタイムコンピューティングを目指して~ by
LUT-Network ~本物のリアルタイムコンピューティングを目指して~LUT-Network ~本物のリアルタイムコンピューティングを目指して~
LUT-Network ~本物のリアルタイムコンピューティングを目指して~ryuz88
8.2K views50 slides
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用 by
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用MITSUNARI Shigeo
1.6K views16 slides
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17 by
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Yuya Unno
5.5K views45 slides
行列計算アルゴリズム by
行列計算アルゴリズム行列計算アルゴリズム
行列計算アルゴリズムTakuo Tachibana
136 views67 slides
暗号技術の実装と数学 by
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
9.6K views35 slides

Similar to 乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-(14)

LUT-Network ~本物のリアルタイムコンピューティングを目指して~ by ryuz88
LUT-Network ~本物のリアルタイムコンピューティングを目指して~LUT-Network ~本物のリアルタイムコンピューティングを目指して~
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
ryuz888.2K views
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用 by MITSUNARI Shigeo
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
MITSUNARI Shigeo1.6K views
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17 by Yuya Unno
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Yuya Unno5.5K views
関数の最小値を求めることから機械学習へ by Hiro H.
関数の最小値を求めることから機械学習へ関数の最小値を求めることから機械学習へ
関数の最小値を求めることから機械学習へ
Hiro H.6.1K views
AtCoder Beginner Contest 008 解説 by AtCoder Inc.
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説
AtCoder Inc.14K views
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9 by Yuya Unno
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
Yuya Unno13.7K views
バイナリニューラルネットとハードウェアの関係 by Kento Tajiri
バイナリニューラルネットとハードウェアの関係バイナリニューラルネットとハードウェアの関係
バイナリニューラルネットとハードウェアの関係
Kento Tajiri23.4K views
Variational autoencoder by Mikio Shiga
Variational autoencoderVariational autoencoder
Variational autoencoder
Mikio Shiga826 views
PRML復々習レーン#9 6.3-6.3.1 by sleepy_yoshi
PRML復々習レーン#9 6.3-6.3.1PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1
sleepy_yoshi2.3K views

More from Takuya Akiba

Learning Convolutional Neural Networks for Graphs by
Learning Convolutional Neural Networks for GraphsLearning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for GraphsTakuya Akiba
16K views36 slides
TCO15 Algorithm Round 2C 解説 by
TCO15 Algorithm Round 2C 解説TCO15 Algorithm Round 2C 解説
TCO15 Algorithm Round 2C 解説Takuya Akiba
5.3K views56 slides
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説 by
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説Takuya Akiba
6K views84 slides
大規模グラフ解析のための乱択スケッチ技法 by
大規模グラフ解析のための乱択スケッチ技法大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法Takuya Akiba
38.2K views43 slides
Cache-Oblivious データ構造入門 @DSIRNLP#5 by
Cache-Oblivious データ構造入門 @DSIRNLP#5Cache-Oblivious データ構造入門 @DSIRNLP#5
Cache-Oblivious データ構造入門 @DSIRNLP#5Takuya Akiba
17.5K views54 slides
平面グラフと交通ネットワークのアルゴリズム by
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズムTakuya Akiba
26.3K views54 slides

More from Takuya Akiba(13)

Learning Convolutional Neural Networks for Graphs by Takuya Akiba
Learning Convolutional Neural Networks for GraphsLearning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for Graphs
Takuya Akiba16K views
TCO15 Algorithm Round 2C 解説 by Takuya Akiba
TCO15 Algorithm Round 2C 解説TCO15 Algorithm Round 2C 解説
TCO15 Algorithm Round 2C 解説
Takuya Akiba5.3K views
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説 by Takuya Akiba
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
ACM-ICPC 世界大会 2015 問題 K "Tours" 解説
Takuya Akiba6K views
大規模グラフ解析のための乱択スケッチ技法 by Takuya Akiba
大規模グラフ解析のための乱択スケッチ技法大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法
Takuya Akiba38.2K views
Cache-Oblivious データ構造入門 @DSIRNLP#5 by Takuya Akiba
Cache-Oblivious データ構造入門 @DSIRNLP#5Cache-Oblivious データ構造入門 @DSIRNLP#5
Cache-Oblivious データ構造入門 @DSIRNLP#5
Takuya Akiba17.5K views
平面グラフと交通ネットワークのアルゴリズム by Takuya Akiba
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
Takuya Akiba26.3K views
大規模ネットワークの性質と先端グラフアルゴリズム by Takuya Akiba
大規模ネットワークの性質と先端グラフアルゴリズム大規模ネットワークの性質と先端グラフアルゴリズム
大規模ネットワークの性質と先端グラフアルゴリズム
Takuya Akiba15.3K views
勉強か?趣味か?人生か?―プログラミングコンテストとは by Takuya Akiba
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba71.8K views
プログラミングコンテストでの乱択アルゴリズム by Takuya Akiba
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba26.8K views
プログラミングコンテストでのデータ構造 2 ~動的木編~ by Takuya Akiba
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba46K views
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~ by Takuya Akiba
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba57.8K views
大規模グラフアルゴリズムの最先端 by Takuya Akiba
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端
Takuya Akiba54.4K views
プログラミングコンテストでのデータ構造 by Takuya Akiba
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba104.9K views

Recently uploaded

定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf定例会スライド_キャチs 公開用.pdf
定例会スライド_キャチs 公開用.pdfKeio Robotics Association
154 views64 slides
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PC Cluster Consortium
68 views12 slides
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 by
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可Hitachi, Ltd. OSS Solution Center.
13 views22 slides
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PC Cluster Consortium
29 views36 slides
光コラボは契約してはいけない by
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけないTakuya Matsunaga
30 views17 slides

Recently uploaded(7)

PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by PC Cluster Consortium
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by PC Cluster Consortium
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
光コラボは契約してはいけない by Takuya Matsunaga
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけない
Takuya Matsunaga30 views

乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-

  • 1. 乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩- 東京大学 情報理工学研究科 D2 秋葉 拓哉 (@iwiwi) 2014/05/29 @ PFI セミナー
  • 2. 背景 誰もが大量の集合・特徴ベクトルを処理したい! • 文章 → 単語の集合 (bag of words) • 商品 → 購買者 • 画像データ → 局所特徴量 (SIFT, SURF, …) • …… 色々したいが,そのまま処理するのは困難 • データが大きすぎる • 遅すぎる 1
  • 3. Sketching による効率化 解決策: 集合そのものの代わりになる Sketch を使う 2 Sketch 𝑫(𝑺) 集合 𝑺 hoge piyo fuga ??? • 小さい! • 効率的に処理ができる! • ただし結果は推定になる
  • 4. 3 今日の話:集合 Sketching の最新技術 1. MinHash Sketches 入門 • 基礎的かつ強力な手法である MinHash を復習 (以降の話も両方 MinHash の派生系) 2. Odd Sketches による Jaccard 係数推定の進歩 • まず,現在よく用いられている 𝒃-bit MinHash を紹介 • 類似性が高い際 𝑏-bit MinHash が劣化する問題を解消 [Mitzenmacher-Pagh-Pham, WWW’14] 3. HIP Estimator による集合異なり数推定の進歩 • まず,現在よく用いられている HyperLogLog Counter を紹介 • 要素挿入時の情報を用い精度を改善,誤差 1.08/ 𝑚 → 0.87/ 𝑚 [Cohen, PODS’14] WWW’14 Best Paper!
  • 5. 1. Min-wise Hashing 入門 ※ この部分は岡野原さんの 2011 年の解説をベースにさせてもらっています http://research.preferred.jp/2011/02/minhash/ 4
  • 6. Jaccard 係数 集合の類似度として Jaccard 係数を考えます 集合 𝑺 𝟏 と 𝑺 𝟐 の Jaccard 係数: 𝐽 𝑆1, 𝑆2 = 𝑆1 ∩ 𝑆2 |𝑆1 ∪ 𝑆2| 具体的な場面 • 文章の類似検索,重複検出 • 商品の推薦 集合の Jaccard 係数を推定したい気持ちになって下さい 5
  • 7. MinHash Sketch 𝒌 = 𝟏 ハッシュ関数 ℎ を用意しておく 6 集合 𝑆 hoge piyo fuga ℎ 𝑎 𝑎 ∈ 𝑆} 13 85 35 min ℎ 𝑎 𝑎 ∈ 𝑆} 13 全要素にハッシュ関数を適用 最小値だけを取り出す
  • 8. Jaccard 係数推定の基礎 重要な性質 Pr min ℎ 𝑎 |𝑎 ∈ 𝑆1 = min ℎ 𝑏 |𝑏 ∈ 𝑆2 = 𝐽 𝑆1, 𝑆2 2 つの集合のハッシュ値の min が一致する確率は Jaccard 係数に等しい! ※ハッシュ関数は完全にランダムに振る舞うと仮定 7 𝑆1 の Sketch 𝑆2 の Sketch
  • 9. Jaccard 係数推定の基礎 なぜ? 具体例で考えてみます. • 𝑆1 = 2,5,7,9 , 𝑆2 = 1,2,4,7,10 𝑆1 ∩ 𝑆2 = 2,7 .例えば 2 で一致する場合とは? • arg min ℎ 𝑎 |𝑎 ∈ 𝑆1 = 2 ⇔ {2,5,7,9} で 2 が最強 • arg min ℎ 𝑏 |𝑏 ∈ 𝑆2 = 2 ⇔ {1,2,4,7,10} で 2 が最強 条件を合わせると, • 2 で一致 ⇔ 1,2,4,5,7,9,10 = 𝑆1 ∪ 𝑆2 中で 2 が最強 一致するのは 7 でも良く,このように,要は 𝑆1 ∪ 𝑆2 中で最強のものが 𝑆1 ∩ 𝑆2 のいずれかであればよい. その確率は: S1 ∩ 𝑆2 / S1 ∪ 𝑆2 = 𝐽 𝑆1, 𝑆2 . 8 最強=ハッシュ値が最低
  • 10. 𝒌-min MinHash Sketch あとはこれを 𝑘 個並べると……! 𝒌-min MinHash Sketch • 異なる 𝑘 個のハッシュ関数 ℎ1, ℎ2, … , ℎ 𝑘 を用意 • それぞれについてさっきの min を計算&保存 Jaccard 係数の推定 • 「一致した数 / 𝑘」により 𝐽 𝑆1, 𝑆2 を推定 推定値は unbiased (不偏) また分散は 𝐽 1 − 𝐽 / 𝑘 になることが示せる 9
  • 11. MinHash Family こんな感じでハッシュ関数の最小値に注目する Sketching の手法が一般に MinHash と呼ばれる. (Jaccard 係数推定以外のことも色々できる.) MinHash のバリエーション • 𝑘 個の並べ方 – 𝑘-min Sketch (OddSketch はコレ) – 𝑘-partition Sketch (HyperLogLog はコレ) – Bottom-𝑘 Sketch (最近の All-Distances Sketches はコレ) • ハッシュ値の使い方 – Full Ranks (さっきのやつはコレ) – 𝑏-bit MinHash (Jaccard 係数でよく使われているヤツ) – Base-𝑏 Ranks (HyperLogLog は Base-2 Ranks) – …… 10
  • 12. 2. Odd Sketches による Jaccard 係数推定の進歩 [Mitzenmacher-Pagh-Pham, WWW’14] 11
  • 13. 𝒃-bit MinHash MinHash の改善できそうなところ • さっきの MinHash ではハッシュ値をそのまま保存 • 各々に 32bit (or 64bit) も使うと個数 𝑘 をあまり増やせない • 衝突を覚悟してもハッシュ値を小さくして,その分 𝑘 を 増やしてはどうか? 𝒃-bit MinHash [Li-König, WWW’10] • 異なる 𝑘 個のハッシュ関数 ℎ1, ℎ2, … , ℎ 𝑘 を用意 • それぞれについてさっきの min を計算 • ハッシュ値の下位 𝑏 bit のみを保存 (データサイズは 𝑘𝑏 bit になる) 12 𝑏 = 1 という極端な場合が 実は一番性能が良かったり
  • 14. 𝒃-bit MinHash による Jaccard 係数推定 Jaccard 係数の推定: 𝐽 = 𝑛/𝑘 − 2−𝑏 1 −2−𝑏 と推定すれば良い (𝑛=一致箇所数) 一致確率にハッシュ値の衝突を加味して解析 • 各箇所の一致確率は 𝐽 + 1 − 𝐽 2−𝑏 • 𝐽 + 1 − 𝐽 2−𝑏 × 𝑘 = 𝑛 として解くと上が得られる 推定値は unbiased (不偏) また分散は 1−𝐽 𝑘 𝐽 + 1 2 𝑏−1 になることが示せる 13
  • 15. 𝒃-bit MinHash が微妙な時 特に高い類似度の推定に興味がある時 𝒃-bit MinHash は実は微妙 なぜ? • 類似度 𝐽 が 1 に近い時,2 つのスケッチはほぼ同じ • 異なっている若干のビット数で,1 との差を見積もる • つまり,1 との差を表現するのは全体のごく一部 そのような状況は少なくない • 類似度 Top-10 を表示したい(→ 高い類似度のアイテムの精度が重要) • Web ページの重複検出等で 𝐽 > 0.9 かを判定したい 14
  • 16. 𝒃-bit MinHash が微妙な時 • 類似度 𝐽 が 1 に近い時,2 つのスケッチはほぼ同じ • 異なっている若干のビット数で,1 との差を見積もる • つまり,1 との差を表現するのは全体のごく一部 15 [Figure 1, Mitzenmacher+, WWW’14]
  • 17. Odd Sketches そこで高い類似度での精度を重視し改善するのが Odd Sketches [Mitzenmacher-Pagh-Pham, WWW’14] 着想 • XOR を活用する • 共通部分を打ち消させる • 異なっている部分の情報だけを綺麗に得る
  • 18. Odd Sketches Odd Sketches [Mitzenmacher-Pagh-Pham, WWW’14] • まず集合の要素を 𝑘-min MinHash で 𝑘 個選ぶ • 𝑛 bit のビットベクトル 𝑠 を用意,最初は全箇所 0 • 選ばれてる各要素 𝑎 について,𝑠 ℎ′ 𝑎 を反転する 𝑘 と 𝑛 がパラメータ.ℎ′: 値域 [1, 𝑛] のハッシュ関数を別途用意 17 集合 𝑆 hoge piyo fuga 1 piyo 2 hoge 𝑘-min MinHash 𝑘 = 2 0 1 0 0 1 0 Odd Sketch 𝑛 = 6
  • 19. Odd Sketches ※注意:実際には元の集合からいきなり Odd Sketches を計算するので はなく,集合の 𝑘-min MinHash Sketch の Odd Skech を計算します. (擬似コードの 𝑆 は既に 𝑘-min MinHash Sketch) 18
  • 20. Odd Sketches による Jaccard 係数の推定 𝐽 = 1 + 𝑛 4𝑘 ln 1 − 2 × Popcount odd 𝑆1 ⨂odd 𝑆2 𝑛 導出 • E MinHash 𝑘 𝑆1 Δ MinHash 𝑘 𝑆2 = 2𝑘 1 − 𝐽 • ポアソン分布への近似により E 𝑠𝑖 = 1−𝑒−2𝑚/𝑛 2 , E[Popcount] = 𝑛 1−𝑒−2𝑚/𝑛 2 • これを適当に解くと上が得られる 精度保証 • 実は Biased (だけど bias は 1 以下) • この式自体の分散等のカッチリした bound は今のところ無い 論文中では良いパラメータ仮定の元で精度が良さそうな根拠を並べている. 実際にはパラメータも実験により決めており,このへんは若干イケてない. 19 XOR 1 の数 S1の Odd Sketch 対称差 𝑚 = MinHash 𝑘 𝑆1 Δ MinHash 𝑘 𝑆2
  • 24. 集合異なり数の計算 集合異なり数 (distinct counting) • 重複を取り除き,異なるものの数を数えたい • 例:[1, 3, 5, 1, 2, 3, 2] → {1, 2, 3, 5} → 4 具体的な場面 • ウェブページのユニークビジター数 • 単語の DF (document frequency) の計算 (tf-idf) 23
  • 25. 集合異なり数の計算 計算が “意外と” 難しい • 既に全データある (batch) → sort して unique かける • 少しずつ来る (stream) → set を用意して放り込む どちらも線形のメモリを使ってしまう. ユニークビジター数を監視したいとすると…… • 各ページについて set を用意? • 各ページに線形のメモリは,メモリを使いすぎでは? そこでやはり Sketching の出番! 現在最もよく使われているのが HyperLogLog Counter! [Flajolet+, AOFA’07] 24
  • 26. HyperLogLog のインパクト Google • PowerDrill (data analysis platform) にて使われている [Hall+, VLDB’12] • その際行った改良についての論文も出ている [Heule+, EDBT’13] Twitter • Algebird (Abstract algebra library for Scala) に入っている https://github.com/twitter/algebird/search?q=hyperloglog&ref=cmdform Redis (open source key-value store) • データタイプとして HyperLogLog が選べる http://antirez.com/news/75 25
  • 27. HyperLogLog (𝒌 = 𝟏) HyperLogLog も MinHash の一種,ただし ハッシュ値を Base-2 Ranks で扱う Base-2 Ranks • 𝑎 ∈ 𝑆 の Base-2 rank 𝜚ℎ 𝑎 ≔ ℎ 𝑎 の先頭の 0 の数 • 例:ℎ 𝑎 = 00010101010 ⋯ → 𝜚ℎ 𝑎 = 3 HyperLogLog 𝒌 = 𝟏 • 𝑝 = max 𝜚ℎ 𝑎 | 𝑎 ∈ 𝑆 を計算 • 2 𝑝 として推定 26 3個 一般に base-𝑏 rank は − log 𝑏 ℎ(𝑎) 𝑛 (ℎ の値域を [1, n] として) 大きいヤツが珍しいので max を覚える 𝑝 以上になるのは 確率 2−𝑝 なので的な
  • 28. HyperLogLog (𝒌 > 𝟏) Jaccard 係数の時同様, 𝑘 個並べて推定を強化する. ただし,今回は入力を 𝒌 個に分割する. HyperLogLog [Flajolet+, AOFA’07] • 𝑘 = 2 𝑏 個のバケット 𝑀 𝑖 を用意 • ハッシュ値 ℎ 𝑎 の先頭 𝑏 bit でバケットに振り分け • 各バケットで,Base-2 rank の max を保存 集合異なり数の推定 • 各バケットで推定値を計算 • それらの normalized bias corrected harmonic mean を取る (式は若干大変なので論文を見て下さい) 27 ハッシュ値は勿論先頭 𝑏 bit を 捨てたものを使う
  • 30. HyperLogLog の理論的な性能 精度 • 相対誤差は 1.04/ 𝑘,CV (NRMSE) は 1.08/ 𝑘 • 定数確率で 1 ± 𝜀 近似するために必要な空間は 𝑂 𝜀−2 log log 𝑛 + log 𝑛 スペース • 各 𝑀 𝑖 の保存は 5 bit とかそんなもので良い → 5𝑘 bit これは near-optimal であるらしい. (漸近的性能はこれ以上の大幅な改善はできなさそう,ということ) 29 LogLog の名前を冠する所以
  • 32. 値が小さい時の対策 アルゴリズムを組み合わせる • Linear Counting [Whang+, TODS’09] など 無理やり直す [Heule+, EDBT’13] • 右図のような巨大な表を前計算 (Google PowerDrill にはこれが組み込まれている) 美しくない! 31
  • 33. HIP Estimator Historic Inverse Probability Estimator [Cohen, PODS’14] • 値が小さい時も推定が正確になる • 漸近的な精度も大きく向上 着想 • HyperLogLog は near-optimal だったのでは? • データ構造の最終状態から直接推定値を得るという仮定 • 最終状態だけでなく,計算途中の全ての状態を加味する とどうか? 32 素晴らしい!
  • 34. HyperLogLog with HIP Estimator 33 [Figure 4, Cohen, PODS’14] データ構造に集合を流しこみつつ 最初から数の集計も進める バケットを更新する度に 「この状況でここが更新される確率」 を使って集計値に加算する
  • 35. HIP Estimator 仕組み&理論値 動作原理はシンプル • 一般論:確率 𝑝 で発生 → 発生までの回数の期待値は 1/𝑝 • これに基づき,スケッチ値がそこで更新される条件付き 確率を考え,その逆数を足していけば良い 理論的解析 • CV (NRMSE) 3/4𝑘 ≈ 0.866/ 𝑘 (← HLL は 1.08/ 𝑘) • 0.56 倍のレジスタ数で同じ精度 – カウンタ 𝑐 も新しく覚えておくことを加味しても優れている HyperLogLog 以外でも,MinHash の変化を用いる時は常に適用可能 (例:All-Distances Sketches) 34 Historic Inverse Probability と呼ばれる所以
  • 37. まとめ 背景 • 大量の集合を皆が扱いたい時代 • そのための基礎技術としての集合 Sketching を紹介 基礎 • 全ての基本:MinHash • Jaccard 係数推定: 𝒃-bit MinHash • 集合異なり数推定:HyperLogLog 最新 • Jaccard 係数推定(高類似度):Odd Sketches • 集合異なり数推定:HIP Estimator 36