hatenablogに移転しました


このブログははてなブログに移転しました。
新しいURLは http://chezou.hatenablog.com/ です

カテゴリー: 雑談 | コメントをどうぞ

RubyKaigi行ってきました & RubyHirobaで「神奈川Ruby会議01」告知LTしてきました #rubykaigi #rubyhiroba #kana01


いっぱい面白い発表があったけど、諸般の事情により完結に

RubyKaigi

  • “Inside RubyMotion for Android”がやばかった。まさか、REPLを使ってAndroidのviewを動的に変更しているデモを見られるとは
  • @tmm1氏の”Ruby 2.1 in Production”がとにかく”Profile! Profile! Profile!”ということで、Ruby2.1に上げるまでに徹底的にプロファイルツールを作成して遅いところを潰していく姿勢に会場とともにため息ばかりついた
  • 須藤さんの”Three Ruby usages – High-level interface, Glue and Embedding – Inside Droonga”を聞いていると、GlueとしてのRubyをSWIG以外の方法でも触るべきだと感じた。JuliaはCしか叩けないけど、割りと楽なんだよな
  • amaで@gogo_tanakaさんの質問「数値計算にもRubyが盛り上がらないんですか?」の回答を聴くと、感覚が少しずれているなーと感じた。多分、ユーザがやりたいのは数値計算をして仕事をしたいのであって、数値計算ライブラリを作りたいわけではないという点に尽きるかなと。数式知らなくてもSVDしたい、みたいな
  • 会期中に意識高まって、Juliaのpackageを2つリリースメール流した
    • ADAGrad.jlも実装していたけどDictとArrayどちらを使うべきかわからないので保留
  • Ingressのagent各位ともっと交流すればよかった

RubyHiroba

  • iruby notebookの紹介は東急できちんと準備してやりなおそうと思います
  • rubimaにコミュニティ紹介の記事を書いて投稿するとよいと@muryoimplさんに言われました
  • @beroberoさんの発表の質疑で、「何故数値計算にPythonなどではなくRubyを選んだんですか?」という質問が出てきたのを見て、なるほどこういう切り口もあるのかと思った。ちなみに、berobero氏曰くJuliaはSciRubyよりマシくらいな位置づけとのこと
  • Railsガイドを翻訳している @yasulab さんとお話出来てよかった。gh-diffの宣伝もしてきましたよ
  • 悲しみのMagsafe2忘れ…
カテゴリー: program | タグ: , , | コメントをどうぞ

MeCabのJuliaバインディングMeCab.jlを作りました


Juliaから日本語形態素解析器として最も有名なMeCabを使えるMeCab.jlを作りました。

まだ、METADATA.jlにマージされていないのですが、きっと明日には使えるようになっていると思います。
[2014/09/15 23:33追記] マージされました!

How to use

簡単な使い方は

Pkg.add("MeCab")

を一度していただければ、こんな感じでアクセスできます

using MeCab

mecab = Mecab()

results = parse(mecab, "すももももももももものうち")

for result in results
  println(result.surface, ":", result.feature)
end

JuliaでCのコードをbindingするには

基本的には、公式マニュアルを読めばいいです。

Calling C and Fortran Code — Julia Language 0.4.0-dev documentation

とかだけ書くと大分辛いのですが、ポイントはccallを使えば良いということです。

例えば、以下の様なCのコードがあったとします。(マニュアルより引用)

int main(int argc, char **argv);

すると、Julia側のコードはこう書けばよいのです。

argv = [ "a.out", "arg1", "arg2" ]
ccall(:main, Int32, (Int32, Ptr{Ptr{Uint8}}), length(argv), argv)

問題は、ポインタが帰ってくる場合どうすればいいのかです。
これは、意外と簡単で第二引数をPtr{Void}で受けてあげれば良いです。

返り値が構造体なんかの場合は、対応するimmutableをJuliaで作ってあげて、unsafe_loadすれば良さそうです。

なお、関数ポインタも受けれるとか。
C Structs with function pointers – Google グループ

ただ未確認ですが、構造体のメンバに構造体がいる場合はどうやればいいのかわかりませんでした。
(なので、今回はmecab_node_tは諦めた)

コンストラクタとデストラクタ

MeCabのtaggerの様にに、Cで確保したポインタを保持しておく場合、コンストラクタで作りデストラクタで解放するのが良いようです。

bicycle1885さんのこの記事を参考に、実装してみました。
Juliaのデストラクター – りんごがでている

type Mecab
  ptr::Ptr{Void}

  function Mecab(option::String = "")
    argv = split(option)
    if(length(argv) == 0)
      argv = [""]
    end

    ptr = ccall(
      (:mecab_new, "libmecab"),
      Ptr{Void},
      (Cint, Ptr{Ptr{Uint8}}),
      length(argv), argv
    )

    if ptr == C_NULL
      error("failed to create tagger")
    end
    smart_p = new(ptr)

    finalizer(smart_p, obj -> ccall((:mecab_destroy, "libmecab"),  Void, (Ptr{Void},), obj.ptr))

    smart_p
  end
