DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5

1,888 views
1,806 views

Published on

DSIRNLP#3 LT Fig4.5: 辞書挟み込み型転置インデクスの発表資料

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,888
On SlideShare
0
From Embeds
0
Number of Embeds
52
Actions
Shares
0
Downloads
11
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5

  1. 1. DSIRNLP#3 LTFig4.5: 辞書挟み込み型転置インデクス を用いた検索エンジン 2012-09-30 Yoshihiko Suhara @sleepy_yoshi 1
  2. 2. 背景• 昨年のGWの出来事 – ブッチャー本 [1] 読んでたら辞書挟み込み型インデクスについて記述 があり,実装したくなった – 偶然にも明日からGW – とりあえずやっつけで実装 – ちゃんと仕上げようとするとそのまま忘れ去るので,区切りをつける 意味でとりあえず公開…するの忘れて一年が経った ブッチャー本 2
  3. 3. 辞書挟み込み型転置インデクス って何よ? 3
  4. 4. 通常の転置インデクス• 辞書と呼ばれるデータ構造を利用して文書IDや出 現位置が記載された転置リストを取得する – 辞書にはトライ木やハッシュなどを利用 通常の転置インデクス 辞書 転置リスト 4
  5. 5. 辞書挟み込み型転置インデクス• 辞書を明示的に持たず,転置リストの先頭に 付与した状態で連結したもの語彙 転置リスト 語彙 転置リスト 語彙 転置リスト … 辞書を転置リストの間に挟み込んでいる 5
  6. 6. 通常の転置インデクスとの比較 通常の転置インデクス 辞書 転置リスト辞書挟み込み型転置インデクス … 辞書を挟み込んでいる 6
  7. 7. Fig4.5: 辞書挟み込み型転置インデクス• 辞書をインデクスに挟み込んだ形式の転置イン デクス[1][2] – 文献[1]の図4.5で説明されていたからFig4.5と命名 ブッチャー本 Fig4.5 (p.115) さて,どのように検索するのか? 7
  8. 8. 検索処理 • 二段階の処理 (1) メモリ上のインデクスを二分探索 (2) ディスク上のインデクスを線形探索 In-memory index apple book cookie ・・・ ・・・ 1025 1997 3005 ・・・ apple Pos Pos Pos ・・・ asus Pos Pos ・・・ book Pos Pos ・・・On-disk index 8
  9. 9. 検索処理の例: asus (1) 二分探索 In-memory index apple book cookie ・・・ ・・・ 1025 1997 3005 ・・・ apple Pos Pos Pos ・・・ asus Pos Pos ・・・ book Pos Pos ・・・On-disk index (2) 線形探索 発見! 9
  10. 10. 補足: 検索範囲 In-memory index apple book cookie ・・・ ・・・ 1025 1997 3005 ・・・ apple Pos Pos Pos ・・・ asus Pos Pos ・・・ book Pos Pos ・・・On-disk index In-memory indexのアイテム間だけ探索する 10
  11. 11. 実装してみた 11
  12. 12. Fig4.5の実装• インデクス構築処理 – 一度通常の転置インデクスを構築してからOn-diskインデクスとIn- memoryインデクスを構築 – 転置インデクスはやる気のない実装 • 辞書はstd::map • 転置リストはstd::vector• インデクス検索処理 – 構築したOn-diskインデクスはmmapで読み込む – On-diskインデクスにはDocID: Pos, Pos; DocID: Pos, Posではなくて 全てフラットなPosition情報だけを利用 • 位置情報を取得した後に文書IDをルックアップすることでDocIDを取得 • WSDM ’09のGoogle講演を参考 [3] 12
  13. 13. 使い方 13
  14. 14. インデクス構築Usage: ./index_writer <input filename> <output index path> [block size]# 例$ ./index_write sample.dat hoge 1024Index construction done. sample.dat http://www.hoge.com/ 飛ばねえ 豚 は ただ の 豚 だ http://www.bar.com/ 豚肉 は おいしい http://www.piyo.com/ 豚 は 豚 で も ただ の 豚 ・・・• 入力フォーマット – 各行が<DocName>¥t<Text> • Textはトークン毎にスペース区切り • 改行を含めることができない 14
  15. 15. 検索Usage: ./index_searcher <index basename> <query># 例$ ./index_searcher hoge 豚5 position found === http://www.hoge.com/ http://www.piyo.com/• クエリはインデクスに格納されているトークンで ある必要がある – 上記例の場合「豚」と「豚肉」をまったく別のトークンと して扱っている• AND検索,フレーズ検索には現在未対応 15
  16. 16. 使い方補足 16
  17. 17. block sizeて何よ?Usage: ./index_writer <input filename> <output index path> [block size]# 例$ ./index_write sample.dat hoge 1024 apple book cookie ・・・ ・・・ 1025 1997 3005 ・・・ apple PF Pos Pos ・・・ amazon PF Pos ・・・ book PF Pos ・・・ block size = この幅の上限 17
  18. 18. 生成されるインデクス In-memory index (*.inmem) apple book cookie ・・・ ・・・ 1025 1997 3005 ・・・ apple PF Pos Pos ・・・ amazon PF Pos ・・・ book PF Pos ・・・On-disk index (*.index)DocID-Position table (*.docpos) DocID-DocName table (*.docname) DocID Start position DocID Doc Name 1 1 1 http://hoge.com/index.html 2 120 2 http://hoge.com/link.html 3 180 3 http://fuga.ne.jp/index.html … … … … N 17280 N http://piyo.co.jp/inde.html 18
  19. 19. まとめ 19
  20. 20. TODO (できるといいな…)• やっつけ実装なので,思いつくだけでもたくさん – ベンチマーク – インデックスの圧縮 • 差分値を取る • Variable-byte符号 – AND検索,フレーズ検索の実装 – Bi-gramインデクスの実装 – スニペット表示部分の実装 – ベンチマーク – 全体的なコード書き直し – など 20
  21. 21. 明日のために• Dictionary Interleaving 形式のインデクスは辞 書を明示的に持たないため,複数インデクス をマージしやすい – Merge-based index construction に適した形式 • 山田さんの記事[4]を参考• 複数インデクスを入力して,マージ結果を出 力するような使い方ができる検索エンジンが できるんじゃないかな 21
  22. 22. References• [1] Stefan Buttcher, Charles L. A. Clarke and Gordon V. Cormack, “Information Retrieval”, The MIT Press, 2010.• [2] Stefan Buttcher, “Multi-User File System Search”, Ph.D thesis, University of Waterloo, Canada, 2007. – 著者のひとりButtcher氏の博士論文.Interleaving Dictionaryの初出? – 4.4.2 Interleaving Posting Lists and Dictionary Entries• [3] Jeffrey Dean, “Challenges in Building Large-Scale Information Retrieval Systems”, WSDM ‘09 Tutorial, 2009. – フラットな形式のインデクスについてはid:llameradaさんの翻訳記事が参 考になる • http://d.hatena.ne.jp/llamerada/20090317/1237302640• [4] 山田浩之. 検索エンジンはいかにして動くのか? – 第10回 動的な索引構築 • http://gihyo.jp/dev/serial/01/search-engine/0010 22
  23. 23. THANK YOU! 23

×