ID 1 7 8 Person 9 · 2019. 5. 20. · 時間レコード・グループのロード: 説明 時間レコード・グループのロード: 例 ユーザーの更新要求のロード:
重複レコードの多い 大規模トライ辞書の圧縮
description
Transcript of 重複レコードの多い 大規模トライ辞書の圧縮
重複レコードの多い大規模トライ辞書の圧縮矢田 晋†,森田 和宏泓田 正雄,青江 順一
徳島大学工学部† 学術振興会 特別研究員2009 年 9 月 2 日( 水 ) 1重複レコードの多い大規模トライ辞書の
圧縮
はじめに
– 重複レコードの多い辞書• レコードを必要としないもの (例:キーワードのリスト)• 統計量をレコードとするもの (例: N-gram 言語モデル)• etc…
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 2
トライ辞書 DAWG 辞書グラフ構造木構造 圧縮
検索性能そのまま
ポイント• どのように有効なのか– トライの共通部分木をマージ• 重複レコードが多いほど小さくなる
• どうやって構築するのか– 整列済みのキー集合から DAWG を構築• 構築時間は辞書の規模に比例 (トライと同じ)
• どのくらい有効なのか– Google N-gram データで実験• 辞書サイズ:頻度 1/3, 対数頻度 1/5, レコードなし 1/7
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 3
応用は限定的意外と簡単
検索性能は同等
「どのように有効なのか」DAWG は…
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 4
トライと DAWGトライ (Fredkin 1960)
• 木構造• 文字を遷移ラベルとする
DAWG (Adel’son-Vel’skii and Landis 1962)
• グラフ構造• 共通部分木をマージする
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 5
b e d #l l #
#d
l l ###
c a l le l l
ab e
d#
l#c a l l
e
a
bad, ball, bed, bell, call, cell
状態数: 23 9⇒遷移数: 22 ⇒12
DAWG とレコード重複レコードなし• まったくマージできない
重複レコードあり• マージできないことがある
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 6
b e d #l l #
#d
l l ###
c a l le l l
a b ed
#l
#c a l le
a
bad = ■, ball = ■, bed = ■bell = ■, call = ■, cell = ■
bad = ■, ball = ■, bed = ■bell = ■, call = ■, cell = ■状態数: 23 10⇒遷移数: 22 12⇒
DAWG の有効性• 特長– 重複レコードの多いトライ辞書の圧縮に有効– トライと同等の検索性能
• 応用例
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 7
内容 キー レコード自動リンク
キーワード なし入力補完 入力候補 なし OR 重
み分類器 組み合わせ素性 重み
はてなキーワードや Wikipedia の記事タイトル
デモ
(Yoshinaga and Kitsuregawa 2009)
「どうやって構築するのか」– 概要と従来手法 –DAWG は…
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 8
DAWG の構築方法• 従来手法– 基本戦略• 等価な をマージ
– 実現方法• 二段階手法:トライを DAWG に変換• 逐次手法:整列済みのキー集合から DAWG を構築
(Daciuk et al. 2000, Ciura and Deorowicz 2001)
• 提案手法– 基本戦略• 等価な をマージ
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 9
遷移
大規模化が難しい
効率的な実装は手間がかかる逐次手法で簡単に実装できる
状態
二段階手法(状態をマージ)• トライを介して DAWG を構築する– 欠点:作業領域が大きい
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 10
トライをメモリ上に展開するためb e d #
l l #
l l #
#
#
c a l le l l
a
#d
b ed
#l
#c a l le
a
完成図まずはトライを構築
二段階手法(状態をマージ)• トライを介して DAWG を構築する– 欠点:作業領域が大きい
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 11
トライをメモリ上に展開するためb e d #
l l #
l l #
#
#
c a l le l l
a
#d
b ed
#l
#c a l le
a
完成図トライを DAWG に変換
e
e
l 完成
逐次手法(状態をマージ)• キーを辞書順に登録– 確定した順に をマージ
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 12
状態 トライを介さずDAWG を構築
b e d #
l l #
l l #
#
#
c a l le l l
a
#d
b ed
#l
#c a l le
a
完成図キー集合から DAWG を構築
e
e
l
完成
「どうやって構築するのか」– データ構造と提案手法 –DAWG は…
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 13
DAWG のデータ構造隣接行列 (却下)• メモリ消費が大きい
隣接リスト (採用)• メモリ消費が小さい• DAWG の構築に最適
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 14
a b c d e l #0 1 41 2 22 3 63 ■… …
1
5
2 3
6 70
4
b ed
#
#c a l le
a
0123…
c, 4e, 2l, 6
#, ■…
b, 1a, 2d, 3
DAWG を構築してから別のデータ構造に変換できる
マージ対象の変更状態をマージ• 状態単位でマージ
遷移をマージ• 遷移を個別にマージ
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 15
01…
c, 4e, 2…
b, 1a, 2
01…
c, 4e, 2…
b, 1a, 2
b ed
#l
#c a l le
a
これまでの完成図 状態と遷移の置き換えb
e
ed
ll
c
##a
al
逐次手法(遷移をマージ)• キーを辞書順に登録– 確定した順に をマージ
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 16
遷移
完成図
視点の切り替えによる単純化b
a
a
e
d
l
d
l
l
#
l
#
l
lc
e l l
#
#
#
#
b
e
ed
ll
c
##a
al
完成
うれしいポイント状態をマージするには• Dawg: HashMap<State>– State: List<Transition>• Transition: Child, Label– Child: Reference (矢印)– Label: Alphabet (文字)
遷移をマージするには• Dawg: HashMap<Transition>– Transition: Child, Sibling, Label• Child: Reference (矢印)• Sibling: Reference (矢印)• Label: Alphabet (文字)
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 17
a
abcde
abcde a
等価 等価見つけやすい
「どのくらい有効なのか」DAWG は…
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 18
実験設定• 実験環境– Dell Optiplex 760• CPU: Pentium® Dual-Core 2.50GHz• RAM: 8GB DDR2 SDRAM• OS: 64bit Ubuntu 8.10 Desktop
• コーパス– Google N-gram データ (Kudo and Kazawa 2007)
• キー: 約 4 億件の 3-gram• 遷移数の上限:約 4 億
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 19
394,482,216 件作業領域は約 5.6GB
実験結果
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 20
レコード キー数 k 遷移数 n k/n (比率)
固有 ID 74,029,090 400,000,001 0.185 ( 1.00 )頻度 230,859,628 399,999,996 0.577 ( 3.12 )対数頻度 368,084,494 399,999,992 0.920 ( 4.97 )なし 394,482,216 318,840,667 1.237 ( 6.69 )
レコード real user sys
固有 ID 7 分 04 秒 6 分 53 秒 11 秒頻度 13 分 12 秒 12 分 53 秒 18 秒対数頻度 16 分 04 秒 15 分 39 秒 25 秒なし 14 分 08 秒 13 分 46 秒 22 秒time コマンドによる構築時間の計測結果
トライと同じ 同じ遷移数キー数 3 倍すべて登録
5.73 μs/key3.43 μs/key2.62 μs/key2.15 μs/key
実験結果(レコード)• ランダムに生成したレコードで実験– キー数は 1 億件に固定
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 21
1 4 16 64256 1k 4k
16k64K
0
100
200
300
400
500
0
100000000
200000000
300000000
400000000
500000000
構築時間遷移数
レコードの種類
構築時間
(秒)
遷移数(
百万)
レコード(頻度)レコード(対数頻度)
レコード(固有 ID )約 5.3 億ハッシュ表拡張
おわりに• トライの圧縮( DAWG )– 重複レコードが多いほど小さくなる– 検索性能は劣化しない– 簡単に実装できる
• 研究成果–公開ライブラリ• http://code.google.com/p/darts-clone/• http://code.google.com/p/dawgdic/
2009 年 9 月 2 日( 水 )
重複レコードの多い大規模トライ辞書の圧縮 22
限定的ながらも十分に応用可能BSD ライセンス