end

ポイントはfinalizerを実装すると、それがデストラクタとして働くということです。

C++は?クラスとかnamespaceとかは?

どうも扱えないようです。
色々と調べたのですが、特にnamespace周りは鬼門のようです。

なので、extern Cをしながらwrapperを一枚書くのが良さそうですね。

最後に

思ったより簡単にバインディングができました。
多分、Kytea.jlも書けそう。

この内容をJuliaTokyo #2でLTしてこようと思います。

カテゴリー: program | タグ: , | コメントをどうぞ

データ分析への向き合い方~Machine Learning Casual Talks #2を開催しました #MLCT


先週火曜日に Machine Learning Casual Talks #2 を開催しました。
発表は、グノシー関さん、PFI比戸さん(@sla)、@motivic_さん、カメリオから柴田さん、@SamuraiT01さんに発表頂きました。
発表していただいた皆さん、Yahoo!Japanの@qlutoさんはじめお手伝いいただいた皆さん、本当にありがとうございました!

togetterのまとめ()

[2014/08/30追記]
Gunosy関さんのスライドが落ちていたので追加しました。

tl;dr

  • 仮説なきデータ分析はやめよう
  • 施策の価値を人手で検証して、必要に応じて機械学習を使おう

詳細

今回は、@PENGUINANA_さんが「機械学習とKPI」というテーマを所望されていたので、それで各スピーカーにお話いただきました。
お互い示し合わせていなかったのに、Lean StartupのMVPの話を中心に話を組み立てていたのが非常に興味深かったです。
特に、グノシーの創業者の一人関さんが「B to Cサービスの現場から考える機械学習活用」という発表をされたのですが、
普段からクックパッド社内でも考える内容に非常にマッチしていて(機械学習をやるやらないは別にして)、データを活かす上での心づもりとして有益な情報でした。

ポイントとしては以下の三点です。
– 機械学習の精度と、ユーザー価値は別物である
– まずは施策の価値を人手で作って(MPV)、検証後機械学習を適用する
– 仮説がなければKPIを追いかけても意味が無い

もう一つ、PFIの比戸さんの発表も、データを扱う人なら必見の内容です。

ビール大好きな人のコメントが的を射ています。

LT

@motivic_ さん「素人がDEEP LEARNINGと他の機械学習の性能を比較してみた」

どう見ても素人詐欺です、本当にありがとうございました

@samurai01T さん「カメリオの記事の本文抽出」

内容もさることながら、初心者向けの機械学習おすすめ本の提示がよかったです。わかパタは読みやすくていい本ですね。

