全文検索のためのデータ構造と 構成の効率について

Slides:



Advertisements
Similar presentations
R Basics 2013/12/09 Yamada. 今日の方針 Today’s plan テキスト・文字列を扱うにあたっての用 語の理解をすることの方が、 R での操作を 見るより有意義と思われるので、そちら を優先 Learning terms on text/strings is more.
Advertisements

A Simple Constant Time Enumeration Algorithm for Free Trees 中野 眞一 宇野 毅明 群馬大学 情報学研究所 2003 年 9 月 19 日 アルゴリズム研究会.
論理回路 第 11 回
簡潔データ構造 国立情報学研究所 定兼 邦彦.
透過的データ圧縮 Transparent Data Compression
到着時刻と燃料消費量を同時に最適化する船速・航路計画
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
ジャパンリンクセンター(JaLC)のご紹介
簡潔データ構造 国立情報学研究所 定兼 邦彦.
離散システム特論 整列(sorting)アルゴリズム 2.
Lexical Permutation Sorting Algorithm
第11回 整列 ~ シェルソート,クイックソート ~
On the Enumeration of Colored Trees
算法数理工学 第1回 定兼 邦彦.
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
基本情報技術概論(第4回) 埼玉大学 理工学研究科 堀山 貴史
第10回 ソート(1):単純なソートアルゴリズム
検索エンジンに関して The Anatomy of a Large-Scale Hypertextual Web Search Engine
データ構造と アルゴリズム 第二回 知能情報学部 新田直也.
東京大学大学院情報理工学系研究科 数理情報学専攻 定兼 邦彦 2016年4月7日
データ構造とアルゴリズム 分割統治 ~ マージソート~.
岩井 儀雄 コンピュータ基礎演習  ー探索、整列ー 岩井 儀雄
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
データ構造とアルゴリズム論 第2章 配列(構造)を使った処理
Progressive User Profiling in Recommendation Systems
IIR輪講復習 #5 Index compression
データ構造と アルゴリズム 第十一回 理工学部 情報システム工学科 新田直也.
第11回 整列 ~ シェルソート,クイックソート ~
日本語解析済みコーパス管理ツール 「茶器」
二分探索木によるサーチ.
データ構造とプログラミング技法 (第10回) ー文字列照合(KMP法、BM法)ー.
IIR輪講復習 #4 Index construction
2009/10/16 いろいろなデータ構造 第3講: 平成21年10月16日 (金) 4限 E252教室 コンピュータアルゴリズム.
IIR輪講復習 #1 Boolean retrieval
k 個のミスマッチを許した点集合マッチング・アルゴリズム
情報工学概論 (アルゴリズムとデータ構造)
喜田 拓也,竹田 正幸,篠原 歩 九州大学大学院システム情報科学府 情報理学専攻
正規分布における ベーテ近似の解析解と数値解 東京工業大学総合理工学研究科 知能システム科学専攻 渡辺研究室    西山 悠, 渡辺澄夫.
Fast Pattern Matching Algorithms in Compressed Texts
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
Proceedings of the Third South American Workshop on String Processing.
ソートアルゴリズムの種類 選択ソート (selection sort) バブルソート (bubble sort)
Jh NAHI 横田 理央 (東京工業大学) Hierarchical low-rank approximation methods on distributed memory and GPUs 背景  H行列、H2行列、HSS行列などの階層的低ランク近似法はO(N2)の要素を持つ密行列をO(N)の要素を持つ行列に圧縮することができる。圧縮された行列を用いることで、行列積、LU分解、固有値計算をO(NlogN)で行うことができるため、従来密行列の解法が用いられてきた分野では階層的低ランク近似法
IIR輪講復習 #3 Dictionaries and tolerant retrieval (前半)
情報工学概論 (アルゴリズムとデータ構造)
クイックソート.
半構造化テキストに対する 文字列照合アルゴリズム
アルゴリズムとプログラミング (Algorithms and Programming)
先進的計算基盤システムシンポジウム SACSIS2007併設企画 マルチコアプログラミングコンテスト 「Cellスピードチャレンジ2007」
プログラミング 4 整列アルゴリズム.
アルゴリズムとデータ構造1 2005年6月24日
2009/10/23 整列アルゴリズム (1) 第4講: 平成21年10月23日 (金) 4限 E252教室 コンピュータアルゴリズム.
データ圧縮技術による文字列照合処理の高速化に関する研究
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
プログラミング演習Ⅲ- Sorting Quick Sort and Merge Sort
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
Data Clustering: A Review
短い部分文字列の ミスマッチトレランスを 高速計算するアルゴリズム
阿久津 達也 京都大学 化学研究所 バイオインフォマティクスセンター
構造的類似性を持つ半構造化文書における頻度分析
全体ミーティング (5/23) 村田雅之.
アルゴリズムとプログラミング (Algorithms and Programming)
Mondriaan Memory Protection の調査
ソートのプログラムの流れ 配列の中身を小さい順に並び替える a[1],a[2],…a[n]の値を順に出力する
蓄積されたオブジェクトの動作履歴を用いた 実行履歴削減手法の提案
ヒープソート.
テキストデータベース.
グラフの列挙 中野 眞一    (群馬大学) 2019/9/14 列挙学校.
Presentation transcript:

