Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Lucene/Solr Revolution 2014 参加報告 
もとい、 Lucene FST & SolrTextTagger 
2014/12/8 
第15回Solr勉強会 
打田智子
はじめに 
今日は、Lucene FST と SolrTextTagger の紹介をします。 
カンファレンスに興味がある方はあとでスライドを見てくださ 
い。 
全セッションのスライド・ビデオは追って公開されます。 
#タイトル詐欺 m(_ ...
自己紹介 ╭( ・ㅂ・) و 
打田智子 @moco_beta 
所属: (株)ロンウイット (2014/11 入社) 
はじめての海外出張@入社3日め (ェ…
Agenda 
カンファレンス概要 
セッションレポート 
Semantic & Multilingual Strategies in Lucene/Solr (by Trey Grainger, 
CareerBuilder) 
もとい、Lu...
カンファレンス概要 
Lucene/Solr Revolution 2014 @ Washington, DC 
2014/11/13 - 11/14 (トレーニングを含めると 11/11 - 11/14) 
http://lucenerevo...
カンファレンス概要 
参加者 550+ 
参加組織 200+ 
25カ国からの参加 
スポンサー 8社 
http://www.slideshare.net/lucidworks/search-in-2020-presented-by-will...
カンファレンス概要 
会場 (Omni Shoreham Hotel) 
7
カンファレンス概要 
Opening remark の様子 
8
セッションレポート 
Semantic & Multilingual Strategies in Lucene/Solr 
(by Trey Grainger, CareerBuilder) 
CareerBuilder の事例にもとづく、多言...
多言語対応 
3 つの戦略 
1. 言語ごとに field を分ける 
2. 言語ごとに collection / core を分ける 
3. すべての言語を one field に入れる 
10
多言語対応: 
言語ごとに Field を分ける 
もっとも一般的なやり方 
言語ごとに fieldType (つまり、Analyzer) を定義して 
CharFilter / Tokenizer / TokenFilter 
言語ごとに異な...
多言語対応: 
言語ごとに Field を分ける 
Pros (抜粋) 
もっともシンプル 
1 core でも、シャーディングされた環境 (i.e. SolrCloud) でも問題なく動く 
Cons (抜粋) 
言語が増えれば検索速度が落ち...
多言語対応: 
言語ごとに collection / core を分ける 
言語ごとに fieldType を定義して (field を分ける場合と同じ) 
言語ごとに collection / core を用意して 
すべての言語で同じ fi...
多言語対応: 
言語ごとに collection / core を分ける 
Pros (抜粋) 
言語が増えても検索が速い(各言語に対する検索は並列で動く) 
検索対象 field は 1 つなので、クエリパーサは何でもいい 
Cons (抜粋...
多言語対応: 
すべての言語を one field に入れる 
Analyzer を動的に切り替え可能な、カスタム FieldType 
Solr にはない機能。フリータイムに作った 
“Solr in Action” (Manning, 20...
多言語対応: 
すべての言語を one field に入れる 
Pros (抜粋) 
どんな複数言語の組み合わせでも 1 つの field で対応できる 
検索性能の劣化が少ない 
検索対象 field は 1 つなので、クエリパーサは何でもい...
Semantic Search 
Semantic Search = 
Query 拡張 (再現率向上) + ランキングチューニング 
User Query : 
machine learning research and developmen...
Semantic Search 
Query 拡張のステップ 
1. ドメインに特化したフレーズのモデルを作る 
2. SolrTextTagger (Lucene/Solrベースのテキストタガー) に (1. で抽出された) 
ドメイン固有の...
Semantic Search Architecture 
今日の話はここ! 
(画像はスライドより引用) 19
Lucene FST 
Finite State Transducer (有限状態トランスデューサ) 
http://blog.mikemccandless.com/2010/12/using-finite-state-transducers-...
Lucene FST 
org.apache.lucene.util.fst パッケージ 
実装は難しい… 
Lucene での応用 
FuzzyQuery : Lucene FST API で書きなおし → 100倍速くなった (!?) 
J...
Lucene FST 
検索、自然言語処理のコンテキストにおいて 
高速・省メモリな辞書のためのデータ構造! 
22
Lucene FST 
注意 
FSTSynonymFilter はマルチトークンな類義語をうまく扱えな 
い問題がある (3x 時代から) 
[LUCENE-4499], [SOLR-3390] 
Highlighter と組み合わせたときハ...
SolrTextTagger 
Lucene FST / Solr を応用した汎用フレーズタガー 
https://github.com/OpenSextant/SolrTextTagger/ 
Text Tagging with Finite...
SolrTextTagger 
2つ(2段階)のFST 
単語(トークン)を認識するための FST 
フレーズを認識するための FST 
FSA の実装として FST を使っている(i.e. 受理状態時の Output なし) 
Solr の ...
SolrTextTagger 
JapaneseAnalyzer で使ってみるデモ 
26
SolrTextTagger の処理概要 
Solr にフレーズ(と、付加情報) 
をインデックス 
タギング対象の文字列を受付け 
インデックスから FST をビルド 
← 普通のテキストフィールド 
← カスタム RequestHandle...
SolrTextTagger の処理概要 
Analyzer をかませた 
リクエスト文字列に FST を適用 
マッチしたフレーズ(ドキュメ 
ント)のリストを作る 
フレーズとその start/end offset 
と、紐づく付加情報を返...
SolrTextTagger アーキテクチャ 
TaggerRequestHandler 
TaggerFstCorpus 
Tagger 
index 
token FST 
Searcher 
取得 
生成 
生成 
phrase FST ...
Semantic Search 
“研究用のプロトタイプ” ではなく、実際に稼働しているシステム 
参考 
http://www.treygrainger.com/posts/presentations/semantic-multilingua...
その他のセッション 
SolrCloud 関連 
SolrCloud at Apple: Automating and Scaling for Massive Multi-Tenancy (Presented by Jessica Mallet...
その他のセッション 
Solr (or Elasticsearch) ではなく、Top of Lucene でシステムを組んでいるところ 
も少数ながらあり 
Twitter, LinkedIn, Airbnb, etc. 
“Big Data...
その他のセッション 
Solr Anti-Patterns 
Presented by Rafał Kuć, Sematext Group, Inc. 
http://www.slideshare.net/kucrafal/solr-anti-...
まとめ / 所感 
リアルタイム検索、ビッグデータ、分析 (i.e. better Facet) への関心は引き続き高い 
SolrCloud はマルチテナント環境で、検索基盤としての使われ方を目指している 
1 つの SolrCloud で、...
おまけ:コミッターに素朴な質問 
カンファレンスパーティにて、コミッターに絡んでみた(緊 
張するのでアルコールが回ってから) 
35
おまけ:コミッターに素朴な質問 
Q. (SolrCloud は素晴らしいけど, ) Master/Slave レプリケーションは将来のバージョ 
ンでもサポートされる? 
to コミッターTシャツ着てた誰か。名札見えなかった・・・ 
A. Y...
Advent Calendar はじめました 
Lucene / Solr Advent Calendar 2014 
http://qiita.com/advent-calendar/2014/lucene_solr
提供 
株式会社リクルートテクノロジーズ 
ありがとうございます
Upcoming SlideShare
Loading in …5
×

20141208 solr勉強会

7,194 views

Published on

第15回Solr勉強会の資料です。

Published in: Technology
  • [2014.12.21 訂正] スライド25枚めで、”FSAの実装としてFSTを使っている (i.e. 受理状態時の Output なし)” と書いていますが、これは誤りです。マッチしたフレーズと、それに対応する Solr のドキュメントIDを紐付けるために FST の出力が使われています。よく考えたら当たり前なのですが。。。訂正してお詫びします。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

20141208 solr勉強会

  1. 1. Lucene/Solr Revolution 2014 参加報告 もとい、 Lucene FST & SolrTextTagger 2014/12/8 第15回Solr勉強会 打田智子
  2. 2. はじめに 今日は、Lucene FST と SolrTextTagger の紹介をします。 カンファレンスに興味がある方はあとでスライドを見てくださ い。 全セッションのスライド・ビデオは追って公開されます。 #タイトル詐欺 m(_ _;)m ハッシュタグ → #SolrJP
  3. 3. 自己紹介 ╭( ・ㅂ・) و 打田智子 @moco_beta 所属: (株)ロンウイット (2014/11 入社) はじめての海外出張@入社3日め (ェ…
  4. 4. Agenda カンファレンス概要 セッションレポート Semantic & Multilingual Strategies in Lucene/Solr (by Trey Grainger, CareerBuilder) もとい、Lucene FST & SolrTextTagger その他のセッション まとめ/所感 4
  5. 5. カンファレンス概要 Lucene/Solr Revolution 2014 @ Washington, DC 2014/11/13 - 11/14 (トレーニングを含めると 11/11 - 11/14) http://lucenerevolution.org/ Lucene/Solr のコミッターが数多く在籍する Lucidworks 社 主催によるカンファレンス Lucene/Solr の最新機能や利用事例の共有、技術者交流の場 5
  6. 6. カンファレンス概要 参加者 550+ 参加組織 200+ 25カ国からの参加 スポンサー 8社 http://www.slideshare.net/lucidworks/search-in-2020-presented-by-will-hayes-lucidworks より 6
  7. 7. カンファレンス概要 会場 (Omni Shoreham Hotel) 7
  8. 8. カンファレンス概要 Opening remark の様子 8
  9. 9. セッションレポート Semantic & Multilingual Strategies in Lucene/Solr (by Trey Grainger, CareerBuilder) CareerBuilder の事例にもとづく、多言語対応とセマン ティックサーチのアーキテクチャ http://www.treygrainger.com/posts/ presentations/semantic-multilingual-strategies-in- lucenesolr/ 9
  10. 10. 多言語対応 3 つの戦略 1. 言語ごとに field を分ける 2. 言語ごとに collection / core を分ける 3. すべての言語を one field に入れる 10
  11. 11. 多言語対応: 言語ごとに Field を分ける もっとも一般的なやり方 言語ごとに fieldType (つまり、Analyzer) を定義して CharFilter / Tokenizer / TokenFilter 言語ごとに異なる field を用意して text_en, text_fr, text_ja, … 各 field に適切な fieldType を紐付ける インデキシング時:言語ごとに適切な field にテキストデータを投入 検索時:Dismax-like クエリパーサで、各言語に対応するフィールドを横断検索 11
  12. 12. 多言語対応: 言語ごとに Field を分ける Pros (抜粋) もっともシンプル 1 core でも、シャーディングされた環境 (i.e. SolrCloud) でも問題なく動く Cons (抜粋) 言語が増えれば検索速度が落ちる Dismax-like クエリパーサを使うか、またはフィールド横断検索を作りこむ 必要あり 12
  13. 13. 多言語対応: 言語ごとに collection / core を分ける 言語ごとに fieldType を定義して (field を分ける場合と同じ) 言語ごとに collection / core を用意して すべての言語で同じ field 名を使う 言語ごとに fieldType を適切に紐付ける インデキシング時:言語ごとに適切な collection / core にテキストデータ投入(ルーティング を制御する) 検索時:分散検索の手法がそのまま使える。(集約用の検索サーバを前段に立てて、リクエ ストは集約サーバで受ける。集約サーバが各言語の collection / core に検索リクエストを投 げ、まとめてクライアントに返却) 13
  14. 14. 多言語対応: 言語ごとに collection / core を分ける Pros (抜粋) 言語が増えても検索が速い(各言語に対する検索は並列で動く) 検索対象 field は 1 つなので、クエリパーサは何でもいい Cons (抜粋) 環境が複雑になる 言語によるシャーディング(ルーティング)を自前実装する必要あり スコアリングが微妙になるかも (言語ごとにスコアリングしたあとで集約するため) 14
  15. 15. 多言語対応: すべての言語を one field に入れる Analyzer を動的に切り替え可能な、カスタム FieldType Solr にはない機能。フリータイムに作った “Solr in Action” (Manning, 2014/3 発売) と、Github にコードがある Solr に contribute したい (SOLR-6492) [SOLR-6492] Solr field type that supports multiple, dynamic analyzers https://issues.apache.org/jira/browse/SOLR-6492 15
  16. 16. 多言語対応: すべての言語を one field に入れる Pros (抜粋) どんな複数言語の組み合わせでも 1 つの field で対応できる 検索性能の劣化が少ない 検索対象 field は 1 つなので、クエリパーサは何でもいい Cons (抜粋) カスタムコードが必要 インデキシング時、検索時に prefix が必要で、複雑になる 16
  17. 17. Semantic Search Semantic Search = Query 拡張 (再現率向上) + ランキングチューニング User Query : machine learning research and development Portland, OR software engineer AND hadoop java Semantically Extended Query : (“machine learning”^10 OR “data scientist” OR “computer vision”) AND (“research and development”^10 OR “r&d”) AND (“Portland, OR”^10 OR “Portland, Oregon” OR {!geofilt.pt=45.512,-122.676 d=50 sfield=geo}) AND (“software engineer”^10 OR “software developer”) AND (hadoop^10 OR “big data” OR base OR hive) AND (java^10 OR j2ee) 17
  18. 18. Semantic Search Query 拡張のステップ 1. ドメインに特化したフレーズのモデルを作る 2. SolrTextTagger (Lucene/Solrベースのテキストタガー) に (1. で抽出された) ドメイン固有のフレーズをフィードする 3. SolrTextTagger で検索クエリからフレーズ抽出 &タギング 4. クエリのリライト シノニム、関連するキーワード、関連するカテゴリ、etc. 18
  19. 19. Semantic Search Architecture 今日の話はここ! (画像はスライドより引用) 19
  20. 20. Lucene FST Finite State Transducer (有限状態トランスデューサ) http://blog.mikemccandless.com/2010/12/using-finite-state-transducers- in.html “Essentially, an FST is a SortedMap<ByteSequence,SomeOutput>, if the arcs are in sorted order.” 20
  21. 21. Lucene FST org.apache.lucene.util.fst パッケージ 実装は難しい… Lucene での応用 FuzzyQuery : Lucene FST API で書きなおし → 100倍速くなった (!?) JapaneseTokenizer (Kuromoji) の辞書 etc… 参考: Automata Invasion (Lucene Revolution 2012) 21
  22. 22. Lucene FST 検索、自然言語処理のコンテキストにおいて 高速・省メモリな辞書のためのデータ構造! 22
  23. 23. Lucene FST 注意 FSTSynonymFilter はマルチトークンな類義語をうまく扱えな い問題がある (3x 時代から) [LUCENE-4499], [SOLR-3390] Highlighter と組み合わせたときハイライトずれが起こる 23
  24. 24. SolrTextTagger Lucene FST / Solr を応用した汎用フレーズタガー https://github.com/OpenSextant/SolrTextTagger/ Text Tagging with Finite State Transducers by David Smiley (Lucene/Solr, Elasticsearch 空間検索の開発者) もとは地名のタギングのために作られたもの 欧米の地名はフレーズになっているものが多い New York, San Fransisco, etc. 24
  25. 25. SolrTextTagger 2つ(2段階)のFST 単語(トークン)を認識するための FST フレーズを認識するための FST FSA の実装として FST を使っている(i.e. 受理状態時の Output なし) Solr の RequestHandler として実装されていて、Lucene / Solr の任意の Analyzer を 使えるので、単語の正規化ができる/柔軟性が高い LowerCaseFilter や SynonymFilter をかませる等 25
  26. 26. SolrTextTagger JapaneseAnalyzer で使ってみるデモ 26
  27. 27. SolrTextTagger の処理概要 Solr にフレーズ(と、付加情報) をインデックス タギング対象の文字列を受付け インデックスから FST をビルド ← 普通のテキストフィールド ← カスタム RequestHandler ← (初回のみ or 事前にビルド) 27
  28. 28. SolrTextTagger の処理概要 Analyzer をかませた リクエスト文字列に FST を適用 マッチしたフレーズ(ドキュメ ント)のリストを作る フレーズとその start/end offset と、紐づく付加情報を返す ← マッチするフレーズを探す ← Lucene の doc id のリスト ← 任意の ResponseHandler で 28
  29. 29. SolrTextTagger アーキテクチャ TaggerRequestHandler TaggerFstCorpus Tagger index token FST Searcher 取得 生成 生成 phrase FST new()時に ビルド getPhrases() (1フレーズ = 1ドキュメント) 29
  30. 30. Semantic Search “研究用のプロトタイプ” ではなく、実際に稼働しているシステム 参考 http://www.treygrainger.com/posts/presentations/semantic-multilingual-strategies-in-lucenesolr/ http://www.treygrainger.com/posts/presentations/crowdsourced-query-augmentation- through-the-semantic-discovery-of-domain-specific-jargon/ https://github.com/treygrainger/solr-in-action/tree/first-edition/src/main/java/sia/ch14 https://github.com/OpenSextant/SolrTextTagger/ 30
  31. 31. その他のセッション SolrCloud 関連 SolrCloud at Apple: Automating and Scaling for Massive Multi-Tenancy (Presented by Jessica Mallet, Apple) Scaling SolrCloud to a Large Number of Collections (Presented by Shalin Shekhar Mangar, Lucidworks) SolrCloud, in the Cloud, for NARA’s Billion+ Document Archive (Presented by Paul Nelson, Search Technologies) HDFS インテグレーション Solr on HDFS – Past, Present, and Future (Presented by Mark Miller, Cloudera) Secure Search: Using Apache Sentry to Add Authentication and Authorization Support to Solr (Presented by Gregory Chanan, Cloudera) Near Real Time Indexing Kafka Messages into Apache Blur (Presented by Dibyendu Bhattacharya, Pearson North America) 31
  32. 32. その他のセッション Solr (or Elasticsearch) ではなく、Top of Lucene でシステムを組んでいるところ も少数ながらあり Twitter, LinkedIn, Airbnb, etc. “Big Data” / “Analysis” 以外では、 “Multilingual” “Multi-language” というセッシ ョンがちらほら 欧米の開発者から「CJK対応は?」という質問はよく出ていた “Japanese company” と名指ししている人もいて、日本企業(市場?)への 関心も高く、日本語対応は必須と考えている様子 32
  33. 33. その他のセッション Solr Anti-Patterns Presented by Rafał Kuć, Sematext Group, Inc. http://www.slideshare.net/kucrafal/solr-anti-patterns 基本的な設計アンチパターンがまとまっているので、ノ ウハウの確認のために、一読すると良いかと思います 33
  34. 34. まとめ / 所感 リアルタイム検索、ビッグデータ、分析 (i.e. better Facet) への関心は引き続き高い SolrCloud はマルチテナント環境で、検索基盤としての使われ方を目指している 1 つの SolrCloud で、collection を複数管理するかたちで、複数の検索サービスをホストする 運用性や性能改善の Issue はたくさん上がっていて、鋭意絶賛開発中 検索自体は、自然言語処理や機械学習を絡めて高度化している ベーシックな全文検索やファセットによる絞込み、検索語のオートコンプリートの先へ ドメイン知識やユーザー行動履歴を使ったマッチング、エンティティサーチ、クエリ拡張(リライト) &スコアリング (去年に比べるとLuceneの話題が少ないかな・・・) 34
  35. 35. おまけ:コミッターに素朴な質問 カンファレンスパーティにて、コミッターに絡んでみた(緊 張するのでアルコールが回ってから) 35
  36. 36. おまけ:コミッターに素朴な質問 Q. (SolrCloud は素晴らしいけど, ) Master/Slave レプリケーションは将来のバージョ ンでもサポートされる? to コミッターTシャツ着てた誰か。名札見えなかった・・・ A. YES !! I love it ! :) Q. Heliosearch の機能を Solr へバックポートする計画はある? to Yonik さん A. It’s a very common question… … 何かいろいろ話してくれた気がするけど聞き取れず … I have no good answer. (^_^; 36
  37. 37. Advent Calendar はじめました Lucene / Solr Advent Calendar 2014 http://qiita.com/advent-calendar/2014/lucene_solr
  38. 38. 提供 株式会社リクルートテクノロジーズ ありがとうございます

×