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.

Nlp4 l intro-20150513

5,165 views

Published on

Introduction to NLP4L

Published in: Technology

Nlp4 l intro-20150513

  1. 1. 楽しいNLP4L Luceneのための自然言語処理ツール のご紹介 関口宏司@ロンウイット @kojisays * 個人の感想です。 * 1
  2. 2. NLP4Lとは? Natural Language Processing for Lucene ScalaベースのOSSプロジェクト 生テキストの代わりにLuceneインデックスのデータを使う Luceneの強力なAnalyzerが使える 単語カウント、単語N-gramカウント、自由な基準による文書 ベクトルが容易に取得できる 独自MLツール+他MLツールとの連携機能 2
  3. 3. 従来のNLPツールとの違い NLPツール コーパス(テキストデータ) モデル等 ツールや目的に合わせて 都度正規化 NLP4L Lucene インデックス Analyzer コーパス(テキストデータ) モデル、文書ベクトル等 Luceneの強力なAnalyzer により自由に正規化 3
  4. 4. Luceneインデックスの基本 インデックスに登録するテキストデータを用 意 1. カツオはサザエの弟 2. サザエはワカメの姉 3. ワカメはカツオの妹 4
  5. 5. Luceneインデックスの基本 単語に分割して整理 カツオ:1, は:1, サザエ:1, の:1, 弟:1 サザエ:2, は:2, ワカメ:2, の:2, 姉:2 ワカメ:3, は:3, カツオ:3, の:3, 妹:3 5
  6. 6. Luceneインデックスの基本 転置インデックスのできあがり の 1, 2, 3 は 1, 2, 3 カツオ 1, 3 サザエ 1, 2 ワカメ 2, 3 弟 1 姉 2 妹 3 6
  7. 7. NLP4Lによる Luceneインデックスの利用 の 1, 2, 3 は 1, 2, 3 カツオ 1, 3 サザエ 1, 2 ワカメ 2, 3 弟 1 姉 2 妹 3 Lucene/NLP4Lの関数 termFreq totalTermFreq docFreq : 正規化済みの 性質のよい単語 7
  8. 8. アーキテクチャー Apache Lucene API Scala Driver for Lucene (Analyzer, Word-counter, FST dictionary etc.) Scala High Level API (for convenience in text mining, stats etc.) Index Schema Browser (GUI/CUI) File based Mahout/Spark connector Lucene Index Model RDD for Spark Index Interactive Shell for NLP4L (REPL) *2015年5月現在、提供されていない機能も含みます。 8
  9. 9. 活用例 Lucene/Solr向け類義語辞書の自動生成 企業が保有するデータと公開データの名寄せ トピックモデルを使ったレコメンド 9
  10. 10. 開発メンバー Tomoko Uchida Pure Python FST & Morphological Analyzer developer Koji Sekiguchi Apache Lucene/Solr Committer & PMC member Tommaso Teofili Apache Lucene/Solr, UIMA, OpenNLP, Hama, etc. Committer 10
  11. 11. 楽しい その1 日本語チュートリアルがついていてすぐ試せ るから楽しい! http://nlp4l.github.io/tutorial_ja.html ビルドからサンプルコーパスダウンロード、 インデクシングまでわずか1分 $ git clone https://github.com/NLP4L/nlp4l.git // NLP4Lの取得 $ cd nlp4l $ sbt pack // ビルド $ ./target/pack/bin/nlp4l // REPLの起動 nlp4l> downloadLdcc // サンプルコーパスのダウンロード nlp4l> :load examples/index_ldcc.scala // Luceneインデックスの作成 11
  12. 12. 楽しい その2 REPLからLuceneインデックスブラウザが動 くから楽しい! nlp4l> :? // ヘルプの表示 nlp4l> open(“/tmp/index-ldcc”) // Luceneインデックスのオープン nlp4l> status // Luceneインデックスの状態表示 nlp4l> browseTerms(“title”) // titleフィールドの単語一覧を取得する宣言 nlp4l> nt // 「次」の単語一覧の表示 nlp4l> nextTerms(500) // 500単語スキップして表示 nlp4l> topTerms(100) // titleフィールドのトップ100単語の表示 12
  13. 13. 楽しい その3 LuceneのいろいろなAnalyzerがREPLから使 えるので楽しい! # StandardAnalyzer を取得 nlp4l> val analyzer1 = Analyzer(new org.apache.lucene.analysis.standard.StandardAnalyzer) # StandardAnalyzer で英文を解析 nlp4l> analyzer1.tokens(“Lucene is a popular software.”) # JapaneseAnalyzer を取得 nlp4l> val analyzer2 = Analyzer(new org.apache.lucene.analysis.ja.JapaneseAnalyzer) # JapaneseAnalyzer で日本語文を解析 nlp4l> analyzer2.tokens(“旅にこだわりたい若者から人気”) 13
  14. 14. 楽しい その4 Luceneの処理結果をScalaで加工できるので 楽しい! # 名詞のみterm要素を表示 nlp4l> analyzer2.tokens(“旅にこだわりたい若者から人気"). filter(_.getOrElse("partOfSpeech",null).startsWith("名詞")).map(_.getOrElse("term",null)) # 簡単ファセット(カテゴリごとの文書数をカウント) nlp4l> val searcher = ISearcher(“/tmp/index-ldcc”) nlp4l> searcher.search(rows=10000).map(_.getValue("cat").get(0)). foldLeft(scala.collection.mutable.Map.empty[String, Int]){(m,c) => m += (c -> (m.getOrElse(c, 0)+1))}.foreach(println(_)) 14
  15. 15. 楽しい その5 ShingleFilterが意外に活躍するところを目の当た りにして楽しい! 応用例 言語モデル 隠れマルコフモデル 連語分析モデル 15
  16. 16. ShingleFilterとは? 単語Nグラムフィルター WhitespaceTokenizer ShingleFilter (N=2) “Lucene is a popular software” Lucene/is/a/popular/software Lucene is/is a/a popular/ popular software 16
  17. 17. 言語モデル 言語の流暢さを表す Nグラムモデル=最も広範に使われる言語モ デル 2グラムモデルの計算例 17
  18. 18. Luceneインデックスと言語モデル ShingleFilterを使ったフィールドがあれば、 Luceneインデックスから言語モデルが計算可 能 *NLP4LではTermDocs.totalTermFreq()で単語出現数を得られます。 ShingleFilter(N=2)のフィールドで ”an apple”の出現数をカウント 通常のフィールドで ”an”の出現数をカウント 18
  19. 19. ShingleFilterを使ったサンプル 隠れマルコフモデル hmm_postagger.scala trans_katakana_alpha.scala 連語分析モデル colloc_analysis_[brown|ldcc].scala Brownコーパスを学習して 品詞タグを付加するサンプル カタカナ語・英単語対応データを 学習してカタカナ語から英単語を 推定するサンプル アルク社「英辞郎 on the WEB Pro」の 「頻度集計」ライクな出力をするサンプル 19
  20. 20. アルク社:英辞郎 on the WEB Pro 20
  21. 21. CollocationalAnalysisModel 連語分析のためのデータモデル アルク社「英辞郎 on the WEB Pro」の頻度集 計と同じことができる ShingleFilter + BothEndsFilter(自作) 21

×