重複レコードの多い 大規模トライ辞書の圧縮

22
重重重重重重重重重 重重重重重重重重重重重 重重 重† 重重 重重 重重 重重 重重 重 重重重重重重重 † 重重重重重 重重重重重 2009 重 9 重 2 重 (重) 1 重重重重重重重重重重重重重重重重重重重重

description

重複レコードの多い 大規模トライ辞書の圧縮. 矢田 晋 † , 森田 和宏 泓田 正雄,青江 順一 徳島大学工学部 † 学術振興会 特別研究員. はじめに. 重複レコードの多い辞書 レコードを必要としないもの (例:キーワードのリスト) 統計量をレコードとするもの (例: N-gram 言語モデル) etc…. トライ辞書. DAWG 辞書. 圧縮. 木構造. グラフ構造. 検索性能 そのまま. ポイント. どのように有効なのか トライの共通部分木をマージ 重複レコードが多いほど小さくなる どうやって構築するのか - PowerPoint PPT Presentation

Transcript of 重複レコードの多い 大規模トライ辞書の圧縮

Page 1: 重複レコードの多い 大規模トライ辞書の圧縮

重複レコードの多い大規模トライ辞書の圧縮矢田 晋†,森田 和宏泓田 正雄,青江 順一

徳島大学工学部† 学術振興会 特別研究員2009 年 9 月 2 日( 水 ) 1重複レコードの多い大規模トライ辞書の

圧縮

Page 2: 重複レコードの多い 大規模トライ辞書の圧縮

はじめに

– 重複レコードの多い辞書• レコードを必要としないもの (例:キーワードのリスト)• 統計量をレコードとするもの (例: N-gram 言語モデル)• etc…

2009 年 9 月 2 日( 水 )

重複レコードの多い大規模トライ辞書の圧縮 2

トライ辞書 DAWG 辞書グラフ構造木構造 圧縮

検索性能そのまま

Page 3: 重複レコードの多い 大規模トライ辞書の圧縮

ポイント• どのように有効なのか– トライの共通部分木をマージ• 重複レコードが多いほど小さくなる

• どうやって構築するのか– 整列済みのキー集合から DAWG を構築• 構築時間は辞書の規模に比例 (トライと同じ)

• どのくらい有効なのか– Google N-gram データで実験• 辞書サイズ:頻度 1/3, 対数頻度 1/5, レコードなし 1/7

2009 年 9 月 2 日( 水 )

重複レコードの多い大規模トライ辞書の圧縮 3

応用は限定的意外と簡単

検索性能は同等

Page 4: 重複レコードの多い 大規模トライ辞書の圧縮

「どのように有効なのか」DAWG は…

2009 年 9 月 2 日( 水 )

重複レコードの多い大規模トライ辞書の圧縮 4

Page 5: 重複レコードの多い 大規模トライ辞書の圧縮

トライと 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

Page 6: 重複レコードの多い 大規模トライ辞書の圧縮

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⇒

Page 7: 重複レコードの多い 大規模トライ辞書の圧縮

DAWG の有効性• 特長– 重複レコードの多いトライ辞書の圧縮に有効– トライと同等の検索性能

• 応用例

2009 年 9 月 2 日( 水 )

重複レコードの多い大規模トライ辞書の圧縮 7

内容 キー レコード自動リンク

キーワード なし入力補完 入力候補 なし OR 重

み分類器 組み合わせ素性 重み

はてなキーワードや Wikipedia の記事タイトル

デモ

(Yoshinaga and Kitsuregawa 2009)

Page 8: 重複レコードの多い 大規模トライ辞書の圧縮

「どうやって構築するのか」– 概要と従来手法 –DAWG は…

2009 年 9 月 2 日( 水 )

重複レコードの多い大規模トライ辞書の圧縮 8

Page 9: 重複レコードの多い 大規模トライ辞書の圧縮

DAWG の構築方法• 従来手法– 基本戦略• 等価な     をマージ

– 実現方法• 二段階手法:トライを DAWG に変換• 逐次手法:整列済みのキー集合から DAWG を構築

(Daciuk et al. 2000, Ciura and Deorowicz 2001)

• 提案手法– 基本戦略• 等価な     をマージ

2009 年 9 月 2 日( 水 )

重複レコードの多い大規模トライ辞書の圧縮 9

遷移

大規模化が難しい

効率的な実装は手間がかかる逐次手法で簡単に実装できる

状態

Page 10: 重複レコードの多い 大規模トライ辞書の圧縮

二段階手法(状態をマージ)• トライを介して 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

完成図まずはトライを構築

Page 11: 重複レコードの多い 大規模トライ辞書の圧縮

二段階手法(状態をマージ)• トライを介して 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 完成

Page 12: 重複レコードの多い 大規模トライ辞書の圧縮

逐次手法(状態をマージ)• キーを辞書順に登録– 確定した順に     をマージ

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

完成

Page 13: 重複レコードの多い 大規模トライ辞書の圧縮

「どうやって構築するのか」– データ構造と提案手法 –DAWG は…

2009 年 9 月 2 日( 水 )

重複レコードの多い大規模トライ辞書の圧縮 13

Page 14: 重複レコードの多い 大規模トライ辞書の圧縮

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 を構築してから別のデータ構造に変換できる

Page 15: 重複レコードの多い 大規模トライ辞書の圧縮

マージ対象の変更状態をマージ• 状態単位でマージ

遷移をマージ• 遷移を個別にマージ

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

Page 16: 重複レコードの多い 大規模トライ辞書の圧縮

逐次手法(遷移をマージ)• キーを辞書順に登録– 確定した順に     をマージ

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

完成

Page 17: 重複レコードの多い 大規模トライ辞書の圧縮

うれしいポイント状態をマージするには• 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

等価 等価見つけやすい

Page 18: 重複レコードの多い 大規模トライ辞書の圧縮

「どのくらい有効なのか」DAWG は…

2009 年 9 月 2 日( 水 )

重複レコードの多い大規模トライ辞書の圧縮 18

Page 19: 重複レコードの多い 大規模トライ辞書の圧縮

実験設定• 実験環境– 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

Page 20: 重複レコードの多い 大規模トライ辞書の圧縮

実験結果

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

Page 21: 重複レコードの多い 大規模トライ辞書の圧縮

実験結果(レコード)• ランダムに生成したレコードで実験– キー数は 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 億ハッシュ表拡張

Page 22: 重複レコードの多い 大規模トライ辞書の圧縮

おわりに• トライの圧縮( DAWG )– 重複レコードが多いほど小さくなる– 検索性能は劣化しない– 簡単に実装できる

• 研究成果–公開ライブラリ• http://code.google.com/p/darts-clone/• http://code.google.com/p/dawgdic/

2009 年 9 月 2 日( 水 )

重複レコードの多い大規模トライ辞書の圧縮 22

限定的ながらも十分に応用可能BSD ライセンス