SlideShare a Scribd company logo
⽂文法圧縮⼊入⾨門:
超⾼高速テキスト処理理のための
データ圧縮
⾔言語処理理学会第20回年年次⼤大会(NLP2014)チュートリアル
2014年年  3⽉月  17⽇日  
丸⼭山  史郎郎
株式会社Preferred Infrastructure
イントロダクション
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
データ圧縮のモチベーション
l  従来のデータ圧縮の目的
l  データ保存領域の削減
l  ネットワーク通信速度の高速化
l  最近のデータ圧縮の目的
l  データ処理の高速化(圧縮⽂文字列列処理理)
l  圧縮したまま◯◯できるデータ構造(圧縮データ構造)
データをコンパクトで
扱いやすい表現に変換
データ圧縮の⼤大まかな種類
l  ⾮非可逆圧縮
l  ⼈人間にとって不不要な情報をそぎ落落とす
l  特定のデータに特化して設計されることが多い
l  主にマルチメディアデータ, ⽂文書の要約など
l  可逆圧縮
l  完全に元に復復元できる圧縮
l  汎⽤用的な⽬目的のものが多い
l  テキスト、ログなど
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
今回はこっちの話です
対象となる⽂文字列列データ
l  ⽂文字列列データ
l  テキスト
l  ウェブ / SNS
l  システムや機械のログ
l  センサーデータ
l  ゲノム / たんぱく質
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
⽂文法圧縮の枠組み
l  ⽂文法圧縮の枠組みを提唱した⼈人達
l  Kieffer, J. C.; Yang, E.-H. (2000),
“Grammar-based codes: A new class of universal lossless
source codes”, IEEE Trans. Inform. Theory 46 (3): 737–754
l  Kiefferらの前に⽂文法圧縮に基づく圧縮法(表現)を提案した研究
l  Sequitur [Nevill-Manning+ ’94],
l  SLP [Karpinski+ ’97],
l  Greedy [Apostlico+ ’98],
l  Re-Pair [Larsson+ ’99].
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
⽂文法圧縮の枠組み
l  目的
X1→  b,
X2→  a,
X3→  X2X1,
X14→  X13X12.
Xi→  Xi-1Xi-2,


l  ⽂文字列列中に暗に含まれ
る規則性を、
⽂文脈⾃自由⽂文法(CFG)
でコンパクトに表現
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
abaababaabaababaababaabaababaabaababaababaabaababaabab
aabaababaabaababaababaabaababaabaababaababaabaababaaba
baabaababaabaababaababaabaababaababaabaababaabaababaab
abaabaababaabaababaababaabaababaababaabaababaabaababaa
babaabaababaabaababaababaabaababaababaabaababaabaababa
ababaabaababaababaabaababaabaababaababaabaababaabaabab
aababaabaababaababaabaababaabaababaababaabaababaababa
⽂文法圧縮の強み
l  冗⻑⾧長度度の⾼高いデータに強力
l  Navarro, G. (2012): “Indexing Highly Repetitive Collection”, IWOCA.
l  繰り返しを多く含むようなデータの例例
l  ゲノム集合、⽂文書レポジトリ、ウェブ履履歴など
gzip bzip2 ppmdi
Re-Pair
(⽂文法圧縮)
LZMA
(LZ77)
圧縮率率率[%] 27.70% 26.34% 24.88% 2.80% 1.46%
0.00%
5.00%
10.00%
15.00%
20.00%
25.00%
30.00%
圧縮率率率[%]
出芽酵母菌36個体に対する圧縮率	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
※ 引用元 http://pizzachili.dcc.uchile.cl/repcorpus/statistics.pdf
l  圧縮⽂文字列列処理理
l  圧縮データを展開せずに直接処理理する(例例えば検索索)
⽂文法圧縮の強み
生テキスト上での文字列処理
圧縮して短くなった分、
処理理速度度も⾼高速に!
文法圧縮テキスト上での
文字列処理
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
l  ⽂文法圧縮に適⽤用可能な圧縮⽂文字列列処理理アルゴリズム
l  パターン照合とその変種
l  [Karpinski+ ’97]; [Miyazaki+ ’97]; [Kida+ ’03]; [Cégielski+ ’06];
[Lifshits ’07]; [Tiskin ’11]; [Yamamoto+ ’11]; etc.
l  特徴的パターン発⾒見見
l  [Inenaga+ ’12]; [Matsubara+ ’09];
l  最⻑⾧長⼀一致部分列列 / 編集距離離計算
l  [Tiskin ’08]; [Hermelin+ ’09, ’13]
l  等価判定
l  [Lifshits ’07]
などなど
⽂文法圧縮の強み
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
⽂文法圧縮の強み
l  圧縮データ構造
l  ⽂文字列列、⽊木、グラフなどのデータ構造を圧縮しつつ、
全体を復復元せずに直接⾼高速な操作が⾏行行えるデータ構造
l  省省メモリ化によるデータ処理理の⾼高速化
l  CPU/メモリのキャッシュに乗りやすい
l  巨⼤大なデータでも⼀一台のマシンで処理理できる
10110111011000000
簡潔表現(LOUDS)
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
ポインタ表現
文法圧縮で

更に小さく!
⽂文法圧縮の強み
l  ⽂文法圧縮を利利⽤用した圧縮データ構造
l  ランダムアクセス可能な圧縮⽂文字列列
l  [Bille+ ’11]; [Maruyama+ ’13b]
l  完備索索引付辞書
l  [Navarro+ ’11]
l  ラベル付き順序木
l  [Lohrey+ ’11]
l  グラフ  (ウェブデータ)
l  [Claude+ ’10a, ’10b]
l  キーワード辞書
l  [Brisaboa+ ’11]
l  圧縮接尾辞配列列
l  [González+ ’07]    などなど
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
アジェンダ
l  ⽂文法圧縮とは
l  ⽂文法変換アルゴリズムと符号化
l  ⽂文法圧縮テキスト上の全⽂文検索索
l  ⽂文法圧縮に基づく圧縮データ構造
l  まとめ
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
⽂文法圧縮とは
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
基本⽤用語
l  部分⽂文字列列(substring)、接頭辞(prefix)、接尾辞(suffix)
接頭辞	
ababa	
接尾辞	
部分文字列	
文字列	
ababa	
baba	
aba	
ba	
a	
abab	
aba	
ab	
a	
bab	
ab	
ba	
b	
a	
b	
ababa	
abab	
aba	
ab	
a	
ababa	
baba	
aba	
ba	
a	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
基本⽤用語
l  ラベル付き順序木 (Labeled Ordered Tree)
X1
X2 X2
X3 X4 X3 X3 X4
X5 X7
X5 X6
根ノード(Root  Node)
内部ノード(Internal  Node)
葉葉ノード(Leaf  Node)
根ノードが決まっている
→ 根付き木(Rooted Tree)
各ノードがラベルを持つ
→  ラベル付き⽊木(Labeled Tree)
兄弟(同一の親を持つノード
)に順序が付けられている
→ 順序木(Ordered Tree)
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
基本⽤用語
l  ⾮非巡回有向グラフ(DAG:Directed Acyclic Graph)
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
辺に向きが定義されている
→ 有向グラフ
閉路路あり 閉路路なし
閉路路を持たない有向グラフ
→  ⾮非巡回有向グラフ
基本⽤用語
l  ⽂文脈⾃自由⽂文法(CFG:Context-free Grammar)
l  ⽂文法 G  =  (V,  Σ,  D,  S)の例。
Σ  =  {  a,  b  }
V  =  {  S  }
D  =  {  
アルファベット⽂文字
(または終端記号)
の有限集合
変数(または⾮非終端
記号)の有限集合
⽣生成規則の有限集合
構⽂文⽊木
(Parse Tree)
S  →  a  S  b,
S  →  a  b        }
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
S
S
S
言語L(G)  =  
{  anbn  |  n  ≧  1  }
a b
a b
a b
Sは開始記号
⽂文法圧縮の枠組み
l  目的
X1→  b,
X2→  a,
X3→  X2X1,
X14→  X13X12.
Xi→  Xi-1Xi-2,