全文検索のためのデータ構造と 構成の効率について 定兼 邦彦 東京大学理学系研究科 情報科学専攻 http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/fulltext.ppt

内容 全文検索のためのデータ構造の比較 検索時間 ディスク容量 更新時間 検索精度

背景 電子化された文書の普及 大量のテキストから高速に検索したい WWW, メール 新聞, 辞書, 書籍 ゲノムデータベース もれがないようにしたい 必要なもののみ欲しい

全文検索のアルゴリズム sequential search signature file [Moders 49] 各文書がどのキーワードを含むか inverted file [Bleir 67] 各キーワードがどこにあるか digital tree (trie) 任意のキーワード

Inverted fileのデータ構造 キーワードごとに出現文書,位置を記憶 sorted array prefix B-tree trie キーワードの出現位置のリスト prefix B-tree 更新が簡単 trie prefixをコンパクトに表現

Word indexes vs. Full-text indexes 決まったキーワードのみ サイズが小さい 構成が早い データ構造 sorted array prefix B-tree trie 任意のキーワード サイズが大きい 構成が遅い データ構造 suffix array String B-tree suffix tree

Full-text indexのデータ構造 suffix tree [Weiner 73] suffix array [Manber, Myers 93] String B-tree[Ferragina, Grossi 95]

Suffix tree a b $ abab$ 文字列の全てのsuffix(接尾辞)を表すcompacted trie メモリ上では線形時間で構成可能 サイズが大きい unbalanced abab$ a b $

Suffix array 文字列の全てのsuffixのポインタを辞書順にソートした配列 省スペース(5N) 更新が遅い abab$ 1 2 ab$ 3 b$ 4

String B-tree abab$ suffixのポインタをB-treeで表したもの 検索時のdiskアクセスが少ない(blind tree) 最悪時の性能が良い 挿入、削除が容易 サイズ: 13N 1から作るのは遅い abab$

I/O complexity 検索のI/O complexity 更新のI/O complexity 構成のI/O complexity

検索のI/O complexity Suffix tree String B-tree Suffix array Nに依存しない p : キーワード長 occ : 答えの数 N : 文字列長

更新のI/O complexity Suffix tree String B-tree Suffix array Nに依存しない p : キーワード長 N : 文字列長 B : ディスクページサイズ

構成のI/O complexity suffix tree (optimal) suffix array String B-tree N : 文字列長 M : メモリサイズ B : ディスクページサイズ

構成アルゴリズム Suffix treeの構成 メモリ上 ディスク上 Suffix arrayの構成

Suffix treeの構成 メモリ上 (線形時間) ディスク上 Weiner 73 McCreight 76 Ukkonen 95 Farach 97 divide and conquer, batch処理 ディスク上 Farach, Ferragina, Muthukrishnan 98

Disk上でのsuffix tree構成 I/O アルゴリズムをsortingとscanで表現 数のsortingと同じI/O complexity (optimal) I/O

