先日、Jubatusハッカソンに参加してJubatusの良さが分かったので
Jubatusは、連像的に発生しているデータの流れ(フロー型)に対する逐次分析(リアルタイム処理)を対象とし、オンライン機械学習による深い分析という付加価値を提供するフレームワークです。
##Jubatusの利点
オンライン型なのでデータが定期的に増えるようなケースに有効(webニュース、新聞など)
分散可能なので大量のデータに対しても対応可能
データの前処理が標準であるので機械学習をするときの手間が省けます
#自然言語処理のための前処理
Jubatusの役に立つ前処理機能
1:自然言語処理をしているとHTMLタグを外したい
2:正規表現
3:様々な特徴量を扱いたい(Bag of Words, n-gram, tfなど)
詳しく使ってみたい方は下記
http://jubat.us/ja/fv_convert.html?highlight=num
#学習方法
Jubatusでは学習用のサーバーを複数立てることで分散学習を実現しています。
例えば識別用のサーバーを立てたい場合は下記のコマンドを実行します。
jubaclassifier --configpath config.json
上記のコマンドを実行するとローカルだとIPアドレス”127.0.0.1”、ポート番号”9199”でサーバーが設定されます。
設定用のファイルはjson形式で記述することが可能で下記を決めることが可能です。
・数値データの扱い
・数値データのフィルタ設定
・文字データの扱い
・文字データのフィルタ設定
・識別学習の方法
下記のチュートリアルに詳しい情報あり。
http://jubat.us/ja/tutorial.html
##学習データについて
学習データはDatum形式で渡す必要があり、Datum()の関数には辞書型のデータを渡すと変換してくれる仕組みがあります。
data_dict = json.loads(json形式のデータ)
datum = Datum(data_dict)
Json形式で記述したデータがあれば、上記のコードで辞書形式のコードとして取得してDatum形式で渡すことが可能です。
学習方法は設定用jsonファイルのmethodで指定が可能です。
メソッドの一覧は下記です。
#学習したモデルの扱い
学習したモデルは”/tmp/”以下に出力されます。
参考
http://jubat.us/ja/backup_and_recovery.html
学習したモデルの重みを確認してどの素性が強く効いているか確認したい場合があります。
その場合は出力されたデータはバイナリ形式なので中身を確認するにはテキストに直す必要があります。
jubatasにはjubadumpというコードがあるのでインストールするとバイナリファイルをテキストファイルに変換可能
ただし変換後のデータは下記のようになります。
出力されたファイルの形式例
素性の名前: "cand_kana_first$\u30C6\u30EB\u30D2\u30B3@str#bin\/bin": {
ラベル "1": {
"v3": 0,
"v2": 0,
重み "v1": -0.000523662019987
},
ラベル "0": {
"v3": 0,
"v2": 0,
重み "v1": 0.000523662019987
}
}
V2,V3はアルゴリズムによっては使用する
基本的にv1に出力された重みを確認すれば良いです。v2,v3はアルゴリズムによって使用するみたいですが、詳しくは分かりません。
以上がハッカソンに参加して得られた知見です。
事前処理から学習まで簡単に出来るjubatasは聞いたことがあるけど使っていなかった私にとっては便利だなと思えた代物なのでぜひ、皆さんも使って見て下さい。
チュートリアルコード
ハッカソンで作成したコード(基本的にチュートリアルのコードを改変しています)
#参考サイト一覧