l  ⽂文字列列中に暗に含まれ
る規則性を、
⽂文脈⾃自由⽂文法(CFG)
でコンパクトに表現
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
abaababaabaababaababaabaababaabaababaababaabaababaabab
aabaababaabaababaababaabaababaabaababaababaabaababaaba
baabaababaabaababaababaabaababaababaabaababaabaababaab
abaabaababaabaababaababaabaababaababaabaababaabaababaa
babaabaababaabaababaababaabaababaababaabaababaabaababa
ababaabaababaababaabaababaabaababaababaabaababaabaabab
aababaabaababaababaabaababaabaababaababaabaababaababa
⽂文法圧縮とは
l  ⽂文字列列の各⽂文字を葉葉とした⽊木構造(ラベル付き順序⽊木)で表す
a b a a a b a aa b
⽂文字列列
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
⽂文法圧縮とは
l  ⽂文字列列の各⽂文字を葉葉とした⽊木構造(ラベル付き順序⽊木)で表す。
X4
X3
X1 X2
a b a a a b a a
X1 X2X1
a b
X5
X3
⽊木構造表現
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
⽂文法圧縮とは
l  同じラベルを根として持つ部分木は、同じ木構造(部分文字列)を持つ。
X4
X3
X1 X2
a b a a a b a a
X3
X1 X2X1
a b
X5
ラベルが同じ=部分木も同じ	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
⽂文法圧縮とは
l  複数個存在する同じ部分木(文字列)の情報は集約される。
X4
X3
X1 X2
a b a a a b a a
X3
X1 X2X1
a b
X5
DAG表現
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
⽂文法圧縮とは
l  各ノードと辺は⽣生成規則で表される
X5→  X4X3
X4→  X3X1
X3→  X1X2
X1→  a  b
X2→  a  a
⽣生成規則表現
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
X4
X3
X1 X2
a b a a
X5
⽂文法圧縮とは
l  ⽂文字列列  w  =“abaaababaa”を導出するCFG G  =  (V,  Σ,  D,  X5).
V  =  {  X1,  X2,  X3,  X4,  X5  }
Σ  =  {  a,  b  }
D  =  {  
アルファベット⽂文字
の有限集合
変数の有限集合
⽣生成規則の有限集合
X5は開始記号
X5→  X4X3  }
X4→  X3X1,
X3→  X1X2,
X1→  a  b,
X2→  a  a,
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
l  直線的プログラム(SLP: Straight-line Program)  
l  ⽣生成規則が以下の形式に制限された⽂文法圧縮の標準系
l  ⼀一意な⽂文字列列を導出するCFG GはSLPへO(g)時間/領領域で
変換可能.
l  SLPへ変換してもCFGのサイズは⾼高々2倍にしかならない.
l  規則数gに対して指数⻑⾧長 (O(2g))の長さの⽂文字列列を表現可能.
26	
expri  :
a  ∈  Σ
Xj  Xk  (j,  k  <  i)
Xi    ∈  V
X1  →  expr1,  X2  →  expr2,  …  ,  Xg  →  exprg.
⽂文法圧縮とは
⽂文法圧縮とは
l  ⽂文法圧縮は⼆二段階構成
l  ⽂文法変換(モデル化)+符号化
l  1. ⽂文法変換アルゴリズム
l  ⽂文字列列wが⼊入⼒力力として与えられ、
wを⼀一意に導出するような
CFG Gに変換するアルゴリズム。
つまり、L(G)  =  {w}。
l  2. 符号化アルゴリズム
l  1.により得られた文法をコンパクトな
ビット列で表現するアルゴリズム
⽂文法変換/逆変換
符号化/復復号化
abaababaabaab…
01001100
10101101…
          …