Sorting I/O complexity treeのノードのlcaをK個 (K個のrange minima) tree T のEuler Tour ET(T)とノードの深さ 文字列中の任意の位置のK文字 treeの各ノードの子孫でmarkされているもの uncompacted trieのmerge suffix treeの全てのsuffix link suffix treeの構成

Block vs. Random I/O 2-way merge M/B-way merge block I/O random I/O 回のsorting 回のI/Oを必要とする。 アルゴリズムは

Disk上のsuffix treeの問題点 treeをたどる際にrandom accessが生じる 古典的なアルゴリズムは適さない  (divide and conquerを用いる)

Algorithm outline b a b a $ $ Even tree Odd tree $ a b $ Odd treeを作る mergeする a b $ $

Building the odd tree $ A a b $ abab$ AA$ $ 新しい文字列のsuffix treeを再帰的に作る 文字を元に戻す $ A a b $ abab$ AA$ $

Building the even tree b a b a abab$ $ $ Even tree 偶数番目のsuffixを辞書順にradix sortする (先頭の文字, 奇数番目のsuffixの辞書順) 隣り合うsuffix間のlcpを求める compacted trieを作る b $ a Even tree a b $ 1 2 3 2: (b,ab$) = (b,2) 4: (b,$) = (b,1) abab$ 2 4

Merging the odd and even trees anchor pairを見つける side tree pairに分割する pull nodeを見つける merge nodeを見つける TeとToをmergeする

Suffix arrayのメモリ上での構成 quick sort 文字列の比較なので非常に遅い ternary partitioning[Bentley, Sedgewick 97] 無駄な文字列比較が少ない 極端に遅くなることがある doubling algorithm Manber, Myers 93 Sadakane, Imai 98 多くの場合最速

Doubling algorithm Karp, Miller, Rosenberg 72 ディスク上の文字列ソート[Arge et al. 97] 長さ 1, 2, 4, … の部分文字列を数値に変換 log n 回の比較で文字列を区別できる

Suffix sorting by doubling (1/5) グループに番号をつける 各グループの中をsuffixの2文字目で分ける 番号を更新 (番号が異なる  先頭の2文字が異なる) 各グループの中をsuffixの3,4文字目で分ける グループの番号でソート 全てのsuffixの順序が決まるまで繰り返す 順序の決まっているグループはskipする

Suffix sorting by doubling (2/5) 3 3 6 1 10 11 1 6 11 6 V[I[i]+1] V[I[i]] 1 3 5 6 10 11 I[i] 13 2 11 3 12 6 1 4 7 10 5 8 9 $ beor be$ eorn e$ nott obeo orno otto obe$ rnot tobe ttob tobe tobeornottobe$ 先頭の2文字でソート

Suffix sorting by doubling (3/5) V[I[i]+2] 8 4 3 1 1 V[I[i]] 1 3 4 6 8 9 11 13 5 10 I[i] 13 2 11 12 3 6 1 10 4 7 5 9 8 $ beor be$ e$ eorn nott obeo obe$ orno otto rnot tobe tobe ttob tobeornottobe$ 先頭の4文字でソート

Suffix sorting by doubling (4/5) V[I[i]+4] 8 V[I[i]] 1 2 3 4 6 7 8 9 11 13 5 10 I[i] 13 11 2 12 3 6 10 1 4 7 5 9 8 $ be$ beor e$ eorn nott obe$ obeo orno otto rnot tobeor tobe$ ttob tobeornottobe$ 先頭の8文字でソート

Suffix sorting by doubling (5/5) V[I[i]] 1 2 3 4 6 7 8 9 11 12 13 5 10 I[i] 13 11 2 12 3 6 10 1 4 7 5 9 8 $ be$ beor e$ eorn nott obe$ obeo orno otto rnot tobeor tobe$ ttob tobeornottobe$ ソート終了

Suffix arrayのディスク上での構成 Gonnet, Baeza-Yates, Snider 92 diskはsequential accessのみ Crauser, Ferragina 98 doubling algorithm + discarding I/O I/O

Doubling algorithm + discarding 回の反復 M/B-way マージソートを用いる メモリ内と異なる点 すでにソートされている部分はスキップ

