3400万件の100文字程度の日本語のテキストを150万件のラベルに分類しようとしています。アドバイスください。
##どこまでやったか
- EC2のc3.8xlargeを1台用意しました(ごついやつ)
- 日本語をmecabで切り分けました
- sk-learnでvectorizeしました(MAX_FEATURES=10000)
- sk-learnでTruncatedSVDしました
- sk-learnでnormarizeしました
- ライブラリ外でCython使えるところはCythonで書きました(cdefを使える限り使いました)
- RandomForestClassifierでn_jobs=32にしてfitしました(10コアまでしか認識しなかった)
##何ができないか
- 上記の条件で48時間実行しましたがfit中にセグメンテーション違反でこけました
- 同条件で試しにトレーニングデータを150万件に減らしたけど、それでも24時間以上かけて終わりませんでした
- セグメンテーション違反の原因は未調査です(が、上記の実行時間等から、このやり方では使い物にならない気がしているので、抜本的にやり方を変える必要があるのではないかと思っています)
##何がしたいか
下記の前提を守りつつ学習と予測をできるようにしたいです
##前提
- 縦3400万件、横100文字程度の日本語のテキストで、それぞれに正解のラベルがあるデータでトレーニングと予測をしようとしています
- その道2週間の素人なので簡単な方法が望ましいです
- 学習一発に3万円くらいならかけられます(場合によってはもうちょっとかけられるかも)
- 100文字の日本語の内容は聞かないでください。名詞が多いです。
- RandomForestにしたのは、sk-learnの分類器を10000件くらいのデータでかたっぱしから試したら精度が良かったからです
- 最も成績が良く、かつ学習が速かった分類器はExtraTreesClassifierでしたが、Cythonにしたらセグメンテーションエラーを頻発し、原因を追い切れなかったので諦めました
- 目標の学習時間は48時間、予測時間は1分です
##今考えてる選択肢(上の方が優先順位が高い)
1.spark+mlib+EC2+金
2.Mahout+hadoop+Elastic Map Reduce+金