X3→  X2X1
X1→  b
X2→  a
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
⽂文法変換アルゴリズムと符号化
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
l  圧縮率率率(⽂文法圧縮の場合は⽣生成される⽂文法のサイズ)
l  圧縮 / 復復元処理理速度度
l  圧縮 / 復復元時のメモリ消費量量
l  オフライン(バッチ処理理)  か  オンライン(リアルタイム処理理)  か
圧縮アルゴリズムの善し悪し
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
l  以下は同じ⽂文字列列を導出するCFG  G1とG2.
l  Size(G)  :  ここでは⽂文法  Gの規則(変数)の数とする.
⽂文法のサイズ
X1
X2
X3
X1 X1
X2
X4
a a a a ab b b a a a a ab b b
X1 X2 X3 X3
X4 X5
X6
Size(G1)  =  4 Size(G2)  =  6
G2
G1
<
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
l  最⼩小CFG問題  [Charikar+  ʼ’05]
l  近似率
l  ⽂文法圧縮アルゴリズムの理理論論性能
アルゴリズムの⽣生成した⽂文法サイズ
最⼩小CFGのサイズ
近似率率率  =
入力:文字列w.
出力:wを一意に導出する最小サイズのCFG.
NP困難問題
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
⽂文法変換アルゴリズム
⽂文法変換アルゴリズム
l  ⼤大きく分けて⼆二つの戦略略がある
l  貪欲アルゴリズム
l  平均的に良良い圧縮率率率を達成する⽬目的で設計されたアルゴリズム
l  部分⽂文字列列の出現頻度度や⻑⾧長さの情報を利利⽤用する
l  実⽤用性を重視
l  近似アルゴリズム
l  最悪のケース(どんな⼊入⼒力力⽂文字列列)でも圧縮率率率の性能が
保証されているアルゴリズム
l  理理論論的な興味が中⼼心
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
⽂文法変換アルゴリズム
l  貪欲アルゴリズム
l  Bisection  /  Multilevel  Pattern  Matching  [Kieffer+  ʼ’00]
l  Sequitur  [Nevill-‐‑‒Manning+  ʻ‘97]
l  Re-‐‑‒Pair  [Larsson+  ʼ’99]
l  LFS2  [Nakamura+  ʼ’09]
l  GREEDY  [Apostlico+  ʻ‘98]
l  近似アルゴリズム
l  O(log  (n/g*))近似アルゴリズム
l  [Charikar+,  ʼ’05];  [Rytter,  ʼ’03];  [Jez,  ʻ‘13]
l  その他の近似アルゴリズム
l  [Sakamoto+,  ʼ’04,  ʼ’09];  [Gagie+,  ʼ’10];  
OLCA  [Maruyama+,  ʼ’12,  ʼ’13,  ʼ’14]
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
Re-Pair
l  Re-Pair  (Recursive Paringアルゴリズム)
l  Larsson, N. J.; Moffat, A. (2000), “Offline Dictionary-Based
Compression”, IEEE 88 (11): 1722-1732
l  戦略略
l  頻度度の⾼高い隣隣り合う2⽂文字(以後ペアと呼ぶ)を選択し、
変数で置き換える処理理を再帰的に繰り返す。
l  ⽂文法圧縮の中で⼀一番良良く利利⽤用されている
l  テキスト
l  転置索索引 / ウェブグラフ
l  完備索索引付辞書  などの圧縮
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
l  アルゴリズム
Re-Pair
1.  ⽂文字列列中に出現する最頻の
ペアABを選択する.
2.  新たな変数Xを⽤用意し,
⽣生成規則X→ABを作る.
3.  ⽂文字列列中の全てのペアABを
Xで置き換える.
4.  全てのペアが1度度しか現れな
くなるまで1~∼3を繰り返す.
ababcdebdefabdeabc
X1→ab
X1X1cdebdefX1deX1c
X2→de
X1X1cX2bX2fX1X2X1c
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
Re-Pair
l  利利点
l  単純な戦略略だが⾼高い圧縮率率率
l  短い部分⽂文字列列の繰り返しをうまく捕らえることができる
l  規則の右辺が⼆二⽂文字に制限されているため扱い易易い
l  ⽋欠点
l  ⾼高速に(線形時間で)動作させるためには複雑な実装が必要
l  使⽤用メモリ量量が多い
l  ⼊入⼒力力テキスト⻑⾧長の20倍ほど(1バイト⽂文字、4バイト整数のとき)
l  Re-Pairの亜種
l  Re-Merge [Wan+ ’07],
l  Approximate Re-Pair [Claude+ ’10a],
l  Re-Pair VF [Yoshida+ ’13]   など
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
OLCA
l  OLCA  (Online-LCAアルゴリズム)
l  Maruyama, S.; Sakamoto, H.; Takeda, M. (2012), “An Online
Algorithm for Lightweight Grammar-Based Compression”,
Algorithms 5(2): 214-235.
l  特徴
l  O(log2  n)-近似アルゴリズム
l  オンラインアルゴリズム
l  テキスト中に繰り返し現れる⻑⾧長い部分⽂文字列列をうまく集約できる
l  LZ77のような⽂文字列列探索索は不不要、
ゆえにアルゴリズムはシンプル&軽量量
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
OLCA
共通部分文字列	
z    a    b    r      a      k    a    d    a    b      r    a      k    a    d    a    b    r    a    z
X1 X2 X3 X1 X2 X3 X1 X4
4
l  共通⽂文字列列に対してペアの置き換えを同期させる
置き換え後も共通部分⽂文字列列内で同じ⽂文字列列にさせる
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
OLCA
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
共通部分文字列	
10
z    a    b    r    a      k    a    d    a    b      r    a      k    a    d    a    b    r    a    z
l  左から適当に置き換えると置き換えにズレが⽣生じることがある
このようなケースは避けたい
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
l  テクニック
l  記号の順序関係を利利⽤用する.  
l  ⽂文字列列中の極値や連続⽂文字を⽬目印とする.
例) 極小⽂文字  (w[i-1]  >  w[i]  <  w[i+1])  の⽬目印
X1 X2 X3 X1 X2 X3 X1 X4
z    a    b    r    a    k    a    d    a    b    r    a    k    a    d    a    b    r    a    z
w[i,  i+1]を置換え.	
順序: …  <  a  <  b  <  c  <  …  <  z  …  
共通部分文字列	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
OLCA
OLCA
l  アルゴリズムの動き
l  置き換えを1⽂文字になるまで再帰的に繰り返す。
l  ⼀一回のループで3⽂文字中の2⽂文字は必ず置き換える。
ab b aba
a
X4
X1
X2
X1 X1
X3 X2
a
X2
w1
w2
w3
w4
w5
オフライン型

[Sakamoto+,‘04]	
OLCA [Maruyama+, ‘12]	
aa
X1
構⽂文⽊木の⾼高さは
O(log  n).
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
OLCA
0	
 1	
 2	
 3	
 4	
d
0	
 1	
 2	
 3	
 4	
d
0	
 1	
 2	
 3	
 4	