Word indexes vs. Full-text indexes

網羅性 word indexes full-text indexes 単語の先頭のみ 検索もれの可能性 全ての部分文字列 データ量は約1/7 (日本語, 英語とも) 検索もれの可能性 形態素解析が必要 DNA配列には使えない 全ての部分文字列 長いものを見つけるのが得意 検索結果にごみが入る 京都のつもりが東京都 ルパンのつもりがダブルパンチ はらだのつもりがはらだたしい AND検索で回避?

Full-text indexの利点・欠点 検索結果は文字列へのポインタ ポインタから文書番号への変換が必要 超高速grepとして利用できる サイズが大きい Full-text indexからword indexは構成可能 テキストを走査する 必要の無いindexに印をつける indexを走査し、印のついているものを削除

課題 検索結果のごみをなくす シソーラスの利用 構造化された文書からの検索 データの収集速度 AND検索? OR検索 見出しのみから検索など 元の文書を圧縮して送る word indexだけ送る

圧縮と検索の統合 Block sorting圧縮法[Burrows, Wheeler 94] suffix arrayに従い文字列を並べ替えてから圧縮 伸張時に文字列とsuffix arrayが復元される テキストを転送する際はBlock sortingで圧縮しておけば良い [Sadakane, Imai 98a]

謝辞 貴重なコメントをくださったNTTの原田昌紀氏、 中村隆幸氏に感謝いたします。

参考文献(1/3) [1] L.Arge, P.Ferragina, R.Grossi, and J.S. Vitter. On sorting strings in external memory. In ACM Symposium on Theory of Computing, pp. 540--548, 1997. [2] J.L. Bentley and R.Sedgewick. Fast algorithms for sorting and searching strings. In Proceedings of the 8th Annual ACM-SIAM Symposium on Discrete Algorithms, pp. 360--369, 1997. [3] M. Burrows and D. J. Wheeler. A Block-sorting Lossless Data Compression Algorithms. Technical Report 124, Digital SRC Research Report, 1994. [4] A.Crauser and P.Ferragina. External memory construction of full-text indexes. In DIMACS Workshop on External Memory Algorithms and/or Visualization, 1998. [5] M.Farach. Optimal Suffix Tree Construction with Large Alphabets. In 38th Symp. on Foundations of Computer Science, pp. 137--143, 1997. URL URL URL URL URL

参考文献(2/3) [6] P.Ferragina and R.Grossi. The String B-Tree: a new data structure for string search in external memory and its applications. Journal of the ACM, 1998. [7] G.H. Gonnet, R.Baeza-Yates, and T.Snider. New Indices for Text: PAT trees and PAT arrays. In W.Frakes and R.Baeza-Yates, editors, Information Retrieval: Algorithms and Data Structures, chapter5, pp. 66--82. Prentice-Hall, 1992. [8] R.M. Karp, R.E. Miller, and A.L. Rosenberg. Rapid identification of repeated patterns in strings, arrays and trees. In 4th ACM Symposium on Theory of Computing, pp. 125--136, 1972. [9] U.Manber and G.Myers. Suffix arrays: A New Method for On-Line String Searches. SIAM Journal on Computing, Vol.22, No.5, pp. 935--948, October 1993. URL URL

参考文献(3/3) [10] E.M. McCreight. A space-economical suffix tree construction algorithm. Journal of the ACM, Vol.23, No.12, pp. 262--272, 1976. [11] K.Sadakane and H.Imai. A Cooperative Distributed Text Database Management Method Unifying Search and Compression Based on the Burrows-Wheeler Transformation. In Proceedings of NewDB’98, 1998. [12] K.Sadakane and H.Imai. Constructing Suffix Arrays of Large Texts. In Proceedings of DEWS'98, 1998. [13] E.Ukkonen. On-line construction of suffix trees. Algorithmica, Vol.14, No.3, pp. 249--260, September 1995. [14] P.Weiner. Linear Pattern Matching Algorihms. In Proceedings of the 14th IEEE Symposium on Switching and Automata Theory, pp. 1--11, 1973. URL URL