SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
© 宋 美玄
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

Weitere ähnliche Inhalte

Was ist angesagt?

形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介
形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介
形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介Toshinori Sato
 
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門Tatsuya Tojima
 
Big Data入門に見せかけたFluentd入門
Big Data入門に見せかけたFluentd入門Big Data入門に見せかけたFluentd入門
Big Data入門に見せかけたFluentd入門Keisuke Takahashi
 
Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由Soudai Sone
 
Rとpythonとjuliaで機械学習レベル4を目指す
Rとpythonとjuliaで機械学習レベル4を目指すRとpythonとjuliaで機械学習レベル4を目指す
Rとpythonとjuliaで機械学習レベル4を目指すyuta july
 
PHPで全文検索エンジンをつくるまで
PHPで全文検索エンジンをつくるまでPHPで全文検索エンジンをつくるまで
PHPで全文検索エンジンをつくるまで優之 田中
 
Japan.r ver1.2 20171202_ota
Japan.r ver1.2 20171202_otaJapan.r ver1.2 20171202_ota
Japan.r ver1.2 20171202_ota博三 太田
 
DBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキルDBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキルSatoshi Yamada
 
正規表現で楽しよう
正規表現で楽しよう正規表現で楽しよう
正規表現で楽しよう笹川 純一
 
Jubatusにおける機械学習のテスト@MLCT
Jubatusにおける機械学習のテスト@MLCTJubatusにおける機械学習のテスト@MLCT
Jubatusにおける機械学習のテスト@MLCTYuya Unno
 
mecab-ipadic-NEologd の効果的な使い方
mecab-ipadic-NEologd の効果的な使い方mecab-ipadic-NEologd の効果的な使い方
mecab-ipadic-NEologd の効果的な使い方Toshinori Sato
 
_gaTracker 第4回ミーティング『not providedをどうとらえるか』 いちしま泰樹
_gaTracker 第4回ミーティング『not providedをどうとらえるか』 いちしま泰樹_gaTracker 第4回ミーティング『not providedをどうとらえるか』 いちしま泰樹
_gaTracker 第4回ミーティング『not providedをどうとらえるか』 いちしま泰樹Yasuki Ichishima
 
bottleで始めるWEBアプリの最初の一歩
bottleで始めるWEBアプリの最初の一歩bottleで始めるWEBアプリの最初の一歩
bottleで始めるWEBアプリの最初の一歩Satoshi Yamada
 

Was ist angesagt? (13)

形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介
形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介
形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介
 
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門
 
Big Data入門に見せかけたFluentd入門
Big Data入門に見せかけたFluentd入門Big Data入門に見せかけたFluentd入門
Big Data入門に見せかけたFluentd入門
 
Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由Web エンジニアが postgre sql を選ぶ 3 つの理由
Web エンジニアが postgre sql を選ぶ 3 つの理由
 
Rとpythonとjuliaで機械学習レベル4を目指す
Rとpythonとjuliaで機械学習レベル4を目指すRとpythonとjuliaで機械学習レベル4を目指す
Rとpythonとjuliaで機械学習レベル4を目指す
 
PHPで全文検索エンジンをつくるまで
PHPで全文検索エンジンをつくるまでPHPで全文検索エンジンをつくるまで
PHPで全文検索エンジンをつくるまで
 
Japan.r ver1.2 20171202_ota
Japan.r ver1.2 20171202_otaJapan.r ver1.2 20171202_ota
Japan.r ver1.2 20171202_ota
 
DBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキルDBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキル
 
正規表現で楽しよう
正規表現で楽しよう正規表現で楽しよう
正規表現で楽しよう
 
Jubatusにおける機械学習のテスト@MLCT
Jubatusにおける機械学習のテスト@MLCTJubatusにおける機械学習のテスト@MLCT
Jubatusにおける機械学習のテスト@MLCT
 
mecab-ipadic-NEologd の効果的な使い方
mecab-ipadic-NEologd の効果的な使い方mecab-ipadic-NEologd の効果的な使い方
mecab-ipadic-NEologd の効果的な使い方
 
_gaTracker 第4回ミーティング『not providedをどうとらえるか』 いちしま泰樹
_gaTracker 第4回ミーティング『not providedをどうとらえるか』 いちしま泰樹_gaTracker 第4回ミーティング『not providedをどうとらえるか』 いちしま泰樹
_gaTracker 第4回ミーティング『not providedをどうとらえるか』 いちしま泰樹
 
