全文検索入門

5,420 views

Published on

全文検索入門

  1. 1. © 宋 美玄
  2. 2. iPad2欲しい!!! RIP. jobs
  3. 3. オークションで安く買いたい!Wassyoi! Wassyoi! Wassyoi! ※Wassyoi!は架空のオークションサイトです。 この事例は全検索システムが抱える問題であり、 Wasshoi!オークションは例として参照しているだけです
  4. 4. 安い順で並べたら、アクセサリばっか © 板垣恵介
  5. 5. 安いiPad2見つからないし、 これ買っちゃった!
  6. 6. 購入一週間後
  7. 7. ©宮崎駿
  8. 8. もしも… 本当に求めるモノを 見つけてくれるそんな検索エンジンがもしもあったならば… こんな悲劇は…
  9. 9. こんな悲劇を二度と起こさないために
  10. 10. そうだ! 最強の検索エンジン を作ろう!
  11. 11. 自己紹介● ID:AntiBayesian● あんちべ!● 専門:テキストマイニング、自然言語処理● 職業:カジュアルにATM停止させちゃう銀行で金融 工学研究員とかいう胡散臭い素敵なことしてた記憶が● math.empress@gmail.com
  12. 12. なぜ検索が必要か● 検索はGoogleやMSなど、超大企業だけのもの? ● 先程のケースのように、ショッピングサイトでも重要● モノが溢れ、ニーズが多様化する時代。良いものを 作るだけではなく、簡単に商品を見つけられるよう にしないと、お客様には届かない● 共有情報を有効活用するにも検索が有効 ● 社内事務手続集DB、肝心な情報が見つからない!● SEO対策するにも検索エンジンの中身を知らねば
  13. 13. Web検索エンジンの歴史● 熾烈な検索エンジン戦争● 2000年以前 AltaVista:最大ページ数を誇る ● どれだけ多くのページを検索できるか● 2000年以後 Google:ページランク ● どれだけ上手くランキングできているか● 「より多くのデータ」から「よりデータを便利に」へ
  14. 14. 時は情報大航海時代● どれだけ沢山のデータを持っているかではなく、 どれだけユーザーが求める情報を抽出出来るか● データは活用出来る状態でないと何の意味も無い● 検索とは、大規模データを有効活用するための 必要不可欠な要素
  15. 15. アジェンダ● 検索概論編 ● 検索方式 ● 転置インデックス ● 検索モデル ● 検索エンジンの評価 ● 索引語のスコアリング● 検索実践編 ● Lucene/Solr入門 ● tweet検索
  16. 16. 検索方式● 順次検索:文書集合の先頭から、クエリが含まれて いる文書を検索し、文字列が一致しているものを見 つける(grep、Ctrl + F検索をイメージ) ● 簡単にシステム構築できる ● 文書量多いと遅くなる● 索引検索:事前に文書から作成した索引を用いる ● 文書量多くても高速(分厚い本でも、索引があれば目的 のページがすぐ引ける) ● 索引を作る手間がかかる ● 現在の主流
  17. 17. 転置インデックス● 索引方式の主流。大抵の全文検索エンジンが対応● 各索引語が文書に出現する位置を格納した表構 造の索引● 元の文書の2,3倍のサイズになるため、実装する 場合は高度な圧縮技法が必要● 索引の頻繁な更新に弱い
  18. 18. 転置インデックスの作り方1.各文書に番号を振る2.各文書に含まれる単語と文書番号を紐付ける3.単語毎に並べる
  19. 19. 検索モデル:ブーリアンモデル● クエリと転置インデックスとの論理演算で検索● 例:クエリが「犬」 ● 番号1,2を返す● 例:クエリ が 「散歩道」 ● クエリを単語に分割{散歩 & 道} ● {散歩 & 道}を満たす番号3を返す
  20. 20. 検索エンジンの評価 適合率と再現率● 適合率(precision)-精度。検索結果にどれだけ求 める情報が含まれているか ● 検索結果の適合文書数/検索された文書の数 ● 検索結果100件の内、求めるデータが70件→ 70%● 再現率(recall)-網羅性。もれなく抽出できるか ● 検索結果の適合文書数/全文書中の適合文書数 ● 求めるデータが検索結果に100件、文書集合に200件 → 50%
  21. 21. 検索エンジンの評価 F値 ● 適合率と再現率にはトレードオフの関係がある● 極端な話、全文書を検索結果として出せば、再現 率は100%になり、適合率は非常に低くなる● F値で両方のバランスを考慮する● 調和平均F = 2 / (1/再現率 + 1/適合率)が大きい 程良い (参考)「F値に調和平均を使う理由」 http://d.hatena.ne.jp/a_bicky/20101120/129026 6655
  22. 22. 索引語の重み付け TF-IDF● クエリが「ボール」では、サッカーと野球のどちらが 求められているのか解らない。「キーパー」ならサッ カーと判断出来る→ボールよりキーパーの方が、 文書の特定にとって重要● 各索引語の重要度を測り、重み付けしよう● 局所的重み(TF:Term Frequency):頻度。再現率 向上に利く● 大域的重み(IDF:inverse document frequency): 特定文書に集中して出現する索引語を重くする。 文書による索引語の偏りを表す。適合率向上に利 く。IDF = log全文書数 / 索引語を含む文書数
  23. 23. Lucene/Solr入門● Lucene:オープンソースの全文検索エンジン● Solr:Luceneを利用した検索アプリケーション● Wikipedia、twitterなど利用実績多数● 転置インデックス方式● Java製。RubyやPHPなどでの利用も可能● 検索結果はxmlやjsonなど様々な形式で出力可能● 今回はtweetを登録・検索してみます
  24. 24. Solr ダウンロード● http://www.apache.org/dyn/closer.cgi/lucene/solr/● 2011/10/15 最新版 apache-solr-3.4.0 をDL
  25. 25. Schema設定● インストールしたフォルダapache-solr- 3.4.0examplesolrconf の schema.xml● 最低限必要な設定 ● types - データの型定義 ● fields – データのプロパティ定義● schema.xmlのtypes, fieldsブロックに次ページの定義を 任意の場所に挿入する
  26. 26. Schema - <types><types><fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100"autoGeneratePhraseQueries="false"> <analyzer> <tokenizer class="solr.JapaneseTokenizerFactory"/> </analyzer></fieldType></types>
  27. 27. Schema - <fields><fields> <field name="screen_name" type="text_ja" indexed="true" stored="true"/> <field name="tweet" type="text_ja" indexed="true" stored="true"/> <field name="tweetDate" type="pdate" indexed="true" stored="true"/></fields>
  28. 28. Solr 起動● >cd example● >java -jar start.jar● http://localhost:8983/solr/admin/
  29. 29. gosen インストール● Lucene/Solr向け形態素解析エンジン● http://code.google.com/p/lucene-gosen/downloads/list● インストールしたフォルダapache-solr- 3.4.0exampleexamplesolrlibにDLしたjarを置く● http://localhost:8983/solr/admin/analysis.jspで形態素解析を試す
  30. 30. gosen 形態素解析
  31. 31. 登録用tweet形式id,screen_name,tweet,tweetDate1,testID,こんにちは!テスト内容だよ!,2011-10-15T15:00:00Z2,AntiBayesian,まだスライド出来てない、やばい、眠い,2011-10-15T4:32:14Z3,gepuro,眠いです眠いです、もう無理です,2011-10-15T3:18:42Z4,toilet_lunch,シャワー浴びて寝るか~,2011-10-15T5:11:22Z
  32. 32. tweet登録● >cd exampledocs● > java -Durl=http://localhost:8983/solr/update/csv -jar post.jar tweet.csv
  33. 33. SakuSakuTweetMining● Streaming APIからtweetを自動収集するツール● http://d.hatena.ne.jp/AntiBayesian/20110702● screen_name, tweet, dateを取得。適宜加工要
  34. 34. Solr 検索● http://localhost:8983/solr/admin/form.jsp
  35. 35. 検索結果-XML形式
  36. 36. まとめ● 検索は大規模データ時代には必須● 全文検索、転置インデックス方式が主流● Lucene/Solrは利用実績豊富な検索エンジン● 重要なことは、検索エンジンを利用してどのように 業務改善、売り上げ向上などに繋げられるか考え ること
  37. 37. 参考文献 (難易度順)● 検索エンジンはなぜ見つけるのか● Apache Solr入門● 情報検索アルゴリズム● 情報検索と言語処理● Introduction to Information Retrieval● Information Retrieval: Implementing and Evaluating Search Engines

×