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