Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java で楽して Jubatus したい!

Java で楽して Jubatus したい!

Jubatus Casual Talks #1 ( http://partake.in/events/8cfd254f-ef11-463e-8bc1-a01e9d25edb3 ) での発表「Java で楽して Jubatus したい!」の資料です。

KOMIYA Atsushi

June 02, 2013
Tweet

More Decks by KOMIYA Atsushi

Other Decks in Technology

Transcript

  1. 今日お話すること •Java から Jubatus を利用 してみる •Jubatus Java Client に

    ついて思うこと •Java からの Jubatus の 利用をちょっと楽にしてみる
  2. なぜ Java なの? •機械学習、というと Python が有力 (?) •NumPy, SciPy, scikit-learn…

    •でも、Java エンジニアの人口は それなりにいるよね? •かくいう弊社も、主要プロダクトは Java で書かれています
  3. 実際に Java から Jubatus を利用してみましょう •お題 •Twitter の Streaming API

    (sample) を しばいて流れ出てくるツイートの言語 (日本語 / 英語)を判別する簡単なお仕事 •jubatus-example の twitter_streaming_lang (Python 実装) を参考にさせて頂きました • http://github.com/jubatus/jubatus-example • https://github.com/jubatus/jubatus- example/tree/master/twitter_streaming_lang
  4. 実際に Java から Jubatus を利用してみましょう •お題 •Twitter の Streaming API

    (sample) を しばいて流れ出てくるツイートの言語 (日本語 / 英語)を判別する簡単なお仕事 •jubatus-example の twitter_streaming_lang (Python 実装) を参考にさせて頂きました • http://github.com/jubatus/jubatus-example • https://github.com/jubatus/jubatus- example/tree/master/twitter_streaming_lang Jubatus の多値分類機能 (Classifier) を利用します
  5. 使い方 •Maven の場合: pom.xml に以下を追記 •Maven じゃない場合: •http://download.jubat.us/maven/us/jubat/jubat us/ あたりから

    jar を直接ダウンロード <repositories> <repository> <id>jubat.us</id> <name>Jubatus Repository for Maven</name> <url>http://download.jubat.us/maven</url> </repository> </repositories> <dependencies> <dependency> <groupId>us.jubat</groupId> <artifactId>jubatus</artifactId> <version>x.x.x</version> </dependency> </dependencies> repositories 要素の中に記述する dependencies 要素の中に記述する
  6. こんな感じになりました (コードは http://goo.gl/RoxX0#L56 こちら) •やるべきことは、 ClassifierClient #classify() の呼び出し •そのために List<Datum>

    を組み立てている Jubatus サーバから 返ってきた結果より 分類スコアが一番高い ラベルを選出する
  7. Jubatus Java Client を使ってみた感想 •ちょっと辛い… •何が辛いかというと… •『#classify() に渡すオブジェクトの組み 立てが面倒だな…』(;´Д`) •『似たようなクラスがたくさんあるなあ。

    どれを使えばいいんだろ…』(´・ω・`) •『ClassifierClient#classify() の戻り値 が List の List …』(;´∀`) •『あれっよく見ると TupleStringString クラスが二つあるよ…』⊂⌒~⊃。Д。)⊃
  8. どうすれば Java での Jubatus の利用を楽にすることができるか? •Jubatus Java Client のコードは自動 生成されている

    •IDL の更新を考えると、Jubatus Java Client そのものに手を加えるのは非現実的 •Jubatus Java Client をまるっと包み 込み、使いやすいインタフェースを 提供するラッパーライブラリを作ろう というわけで・・・
  9. どんな構成? Jubaba Jubatus Java Client .java Jubaba を利用して Java ソースコードを記述する

    Jubaba サーバとのやりとりは 今まで通り Jubatus Java Client が担う Jubatus Java Client を内部で呼び出す
  10. どう使うの? Configuration conf = new ConfigurationBuilder().host("127.0.0.1").port(9199).build(); Classifier classifier = new

    Classifier(conf, "name"); // 訓練データを用いて多値分類のモデルを更新する classifier.newFeatures() .label("male") .add("hair", "short") .add("bottom", "jeans") .add("height", 1.70) .train(); // 更新したモデルを使って多値分類する ClassificationResult res = classifier.newFeatures() .add("hair", "short") .add("bottom", "jeans") .add("height", 1.70) .classify(); // 多値分類結果のうち、最大のスコアとなったラベルを取得する String estimatedLabel = res.maximumScoredLabel();
  11. どう使うの? Configuration conf = new ConfigurationBuilder().host("127.0.0.1").port(9199).build(); Classifier classifier = new

    Classifier(conf, "name"); // 訓練データを用いて多値分類のモデルを更新する classifier.newFeatures() .label("male") .add("hair", "short") .add("bottom", "jeans") .add("height", 1.70) .train(); // 更新したモデルを使って多値分類する ClassificationResult res = classifier.newFeatures() .add("hair", "short") .add("bottom", "jeans") .add("height", 1.70) .classify(); // 多値分類結果のうち、最大のスコアとなったラベルを取得する String estimatedLabel = res.maximumScoredLabel();
  12. どう使うの? Configuration conf = new ConfigurationBuilder().host("127.0.0.1").port(9199).build(); Classifier classifier = new

    Classifier(conf, "name"); // 訓練データを用いて多値分類のモデルを更新する classifier.newFeatures() .label("male") .add("hair", "short") .add("bottom", "jeans") .add("height", 1.70) .train(); // 更新したモデルを使って多値分類する ClassificationResult res = classifier.newFeatures() .add("hair", "short") .add("bottom", "jeans") .add("height", 1.70) .classify(); // 多値分類結果のうち、最大のスコアとなったラベルを取得する String estimatedLabel = res.maximumScoredLabel();
  13. どう使うの? Configuration conf = new ConfigurationBuilder().host("127.0.0.1").port(9199).build(); Classifier classifier = new

    Classifier(conf, "name"); // 訓練データを用いて多値分類のモデルを更新する classifier.newFeatures() .label("male") .add("hair", "short") .add("bottom", "jeans") .add("height", 1.70) .train(); // 更新したモデルを使って多値分類する ClassificationResult res = classifier.newFeatures() .add("hair", "short") .add("bottom", "jeans") .add("height", 1.70) .classify(); // 多値分類結果のうち、最大のスコアとなったラベルを取得する String estimatedLabel = res.maximumScoredLabel();
  14. どう使うの? •現在は多値分類機能 (Classifier)のみ サポート •Jubatus Java Client と同様にバルク処理 できます •詳しくは

    GitHub の jubaba-prototypeを 参照してください •https://github.com/komiya-atsushi/jubaba- prototype •※絶賛開発中により API 構成がガラリと変わ る恐れがございます