d
w1
w2
w3
aaa
X1→aaX1
a abab a a a b
X1
X2→ab
b X2
X3→X1X1
X3
CFG
入力文字列	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
(このスライドはアニメーションです)	
l  OLCAの動作
OLCA
l  利利点
l  実装が容易易(隣隣り合う記号の⼤大⼩小⽐比較、置き換えのためのキュー)
l  メモリ領領域が出⼒力力⽂文法のサイズで抑えられる
l  ⽋欠点
l  実験的にはRe-Pairの⽅方が良良い圧縮率率率を達成できる
l  圧縮しにくいデータについてはメモリ効率率率が悪い
l  OLCAの改良良版
l  FOLCA  (Fully-Online LCA)[Maruyama+ ’13]
l  Lossy-FOLCA [Maruyama+ ’14]
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
⽂文法の符号化
l  ⽣生成規則の集合を表現するのに必要なビット数は?
※簡単のためアルファベット⽂文字の種類数は無視できるほど⼩小さいと仮定
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
X1→a  b
X2→X1a
X3→X1  X2
X4→X3  X2
l  単純な表現
l  1規則を3つの記号で表す
(左辺1記号+右辺2記号)
l  3glog  gビット(gは変数の数)
l  左辺を配列列のインデクスで表現
l  2glog  gビット
l  2glog  gビットを更更に半分にする表現
→ POSLP表現
a  b
X1a
X1  X2
X3  X2
1	
2	
3	
4
⽂文法の符号化
l  POSLP(Post-order Partial Parse Tree)表現 [Maruyama+, ’12]
l  規則を⽊木構造で表し、⼆二分⽊木の括弧列列表現で符号化
X1→a  b
X2→X1a
X3→X1  X2
X4→X3  X2
④
Y1
a
③
②
b
Y2
a
①
(  a  (  b  )  (  a  )  (  Y1  )  (  Y2  )
CFG
( (
(
(
(
)
)
)
)
POSLP表現
b
X2
a
X1
a
X2
X1
X4
X3
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
約  glog  g  +  2gビット
⽂文法の符号化
l  g  変数のSLPを表現するための理理論論的に最⼩小のビット数
(情報理理論論的下限値)[Tabei+ ’13]
l  glog  g  +  g  +  o(g)ビット
l  POSLPの利利点
l  符号化したまま各⽣生成規則にO(1)時間でアクセス可能。
l  符号化列列をオンラインで元⽂文字列列へ復復元可能。
l  類似した符号化アイデア
l  [González+ ’07]; [Claude+ ’10b, ’12] など
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
実験
l  ベンチマークテキスト
l  Repetitive Corpus Real. (約50 ~ 400MB)
l  繰り返しを多く含むデータセット
‒  ゲノム(Eschelichia_Coli, cere, para, influenza)
‒  ソースコードレポジトリ(coreutil, kernel)
‒  wikipedia記事の全履履歴(einstein.de.txt, einstein.en.txt)
‒  英⽂文テキスト(world_leader)
l  http://pizzachili.dcc.uchile.cl/repcorpus.html
l  Pizza & Chili courpus. (約200MB)
l  通常のベンチマークテキスト
‒  英⽂文テキスト(ENGLISH)
‒  XMLレコード(XML)
l  http://pizzachili.dcc.uchile.cl/texts.html
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
いろいろな圧縮法との⽐比較
圧縮法 備考 使⽤用領領域
Re-Pair
貪欲法に基づく⽂文法圧縮法.
オフライン圧縮.
O(n)
OLCA オンライン圧縮, POSLP表現 O(z)
LZW
LZ78圧縮法,
辞書のリセットは⾏行行わない.
O(z)
gzip -9
LZ77圧縮法,
窓⻑⾧長 = 32KB.
固定
bzip2 -9
Burrows-Wheeler変換ベース,
⼊入⼒力力を約1MB単位に分割した圧縮.
固定
LZMA
LZ77ベースの強⼒力力な圧縮法.
窓⻑⾧長 = ⼊入⼒力力⻑⾧長.
O(n)
z = 圧縮テキスト長, n  = テキスト長.	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
実験:圧縮率率率 [%] (圧縮サイズ/⼊入⼒力力サイズ)
0.00
5.00
10.00
15.00
20.00
25.00
30.00
35.00
40.00
45.00
LCA-online
LZW
gzip -9
bzip2 -9
Re-Pair
LZMA
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
OLCA
実験:最⼤大メモリ使⽤用量量 / ⼊入⼒力力テキストサイズ
0
2
4
6
8
10
12
LCA-online
LZW
gzip -9
bzip2 -9
Re-Pair
LZMA
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
OLCA
実験:⼊入⼒力力1MBあたりの平均圧縮時間 [sec]
0
0.5
1
1.5
2
2.5
3
3.5
lca_online
LZW
gzip -9
bzip -9
Re-Pair
LZMA
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
OLCA
⽂文法圧縮テキスト上での全⽂文検索索
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
全⽂文検索索
l  パターンP=“TCTCTGAATGC”を探せ!
CGATCAAAATGTCCACTTGCAGATTCTACAAAAACAGTGTCTCAAAACT
GCTCTATCAAAAGGAAGGTTCAACTCTGTGAGTTGAATGCACACATCAC
AACGAAGTTTCTGAGAATGCTTCTGTCTAGTTTTTATGTGAAGGTATTCC
CGTTTCCTCTCTGAATGCACCGAAGGCCTCAAAGCGCTCCAAATATCCA
CCTGCAGATTCTGCAAAAAGAGAGGTTCAAAACTGCTCAATGAAAAGAT
ACGTTCAACTCTGTGAGTTGAATGCATACATCACAAAGAAGTTTGTCTG
AATGCTTCTGTGTAGTTTTTATTTCAAGATATTTCCTTTTCCACCATAGG
GCTCAAAGGGCTCCAAATATCCACTTGCAGATTCTACAAATAGAGAGAT
TCAAAACTCTCTGAATGCTGCTCAATGAGAAGATAAGATCAACTCTGTG
AGCTGAATGCACACCTCACAAAGAAGTTTCTCAGAATGCTTCTGTGTAG
TTTTTATGTGAAGATATTTTCTTTTCCACAGTTCTCTGAATGCAGGCCTC
AAAGGGCTCCAAATATCCACCTGAAGATTCTGCCAAAAGAGAGATTCAA
AACTGCTGATTCAAAAGATATGTTCAACTCTGTGAGTTGAATGCATACAT
CACAAAGCAGTTTTCTGTGTAGTTTTTATTTGAAGATATTTCCTTTTCCA
CCATAGGGTGCAAAGGGTGCAAAGGGCTCCAAATATCCACTTGGAGATT	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
全⽂文検索索
l  パターンP=“TCTCTGAATGC”を探せ!
CGATCAAAATGTCCACTTGCAGATTCTACAAAAACAGTGTCTCAAAACT
GCTCTATCAAAAGGAAGGTTCAACTCTGTGAGTTGAATGCACACATCAC
AACGAAGTTTCTGAGAATGCTTCTGTCTAGTTTTTATGTGAAGGTATTCC
CGTTTCCTCTCTGAATGCACCGAAGGCCTCAAAGCGCTCCAAATATCCA
CCTGCAGATTCTGCAAAAAGAGAGGTTCAAAACTGCTCAATGAAAAGAT
ACGTTCAACTCTGTGAGTTGAATGCATACATCACAAAGAAGTTTGTCTG
AATGCTTCTGTGTAGTTTTTATTTCAAGATATTTCCTTTTCCACCATAGG
GCTCAAAGGGCTCCAAATATCCACTTGCAGATTCTACAAATAGAGAGAT
TCAAAACTCTCTGAATGCTGCTCAATGAGAAGATAAGATCAACTCTGTG
AGCTGAATGCACACCTCACAAAGAAGTTTCTCAGAATGCTTCTGTGTAG
TTTTTATGTGAAGATATTTTCTTTTCCACAGTTCTCTGAATGCAGGCCTC
AAAGGGCTCCAAATATCCACCTGAAGATTCTGCCAAAAGAGAGATTCAA
AACTGCTGATTCAAAAGATATGTTCAACTCTGTGAGTTGAATGCATACAT
CACAAAGCAGTTTTCTGTGTAGTTTTTATTTGAAGATATTTCCTTTTCCA
CCATAGGGTGCAAAGGGTGCAAAGGGCTCCAAATATCCACTTGGAGATT	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
CGATCAAAATGTCCACTTGCAGATTCTACAAAAACAGTGTCTCAAAACT
GCTCTATCAAAAGGAAGGTTCAACTCTGTGAGTTGAATGCACACATCAC
AACGAAGTTTCTGAGAATGCTTCTGTCTAGTTTTTATGTGAAGGTATTCC
CGTTTCCTCTCTGAATGCACCGAAGGCCTCAAAGCGCTCCAAATATCCA
CCTGCAGATTCTGCAAAAAGAGAGGTTCAAAACTGCTCAATGAAAAGAT
ACGTTCAACTCTGTGAGTTGAATGCATACATCACAAAGAAGTTTGTCTG
AATGCTTCTGTGTAGTTTTTATTTCAAGATATTTCCTTTTCCACCATAGG
GCTCAAAGGGCTCCAAATATCCACTTGCAGATTCTACAAATAGAGAGAT
TCAAAACTCTCTGAATGCTGCTCAATGAGAAGATAAGATCAACTCTGTG
AGCTGAATGCACACCTCACAAAGAAGTTTCTCAGAATGCTTCTGTGTAG
TTTTTATGTGAAGATATTTTCTTTTCCACAGTTCTCTGAATGCAGGCCTC
AAAGGGCTCCAAATATCCACCTGAAGATTCTGCCAAAAGAGAGATTCAA
AACTGCTGATTCAAAAGATATGTTCAACTCTGTGAGTTGAATGCATACAT
CACAAAGCAGTTTTCTGTGTAGTTTTTATTTGAAGATATTTCCTTTTCCA
CCATAGGGTGCAAAGGGTGCAAAGGGCTCCAAATATCCACTTGGAGATT	
全⽂文検索索
l  パターンP=“TCTCTGAATGC”を探せ!
出現回数を調べたい
出現位置を列列挙したい
Pに似ているパターンを
検索索したい
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
全⽂文検索索
l  全⽂文検索索問題
l  文書(テキスト)中に含まれる全てのパターンの出現回数(位置)
を漏漏れ無く報告する。
l  ⽂文書列列挙問題(今回は詳しく扱わない)
l  対象は⽂文書の集合
l  パターンを含んでいる⽂文書番号のみを報告
l  スコア(出現頻度度、tf-idfなど)の⾼高い上位  k  件の⽂文書のみを報告
l  ⽂文書の傾向とクエリによっては、計算時間を⼤大幅に削減
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
検索索の種類
l  照合型検索索
l  検索索対象テキストを頭から順番に⾒見見ていって、⽬目的のパターンを
検索索する⽅方法
l  前処理理コストが低い、複数のクエリを同時実⾏行行、リアルタイム
l  検索索対象テキストのサイズに⽐比例例した検索索時間
l  イメージ:⽂文章読解問題で関連のありそうな単語をベタ読みで探す
l  索索引型検索索
l  検索索対象テキストに前処理理で索索引を構築しておくことで
⾼高速な検索索を実現する⽅方法。
l  検索索時間がテキストサイズに⼤大きく依存しない
l  前処理理コストが⾼高い、索索引領領域が別途必要
l  イメージ:英和辞典の索索引を使った単語検索索
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
圧縮パターン照合
l  ⽬目的:データ圧縮による照合型検索索の⾼高速化
非圧縮テキスト	
圧縮テキスト	
パターン照合機械
圧縮パターン
照合機械
圧縮で縮んだ分だけ
照合時間が短くなる.
⽂文 字 列列 を 制 す る 者 は 情 報 を 制 す る 。
⽂文字列列を制する者は情報を制する。
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
l  様々な圧縮法に対する圧縮パターン照合の研究
l  連⻑⾧長符号
l  [Eilam-Tzoreff+ ’88]; [Amir+ ’92, ’97];
l  ハフマン符号
l  [Fukamachi+ ’92]; [Miyazaki+ ’98]; [Klein+ ’01];
l  LZ77系
l  [Farach+ ’95]; [Gasieniec+ ‘96]; [Klein+ ’00];
[Gawrychowski ’11a]; etc.
l  LZ78系
l  [Amir+ ’96]; [Kida+ ‘98, ’99]; [Navarro+ ’00];
[Kärkkäinen+ ’00]; [Gawrychowski ’11b]; etc.
l  LZ系
l  [Navarro+ ’99, ’04];
圧縮パターン照合
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
距離離(⾛走査⻑⾧長)は短いが
⾛走る速度度(照合速度度)は遅い。
⾼高速に⾛走ることが可
能だが、距離離が⻑⾧長い。
LZ圧縮法
連長/Huffman符号などの軽い圧縮
⾼高速に⾛走ることができ
て、かつ距離離も短い。
文法圧縮
圧縮パターン照合
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
テキスト:	
状態遷移:	
 0
 3
 3
 4
 5
1
 2
 4
 1
a b a b a b b a
5
l  ⽂文法圧縮に対する圧縮パターン照合アルゴリズム  [Kida+, ‘03]
a
0 1 2 4 5
b
3任意の
文字
-1
a b
パターン P=a  b  a  b  bを受理するKMPオートマトン	
b
: goto
: failure
圧縮パターン照合
*図は状態遷移を計算するJump関数の例.パターンの出現を報告するOutput関数は省略.
  a  b    X1  X3
S S  :  開始規則の右辺
D  :  開始規則以外の生成規則	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
  X1  →  ab,X2  →  ba,
  X3  →  X1X2
D
テキスト:	
状態遷移:	
 0
 3
 3
 4
 5
1
 2
 4
 1
S  : a b X1 X3
a b a b a b b a
5
l  ⽂文法圧縮に対する圧縮パターン照合アルゴリズム [Kida+, ‘03]
a
0 1 2 4 5
b
3任意の
文字
-1
a b
パターン P=a  b  a  b  bを受理するKMPオートマトン	
b
: goto
: failure
X1
圧縮パターン照合
*図は状態遷移を計算するJump関数の例.パターンの出現を報告するOutput関数は省略.
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
  a  b    X1  X3
S S  :  開始規則の右辺
D  :  開始規則以外の生成規則	
  X1  →  ab,X2  →  ba,
  X3  →  X1X2
D
テキスト:	
状態遷移:	
 0
 3
 3
 4
 5
1
 2
 4
 1
S  : a b X1 X3
a b a b a b b a
5
l  ⽂文法圧縮に対する圧縮パターン照合アルゴリズム [Kida+, ‘03]
a
0 1 2 4 5
b
3任意の
文字
-1
a b
パターン P=a  b  a  b  bを受理するKMPオートマトン	
b
: goto
: failure
O(|D|+|P|2)の前処理時間・領域
X1
走査時間:O(|S|+Pの出現回数)
*図は状態遷移を計算するJump関数の例.パターンの出現を報告するOutput関数は省略.
圧縮パターン照合
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
  a  b    X1  X3
  X1  →  ab,X2  →  ba,
  X3  →  X1X2
S
D
S  :  開始規則の右辺
D  :  開始規則以外の生成規則
圧縮パターン照合
l  実際に⾼高速な圧縮パターン照合を実現するための問題
l  前処理理コスト(オートマトンの構築時間)
l  ビット処理理のオーバーヘッド
l  キャッシュヒット率率率  などなど
l  圧縮パターン照合アルゴリズムに特化した⽂文法圧縮の開発
l  BPE (Byte-Pair-Encoding) [Shibata+ ’00].
l  BPE using Byte-Huffman [Matsumoto+ ’09].
l  BPEX [Maruyama+ ’10].
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
圧縮パターン照合
KMP
KMP on BPE
KMP on BPEX	
BMH
BMH on SE
SE	
 BPE	
 BPEX	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
l  実験結果
l  検索索時間はCPU時間。I/O時間を含めるとBPEXはさらに有利利。
l  SE(Stopper Encoding)[Rautio+ ’02] : BM型検索索のための符号化
圧縮索索引
l  代表的な全⽂文検索索索索引
l  n-グラム索索引(n-gram index)、接尾辞配列列(Suffix Array) など
l  圧縮⾃自⼰己索索引(Compressed Self-Indexes) [Navarro+, ‘07]
l  元の⽂文書データを陽に持たずに次の操作をサポートするデータ構造
l  パターンの出現回数報告
l  パターンの出現位置報告
l  部分⽂文字列列復復元
l  よく知られている圧縮⾃自⼰己索索引
l  圧縮接尾辞配列列(CSA : Compressed Suffix Array)、
FM-index、LZ78-indexなど
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
圧縮索索引
l  SLPに基づく⾃自⼰己索索引 [Claude+, ’11]
l  Claude, F. ; Navarro, G. (2011) : Self-Indexed Grammar-Based
Compression. Fundam. Inform. 111(3): 313-337.
l  パターンP[1 .. m]が与えられた時に
l  Xi  →  XjXkと整数s  (1  ≦  s  ≦  m-‐‑‒1)に対して
Xjが表す文字列の接尾辞にP[1  ..  s]、
Xkが表す⽂文字列列の接頭辞にP[s+1  ..  m]
を持つ時に、XiはPの分割点を持つ変数。
l  出現回数の計算のために分割点を持つ全ての
変数を列列挙する。
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
Xj Xk
Xi
P[1 .. s]	
 P[s+1 .. m]	
分割点
圧縮索索引
l  各変数が表す文字列で辞書式ソート(逆向きに対しても同様に⾏行行う)
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
A  →  a
B  →  b  
C  →  c  
D  →  d  
R  →  r
U  →  AB
V  →  RA  
W  →  UV
X  →  CA
Y  →  DW
Z  →  WX
S  →  ZY	
辞書式順でソート	
X1  →  a  
X2  →  X1X6
X3  →  X2X12
X4  →  X3X8
X5  →  X4X10
X6  →  b
X7  →  c  
X8  →  X7X1  
X9  →  d  
X10→  X9X3  
X11→  r  
X12→  X11X1
w  =  abracadabra
a
b
c
d
r
ab
ra
abra
ca
dabra
abraca
abracadabra	
a
ab
abra
abraca
abracadabra
b
c
ca
d
dabra
r
ra
圧縮索索引
l  直⾏行行領領域探索索による分割点を持つ変数の検索
X1
X2
X3
X4
X5
X6
X7
X8
X9
X10
X11
X12
a
ab
abra
abraca
abracadabra
b
c
ca
d
dabra
r
ra
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12
X1 X2
X8
X4 X5
X12
X3 X4
X10
X5
X6
X2 X3
X7 X8
X9 X10
X11 X12
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
X3  →  X2X12
正向き順	
逆
向
順
圧縮索索引
l  検索パターン= “br”の場合、X3が”b”と”r”の分割点を持つ。
X1
X2
X3
X4
X5
X6
X7
X8
X9
X10
X11
X12
a
ab
abra
abraca
abracadabra
b
c
ca
d
dabra
r
ra
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12
X1 X2
X8
X4 X5
X12
X3 X4
X10
X5
X6
X2 X3
X7 X8
X9 X10
X11 X12
接頭辞“r”	
接尾辞“b”	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
圧縮索索引
l  報告された変数の出現回数をカウントする。
l  DAG表現で分割点を持つ変数から根までの到達可能な
パス(逆向き)の数をカウントする。
l  例)X3からX5へは2通りの
パスがあるので構⽂文⽊木での
X3の出現回数は2。
X5	
X4	
 X10	
X3	
 X8	
X2	
 X12	
X1	
 X6	
a	
 b	
X11	
X7	
X9	
r	
c	
d	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
圧縮索索引
l  パターンP[1  ..  m]の出現回数の計算時間
l  パターンPの可能な分割点(m-1通り)に対して以下を実⾏行行する。
l  接頭辞 / 接尾辞の範囲の計算は変数を辞書順に並べた配列列を⽤用意、
変数の接頭辞 / 接尾辞を部分的に展開しながら⼆二分探索索を⾏行行う。
‒  O(mlog  g  +  h)時間, hは構⽂文⽊木の最⼤大の⾼高さ。
l  直⾏行行領領域探索索はウェーブレット⽊木を使って効率率率的に計算可能。
‒  O(log  g  +  k)時間, k = 指定領領域に含まれる報告点数。
‒  詳しくは「ウェーブレット⽊木の世界」をご参照ください。
‒  http://research.preferred.jp/2013/01/wavelettree_world/
l  分割点を持つ変数Xiの出現回数の計算
‒  O(Xiの出現回数  ×  h)時間
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
圧縮索索引
l  特徴
l  出現回数の他にも位置報告/部分⽂文字列列復復元をサポート。
l  任意の⽂文法圧縮テキストを索索引構造に変換可能。
l  簡潔データ構造を利利⽤用することでコンパクトな領領域で実装可能。
l  改良良版 [Claude+ ’12] では検索索時間が構⽂文⽊木の⾼高さに依存しない。
l  応⽤用
l  ゲノムデータ集合のn-‐‑‒gram索索引  [Claude+  ʼ’10c]
l  バージョン管理された文書集合に対する⽂文書列列挙 [Claude+ ’13]
l  その他の⽂文法圧縮に関係する索索引構造
l  ESP-index [Maruyama+ ’11]
l  Balanced SLP+LZ77-index [Gagie+ ’12]
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
⽂文法圧縮に基づく圧縮データ構造
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
圧縮データ構造
l  圧縮データ構造(再)
l  ⽂文字列列、⽊木、グラフなどのデータ構造を圧縮しつつ、
全体を復復元せずに直接⾼高速な操作が⾏行行えるデータ構造
l  省省メモリ化によるデータ処理理の⾼高速化
l  CPU/メモリのキャッシュに乗りやすい
l  巨⼤大なデータでも⼀一台のマシンで処理理できる
10110111011000000
簡潔表現(LOUDS)
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
ポインタ表現
文法圧縮で

更に小さく!
圧縮データ構造
l  ⽂文法圧縮を利利⽤用した圧縮データ構造
l  ランダムアクセス可能な圧縮⽂文字列列
l  [Bille+ ’11]; [Maruyama+ ’13b]
l  完備索索引付辞書
l  [Navarro+ ’11]
l  ラベル付き順序木
l  [Lohrey+ ’11]
l  グラフ  (ウェブデータ)
l  [Claude+ ’10a, ’10b]
l  キーワード辞書
l  [Brisaboa+ ’11]
l  圧縮接尾辞配列列
l  [González+ ’07]    などなど
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
ランダムアクセス可能な圧縮⽂文字列列
l  ⽬目的
l  既に圧縮されているデータの任意の1⽂文字(または部分⽂文字列列)
のみを⾼高速に参照したい。
l  これができるとテキスト等に限らず、
データ構造を圧縮したまま扱うことができる。
l  実⽤用的な研究成果
l  [Brisaboa+ ’09]
l  DAC: Directly Addressable Codes
l  dag_vector (implemented by Okanohara, D.)
l  [Kreft+ ’10]
l  LZ-End, LZ-Begin
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
ランダムアクセス可能な圧縮⽂文字列列
l  普通の解決策
l  ⽅方法1
l  予めデータを複数ブロックに分割して圧縮しておいて、
各データの先頭位置を索索引として保持。
l  問題点
‒  細かく分割すると圧縮率率率が低下する。索索引が⼤大きくなる。
‒  ⼤大きな単位で分割すると問い合わせ時間が⻑⾧長くなる。
l  ⽅方法2
l  復復元開始位置をサンプリングした索索引を持っておく。
l  復復元開始位置さえ分かれば部分復復元できる場合に有効(BW系など)
l  索索引領領域とアクセス速度度のトレードオフ。
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
SLPに対するランダムアクセス
l  ⼆二分⽊木の探索索を模倣した簡単な⽅方法
l  各規則をランダムアクセス可能な状態で持つ。
l  前処理理で変数の展開⻑⾧長を計算しておく。
X1	
1	
 0	
X1	
1	
 0	
X1	
1	
 0	
X1	
1	
 0	
X1	
1	
 0	
1	
 1	
 1	
X2	
 X2	
X2	
X3	
 X3	
X4	
X5	
(13)
(8)
(5)
(3)
(2)
(2)
1        2          3        4          5        6        7        8        9        10    11      12      13	
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
(*)簡単のためSLPからX→aの規則を除去	
X1  →  1  0
X2  →  X1  1  
X3  →  X2  X1  
X4  →  X3  X2  
X5  →  X4  X3
(2)
(3)
(5)
(8)
(13)
展開長
SLPに対するランダムアクセス
l  ⼆二分⽊木の探索索を模倣した簡単な⽅方法
l  開始規則から⽬目的の位置まで展開⻑⾧長を利利⽤用して
部分的な復復元を⾏行行う。
X1  →  1  0
X2  →  X1  1  
X3  →  X2  X1  
X4  →  X3  X2  
X5  →  X4  X3
(2)
(3)
(5)
(8)
(13)
X1	
1	
 0	
X1	
1	
 0	
X1	
1	
 0	
X1	
1	
 0	
X1	
1	
 0	
1	
 1	
 1	
X2	
 X2	
X2	
X3	
 X3	
X4	
X5	
(13)
(5)
(3)
(2)
(2)
1        2          3        4          5        6        7        8        9        10    11      12      13	
w[10…12]にアクセス
展開長
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
(8)
(*)簡単のためSLPからX→aの規則を除去
ランダムアクセス可能な圧縮⽂文字列列
l  ⽂文法圧縮の場合の問題点
l  計算時間がO(構⽂文⽊木の⾼高さ)に依存する
l  Re-‐‑‒Pairの場合、最悪時の⾼高さが抑えられないので問題
l  OCLA[Maruyama+,  ʼ’12]が⽣生成する⽂文法は⾼高さO(log  n)で抑えられる
l  バランスした構⽂文⽊木への変換アルゴリズム[Rytter  ʼ’03]
l  [Bille+  ʼ’11]は、構⽂文⽊木がバランスしていなくてもO(log  n)時間で
任意の⽂文字(部分⽂文字列列)を報告できるデータ構造を提案
l  [Maruyama+  ʼ’13]では、POSLP上でランダムアクセスと
データの末尾追加をサポートするデータ構造を提案
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
完備索索引付辞書
l  簡潔/圧縮データ構造を扱うためのキーツール
l  圧縮された⽂文字列列/⽊木/グラフ/⽂文字列列索索引構造などを	
  
直接扱うための最も基本的なデータ構造	
  
l  以下の書籍が詳しい実装まで書かれています。	
  
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
“日本語入力を支える技術”

徳永拓之著、技術評論社	
“高速文字列解析の世界”

岡野原大輔著、岩波出版
完備索索引付辞書
l  ビット⽂文字列列  B[1  ..  n],  B[i]  ∈{0,  1} に対して次の操作をサポート
l  Lookupc(B, i) : B[i]を返す
l  Rankc(B, i) : B[1 .. i]に含まれる c の数
l  Selectc(B, i) : Bに現れる  i 番⽬目の  c の位置
l  ここではSLPによる完備索索引付辞書の実現⽅方法を解説	
  
B[1,  6]に含まれる1の数	
 3番目に現れる0の位置	
B  011101100
  i    123456789	
Rank1  (B,  6)=4 Select0  (B,  3)=8
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
完備索索引付辞書
l  SLPによる完備索索引付辞書の実現
l  Lookupc(B, i) は前述のランダムアクセスと同じ。
l  Selectc(B, i) / Rankc(B, i) の実現のために、展開長と各変数が表
す⽂文字列列に含まれる1の数(または0の数)を前処理理で求める。
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
X1  →  1  0
X2  →  X1  1  
X3  →  X2  X1  
X4  →  X3  X2  
X1	
1	
 0	
X1	
1	
 0	
X1	
1	
 0	
1	
 1	
X2	
 X2	
X3	
X4	
展開⻑⾧長L        2        3      5        8  
変数Xi      X1  X2  X3  X4	
1の数N        1        2      3        5  
完備索索引付辞書
l  Select1(B,  i)の計算
l  1の数Nを参照することで、根から  i  番⽬目の1までのパスを辿る。
l  辿ってきたパスよりも左側に出現する変数の展開⻑⾧長Nを参照する
ことで対象となる1の位置を計算する。
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
X1  →  1  0
X2  →  X1  1  
X3  →  X2  X1  
X4  →  X3  X2  
展開⻑⾧長L        2        3      5        8  
変数Xi        X1  X2    X3    X4	
X1	
1	
 0	
X1	
1	
 0	
X1	
1	
 0	
1	
 1	
X2	
 X2	
X3	
X4	
1の数N        1        2      3        5  
(3)
(2)
(1)
(2)
(3)
Select1  (B,  3)  =  L[2]  +  1  =  4
完備索索引付辞書
l  Rank1(B,  i)の計算
l  Lookupと同様に展開⻑⾧長Lを使って、根からB[i]までのパスを辿る。
l  辿ってきたパスよりも左側に現れる変数の1の数Nを合計し、
B[1  ..  i]に含まれる1の数を計算する。
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)	
X1  →  1  0
X2  →  X1  1  
X3  →  X2  X1  
X4  →  X3  X2  
X1	
1	
 0	