bottleで始めるWEBアプリの最初の一歩
bottleで始めるWEBアプリの最初の一歩bottleで始めるWEBアプリの最初の一歩
bottleで始めるWEBアプリの最初の一歩
 

Andere mochten auch

第1回茶ッカソン in Tokyo プレゼンシート「チームNifty」
第1回茶ッカソン in Tokyo プレゼンシート「チームNifty」第1回茶ッカソン in Tokyo プレゼンシート「チームNifty」
第1回茶ッカソン in Tokyo プレゼンシート「チームNifty」kakusan40
 
テキストマイニングのイメージと実際
テキストマイニングのイメージと実際テキストマイニングのイメージと実際
テキストマイニングのイメージと実際antibayesian 俺がS式だ
 
さくさくテキストマイニング入門セッション
さくさくテキストマイニング入門セッションさくさくテキストマイニング入門セッション
さくさくテキストマイニング入門セッションantibayesian 俺がS式だ
 
Credential social media_live_v1_3
Credential social media_live_v1_3Credential social media_live_v1_3
Credential social media_live_v1_3Social Media Live!
 
第1回茶ッカソン in Tokyo プレゼンシート「FULLER」
第1回茶ッカソン in Tokyo プレゼンシート「FULLER」第1回茶ッカソン in Tokyo プレゼンシート「FULLER」
第1回茶ッカソン in Tokyo プレゼンシート「FULLER」kakusan40
 
Python東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしようPython東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしようHiroshi Funai
 

Andere mochten auch (14)

Credential twittorebiew v1.3
Credential twittorebiew v1.3Credential twittorebiew v1.3
Credential twittorebiew v1.3
 
第1回茶ッカソン in Tokyo プレゼンシート「チームNifty」
第1回茶ッカソン in Tokyo プレゼンシート「チームNifty」第1回茶ッカソン in Tokyo プレゼンシート「チームNifty」
第1回茶ッカソン in Tokyo プレゼンシート「チームNifty」
 
テキストマイニングのイメージと実際
テキストマイニングのイメージと実際テキストマイニングのイメージと実際
テキストマイニングのイメージと実際
 
ガチャとは心の所作
ガチャとは心の所作ガチャとは心の所作
ガチャとは心の所作
 
さくさくテキストマイニング入門セッション
さくさくテキストマイニング入門セッションさくさくテキストマイニング入門セッション
さくさくテキストマイニング入門セッション
 
Credential social media_live_v1_3
Credential social media_live_v1_3Credential social media_live_v1_3
Credential social media_live_v1_3
 
神の言語による自然言語処理
神の言語による自然言語処理神の言語による自然言語処理
神の言語による自然言語処理
 
第1回茶ッカソン in Tokyo プレゼンシート「FULLER」
第1回茶ッカソン in Tokyo プレゼンシート「FULLER」第1回茶ッカソン in Tokyo プレゼンシート「FULLER」
第1回茶ッカソン in Tokyo プレゼンシート「FULLER」
 
チームラボ忘年会
チームラボ忘年会チームラボ忘年会
チームラボ忘年会
 
SPSSで簡単テキストマイニング
SPSSで簡単テキストマイニングSPSSで簡単テキストマイニング
SPSSで簡単テキストマイニング
 
Sakusaku svm
Sakusaku svmSakusaku svm
Sakusaku svm
 
企業における統計学入門
企業における統計学入門企業における統計学入門
企業における統計学入門
 
Python東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしようPython東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしよう
 
Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析
 

Ähnlich wie 全文検索入門

図書館でのSolrの使い方
図書館でのSolrの使い方図書館でのSolrの使い方
図書館でのSolrの使い方Kosuke Tanabe
 
おとなのテキストマイニング
おとなのテキストマイニングおとなのテキストマイニング
おとなのテキストマイニングMunenori Sugimura
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネスMie Mori
 
図書館でAPIをスルメのように 味わうには
図書館でAPIをスルメのように 味わうには図書館でAPIをスルメのように 味わうには
図書館でAPIをスルメのように 味わうにはTakanori Hayashi
 
スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤Takumi Sakamoto
 
愛と涙のWordPress無理やりカスタマイズ事例集
愛と涙のWordPress無理やりカスタマイズ事例集愛と涙のWordPress無理やりカスタマイズ事例集
愛と涙のWordPress無理やりカスタマイズ事例集Hidekazu Ishikawa
 
