Submit Search
Upload
FM-indexによる全文検索
•
6 likes
•
10,791 views
Sho IIZUKA
Follow
FM-indexによる全文検索
Read less
Read more
Software
Report
Share
Report
Share
1 of 18
Download now
Download to read offline
Recommended
研究効率化Tips Ver.2
研究効率化Tips Ver.2
cvpaper. challenge
MICの解説
MICの解説
logics-of-blue
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
Jupyter だけで機械学習を実サービス展開できる基盤
Jupyter だけで機械学習を実サービス展開できる基盤
Recruit Lifestyle Co., Ltd.
ネットワーク超入門
ネットワーク超入門
xyzplus_net
cvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tips
cvpaper. challenge
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
Recommended
研究効率化Tips Ver.2
研究効率化Tips Ver.2
cvpaper. challenge
MICの解説
MICの解説
logics-of-blue
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
Jupyter だけで機械学習を実サービス展開できる基盤
Jupyter だけで機械学習を実サービス展開できる基盤
Recruit Lifestyle Co., Ltd.
ネットワーク超入門
ネットワーク超入門
xyzplus_net
cvpaper.challenge 研究効率化 Tips
cvpaper.challenge 研究効率化 Tips
cvpaper. challenge
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
Rの高速化
Rの高速化
弘毅 露崎
20170112 srws第六回メタ・アナリシス
20170112 srws第六回メタ・アナリシス
SR WS
居場所を隠すために差分プライバシーを使おう
居場所を隠すために差分プライバシーを使おう
Hiroshi Nakagawa
目grep入門 +解説
目grep入門 +解説
murachue
指数分布とポアソン分布のいけない関係
指数分布とポアソン分布のいけない関係
Nagi Teramo
最適化超入門
最適化超入門
Takami Sato
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
Yusuke Fujimoto
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
負の二項分布について
負の二項分布について
Hiroshi Shimizu
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計
Takahiro Kubo
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
Ayako_Hasegawa
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!
Hirotaka Sato
MN-3, MN-Core and HPL - SC21 Green500 BOF
MN-3, MN-Core and HPL - SC21 Green500 BOF
Preferred Networks
RandomForestとR package
RandomForestとR package
Shuma Ishigami
論文の書き方入門 2017
論文の書き方入門 2017
Hironori Washizaki
2015年度GPGPU実践プログラミング 第7回 総和計算
2015年度GPGPU実践プログラミング 第7回 総和計算
智啓 出川
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話
Ryota Kamoshida
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
uchan_nos
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
Hideki Tsunashima
HDDの返品保証を使ってみた
HDDの返品保証を使ってみた
Sho IIZUKA
円と円の外接線の求め方
円と円の外接線の求め方
Sho IIZUKA
More Related Content
What's hot
Rの高速化
Rの高速化
弘毅 露崎
20170112 srws第六回メタ・アナリシス
20170112 srws第六回メタ・アナリシス
SR WS
居場所を隠すために差分プライバシーを使おう
居場所を隠すために差分プライバシーを使おう
Hiroshi Nakagawa
目grep入門 +解説
目grep入門 +解説
murachue
指数分布とポアソン分布のいけない関係
指数分布とポアソン分布のいけない関係
Nagi Teramo
最適化超入門
最適化超入門
Takami Sato
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
Yusuke Fujimoto
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
負の二項分布について
負の二項分布について
Hiroshi Shimizu
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計
Takahiro Kubo
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
Ayako_Hasegawa
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!
Hirotaka Sato
MN-3, MN-Core and HPL - SC21 Green500 BOF
MN-3, MN-Core and HPL - SC21 Green500 BOF
Preferred Networks
RandomForestとR package
RandomForestとR package
Shuma Ishigami
論文の書き方入門 2017
論文の書き方入門 2017
Hironori Washizaki
2015年度GPGPU実践プログラミング 第7回 総和計算
2015年度GPGPU実践プログラミング 第7回 総和計算
智啓 出川
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話
Ryota Kamoshida
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
uchan_nos
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
Hideki Tsunashima
What's hot
(20)
Rの高速化
Rの高速化
20170112 srws第六回メタ・アナリシス
20170112 srws第六回メタ・アナリシス
居場所を隠すために差分プライバシーを使おう
居場所を隠すために差分プライバシーを使おう
目grep入門 +解説
目grep入門 +解説
指数分布とポアソン分布のいけない関係
指数分布とポアソン分布のいけない関係
最適化超入門
最適化超入門
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
負の二項分布について
負の二項分布について
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
実践 Amazon Mechanical Turk ※下記の注意点をご覧ください(回答の質の悪化・報酬額の相場の変化・仕様変更)
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!
MN-3, MN-Core and HPL - SC21 Green500 BOF
MN-3, MN-Core and HPL - SC21 Green500 BOF
RandomForestとR package
RandomForestとR package
論文の書き方入門 2017
論文の書き方入門 2017
2015年度GPGPU実践プログラミング 第7回 総和計算
2015年度GPGPU実践プログラミング 第7回 総和計算
機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
More from 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
More from 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
Download now