接尾辞木と接尾辞配列 - 情報知識ネットワーク研究室 - 北海道大学

H16/10/19, 北大大学院情報科学研究科
情報知識ネットワーク特論(有村博紀)
情報知識ネットワーク特論
情報検索2:全文テキスト検索
有村博紀・喜田拓也
北海道大学大学院情報科学研究科
コンピュータサイエンス専攻
E-mail: {arim,kida}@ist.hokudai.ac.jp
1
H16/10/19, 北大大学院情報科学研究科
情報知識ネットワーク特論(有村博紀)
全文テキスト検索
Tries
Suffix Trees
Suffix Arrays
4
1
情報知識ネットワーク特論(有村博紀)
H16/10/19, 北大大学院情報科学研究科
フルテキストサーチ
„ 問題
z 入力:長い文字列(テキスト) T があらかじめ与
えられている.
z 出力:短い文字列(パターン)P を与えられたと
き,P がT に部分文字列として出現するような,
すべての位置を返せ.
„ 目標:
z テキスト長 |T| にできるだけ依存せず,
O(|P|)時間くらいで,答えを計算する
アルゴリズムを作りたい.
情報知識ネットワーク特論(有村博紀)
5
H16/10/19, 北大大学院情報科学研究科
情報検索技術
„ 情報検索の種類
z キーワード検索
z 全文テキスト検索
„ 情報検索モデル
z ブール式モデル (Boolean)
z ベクトル空間モデル (Vector space)
z 確率的モデル (Probabilistic)
z 文字列照合 (String Pattern Matching)
6
2
情報知識ネットワーク特論(有村博紀)
H16/10/19, 北大大学院情報科学研究科
全文テキスト検索
„ 全文テキスト検索 (full-text search)
z 任意の文字列 P を問合せとして受け取り,
z パターン P を部分文字列として含むすべての
文書(または出現位置)を答えとして返す.
z 転置ファイル索引では苦手
„ 実装方法
z 全文テキスト索引を用いる(今回).
z 文字列照合アルゴリズムを用いる (喜田先生)
7
情報知識ネットワーク特論(有村博紀)
H16/10/19, 北大大学院情報科学研究科
全文テキスト索引
„ 接尾辞索引
z 接尾辞木 (Suffix trees, McReight 1967)
z 接尾辞配列 (Suffix arrays, Manber & Myers
1990~)
z 圧縮接尾辞配列 (CSA, Compressed suffix
arrays, FM, Sadakane, 2000年代~)
z 接尾辞オートマトン (DAWG, Haussler et al. '80s,
Inenaga et al.)
8
3
情報知識ネットワーク特論(有村博紀)
H16/10/19, 北大大学院情報科学研究科
ウォーミングアップ
„ 文字列の辞書
z (数十文字から数百文字以上の)長い文字列の
集合 S を,効率よく計算機上に格納したい.
z 所属性をO(M)時間くらいで判定したい.
(Mは文字列Pの長さ)
z 二分探索?
z ハッシュ?
z 平衡木? B木
9
情報知識ネットワーク特論(有村博紀)
H16/10/19, 北大大学院情報科学研究科
トライ (Trie構造)
z 可変長文字列の集合を格納するための効率
よいデータ構造
z 長さMの文字列の所属をO(M)時間で判定
z いわゆるデジタル探索木
z 実装
• 各ノードは,文字と「子供へのポインタ」をもつ
• 枝分かれは,ハッシュまたはリストで実装
• 実装手法で速度がものすごく違う
z 出典:
• Edward Fredkin, "Trie memory", CACM (1960)
• D. E. Knuth, The Art of Computer Programming
10
4
情報知識ネットワーク特論(有村博紀)
H16/10/19, 北大大学院情報科学研究科
トライ
„ 次の文字列集合を格納するトライを作れ
z archive
z ear
z architechture
z butter
z back
z cutter
z cat
z cute
z dog
z bad
z bear
„ 文字列質問:dog, duck, bear, but
„ 接頭辞質問:but, cut
情報知識ネットワーク特論(有村博紀)
11
H16/10/19, 北大大学院情報科学研究科
フルテキストサーチ
„ 問題
z 入力:長い文字列(テキスト) T があらかじめ与
えられている.
z 出力:短い文字列(パターン)P を与えられたと
き,P がT に部分文字列として出現するような,
すべての位置を返せ.
„ 目標:
z テキスト長 |T| にできるだけ依存せず,
O(|P|)時間くらいで,答えを計算する
アルゴリズムを作りたい.
12
5
H16/10/19, 北大大学院情報科学研究科
情報知識ネットワーク特論(有村博紀)
接尾辞木 (Suffix tree)
„ 与えられたテキストTのすべての部分語を
効率よく格納するデータ構造
z Tのすべての接尾辞から作られた圧縮トライ
z O(N)領域で格納可能 (テキストNバイト+接尾辞木
16Nバイト)
z 与えられた長さMの文字列Pのテキスト中の出現を,
O(M)時間でみつけられる.
„ 応用
z 多種多様な文字列処理の高速化
z ゲノムや自然言語処理
13
H16/10/19, 北大大学院情報科学研究科
情報知識ネットワーク特論(有村博紀)
Suffix Tree (接尾辞木)
(1976, McCreight)
Text
1
2
3
4
5
6
7
8
9
a
b
c
a
b
b
c
a
$
a
b
b c
c a
b
a
b
$
c
a
$
4
1
$
8
b
Suffix tree
c
a
c
a
b
c
b
a
b $
$
c
a
$
5
2
$
b $
b
c
a
$
6
3
7
9
14
6
H16/10/19, 北大大学院情報科学研究科
情報知識ネットワーク特論(有村博紀)
接尾辞配列:基本アイディア
„ 接尾辞(Suffix)
„ 重要な性質
z 部分文字列は,接尾辞の接頭辞
Suffix of the text
SEMI INFINITE STRINGS ARE ALSO CALLED SISTRI
STRINGS
Substring
„ すべての接尾辞を辞書順でソートする
情報知識ネットワーク特論(有村博紀)
15
H16/10/19, 北大大学院情報科学研究科
接尾辞木 (Suffix tree)
„ 接尾辞木のテキストからの構築
z 単純な方法では,O(N2)時間が必要
• 長さO(N)のN本の接尾辞をトライに挿入するから.
z すごいこと: 接尾辞木をO(N)時間で作ること
ができる (Weiner 1973, McCreight 1976
z 作り方: 口頭で.
„ 接尾辞木の問題点
z 実装では,接尾辞木16Nバイトのスペースが大きい.
z 構築アルゴリズムが複雑
16
7
H16/10/19, 北大大学院情報科学研究科
情報知識ネットワーク特論(有村博紀)
接尾辞配列 (Suffix array)
„ 辞書順にソートした接尾辞の先頭ポインタを左か
ら右に格納した1次元の整数配列
z 接尾辞木と同じ情報をもち,O(N)領域で格納.
接尾辞木より少ないバイト数で実現可能
• 1N + 4Nバイト( 32ビットメモリ空間)
z 1980年代末に,Gonnet & Tompa のグループと
Manber & Meyer のグループが独立に発見.
„ 計算効率
z 文字列ソートによりO(N log N)時間で構築できる
z 文字列検索が二分探索でO(M log N)時間で可能
17
H16/10/19, 北大大学院情報科学研究科
情報知識ネットワーク特論(有村博紀)
Suffix array: 接尾辞をならべる
Text S
1
2
3
4
5
6
7
8
9
a
b
c
a
b
b
c
a
$
c
c
c
c
c
c
c
a
a
a
a
a
a
a
a
S9
$
$
$
$
$
$
$
$
$
Suffixes
S1
a
S2
b
b
S3
c
c
c
S4
a
a
a
a
S5
b
b
b
b
b
S6
b
b
b
b
b
b
S7
S8
18
8
H16/10/19, 北大大学院情報科学研究科
情報知識ネットワーク特論(有村博紀)
Suffix array: 先頭をそろえて
Text T
1
2
3
4
5
6
7
8
9
a
b
c
a
b
b
c
a
$
c
a
$
a
$
$
Suffixes
S1
S2
S3
S4
S5
S6
S7
S8
S9
a
b
c
a
b
b
c
a
$
b
c
a
b
b
c
a
$
c
a
b
b
c
a
$
a
b
b
c
a
$
b
b
c
a
$
b
c
a
$
19
H16/10/19, 北大大学院情報科学研究科
情報知識ネットワーク特論(有村博紀)
Suffix array: 辞書順にソート
1
2
3
4
5
6
7
8
9
a
b
c
a
b
b
c
a
$
a
b
b
c
a
$
a
a
b
$
c
a
b
b
c
a
$
b
b
b
b
c
c
a
c
a
a
$
b
$
b
c
a
$
b
c
a
$
Text T
Suffixes
S4
S1
S8
S5
S6
S2
S7
S3
S9
c
c
$
a
a
$
b
20
9
H16/10/19, 北大大学院情報科学研究科
情報知識ネットワーク特論(有村博紀)
Suffix array: 接尾辞のポインタを格納
Text T
1
2
3
4
5
6
7
8
9
a
b
c
a
b
b
c
a
$
3
4
5
6
7
8
9
4
1
8
5
6
2
7
3
9
S1
S8
S5
S6
S2
S7
S3
S9
a
a
a
b
b
b
c
c
$
b
b
$
b
c
c
a
a
b
c
c
a
a
$
b
c
a
a
$
b
a
b
$
21
c
情報知識ネットワーク特論(有村博紀)
b
2
b
1
S4
Suffix Array SA
H16/10/19, 北大大学院情報科学研究科
接尾辞配列 (Suffix array)
„ 文字列 P の検索
z 接尾辞配列上で2分探索を行う
z O(M log N)時間で長さMの文字列Pの検索が可能
z テキストへランダムアクセスをするので,ディスク上の
索引には向かない.
„ 接尾辞配列の構築
z 文字列のソーティング (MM 1990,Sadakane 1999)
„ 最近の研究
z ゲノムや自然言語処理への応用
z 圧縮接尾辞配列 (Ferragina et al.; Sadakane,
2000-)
22
10
H16/10/19, 北大大学院情報科学研究科
情報知識ネットワーク特論(有村博紀)
Suffix tree & array
b
b c $
c a
b
a
b 8
$
c
a
4
$
1
b
3
4
5
6
7
8
9
b b c a $
(1990, Manber etal.)
zCompactly
represent
all the substrings
represents
all the
in O(n) space.
substrings
with a 1-dimensional
integer array.
c
a
c
a
b
c
a
b
$
b $
c
5 a
6
$
2
2
„ Suffix
Suffix tree
array
(1976, McCreight)
a
1
a b c a
Data structures for efficiently storing all
of O(n2) substrings in O(n) space
Suffix tree
Text
$
1
3
$
7
3
4
5
6
7
8
9
4 1 8 5 2 6 3 7 9
„ Problems
9
b
b
c
a
$
2
az
bz
b
cz
a
$
b c c $
aNotaspace
b b
efficient.
c c a a
bDynamic
$ b reconstruction
cis not easy.
c a a b $
aNot suitable
a b for$ b
c
bimplementation
$ b on the
a
bsecondarycstorage.
a
$
c
$
a
$
23
情報知識ネットワーク特論(有村博紀)
H16/10/19, 北大大学院情報科学研究科
他の全文テキスト検索手法
„ 文字列パターン照合
前処理として,与えられた問合せ文字列(パターン)Pを「コンパ
イル」して,パターン照合機械 MPをつくる.
z パターン照合機械MPを,入力テキストT上で逐次的に走らせて,
T中のPの出現をすべて検出する.
z KMP, BM, AC, etc. etc.
z
„ 特徴:
長所: あらかじめ索引をつくる必要がないため,更新が頻繁な
テキストに向く.
z 長所: 柔軟な/高度な検索が可能
z 短所: テキスト長O(N)だけの時間はかかる.
z
„ 演習:
z
文字列パターン照合は,本当に大規模応用には向かないか?
24
11
情報知識ネットワーク特論(有村博紀)
H16/10/19, 北大大学院情報科学研究科
まとめ
„ 情報検索
z 蓄積された大量のデータから,利用者が
ほしい情報をとりだすこと
z データ=文書集合
25
情報知識ネットワーク特論(有村博紀)
H16/10/19, 北大大学院情報科学研究科
まとめ:情報検索技術
„ 情報検索の種類
z キーワード検索
z 全文テキスト検索
„ 索引構造(ファイル構造)
z 転置ファイル(Inverted files)
z トライ (Trie)
z 接尾辞木 (Suffix trees)
z 接尾辞配列 (Suffix arrays)
„ その他の話題 (PageRank, 協調フィルタリング)
26
12