self made Fulltext search first_step
self made Fulltext search first_stepself made Fulltext search first_step
self made Fulltext search first_stepRyou Katou
 
実践!Elasticsearch + Sudachi を用いた全文検索エンジン
実践!Elasticsearch + Sudachi を用いた全文検索エンジン実践!Elasticsearch + Sudachi を用いた全文検索エンジン
実践!Elasticsearch + Sudachi を用いた全文検索エンジンS. T.
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展Recruit Technologies
 
RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」
RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」
RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」Kosuke Tanabe
 
最近作ったもの
最近作ったもの最近作ったもの
最近作ったものonozaty
 
協調フィルタリング with Mahout
協調フィルタリング with Mahout協調フィルタリング with Mahout
協調フィルタリング with MahoutKatsuhiro Takata
 
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Ryoji Kurosawa
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバShinsuke Sugaya
 
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用Inoue Seki
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例terurou
 
20110305_Code4Lib2011参加報告会:田辺浩介参加報告
20110305_Code4Lib2011参加報告会:田辺浩介参加報告20110305_Code4Lib2011参加報告会:田辺浩介参加報告
20110305_Code4Lib2011参加報告会:田辺浩介参加報告Code4Lib JAPAN
 
GoogleAnalytics Tools クックブック
GoogleAnalytics Tools クックブックGoogleAnalytics Tools クックブック
GoogleAnalytics Tools クックブックTakashi Sudou
 
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支えるFirebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える健一 辰濱
 

Ähnlich wie 全文検索入門 (20)

図書館でのSolrの使い方
図書館でのSolrの使い方図書館でのSolrの使い方
図書館でのSolrの使い方
 
おとなのテキストマイニング
おとなのテキストマイニングおとなのテキストマイニング
おとなのテキストマイニング
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネス
 
図書館でAPIをスルメのように 味わうには
図書館でAPIをスルメのように 味わうには図書館でAPIをスルメのように 味わうには
図書館でAPIをスルメのように 味わうには
 
スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤
 
愛と涙のWordPress無理やりカスタマイズ事例集
愛と涙のWordPress無理やりカスタマイズ事例集愛と涙のWordPress無理やりカスタマイズ事例集
愛と涙のWordPress無理やりカスタマイズ事例集
 
self made Fulltext search first_step
self made Fulltext search first_stepself made Fulltext search first_step
self made Fulltext search first_step
 
実践!Elasticsearch + Sudachi を用いた全文検索エンジン
実践!Elasticsearch + Sudachi を用いた全文検索エンジン実践!Elasticsearch + Sudachi を用いた全文検索エンジン
実践!Elasticsearch + Sudachi を用いた全文検索エンジン
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展
 
Elastic ML Introduction
Elastic ML IntroductionElastic ML Introduction
Elastic ML Introduction
 
RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」
RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」
RubyKaigi2011講演資料「日本の図書館はどのようにRubyを使っているか」
 
最近作ったもの
最近作ったもの最近作ったもの
最近作ったもの
 
協調フィルタリング with Mahout
協調フィルタリング with Mahout協調フィルタリング with Mahout
協調フィルタリング with Mahout
 
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
 
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
 
20110305_Code4Lib2011参加報告会:田辺浩介参加報告
20110305_Code4Lib2011参加報告会:田辺浩介参加報告20110305_Code4Lib2011参加報告会:田辺浩介参加報告
20110305_Code4Lib2011参加報告会:田辺浩介参加報告
 
GoogleAnalytics Tools クックブック
GoogleAnalytics Tools クックブックGoogleAnalytics Tools クックブック
GoogleAnalytics Tools クックブック
 
Firebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支えるFirebase & BigQuery で Android アプリの成⻑を支える
Firebase & BigQuery で Android アプリの成⻑を支える
 

全文検索入門

  • 3.
  • 4. オークションで安く買いたい! Wassyoi! Wassyoi! Wassyoi! ※Wassyoi!は架空のオークションサイトです。 この事例は全検索システムが抱える問題であり、 Wasshoi!オークションは例として参照しているだけです
  • 9. もしも… 本当に求めるモノを 見つけてくれる そんな検索エンジンが もしもあったならば… こんな悲劇は…
  • 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で形態素解析を試す
  • 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