node.jsで機械学習
このお盆休みに、ふと思い立って、機械学習をやってみようと思った。
手軽に試したかったので、node.jsを使うことにした。
久しぶりのnode.jsである。
いつのまにやら、安定版がv0.8になっていた。
ということで、nvmを使って、v0.8.8を放りこんでみた。
丁度良いことに、node.jsで機械学習をやるためのプラグインがあった。
node-naivebayes-simpleだ。
mecabで形態素解析をして、naivebayes-simpleで分析して、mongodbにデータを貯めるらしい。
mecabには、node-mecab-bindingというプラグインを使い、mongodbは、node-mongodb-nativeというプラグインを使っている。
ということで、各種プラグインをインストール。
$ git clone git://github.com/hakobera/node-mecab-binding $ cd node-mecab-binding $ npm install -g $ npm link $ npm ln mecab-binding $ npm install -g mongodb $ npm ln mongodb $ git clone git://github.com/waka/node-naivebayes-simple $ cd node-naivebayes-simple $ npm install -g $ npm link
しかし、ここで、node-naivebayes-simpleのインストールがうまくいかない。
package.jsonに問題があるようだ。
authorの中に「"」が入っていたり、各要素の最後の「,」が省略されているためだ。
私の環境では、以下のように変更する必要があった。
{ "name": "naivebayes-simple", "version": "0.0.1", "description": "This is simple imaplementation of Naive Bayes algorythm.", "author": "Yoshimasa Wakahara <y.wakahara@gmail.com>", "repository": { "type": "git", "url" : "http://github.com/waka/node-naivebayes-simple.git" }, "engines": { "node": ">= 0.4.0 <= 0.5.2" }, "main": "./lib/naivebayes-simple" }
nodeのバージョンが「>= 0.4.0 <= 0.5.2」となっているが、v0.8.8でも問題なく動作しているようだ。
とりあえず、サンプルを実行。
var Train = require('naivebayes-simple').Train; Train.train('学習させるテキストだよ。', 'テストカテゴリ'); Classify document, and get document's category. var Classifier = require('naivebayes-simple').Classifier; Classifier.on('classified', function(arg) { var category = arg[0]; var originalDoc = arg[1]; console.log(originalDoc + ' => category: ' + category); }); Classifier.classify('分類するテキストだよ。');
mongodbでエラーになってしまった。。
collectionにcountがないと言っている。
mongodbプラグインのインターフェイスが変わってしまったのかと思い、mongooseプラグインを使うように書き換えようとしてみた。
書き換え中に、ふと思い出したことがあった、そういえば、node.jsは非同期だよな。
Trainで学習が終わって、データが作成される(初回なので、スキーマ自体も作成される)前に、Classifierが走っていしまったのが、原因だった。。不覚。。
TrainとClassifierをそれぞれ別々に動かして、動作することを確認。
次回は、これを使ってタグ付けツールを作ってみたので、それを書くことにする。