© 宋 美玄
iPad2欲しい!!!   RIP. jobs
オークションで安く買いたい!
Wassyoi!


           Wassyoi!


                                         Wassyoi!




                      ※Wassyoi!は架空のオークションサイトです。
                      この事例は全検索システムが抱える問題であり、
                      Wasshoi!オークションは例として参照しているだけです
安い順で並べたら、アクセサリばっか
               © 板垣恵介
安いiPad2見つからないし、
  これ買っちゃった!
購入一週間後
©宮崎駿
もしも…
 本当に求めるモノを
  見つけてくれる
そんな検索エンジンが
もしもあったならば…
  こんな悲劇は…
こんな悲劇を二度と起こさないために
そうだ!
  最強の
検索エンジン
 を作ろう!
自己紹介
●   ID:AntiBayesian
●   あんちべ!



●   専門:テキストマイニング、自然言語処理
●   職業:カジュアルにATM停止させちゃう銀行で金融
    工学研究員とかいう胡散臭い素敵なことしてた記憶が
●   math.empress@gmail.com
なぜ検索が必要か
●   検索はGoogleやMSなど、超大企業だけのもの?
    ●   先程のケースのように、ショッピングサイトでも重要
●   モノが溢れ、ニーズが多様化する時代。良いものを
    作るだけではなく、簡単に商品を見つけられるよう
    にしないと、お客様には届かない
●   共有情報を有効活用するにも検索が有効
    ●   社内事務手続集DB、肝心な情報が見つからない!
●   SEO対策するにも検索エンジンの中身を知らねば
Web検索エンジンの歴史
●   熾烈な検索エンジン戦争
●   2000年以前 AltaVista:最大ページ数を誇る
    ●
        どれだけ多くのページを検索できるか
●   2000年以後 Google:ページランク
    ●   どれだけ上手くランキングできているか
●   「より多くのデータ」から「よりデータを便利に」へ
時は情報大航海時代
●   どれだけ沢山のデータを持っているかではなく、
    どれだけユーザーが求める情報を抽出出来るか
●   データは活用出来る状態でないと何の意味も無い
●   検索とは、大規模データを有効活用するための
    必要不可欠な要素
アジェンダ
●   検索概論編
    ●
        検索方式
    ●   転置インデックス
    ●   検索モデル
    ●
        検索エンジンの評価
    ●
        索引語のスコアリング
●   検索実践編
    ●   Lucene/Solr入門
    ●   tweet検索
検索方式
●   順次検索:文書集合の先頭から、クエリが含まれて
    いる文書を検索し、文字列が一致しているものを見
    つける(grep、Ctrl + F検索をイメージ)
    ●   簡単にシステム構築できる
    ●   文書量多いと遅くなる
●   索引検索:事前に文書から作成した索引を用いる
    ●
        文書量多くても高速(分厚い本でも、索引があれば目的
        のページがすぐ引ける)
    ●
        索引を作る手間がかかる
    ●   現在の主流
転置インデックス
●   索引方式の主流。大抵の全文検索エンジンが対応
●   各索引語が文書に出現する位置を格納した表構
    造の索引
●   元の文書の2,3倍のサイズになるため、実装する
    場合は高度な圧縮技法が必要
●   索引の頻繁な更新に弱い
転置インデックスの作り方
1.各文書に番号を振る
2.各文書に含まれる単語と文書番号を紐付ける
3.単語毎に並べる
検索モデル:ブーリアンモデル
●   クエリと転置インデックスとの論理演算で検索
●   例:クエリが「犬」
    ●   番号1,2を返す
●
    例:クエリ が 「散歩道」
    ●   クエリを単語に分割{散歩 & 道}
    ●   {散歩 & 道}を満たす番号3を返す
検索エンジンの評価
                適合率と再現率

●   適合率(precision)-精度。検索結果にどれだけ求
    める情報が含まれているか
    ●   検索結果の適合文書数/検索された文書の数
    ●   検索結果100件の内、求めるデータが70件→ 70%
●   再現率(recall)-網羅性。もれなく抽出できるか
    ●   検索結果の適合文書数/全文書中の適合文書数
    ●   求めるデータが検索結果に100件、文書集合に200件
        → 50%
検索エンジンの評価 F値 
●   適合率と再現率にはトレードオフの関係がある
●   極端な話、全文書を検索結果として出せば、再現
    率は100%になり、適合率は非常に低くなる
●   F値で両方のバランスを考慮する
●   調和平均F = 2 / (1/再現率 + 1/適合率)が大きい
    程良い
    (参考)「F値に調和平均を使う理由」
    http://d.hatena.ne.jp/a_bicky/20101120/129026
    6655
索引語の重み付け TF-IDF
●   クエリが「ボール」では、サッカーと野球のどちらが
    求められているのか解らない。「キーパー」ならサッ
    カーと判断出来る→ボールよりキーパーの方が、
    文書の特定にとって重要
●
    各索引語の重要度を測り、重み付けしよう
●   局所的重み(TF:Term Frequency):頻度。再現率
    向上に利く
●   大域的重み(IDF:inverse document frequency):
    特定文書に集中して出現する索引語を重くする。
    文書による索引語の偏りを表す。適合率向上に利
    く。IDF = log全文書数 / 索引語を含む文書数
Lucene/Solr入門
●   Lucene:オープンソースの全文検索エンジン
●   Solr:Luceneを利用した検索アプリケーション
●   Wikipedia、twitterなど利用実績多数
●   転置インデックス方式
●   Java製。RubyやPHPなどでの利用も可能
●   検索結果はxmlやjsonなど様々な形式で出力可能
●   今回はtweetを登録・検索してみます
Solr ダウンロード
●   http://www.apache.org/dyn/closer.cgi/lucene/solr/
●   2011/10/15 最新版 apache-solr-3.4.0 をDL
Schema設定
●   インストールしたフォルダapache-solr-
    3.4.0examplesolrconf の schema.xml
●
    最低限必要な設定
    ●   types - データの型定義
    ●   fields – データのプロパティ定義
●   schema.xmlのtypes, fieldsブロックに次ページの定義を
    任意の場所に挿入する
Schema - <types>
<types>
<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100"
autoGeneratePhraseQueries="false">
 <analyzer>
    <tokenizer class="solr.JapaneseTokenizerFactory"/>
 </analyzer>
</fieldType>
</types>
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>
Solr 起動
●   >cd example
●   >java -jar start.jar
●   http://localhost:8983/solr/admin/
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で形態素解析を試す
gosen 形態素解析
登録用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
tweet登録
●   >cd exampledocs
●   > java
    -Durl=http://localhost:8983/solr/update/csv -jar
    post.jar tweet.csv
SakuSakuTweetMining
●   Streaming APIからtweetを自動収集するツール
●   http://d.hatena.ne.jp/AntiBayesian/20110702
●   screen_name, tweet, dateを取得。適宜加工要
Solr 検索
●   http://localhost:8983/solr/admin/form.jsp
検索結果-XML形式
まとめ
●   検索は大規模データ時代には必須
●   全文検索、転置インデックス方式が主流
●   Lucene/Solrは利用実績豊富な検索エンジン
●   重要なことは、検索エンジンを利用してどのように
    業務改善、売り上げ向上などに繋げられるか考え
    ること
参考文献
                       (難易度順)

●   検索エンジンはなぜ見つけるのか
●   Apache Solr入門
●   情報検索アルゴリズム
●   情報検索と言語処理
●   Introduction to Information Retrieval
●   Information Retrieval: Implementing and
    Evaluating Search Engines

全文検索入門

  • 1.
  • 2.
  • 4.
    オークションで安く買いたい! Wassyoi! Wassyoi! Wassyoi! ※Wassyoi!は架空のオークションサイトです。 この事例は全検索システムが抱える問題であり、 Wasshoi!オークションは例として参照しているだけです
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
    もしも… 本当に求めるモノを 見つけてくれる そんな検索エンジンが もしもあったならば… こんな悲劇は…
  • 10.
  • 11.
  • 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倍のサイズになるため、実装する 場合は高度な圧縮技法が必要 ● 索引の頻繁な更新に弱い
  • 19.
  • 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> <fieldTypename="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で形態素解析を試す
  • 31.
  • 32.
  • 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
  • 36.
  • 37.
    まとめ ● 検索は大規模データ時代には必須 ● 全文検索、転置インデックス方式が主流 ● Lucene/Solrは利用実績豊富な検索エンジン ● 重要なことは、検索エンジンを利用してどのように 業務改善、売り上げ向上などに繋げられるか考え ること
  • 38.
    参考文献 (難易度順) ● 検索エンジンはなぜ見つけるのか ● Apache Solr入門 ● 情報検索アルゴリズム ● 情報検索と言語処理 ● Introduction to Information Retrieval ● Information Retrieval: Implementing and Evaluating Search Engines