Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Big Dictionary Matching
R&Dチーム
セーヨー・サンティ
解きたい問題
数百万単語を搭載した辞書が与えられたとする
任意の文章の中に辞書に登録された単語をしっかり特定せよ
みなさんならどうします?
基本的なツール
正規表現
Trie
Aho–Corasick
Patricia Trie
Directed acyclic word graph (DAWG)
その他は割愛 (&知らない)
Trie
K={"aaac#","aab#", "ab#", "abb#", "abba#"}
Aho-Corasick
文字列を1-Passでマッチング完了!速い!(データはTrieと失敗時のジャンプ先)
Patricia Trie
DAWG
K = {“aaa”, “aba”,“bbc”, “cbc”, “cc”}
Trieをさらに圧縮:Suffixも共有
2015年の辞書体験談(Linked List/.NET)
中国語辞書:約350万語
正規表現 → 破たん
Trie → 破たん
Patricia Trie → 破たん
Aho–Corasick → 破たん
Directed acyclic w...
分かったこと
.NETのオバーヘッドが大きい
DAWGはすごい
さらに調べて分かったこと
データの持ち方次第で速度・メモリ使用量が改善できる
Trie実装の系統
Linked List
Table
Tripple-Array
Double-Array
Table Trie
Tripple-Array Trie
check[base[s] + c] = s
next[base[s] + c] = t
Aoe et. al
1989 Jun-ichi Aoe:
“An Efficient Digital Search Algorithm by Using a Double-Array Structure”
IEEE Transactions ...
Double Array Trie
t = BASE[s] + CODE[c]
CHECK[t] = s
一般的には
Data Structure Size: Trie,Aho-Corasick > (Patricia?) > DAWG
Implementation Size: Table > Linked List > Double Array
...
世界のMecab
一般的なCRF Tokenizer, Pos Taggingの10倍速(精度は90%前半)
圧倒的な速さの秘密の一つは辞書マッチングにある
Double Array Trie を採用した
スピード・メモリのTrade offで
Double Array TrieのJava版のオープンソースを利用
でも、せめて、Double Array DAWGが欲しいなあ
理想的には
できればTable DAWG
Aoe et. al
1989 Jun-ichi Aoe:
“An Efficient Digital Search Algorithm by Using a Double-Array Structure”
IEEE Transactions ...
DAWGの実装
単語リスト → Linked List DAWG → Double Array
Python の分かりやすいオープンソース
http://stevehanov.ca/blog/index.php?id=115
Double Array DAWG完成
Python勉強がてら、Juliaをマスターする作戦
Python→Juliaのポーティング
ChineseToolsのDouble Arrayの実装を参考
ついにDouble Array DAWGを手に...
気になるサイズとスピード
中国語350万語→Linked List DAWG 137 sec.
Double Array 生成 12 min.
Array+Character List 24 MB ちなみにdouble array trie: ...
万歳!?
待て!
Table はとてもsparseなのでsparse matrixを使ってみよう
Double Array 作る手間省ける
Sparse matrix は標準技術: Compressed Sparse Columns (CSC)
スピード...
気になるサイズと速度
中国語350万語→Linked List DAWG 137 sec.
SparseMatrixの生成 58 sec.
SparseMatrix+Character List 52 MB (Double-Arrayより大きい...
参考資料
1. Comparisons of Efficient Implementations for DAWG: Masao Fuketa, Kazuhiro Morita, and Jun-
ichi Aoe, International...
Prochain SlideShare
Chargement dans…5
×

Big dictionary matching

大規模辞書マッチングを手軽に高速化する方法

  • Soyez le premier à commenter

Big dictionary matching

  1. 1. Big Dictionary Matching R&Dチーム セーヨー・サンティ
  2. 2. 解きたい問題 数百万単語を搭載した辞書が与えられたとする 任意の文章の中に辞書に登録された単語をしっかり特定せよ みなさんならどうします?
  3. 3. 基本的なツール 正規表現 Trie Aho–Corasick Patricia Trie Directed acyclic word graph (DAWG) その他は割愛 (&知らない)
  4. 4. Trie K={"aaac#","aab#", "ab#", "abb#", "abba#"}
  5. 5. Aho-Corasick 文字列を1-Passでマッチング完了!速い!(データはTrieと失敗時のジャンプ先)
  6. 6. Patricia Trie
  7. 7. DAWG K = {“aaa”, “aba”,“bbc”, “cbc”, “cc”} Trieをさらに圧縮:Suffixも共有
  8. 8. 2015年の辞書体験談(Linked List/.NET) 中国語辞書:約350万語 正規表現 → 破たん Trie → 破たん Patricia Trie → 破たん Aho–Corasick → 破たん Directed acyclic word graph (DAWG) → やっとなんとか収まった
  9. 9. 分かったこと .NETのオバーヘッドが大きい DAWGはすごい さらに調べて分かったこと データの持ち方次第で速度・メモリ使用量が改善できる
  10. 10. Trie実装の系統 Linked List Table Tripple-Array Double-Array
  11. 11. Table Trie
  12. 12. Tripple-Array Trie check[base[s] + c] = s next[base[s] + c] = t
  13. 13. Aoe et. al 1989 Jun-ichi Aoe: “An Efficient Digital Search Algorithm by Using a Double-Array Structure” IEEE Transactions on Software Engineering archive Volume 15 Issue 9, September 1989 Page 1066-1077 check[base[s] + c] = s base[s] + c = t
  14. 14. Double Array Trie t = BASE[s] + CODE[c] CHECK[t] = s
  15. 15. 一般的には Data Structure Size: Trie,Aho-Corasick > (Patricia?) > DAWG Implementation Size: Table > Linked List > Double Array Speed: Table > Double Array > Linked List
  16. 16. 世界のMecab 一般的なCRF Tokenizer, Pos Taggingの10倍速(精度は90%前半) 圧倒的な速さの秘密の一つは辞書マッチングにある Double Array Trie を採用した
  17. 17. スピード・メモリのTrade offで Double Array TrieのJava版のオープンソースを利用 でも、せめて、Double Array DAWGが欲しいなあ 理想的には できればTable DAWG
  18. 18. Aoe et. al 1989 Jun-ichi Aoe: “An Efficient Digital Search Algorithm by Using a Double-Array Structure” IEEE Transactions on Software Engineering archive Volume 15 Issue 9, September 1989 Page 1066-1077 2016 Masao Fuketa, Kazuhiro Morita, and Jun-ichi Aoe: “Comparisons of Efficient Implementations for DAWG” International Journal of Computer Theory and Engineering, Vol. 8, No. 1, February 2016 DAWGを持っている前提 orz
  19. 19. DAWGの実装 単語リスト → Linked List DAWG → Double Array Python の分かりやすいオープンソース http://stevehanov.ca/blog/index.php?id=115
  20. 20. Double Array DAWG完成 Python勉強がてら、Juliaをマスターする作戦 Python→Juliaのポーティング ChineseToolsのDouble Arrayの実装を参考 ついにDouble Array DAWGを手に入れた!
  21. 21. 気になるサイズとスピード 中国語350万語→Linked List DAWG 137 sec. Double Array 生成 12 min. Array+Character List 24 MB ちなみにdouble array trie: 94MB 中国語350万語(UTF8) 44 MB 中国語350万語(UTF8)のZIPファイル 18 MB double array読み込み 初回:2 sec. キャッシュ後:0.18 sec. Weibo 8万文での辞書マッチング速度 (書き込みなし) 31,548 文/sec/cpu (中央値)
  22. 22. 万歳!?
  23. 23. 待て! Table はとてもsparseなのでsparse matrixを使ってみよう Double Array 作る手間省ける Sparse matrix は標準技術: Compressed Sparse Columns (CSC) スピード的には期待できるかもしれない!
  24. 24. 気になるサイズと速度 中国語350万語→Linked List DAWG 137 sec. SparseMatrixの生成 58 sec. SparseMatrix+Character List 52 MB (Double-Arrayより大きい) 中国語350万語(UTF8) 44 MB 中国語350万語(UTF8)のZIPファイル 18 MB SparseMatrix読み込み 初回:2.1 sec. キャッシュ後:0.19 sec. Weibo 8万文での辞書マッチング速度 (書き込みなし) 55,212 文/sec/cpu (中央値) (予想通り速い!)
  25. 25. 参考資料 1. Comparisons of Efficient Implementations for DAWG: Masao Fuketa, Kazuhiro Morita, and Jun- ichi Aoe, International Journal of Computer Theory and Engineering, Vol. 8, No. 1, February 2016 2. A Retrieval Method for Double Array Structures by Using Byte N-Gram: Masao Fuketa, Kazuhiro Morita, and Jun-Ichi Aoe, International Journal of Computer Theory and Engineering, Vol. 6, No. 2, April 2014 3. Importance of Aho-Corasick String Matching Algorithm in Real World Applications: Saima Hasib, Mahak Motwani, Amit Saxena, International Journal of Computer Science and Information Technologies, Vol. 4 (3) , 2013, 467-469 4. Compressing dictionaries with a DAWG: Steve Hanov’s Blog , http://stevehanov.ca/blog/index.php?id=115

    Soyez le premier à commenter

    Identifiez-vous pour voir les commentaires

  • kamebuchi

    Dec. 7, 2016
  • bonprosoft

    Dec. 16, 2016
  • keisukegoto92

    Jul. 11, 2017

大規模辞書マッチングを手軽に高速化する方法

Vues

Nombre de vues

2 164

Sur Slideshare

0

À partir des intégrations

0

Nombre d'intégrations

1 535

Actions

Téléchargements

4

Partages

0

Commentaires

0

Mentions J'aime

3

×