X1	
1	
 0	
X1	
1	
 0	
1	
 1	
X2	
 X2	
X3	
X4	
(2)
 (3)
(5)
(3)
(2)
Rank1  (B,  4)  =  N[2]  +  1  =  3
展開⻑⾧長L        2        3      5        8  
変数Xi        X1  X2    X3    X4	
1の数N        1        2      3        5  
完備索索引付辞書
l  Select0(B,  i)とRank0(B,  i)の計算
l  変数Xiの0の数=L[i]  –  N[i]。
l  c=1の場合と同様に計算できる。
l  計算時間
l  ランダムアクセス同様に構文木の⾼高さに依存
l  Re-Pairによる完備索索引付辞書の実⽤用的な実装  [Navarro+ ’11]
l  ⼀一般のアルファベット⽂文字に対するRank/Select操作まで拡張
l  ⽂文書配列列(⽂文書列列挙問題)を効率率率よく圧縮して扱えることを実験
的に⽰示した。
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
まとめ
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
まとめ
l  ⽂文法変換アルゴリズム
l  Re-Pairが主流流、OLCAも実⽤用的
l  繰り返し部分を多く含む冗⻑⾧長性の⾼高いデータに強い
l  ⽂文法圧縮テキスト上でのパターン検索索
l  圧縮率率率に⽐比例例した照合型検索索の⾼高速化
l  ⽂文法圧縮ベースの省省スペースな索索引構造
l  ⽂文法圧縮による圧縮データ構造
l  簡潔データ構造などに含まれるデータ特有の冗⻑⾧長性を
更更に圧縮する⽬目的で使われることが多い
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
公開ソフトウェア
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
公開ソフトウェア
l  Re-Pair [Larsson+ ’99]
l  http://ihome.cuhk.edu.hk/~b126594/ja/restore.html
l  https://code.google.com/p/re-pair/
l  http://www.dcc.uchile.cl/~gnavarro/software/
l  Re-Pairに基づくラベル付き順序⽊木の圧縮データ構造 [Lohrey+ ’11]
l  https://code.google.com/p/treerepair/
l  Re-Pairに基づくウェブグラフの圧縮データ構造 [Claude+ ’10b]
l  http://webgraphs.recoded.cl/index.php?section=rpgraph
l  OLCA [Maruyama+ ’10]
l  https://code.google.com/p/lcacomp/
l  Sequitur [Nevill-Manning+ ’97]
l  http://www.sequitur.info/
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
参考⽂文献
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
参考⽂文献
[Amir+ ’92] "Efficient Two-Dimensional Compressed Matching", DCC.
[Amir+ ’96] "Let Sleeping Files Lie: Pattern Matching in Z-Compressed Files", J. Comput. Syst.
Sci.
[Amir+ ’97] "Optimal Two-Dimensional Compressed Matching", J. Algorithms.
[Apostlico+ ’98] “Some Theory and Practice of Greedy Off-Line Textual Substitution”, DCC.
[Bille+ ’11] “Random Access to Grammar-Compressed Strings”, SODA.
[Brisaboa+ ’09] "Directly Addressable Variable-Length Codes", SPIRE.
[Brisaboa+ ’11] “Compressed String Dictionaries”, SEA.
[Charikar+ ’05] "The Smallest Grammar Problem", IEEE Transactions on Information Theory.
[Cégielski+ ’06] “Window Subsequence Problems for Compressed Texts”, CSR.
[Claude+ ’10a] “Fast and Compact Web Graph Representations”, TWEB.
[Claude+ ’10b] “Extended Compact Web Graph Representations”, Algorithms and Applications.
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
参考⽂文献
[Claude+ ’10c] "Compressed Q-gram Indexing for Highly Repetitive Biological Sequences",
BIBE.
[Claude+ ’11] "Self-Indexed Grammar-Based Compression", Fundam. Inform.
[Claude+ ’12] “Improved Grammar-Based Compressed Indexes”, SPIRE.
[Claude+ ’13] "Document Listing on Versioned Documents", SPIRE.
[Eilam-Tzoreff+ ’88] "Matching Patterns in Strings Subject to Multi-Linear Transformations",
Theor. Comput. Sci.
[Gagie+ ’10] "Grammar-Based Compression in a Streaming Model”, LATA.
[Gagie+ ’12] “A Faster Grammar-Based Self-index”, LATA.
[Gawrychowski ’11a] “Pattern Matching in Lempel-Ziv Compressed Strings: Fast, Simple, and
Deterministic”, ESA.
[Gawrychowski ’11b] “Optimal Pattern Matching in LZW Compressed Strings”, SODA.
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
参考⽂文献
[González+ ’07] "Compressed Text Indexes with Fast Locate", CPM.
[Hermelin+ ’09] "A Unified Algorithm for Accelerating Edit-Distance Computation via Text-
Compression", STACS.
[Hermelin+ ’13] "Unified Compression-Based Acceleration of Edit-Distance Computation",
Algorithmica.
[Inenaga+ ’12] “Finding Characteristic Substrings from Compressed Texts”, Int. J. Found.
Comput. Sci.
[Jez ’13] “Approximation of Grammar-Based Compression via Recompression”, CPM.
[Kärkkäinen+ ’00] "Approximate String Matching over Ziv-Lempel Compressed Text", CPM.
[Karpinski+ ’97] “An Efficient Pattern-Matching Algorithm for Strings with Short Descriptions”,
Nord. J. Comput.
[Kida+ ’98] "Multiple Pattern Matching in LZW Compressed Text", DCC.
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
参考⽂文献
[Kida+ ’99] “Shift-And Approach to Pattern Matching in LZW Compressed Text”, CPM.
[Kida+ ’03] “Collage System: a Unifying Framework for Compressed Pattern Matching”, Theor.
Comput. Sci.
[Kieffer+ ’00] “Grammar-Based Codes: A New Class of Universal Lossless Source Codes”, IEEE
Trans. Inform. Theory.
[Klein+ ’00] “A New Compression Method for Compressed Matching”, DCC.
[Klein+ ’01] “Pattern Matching in Huffman Encoded Texts”, DCC.
[Kreft+ ’10] “LZ77-like Compression with Fast Random Access”, DCC.
[Larsson+ ’99] “Offline Dictionary-Based Compression”, DCC.
[Lifshits ’07] “Processing Compressed Texts: A Tractability Border”, CPM
[Lohrey+ ’11] "Tree Structure Compression with RePair", DCC.
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
参考⽂文献
[Maruyama+ ’10] "Context-Sensitive Grammar Transform: Compression and Pattern Matching",
IEICE Transactions.
[Maruyama+ ’12] "An Online Algorithm for Lightweight Grammar-Based Compression”,
Algorithms.
[Maruyama+ ’13a] "ESP-Index: A Compressed Index Structure Based on Edit-Sensitive
Parsing”, J. Discrete Algorithms.
[Maruyama+ ’13b] “Fully-Online Grammar Compression”, SPIRE.
[Maruyama+ ’14] “Fully-Online Grammar Compression in Constant Space”, DCC.
[Matsubara+ ’09] “Efficient algorithms to compute compressed longest common substrings
and compressed palindromes”, Theor. Comput. Sci.
[Matsumoto+ ’09] “A Run-Time Efficient Implementation of Compressed Pattern Matching
Automata”, Int. J. Found. Comput. Sci.
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
参考⽂文献
[Miyazaki+ ’97] “An Improved Pattern Matching Algorithm for Strings in Terms of Straight-Line
Programs”, CPM.
[Nakamura+ ’09] “Linear-Time Text Compression by Longest-First Substitution”, Algorithms.
[Navarro+ ’99] “A General Practical Approach to Pattern Matching over Ziv-Lempel Compressed
Text”, CPM.
[Navarro+ ’04] "Practical and Flexible Pattern Matching over Ziv-Lempel Compressed Text",
Journal of Discrete Algorithms.
[Navarro+ ’07] "Compressed Full-Text Indexes", ACM Computing Surveys.
[Navarro+ ’11] “Practical Compressed Document Retrieval”, SEA.
[Navarro+ ’12] “Indexing Highly Repetitive Collection”, IWOCA.
[Nevill-Manning+ ‘94] "Compression by Induction of Hierarchical Grammars”, DCC.
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
参考⽂文献
[Nevill-Manning+ ’97] "Identifying Hierarchical Structure in Sequences: A Linear-Time
Algorithm", J. Artif. Intell. Res.
[Rautio+ ’02] “String Matching with Stopper Encoding and Code Splitting”, CPM.
[Rytter ’03] “Application of Lempel-Ziv Factorization to the Approximation of Grammar-Based
Compression”, Theor. Comput. Sci.
[Sakamoto+ ’04] "A Space-Saving Linear-Time Algorithm for Grammar-Based Compression",
SPIRE.
[Sakamoto+ ’09] "A Space-Saving Approximation Algorithm for Grammar-Based Compression"
IEICE Transactions.
[Shibata+ ’00] “Speeding Up Pattern Matching by Text Compression”, CIAC.
[Tabei+ ’13] “A Succinct Grammar Compression”, CPM.
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
参考⽂文献
[Tiskin ’08] “Semi-local String Comparison: Algorithmic Techniques and Applications",
Mathematics in Computer Science.
[Tiskin ’11] “Towards Approximate Matching in Compressed Strings: Local Subsequence
Recognition”, CSR.
[Wan+ ’07] "Block Merging for Off-line Compression", Journal of the American Society for
Information Science and Technology.
[Yamamoto+ ’11] “Faster Subsequence and Don't-Care Pattern Matching on Compressed
Texts”, CPM.
[Yoshida+ ’13] "A Variable-length-to-fixed-length Coding Method Using a Re-Pair Algorithm",
IPSJ Transactions on Databases.
言語処理学会 第 20 回年次大会 チュートリアル資料 (2014年3月)
Copyright © 2006-2014
Preferred Infrastructure All Right Reserved.

More Related Content

文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル)