SlideShare a Scribd company logo
1 of 23
Download to read offline
DSIRNLP#3 LT
Fig4.5: 辞書挟み込み型転置インデクス
    を用いた検索エンジン

         2012-09-30
       Yoshihiko Suhara
        @sleepy_yoshi
                          1
背景
• 昨年のGWの出来事
 – ブッチャー本 [1] 読んでたら辞書挟み込み型インデクスについて記述
   があり,実装したくなった
 – 偶然にも明日からGW
 – とりあえずやっつけで実装
 – ちゃんと仕上げようとするとそのまま忘れ去るので,区切りをつける
   意味でとりあえず公開…するの忘れて一年が経った




              ブッチャー本                 2
辞書挟み込み型転置インデクス
     って何よ?



             3
通常の転置インデクス
• 辞書と呼ばれるデータ構造を利用して文書IDや出
  現位置が記載された転置リストを取得する
 – 辞書にはトライ木やハッシュなどを利用

      通常の転置インデクス
      辞書     転置リスト




                            4
辞書挟み込み型転置インデクス
• 辞書を明示的に持たず,転置リストの先頭に
  付与した状態で連結したもの

語彙   転置リスト      語彙   転置リスト   語彙   転置リスト
                                          …



             辞書を転置リストの間に挟み込んでいる




                                              5
通常の転置インデクスとの比較
        通常の転置インデクス
        辞書       転置リスト




辞書挟み込み型転置インデクス
                          …



             辞書を挟み込んでいる       6
Fig4.5: 辞書挟み込み型転置インデクス
• 辞書をインデクスに挟み込んだ形式の転置イン
  デクス[1][2]
 – 文献[1]の図4.5で説明されていたからFig4.5と命名




                       ブッチャー本 Fig4.5 (p.115)

      さて,どのように検索するのか?
                                          7
検索処理
 • 二段階の処理
       (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
検索処理の例: 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
補足: 検索範囲

         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
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
インデクス構築
Usage: ./index_writer <input filename> <output index path> [block size]
# 例
$ ./index_write sample.dat hoge 1024
Index construction done.

  sample.dat
 http://www.hoge.com/       飛ばねえ 豚 は ただ の 豚 だ
 http://www.bar.com/        豚肉 は おいしい
 http://www.piyo.com/       豚 は 豚 で も ただ の 豚
 ・・・

• 入力フォーマット
   – 各行が<DocName>¥t<Text>
       • Textはトークン毎にスペース区切り
       • 改行を含めることができない                                              14
検索
Usage: ./index_searcher <index basename> <query>

# 例
$ ./index_searcher hoge 豚
5 position found ===
  http://www.hoge.com/
  http://www.piyo.com/



• クエリはインデクスに格納されているトークンで
  ある必要がある
   – 上記例の場合「豚」と「豚肉」をまったく別のトークンと
     して扱っている
• AND検索,フレーズ検索には現在未対応
                                                   15
使い方補足



        16
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
生成されるインデクス
           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
TODO (できるといいな…)
• やっつけ実装なので,思いつくだけでもたくさん
 – ベンチマーク
 – インデックスの圧縮
     • 差分値を取る
     • Variable-byte符号
 –   AND検索,フレーズ検索の実装
 –   Bi-gramインデクスの実装
 –   スニペット表示部分の実装
 –   ベンチマーク
 –   全体的なコード書き直し
 –   など

                             20
明日のために
• Dictionary Interleaving 形式のインデクスは辞
  書を明示的に持たないため,複数インデクス
  をマージしやすい
  – Merge-based index construction に適した形式
    • 山田さんの記事[4]を参考


• 複数インデクスを入力して,マージ結果を出
  力するような使い方ができる検索エンジンが
  できるんじゃないかな

                                            21
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
THANK YOU!




             23

More Related Content

What's hot

フレッシャーズのためのパケット解析入門
フレッシャーズのためのパケット解析入門フレッシャーズのためのパケット解析入門
フレッシャーズのためのパケット解析入門彰 村地
 
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤTakashi Hoshino
 
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストMongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストAkihiro Kuwano
 
Ec2でのdisk拡張方法
Ec2でのdisk拡張方法Ec2でのdisk拡張方法
Ec2でのdisk拡張方法Takamasa Sakai
 
Custom Package Building with Poudriere
Custom Package Building with PoudriereCustom Package Building with Poudriere
Custom Package Building with PoudriereYuichiro Naito
 
20120913 nosql@hikarie(okuyama fuse)
20120913 nosql@hikarie(okuyama fuse)20120913 nosql@hikarie(okuyama fuse)
20120913 nosql@hikarie(okuyama fuse)Takahiro Iwase
 
10分で分かるデータストレージ
10分で分かるデータストレージ10分で分かるデータストレージ
10分で分かるデータストレージTakashi Hoshino
 
Ruby(thorライブラリ)
Ruby(thorライブラリ)Ruby(thorライブラリ)
Ruby(thorライブラリ)松本 雄貴
 
PostGIS Handson | FOSS4G Tokyo 2014
PostGIS Handson | FOSS4G Tokyo 2014PostGIS Handson | FOSS4G Tokyo 2014
PostGIS Handson | FOSS4G Tokyo 2014Hideo Harada
 
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫Insight Technology, Inc.
 
ベンチマーク勉強会#02
ベンチマーク勉強会#02ベンチマーク勉強会#02
ベンチマーク勉強会#02milk hanakara
 
パソコン選び(抜粋)
パソコン選び(抜粋)パソコン選び(抜粋)
パソコン選び(抜粋)Eiji Matsumoto
 
Bitbucket Pull Request 練習帳
Bitbucket Pull Request 練習帳Bitbucket Pull Request 練習帳
Bitbucket Pull Request 練習帳Hiramatsu Ryosuke
 
Aerospike基本のき
Aerospike基本のきAerospike基本のき
Aerospike基本のきYuto Suzuki
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説Shoken Fujisaki
 
FreeBSDのススメ
FreeBSDのススメFreeBSDのススメ
FreeBSDのススメkunst1080
 

What's hot (20)

フレッシャーズのためのパケット解析入門
フレッシャーズのためのパケット解析入門フレッシャーズのためのパケット解析入門
フレッシャーズのためのパケット解析入門
 
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ
 
MongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキストMongoDBのはじめての運用テキスト
MongoDBのはじめての運用テキスト
 
Ec2でのdisk拡張方法
Ec2でのdisk拡張方法Ec2でのdisk拡張方法
Ec2でのdisk拡張方法
 
Cassandra v0.6-siryou
Cassandra v0.6-siryouCassandra v0.6-siryou
Cassandra v0.6-siryou
 
Custom Package Building with Poudriere
Custom Package Building with PoudriereCustom Package Building with Poudriere
Custom Package Building with Poudriere
 
20120913 nosql@hikarie(okuyama fuse)
20120913 nosql@hikarie(okuyama fuse)20120913 nosql@hikarie(okuyama fuse)
20120913 nosql@hikarie(okuyama fuse)
 
Slide
SlideSlide
Slide
 
10分で分かるデータストレージ
10分で分かるデータストレージ10分で分かるデータストレージ
10分で分かるデータストレージ
 
Ruby(thorライブラリ)
Ruby(thorライブラリ)Ruby(thorライブラリ)
Ruby(thorライブラリ)
 
PostGIS Handson | FOSS4G Tokyo 2014
PostGIS Handson | FOSS4G Tokyo 2014PostGIS Handson | FOSS4G Tokyo 2014
PostGIS Handson | FOSS4G Tokyo 2014
 
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
 
MongoDB
MongoDBMongoDB
MongoDB
 
ベンチマーク勉強会#02
ベンチマーク勉強会#02ベンチマーク勉強会#02
ベンチマーク勉強会#02
 
パソコン選び(抜粋)
パソコン選び(抜粋)パソコン選び(抜粋)
パソコン選び(抜粋)
 
Bitbucket Pull Request 練習帳
Bitbucket Pull Request 練習帳Bitbucket Pull Request 練習帳
Bitbucket Pull Request 練習帳
 
Aerospike基本のき
Aerospike基本のきAerospike基本のき
Aerospike基本のき
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説
 
FreeBSDのススメ
FreeBSDのススメFreeBSDのススメ
FreeBSDのススメ
 
textsearch groonga v0.1
textsearch groonga v0.1textsearch groonga v0.1
textsearch groonga v0.1
 

Viewers also liked

ICML2012読み会 Scaling Up Coordinate Descent Algorithms for Large L1 regularizat...
ICML2012読み会 Scaling Up Coordinate Descent Algorithms for Large L1 regularizat...ICML2012読み会 Scaling Up Coordinate Descent Algorithms for Large L1 regularizat...
ICML2012読み会 Scaling Up Coordinate Descent Algorithms for Large L1 regularizat...sleepy_yoshi
 
PRML復々習レーン#3 3.1.3-3.1.5
PRML復々習レーン#3 3.1.3-3.1.5PRML復々習レーン#3 3.1.3-3.1.5
PRML復々習レーン#3 3.1.3-3.1.5sleepy_yoshi
 
SIGIR2011読み会 3. Learning to Rank
SIGIR2011読み会 3. Learning to RankSIGIR2011読み会 3. Learning to Rank
SIGIR2011読み会 3. Learning to Ranksleepy_yoshi
 
SIGIR2012勉強会 23 Learning to Rank
SIGIR2012勉強会 23 Learning to RankSIGIR2012勉強会 23 Learning to Rank
SIGIR2012勉強会 23 Learning to Ranksleepy_yoshi
 
KDD2014勉強会: Large-Scale High-Precision Topic Modeling on Twitter
KDD2014勉強会: Large-Scale High-Precision Topic Modeling on TwitterKDD2014勉強会: Large-Scale High-Precision Topic Modeling on Twitter
KDD2014勉強会: Large-Scale High-Precision Topic Modeling on Twittersleepy_yoshi
 
Confidence Weightedで ランク学習を実装してみた
Confidence Weightedで ランク学習を実装してみたConfidence Weightedで ランク学習を実装してみた
Confidence Weightedで ランク学習を実装してみたtkng
 
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめDSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめsleepy_yoshi
 

Viewers also liked (7)

ICML2012読み会 Scaling Up Coordinate Descent Algorithms for Large L1 regularizat...
ICML2012読み会 Scaling Up Coordinate Descent Algorithms for Large L1 regularizat...ICML2012読み会 Scaling Up Coordinate Descent Algorithms for Large L1 regularizat...
ICML2012読み会 Scaling Up Coordinate Descent Algorithms for Large L1 regularizat...
 
PRML復々習レーン#3 3.1.3-3.1.5
PRML復々習レーン#3 3.1.3-3.1.5PRML復々習レーン#3 3.1.3-3.1.5
PRML復々習レーン#3 3.1.3-3.1.5
 
SIGIR2011読み会 3. Learning to Rank
SIGIR2011読み会 3. Learning to RankSIGIR2011読み会 3. Learning to Rank
SIGIR2011読み会 3. Learning to Rank
 
SIGIR2012勉強会 23 Learning to Rank
SIGIR2012勉強会 23 Learning to RankSIGIR2012勉強会 23 Learning to Rank
SIGIR2012勉強会 23 Learning to Rank
 
KDD2014勉強会: Large-Scale High-Precision Topic Modeling on Twitter
KDD2014勉強会: Large-Scale High-Precision Topic Modeling on TwitterKDD2014勉強会: Large-Scale High-Precision Topic Modeling on Twitter
KDD2014勉強会: Large-Scale High-Precision Topic Modeling on Twitter
 
Confidence Weightedで ランク学習を実装してみた
Confidence Weightedで ランク学習を実装してみたConfidence Weightedで ランク学習を実装してみた
Confidence Weightedで ランク学習を実装してみた
 
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめDSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
 

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

データベースシステム論11 - データベースの構成
データベースシステム論11 - データベースの構成データベースシステム論11 - データベースの構成
データベースシステム論11 - データベースの構成Shohei Yokoyama
 
localstackによるAWS Lambdaの開発環境を、miniconda上でつくったら簡単便利だった話
localstackによるAWS Lambdaの開発環境を、miniconda上でつくったら簡単便利だった話localstackによるAWS Lambdaの開発環境を、miniconda上でつくったら簡単便利だった話
localstackによるAWS Lambdaの開発環境を、miniconda上でつくったら簡単便利だった話真治 米田
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話Tokoroten Nakayama
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」Yoshiki Shibukawa
 
Search on AWS - IVS CTO Night and Day 2016 Spring
Search on AWS - IVS CTO Night and Day 2016 SpringSearch on AWS - IVS CTO Night and Day 2016 Spring
Search on AWS - IVS CTO Night and Day 2016 SpringEiji Shinohara
 
Cloud os techday_0614
Cloud os techday_0614Cloud os techday_0614
Cloud os techday_0614Takano Masaru
 
AWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAmazon Web Services Japan
 
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOWebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOKohei Noda
 
インデックスのおはなし
インデックスのおはなしインデックスのおはなし
インデックスのおはなしhajikami
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門irix_jp
 
データベースを使おう
データベースを使おうデータベースを使おう
データベースを使おうShuhei Iitsuka
 
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!Midori Oge
 
OpenStack Object Storage; Overview
OpenStack Object Storage; OverviewOpenStack Object Storage; Overview
OpenStack Object Storage; Overviewirix_jp
 
実はとても面白い...Documentation library
実はとても面白い...Documentation library実はとても面白い...Documentation library
実はとても面白い...Documentation libraryKouta Shiobara
 
ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~
ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~
ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~Ryuta Otaki
 

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

全文検索入門
全文検索入門全文検索入門
全文検索入門
 
データベースシステム論11 - データベースの構成
データベースシステム論11 - データベースの構成データベースシステム論11 - データベースの構成
データベースシステム論11 - データベースの構成
 
localstackによるAWS Lambdaの開発環境を、miniconda上でつくったら簡単便利だった話
localstackによるAWS Lambdaの開発環境を、miniconda上でつくったら簡単便利だった話localstackによるAWS Lambdaの開発環境を、miniconda上でつくったら簡単便利だった話
localstackによるAWS Lambdaの開発環境を、miniconda上でつくったら簡単便利だった話
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
 
WiredTigerを詳しく説明
WiredTigerを詳しく説明WiredTigerを詳しく説明
WiredTigerを詳しく説明
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
 
Search on AWS - IVS CTO Night and Day 2016 Spring
Search on AWS - IVS CTO Night and Day 2016 SpringSearch on AWS - IVS CTO Night and Day 2016 Spring
Search on AWS - IVS CTO Night and Day 2016 Spring
 
Cloud os techday_0614
Cloud os techday_0614Cloud os techday_0614
Cloud os techday_0614
 
AWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearchAWS Black Belt Techシリーズ Amazon CloudSearch
AWS Black Belt Techシリーズ Amazon CloudSearch
 
Ie cache data
Ie cache dataIe cache data
Ie cache data
 
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DOWebAppDev勉強会 #2 at cafe? IKAGAWA DO
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
 
インデックスのおはなし
インデックスのおはなしインデックスのおはなし
インデックスのおはなし
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門
 
データベースを使おう
データベースを使おうデータベースを使おう
データベースを使おう
 
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!
2013OSC関西@京都_CloudStackとCloudFoundaryがまるわかり!
 
OpenStack Object Storage; Overview
OpenStack Object Storage; OverviewOpenStack Object Storage; Overview
OpenStack Object Storage; Overview
 
InfiniBand on Debian
InfiniBand on DebianInfiniBand on Debian
InfiniBand on Debian
 
Texuser 2012-lt
Texuser 2012-lt Texuser 2012-lt
Texuser 2012-lt
 
実はとても面白い...Documentation library
実はとても面白い...Documentation library実はとても面白い...Documentation library
実はとても面白い...Documentation library
 
ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~
ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~
ココが違うよEC2 ~オンプレミスVMとの徹底⽐比較~
 

More from sleepy_yoshi

KDD2013読み会: Direct Optimization of Ranking Measures
KDD2013読み会: Direct Optimization of Ranking MeasuresKDD2013読み会: Direct Optimization of Ranking Measures
KDD2013読み会: Direct Optimization of Ranking Measuressleepy_yoshi
 
PRML復々習レーン#15 前回までのあらすじ
PRML復々習レーン#15 前回までのあらすじPRML復々習レーン#15 前回までのあらすじ
PRML復々習レーン#15 前回までのあらすじsleepy_yoshi
 
PRML復々習レーン#14 前回までのあらすじ
PRML復々習レーン#14 前回までのあらすじPRML復々習レーン#14 前回までのあらすじ
PRML復々習レーン#14 前回までのあらすじsleepy_yoshi
 
PRML復々習レーン#13 前回までのあらすじ
PRML復々習レーン#13 前回までのあらすじPRML復々習レーン#13 前回までのあらすじ
PRML復々習レーン#13 前回までのあらすじsleepy_yoshi
 
PRML復々習レーン#12 前回までのあらすじ
PRML復々習レーン#12 前回までのあらすじPRML復々習レーン#12 前回までのあらすじ
PRML復々習レーン#12 前回までのあらすじsleepy_yoshi
 
ICML2013読み会: Distributed training of Large-scale Logistic models
ICML2013読み会: Distributed training of Large-scale Logistic modelsICML2013読み会: Distributed training of Large-scale Logistic models
ICML2013読み会: Distributed training of Large-scale Logistic modelssleepy_yoshi
 
SEXI2013読み会: Adult Query Classification for Web Search and Recommendation
SEXI2013読み会: Adult Query Classification for Web Search and RecommendationSEXI2013読み会: Adult Query Classification for Web Search and Recommendation
SEXI2013読み会: Adult Query Classification for Web Search and Recommendationsleepy_yoshi
 
計算論的学習理論入門 -PAC学習とかVC次元とか-
計算論的学習理論入門 -PAC学習とかVC次元とか-計算論的学習理論入門 -PAC学習とかVC次元とか-
計算論的学習理論入門 -PAC学習とかVC次元とか-sleepy_yoshi
 
PRML復々習レーン#11 前回までのあらすじ
PRML復々習レーン#11 前回までのあらすじPRML復々習レーン#11 前回までのあらすじ
PRML復々習レーン#11 前回までのあらすじsleepy_yoshi
 
SMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装するSMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装するsleepy_yoshi
 
PRML復々習レーン#10 前回までのあらすじ
PRML復々習レーン#10 前回までのあらすじPRML復々習レーン#10 前回までのあらすじ
PRML復々習レーン#10 前回までのあらすじsleepy_yoshi
 
PRML復々習レーン#10 7.1.3-7.1.5
PRML復々習レーン#10 7.1.3-7.1.5PRML復々習レーン#10 7.1.3-7.1.5
PRML復々習レーン#10 7.1.3-7.1.5sleepy_yoshi
 
PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1sleepy_yoshi
 
PRML復々習レーン#9 前回までのあらすじ
PRML復々習レーン#9 前回までのあらすじPRML復々習レーン#9 前回までのあらすじ
PRML復々習レーン#9 前回までのあらすじsleepy_yoshi
 
PRML復々習レーン#7 前回までのあらすじ
PRML復々習レーン#7 前回までのあらすじPRML復々習レーン#7 前回までのあらすじ
PRML復々習レーン#7 前回までのあらすじsleepy_yoshi
 
PRML復々習レーン#3 前回までのあらすじ
PRML復々習レーン#3 前回までのあらすじPRML復々習レーン#3 前回までのあらすじ
PRML復々習レーン#3 前回までのあらすじsleepy_yoshi
 
SVM実践ガイド (A Practical Guide to Support Vector Classification)
SVM実践ガイド (A Practical Guide to Support Vector Classification)SVM実践ガイド (A Practical Guide to Support Vector Classification)
SVM実践ガイド (A Practical Guide to Support Vector Classification)sleepy_yoshi
 
PRML復々習レーン#2 2.3.6 - 2.3.7
PRML復々習レーン#2 2.3.6 - 2.3.7PRML復々習レーン#2 2.3.6 - 2.3.7
PRML復々習レーン#2 2.3.6 - 2.3.7sleepy_yoshi
 
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical SearchWSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Searchsleepy_yoshi
 
Collaborative Ranking: A Case Study on Entity Ranking (EMNLP2011読み会)
Collaborative Ranking: A Case Study on Entity Ranking (EMNLP2011読み会)Collaborative Ranking: A Case Study on Entity Ranking (EMNLP2011読み会)
Collaborative Ranking: A Case Study on Entity Ranking (EMNLP2011読み会)sleepy_yoshi
 

More from sleepy_yoshi (20)

KDD2013読み会: Direct Optimization of Ranking Measures
KDD2013読み会: Direct Optimization of Ranking MeasuresKDD2013読み会: Direct Optimization of Ranking Measures
KDD2013読み会: Direct Optimization of Ranking Measures
 
PRML復々習レーン#15 前回までのあらすじ
PRML復々習レーン#15 前回までのあらすじPRML復々習レーン#15 前回までのあらすじ
PRML復々習レーン#15 前回までのあらすじ
 
PRML復々習レーン#14 前回までのあらすじ
PRML復々習レーン#14 前回までのあらすじPRML復々習レーン#14 前回までのあらすじ
PRML復々習レーン#14 前回までのあらすじ
 
PRML復々習レーン#13 前回までのあらすじ
PRML復々習レーン#13 前回までのあらすじPRML復々習レーン#13 前回までのあらすじ
PRML復々習レーン#13 前回までのあらすじ
 
PRML復々習レーン#12 前回までのあらすじ
PRML復々習レーン#12 前回までのあらすじPRML復々習レーン#12 前回までのあらすじ
PRML復々習レーン#12 前回までのあらすじ
 
ICML2013読み会: Distributed training of Large-scale Logistic models
ICML2013読み会: Distributed training of Large-scale Logistic modelsICML2013読み会: Distributed training of Large-scale Logistic models
ICML2013読み会: Distributed training of Large-scale Logistic models
 
SEXI2013読み会: Adult Query Classification for Web Search and Recommendation
SEXI2013読み会: Adult Query Classification for Web Search and RecommendationSEXI2013読み会: Adult Query Classification for Web Search and Recommendation
SEXI2013読み会: Adult Query Classification for Web Search and Recommendation
 
計算論的学習理論入門 -PAC学習とかVC次元とか-
計算論的学習理論入門 -PAC学習とかVC次元とか-計算論的学習理論入門 -PAC学習とかVC次元とか-
計算論的学習理論入門 -PAC学習とかVC次元とか-
 
PRML復々習レーン#11 前回までのあらすじ
PRML復々習レーン#11 前回までのあらすじPRML復々習レーン#11 前回までのあらすじ
PRML復々習レーン#11 前回までのあらすじ
 
SMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装するSMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装する
 
PRML復々習レーン#10 前回までのあらすじ
PRML復々習レーン#10 前回までのあらすじPRML復々習レーン#10 前回までのあらすじ
PRML復々習レーン#10 前回までのあらすじ
 
PRML復々習レーン#10 7.1.3-7.1.5
PRML復々習レーン#10 7.1.3-7.1.5PRML復々習レーン#10 7.1.3-7.1.5
PRML復々習レーン#10 7.1.3-7.1.5
 
PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1
 
PRML復々習レーン#9 前回までのあらすじ
PRML復々習レーン#9 前回までのあらすじPRML復々習レーン#9 前回までのあらすじ
PRML復々習レーン#9 前回までのあらすじ
 
PRML復々習レーン#7 前回までのあらすじ
PRML復々習レーン#7 前回までのあらすじPRML復々習レーン#7 前回までのあらすじ
PRML復々習レーン#7 前回までのあらすじ
 
PRML復々習レーン#3 前回までのあらすじ
PRML復々習レーン#3 前回までのあらすじPRML復々習レーン#3 前回までのあらすじ
PRML復々習レーン#3 前回までのあらすじ
 
SVM実践ガイド (A Practical Guide to Support Vector Classification)
SVM実践ガイド (A Practical Guide to Support Vector Classification)SVM実践ガイド (A Practical Guide to Support Vector Classification)
SVM実践ガイド (A Practical Guide to Support Vector Classification)
 
PRML復々習レーン#2 2.3.6 - 2.3.7
PRML復々習レーン#2 2.3.6 - 2.3.7PRML復々習レーン#2 2.3.6 - 2.3.7
PRML復々習レーン#2 2.3.6 - 2.3.7
 
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical SearchWSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
WSDM2012読み会: Learning to Rank with Multi-Aspect Relevance for Vertical Search
 
Collaborative Ranking: A Case Study on Entity Ranking (EMNLP2011読み会)
Collaborative Ranking: A Case Study on Entity Ranking (EMNLP2011読み会)Collaborative Ranking: A Case Study on Entity Ranking (EMNLP2011読み会)
Collaborative Ranking: A Case Study on Entity Ranking (EMNLP2011読み会)
 

Recently uploaded

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

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

  • 1. DSIRNLP#3 LT Fig4.5: 辞書挟み込み型転置インデクス を用いた検索エンジン 2012-09-30 Yoshihiko Suhara @sleepy_yoshi 1
  • 2. 背景 • 昨年のGWの出来事 – ブッチャー本 [1] 読んでたら辞書挟み込み型インデクスについて記述 があり,実装したくなった – 偶然にも明日からGW – とりあえずやっつけで実装 – ちゃんと仕上げようとするとそのまま忘れ去るので,区切りをつける 意味でとりあえず公開…するの忘れて一年が経った ブッチャー本 2
  • 4. 通常の転置インデクス • 辞書と呼ばれるデータ構造を利用して文書IDや出 現位置が記載された転置リストを取得する – 辞書にはトライ木やハッシュなどを利用 通常の転置インデクス 辞書 転置リスト 4
  • 5. 辞書挟み込み型転置インデクス • 辞書を明示的に持たず,転置リストの先頭に 付与した状態で連結したもの 語彙 転置リスト 語彙 転置リスト 語彙 転置リスト … 辞書を転置リストの間に挟み込んでいる 5
  • 6. 通常の転置インデクスとの比較 通常の転置インデクス 辞書 転置リスト 辞書挟み込み型転置インデクス … 辞書を挟み込んでいる 6
  • 7. Fig4.5: 辞書挟み込み型転置インデクス • 辞書をインデクスに挟み込んだ形式の転置イン デクス[1][2] – 文献[1]の図4.5で説明されていたからFig4.5と命名 ブッチャー本 Fig4.5 (p.115) さて,どのように検索するのか? 7
  • 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. 検索処理の例: 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. 補足: 検索範囲 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
  • 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
  • 14. インデクス構築 Usage: ./index_writer <input filename> <output index path> [block size] # 例 $ ./index_write sample.dat hoge 1024 Index construction done. sample.dat http://www.hoge.com/ 飛ばねえ 豚 は ただ の 豚 だ http://www.bar.com/ 豚肉 は おいしい http://www.piyo.com/ 豚 は 豚 で も ただ の 豚 ・・・ • 入力フォーマット – 各行が<DocName>¥t<Text> • Textはトークン毎にスペース区切り • 改行を含めることができない 14
  • 15. 検索 Usage: ./index_searcher <index basename> <query> # 例 $ ./index_searcher hoge 豚 5 position found === http://www.hoge.com/ http://www.piyo.com/ • クエリはインデクスに格納されているトークンで ある必要がある – 上記例の場合「豚」と「豚肉」をまったく別のトークンと して扱っている • AND検索,フレーズ検索には現在未対応 15
  • 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. 生成されるインデクス 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
  • 20. TODO (できるといいな…) • やっつけ実装なので,思いつくだけでもたくさん – ベンチマーク – インデックスの圧縮 • 差分値を取る • Variable-byte符号 – AND検索,フレーズ検索の実装 – Bi-gramインデクスの実装 – スニペット表示部分の実装 – ベンチマーク – 全体的なコード書き直し – など 20
  • 21. 明日のために • Dictionary Interleaving 形式のインデクスは辞 書を明示的に持たないため,複数インデクス をマージしやすい – Merge-based index construction に適した形式 • 山田さんの記事[4]を参考 • 複数インデクスを入力して,マージ結果を出 力するような使い方ができる検索エンジンが できるんじゃないかな 21
  • 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