Soumettre la recherche
Mettre en ligne
FM-indexによる全文検索
•
6 j'aime
•
10,721 vues
Sho IIZUKA
Suivre
FM-indexによる全文検索
Lire moins
Lire la suite
Logiciels
Signaler
Partager
Signaler
Partager
1 sur 18
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Active Learning 入門
Active Learning 入門
Shuyo Nakatani
[DL輪読会]1次近似系MAMLとその理論的背景
[DL輪読会]1次近似系MAMLとその理論的背景
Deep Learning JP
ブラックボックス最適化とその応用
ブラックボックス最適化とその応用
gree_tech
充足可能性問題のいろいろ
充足可能性問題のいろいろ
Hiroshi Yamashita
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
直交領域探索
直交領域探索
okuraofvegetable
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
sleepy_yoshi
【解説】 一般逆行列
【解説】 一般逆行列
Kenjiro Sugimoto
Contenu connexe
Tendances
全力解説!Transformer
全力解説!Transformer
Arithmer Inc.
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
Yusuke Fujimoto
能動学習セミナー
能動学習セミナー
Preferred Networks
[DL輪読会]Objects as Points
[DL輪読会]Objects as Points
Deep Learning JP
混合整数ブラックボックス最適化に向けたCMA-ESの改良 / Optuna Meetup #2
混合整数ブラックボックス最適化に向けたCMA-ESの改良 / Optuna Meetup #2
RHamano
CuPy解説
CuPy解説
Ryosuke Okuta
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
モデルアーキテクチャ観点からの高速化2019
モデルアーキテクチャ観点からの高速化2019
Yusuke Uchida
大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法
Shunji Umetani
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
Takuya Akiba
時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?
Fumihiko Takahashi
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
Preferred Networks
最適化超入門
最適化超入門
Takami Sato
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
Yuta Kikuchi
目指せグラフマスター
目指せグラフマスター
HCPC: 北海道大学競技プログラミングサークル
Crfと素性テンプレート
Crfと素性テンプレート
Kei Uchiumi
時系列分析による異常検知入門
時系列分析による異常検知入門
Yohei Sato
Tendances
(20)
全力解説!Transformer
全力解説!Transformer
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
能動学習セミナー
能動学習セミナー
[DL輪読会]Objects as Points
[DL輪読会]Objects as Points
混合整数ブラックボックス最適化に向けたCMA-ESの改良 / Optuna Meetup #2
混合整数ブラックボックス最適化に向けたCMA-ESの改良 / Optuna Meetup #2
CuPy解説
CuPy解説
マルチコアを用いた画像処理
マルチコアを用いた画像処理
モデルアーキテクチャ観点からの高速化2019
モデルアーキテクチャ観点からの高速化2019
大規模な組合せ最適化問題に対する発見的解法
大規模な組合せ最適化問題に対する発見的解法
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
最適化超入門
最適化超入門
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
目指せグラフマスター
目指せグラフマスター
Crfと素性テンプレート
Crfと素性テンプレート
時系列分析による異常検知入門
時系列分析による異常検知入門
Plus de Sho IIZUKA
HDDの返品保証を使ってみた
HDDの返品保証を使ってみた
Sho IIZUKA
円と円の外接線の求め方
円と円の外接線の求め方
Sho IIZUKA
円と円の交点の求め方
円と円の交点の求め方
Sho IIZUKA
About Pointer
About Pointer
Sho IIZUKA
勝手に解説 TopCoder Marathon Match 82 ColorLinker
勝手に解説 TopCoder Marathon Match 82 ColorLinker
Sho IIZUKA
grepについて
grepについて
Sho IIZUKA
Plus de Sho IIZUKA
(6)
HDDの返品保証を使ってみた
HDDの返品保証を使ってみた
円と円の外接線の求め方
円と円の外接線の求め方
円と円の交点の求め方
円と円の交点の求め方
About Pointer
About Pointer
勝手に解説 TopCoder Marathon Match 82 ColorLinker
勝手に解説 TopCoder Marathon Match 82 ColorLinker
grepについて
grepについて
FM-indexによる全文検索
1.
FM-Indexによる全文検索 計算機実習E 自由課題
2.
• 文書から文字列を検索する方法は2通りに分類できる A. 前処理が不要な方法
(力任せな方法, KMP法, BM法) B. 前処理が必要な方法 (転置インデックス, 接尾辞配列) • Bは前処理の時間が必要なかわりに, 同じ文書から何回も検索する場合はAよりも高速 • FM-IndexはBに分類される方法で, 文書の長さに依存しない時間で検索できる
3.
前処理1:接尾辞配列の構築 文書 mississippi mississippi$ エンドマーカ$を追加 mississippi$ ississippi$ ssissippi$ sissippi$ issippi$ ssippi$ sippi$ ippi$ ppi$ pi$ i$ $ 接尾辞の列挙
4.
前処理1:接尾辞配列の構築 0 mississippi$ 1 ississippi$ 2
ssissippi$ 3 sissippi$ 4 issippi$ 5 ssippi$ 6 sippi$ 7 ippi$ 8 ppi$ 9 pi$ 10 i$ 11 $ 11 $ 10 i$ 7 ippi$ 4 issippi$ 1 ississippi$ 0 mississippi$ 9 pi$ 8 ppi$ 6 sippi$ 3 sissippi$ 5 ssippi$ 2 ssissippi$ 辞書順でソートする ※$は任意のアルファベットよりも 順位が小さいとする 接尾辞配列SA
5.
前処理2:BWT (Burrows-Wheeler Transform) 11 $ 10
i$ 7 ippi$ 4 issippi$ 1 ississippi$ 0 mississippi$ 9 pi$ 8 ppi$ 6 sippi$ 3 sissippi$ 5 ssippi$ 2 ssissippi$ 元の文字列における ひとつ前の文字にする i p s s m $ p i s s i i BWT文字列T
6.
検索処理 • BWT文字列T =
ipssm$pissii について, 次の関数を定義する • Rank(c,p) : T[0,p)の範囲で, アルファベットcの出現数を返す • RankLT(c) : T全体で, cよりも順位が小さい アルファベットの出現数を返す
7.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA
8.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA 'i'+"ppi$"の 接尾辞配列上での 出現位置は?
9.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA 'i'+"ppi$"の 接尾辞配列上での 出現位置は?
10.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA 'i'+"ppi$"の 接尾辞配列上での 出現位置は? LF-mapping c=T[p] に続く文字列の SA上での出現位置は RankLT(c)+Rank(c,p)
11.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA "ssi"の検索 [RankLT('i')+Rank('i', 0), RankLT('i')+Rank('i',
12)) 'i'で始まる 文字列
12.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA "ssi"の検索 [RankLT('s')+Rank('s', 1), RankLT('s')+Rank('s',
5)) 's'+"i"で始まる 文字列
13.
検索処理 $ i$ ippi$ issippi$ ississippi$ mississippi$ pi$ ppi$ sippi$ sissippi$ ssippi$ ssissippi$ i p s s m $ p i s s i i BWT文字列T 接尾辞配列SA "ssi"の検索 [RankLT('s')+Rank('s', 8), RankLT('s')+Rank('s',
10)) 's'+"si"で始まる 文字列
14.
検索処理 • FM-indexは, 検索文字列に対応する位置の絞り込みを LF-mappingの繰り返しによって行う •
LF-mappingは Rank と RankLT で行える • この2つの処理は, ウェーブレット木やウェーブレット行列を使えば O(log σ) 時間で可能 (σ はアルファベットの種類数) • LF-mappingを検索文字列Qの長さ分だけ繰り返すので, 一回の検索がO(m log σ) 時間で可能 (m は Q の文字数) • 検索時間が文書の長さに依存しない
15.
制作物 • 青空文庫で人気がある図書500冊を対象とした ウェブブラウザから使えるインクリメンタル検索を制作 • 接尾辞配列の構築はsais.hxx
(高速なライブラリ) を使用 • ウェーブレット行列とFM-Indexは自分で実装 (C++), boost-pythonによりPython用の拡張モジュールに変換 • Flask (Web App Framework@Python) から呼び出す
16.
うまくいかなかったところ • あいまい検索を実装しようとして文献を探してみた → 編集距離に対して指数時間かかるらしい… •
作成した索引をファイルから読み込む処理で, 既存のライブラリを使ったら使用メモリの量が爆発 (原因不明)
17.
まとめ • 高速な文字列検索のアルゴリズムを実装してみた • ブラウザから使えるようにしてみた ! •
参考文献 • 岡野原 大輔. 高速文字列解析の世界. 岩波書店. 2012.
18.
(補足) ウェーブレット木 3101212213 1000101101 10111 32223 10111
10001 下位2ビット目 → 下位1ビット目 → 0 1111 222 33 0 1 0 1 0 1
Télécharger maintenant