本文抽出といえば、 @shuyo さんのExtractContent((http://www.slideshare.net/shuyo/web-using-crf),Ruby1.9対応版)を使っていた記憶が蘇りました。

Akira Shibataさん「カメリオ精度向上に使った学習アプローチ」

最適化手法は古典的な方法を使っているそうなのですが、特徴的なのがクラウドワークスを使ってラベルを収集していること。
USだとAmazon Mechanical Turkを使うのが一般的に行われているのですが、日本でマイクロタスクを出して機械学習の正解データを作っているというのは感慨深いものを感じました。

まとめ

グノシー関さんの「数値は神である」、PFI比戸さんの「機械学習は苦しい」という話に表されるように、機械学習を「つかう」という点にフォーカスした会でしたが、機械学習をしない人にとっても、どうデータと向きあえばいいのか、というエッセンスが凝縮されていました。
僕自身も聞いていて”Lean Analytics”にあった、「行動に移せない指標は意味が無い」という話を具体的にした話を聞けて、局所最適解に陥らないデータ活用について考えさせられました。

カテゴリー: 勉強会 | タグ: , , | コメントをどうぞ

#JuliaTokyo 01で「Julia100本ノック」を発表してきました


JuliaTokyo 01で発表してきました。
取りまとめをしてくださった @sorami さんには感謝です。

事の発端は、Julia vs Pythonを読んだ@bicycle1885Machine Learning Casual Talksで「Julia勉強会やりましょう!」といったことでした。
そこで、Tokyo.RでRをdisっ紹介してきた @soramiとコンタクトをとり、始まりました。

まさか、本家のJuliaConの半分の40人近くの参加者が集う場になりました!(Julia歴24時間以内の人も多かったですが…)
togetterはこちら

先日公開した、Julia100本ノックの発表をしてきました。その時の記事

日本でおそらく一番Juliaにコミットしている@bicycle1885さんと意気投合したら、いつの間にかやることが決まっていたJuliaTokyoですが、貴重な日本語の資料が集まったいい機会でした。

また、PontusさんにはJuliaConの様子を世界でおそらく一番最初に報告してもらったり、Feature Engineer vs Machine Learnerなんて話も飛び交って非常に面白い場でした。

パフォチューするのに読んでおくべきページはこちらです

パッケージの作り方とか、C++のバインディングどうしたらいいの…な話とかが聞けて個人的には大満足でした。
また、IDEどうしたらいいんだよ!問題は非常に白熱をして、Julia Studioはオワコン説、IJulia最高!いやいやLightTable素晴らしいだろ。グローバル変数書いたら負けだからIJuliaとかどうなの、REPLの補完最高では?みたいな熱い戦いが繰り広げられました。

さて、第二回は?という話が出ていましたが、きっと発表者ドリブンだと思いますが、おそらくフェーズとしてはカンファレンススタイルよりもくもくする会を定期的に開催するのが良さそうですねーという話をしていました。

みなさん、Scikit-learnをpure julia移植すればワンチャンありますよ

カテゴリー: JuliaLang, program | タグ: , , | コメントをどうぞ

Julia100本ノック


Julia vs Python: ビットコインオプションのモンテカルロシミュレーションに引き続き、100 numpy exercisesという、面白いnumpyの練習問題があったのでそれのJulia版を作成しました。
実際には46個しかないのと、numpyの便利関数がなくて挫折したものとかいくつかありますが、pythonistaな方々はオリジナルと比較してJuliaの世界に来ていただければ楽しいのではないかと思います。

この話で得たものをまとめて、JuliaTokyo #1 – connpassで発表してこようと思います。
コードは最後にgistのを貼るとして、発表するための雑感をメモしておきます。

調べるべき所

numpy, matlabとの比較

  • matlab, numpyは歴史があるため充実した便利機能が沢山あることを実感
  • Matlabはおろか、Pythonよりストイックな感じ
    • 「Matlabである○○はありませんか?」「No!それ高速に処理できないだろ!」
    • “removed pascal(matlabであった関数)”
    • 「これあると便利だと思うんだけど」「IMHO 一つのことを複数のやり方でやれるのはどうかと思う」
  • たまに、独自の関数名をつけてきて辛い
    • argmaxならわかるのにindmaxってなんだよ(2014/06/22追記:argmaxにrenameされそうな動きがあるようです)

code

[2014/06/22追記]
– レポジトリを作りました。最新のものはこちらをどうぞ https://github.com/chezou/julia-100-exercises
notebookを見えるようにしました。nbview便利すぎる

[2014/06/24追記]
MLに投稿しました。結構array comprehension使えという話が多く、vectorizeしない方がいいんだよ!というツッコミが新鮮です

カテゴリー: program | タグ: , , | 1件のコメント

Machine Learning Casual Talks を開催しました #MLCT


昨日6/6(金)に、クックパッドでMachine Learning Casual Talksを開催しました。
はじめてこの規模の勉強会を開催したので、色々とどたばたしてしまいましたが、発表・参加・準備等協力していただいた皆様ありがとうございました!

募集開始して30分もしないうちに枠が埋まり、一時は100人を超える応募をしていただき注目されている分野であることを改めて認識しました。当日も天候も悪い中40名近くの方に集まっていただき、そして一言も”カジュアル”の定義をしていなかったのですが、意図していた定義どおりの活発な議論ができて良かったです。
特に、「ハイパーパラメーターの説明を一言もせずに進んでいく会なのか…」というコメントに対して、海野さんが「libsvmのCについて説明したのはかなり分かりやすくしたつもりだった」という返答が象徴的でした。
(なお、カジュアルの定義はcon_mameさんのこちらがわかりやすいです。)

発表者の立ち位置も、機械学習のシステムを社外に提供する立場、機械学習のライブラリを作る立場、自社サービスで機械学習を含めたシステムを作る立場と、三者バランスよく様々な話に展開して良かったです。

個人的には、Jubatusのバグの歴史を聞かせていただけたことが、とても価値があったなと思いました。
次回の開催も、PFI方面やGunosy方面から発表したいという話が来ていますので、発表者が揃い次第案内できればと思っています。

発表資料

chezou 「オープニングトーク」

@komiya_atsushi 「機械学習のテスト自動化コトハジメ」

@unnonouno 「Jubatusにおける機械学習のテスト」

@muraokaz, @qluto 「パーソナライズニュースを支えるML業務のまわしかた@Yahoo! JAPAN」

LT

@yamakatu 「pythonでカジュアルにディープラーニング」

Gunosy 関さん 「グノシーを支える機械学習業務プロセス」

@showyou「scikit-learn入門とお願い」

Cookpad 原島さん 「レシピの自動分類」

See also

追記

当日最も衝撃的だった情報

カテゴリー: 勉強会 | タグ: , | 1件のコメント