レビューのネガポジ randomforest vs lstm
TRANSCRIPT
レビューのネガポジ RandomForest vs LSTM
2017年 1月 30日Oisix 機械学習勉強会
本日の内容
1. 自己紹介
2. ネガポジ判定器を作りたい
3. RandomForest
4. LSTM
5. まとめ
自己紹介
講演者:MAX鈴木啓章 2016年 4月オイシックス入社
→ →経歴:銀行員 学習塾 IT業界
業務:パーソナライズ(レコメンド)
システムトレードが好きでデータ分析を仕事にしたいと思い、やる気MAXで入社しました。
本日の内容
1. 自己紹介
2. ネガポジ判定器を作りたい
3. RandomForest
4. LSTM
5. まとめ
ネガポジ判定器を作りたい
定期ボックス(お買い物カート)
ネガポジ判定器を作りたい
レビューがポジティブなのか ネガティブなのか自動で分かれば、
色々とお客様のサービス改善に繋げることができる
ネガポジ判定器を作りたい
77%ポジティブですね。星4つあげます。
ネガポジ判定器を作りたい
RandomForest vs LSTM
本日の内容
1. 自己紹介
2. ネガポジ判定器を作りたい
3. RandomForest
4. LSTM
5. まとめ
RandomForest
99%がデータの前処理です
2. データの前処理
1. データの前処理
3. データの前処理
5. データの前処理
4. データの前処理
6. データの前処理
7. RandomForest
やったこと
RandomForest データの前処理 その1
元データからレビュー内容と星を抽出
RandomForest データの前処理 その2
変なレコードを除外
RandomForest データの前処理 その3
0 -9A -Za -z。 - ゚ !"#$%&\'()*+,-./:;<=>?@[¥]^_`{|}~ 。、・「」 ˗ ‐‐‒–֊
−⁃⁻₋ ﹣ —―─-ー ━ー~∼∾”#### ’#####〰−./:;<>?@[¥]^ _`{|}〜
色々正規化
RandomForest
時短 名詞 ,一般 ,*,*,*,*,時短 ,ジタン ,ジタン で 助詞 ,格助詞 ,一般 ,*,*,*,で ,デ ,デ
作れ 動詞 ,自立 ,*,*,一段 ,連用形 ,作れる ,ツクレ ,ツクレ て 助詞 ,接続助詞 ,*,*,*,*,て ,テ ,テ 、 記号 ,読点 ,*,*,*,*,、 ,、 ,、
美味しく 形容詞 ,自立 ,*,*,形容詞・イ段 ,連用テ接続 ,美味しい ,オイシク ,オイシク 家族 名詞 ,一般 ,*,*,*,*,家族 ,カゾク ,カゾク
も 助詞 ,係助詞 ,*,*,*,*,も ,モ ,モ お気に入り 名詞 ,一般 ,*,*,*,*,お気に入り ,オキニイリ ,オキニイリ
です 助動詞 ,*,*,*,特殊・デス ,基本形 ,です ,デス ,デス 。 記号 ,句点 ,*,*,*,*,。 ,。 ,。
データの前処理 その4
RandomForest データの前処理 その5
頑張る
RandomForest データの前処理 その6
使う
k-means で出現頻度をHigh,Middle,Lowに分類
Middleに含まれる単語のみ採用
RandomForest
cross_validation.train_test_split
X_train
X_test
y_train
y_test
RandomizedSearchCV(RandomForestClassifier)
でた!
RandomForest
本日の内容
1. 自己紹介
2. ネガポジ判定器を作りたい
3. RandomForest
4. LSTM
5. まとめ
LSTMLSTMとは? ・わかる LSTM 〜最近の動向 http://qiita.com/t_Signull/items/21b82be280b46f467d1b
どうやって使おう? ・ディープラーニングを使って転職会議の 企業クチコミデータを感情分析してみる http://qiita.com/inuscript/items/54daa5aedde599e2637c
サンプルコードないの? ・ LSTM Networks for Sentiment Analysis http://deeplearning.net/tutorial/lstm.html
Theanoという Pythonの数値計算ライブラリで実装されたLSTM用のフレームワークみたいなものだよ
LSTM
ハイパーパラメータよく分からない
2. ソースの改造
1. データの前処理
3. LSTM
5. パラメータチューニング
4. パラメータチューニング
6. パラメータチューニング
7. パラメータチューニング
やったこと
LSTMデータの前処理
サラダ セロリ
トマト煮込む
次回
LSTMソースの改造
Unlike in Python 2, the zip function in Python 3 returns an iterator. Iterators can only be exhausted (by something like making a list out of them) once.
LSTMLSTM
学習が進む・・・batch_size=16validFreq=100 → 1エポック 1600サンプル
LSTMパラメータチューニング
割とデフォルト・隠れ層のユニット数 :128・バッチサイズ :16・オプティマイザ :AdaDelta・ドロップアウト :True
本日の内容
1. 自己紹介
2. ネガポジ判定器を作りたい
3. RandomForest
4. LSTM
5. まとめ
まとめ
RandomForest precision recall f1-score support
0 0.81 0.59 0.68 581
1 0.89 0.96 0.92 1996
avg / total
0.87 0.88 0.87 2577
precision recall f1-score support
0 0.81 0.65 0.72 581
1 0.90 0.96 0.93 1996
avg / total
0.88 0.89 0.88 2577
true_0 true_1
pred_0 344 83
pred_1 237 1913
true_0 true_1
pred_0 378 87
pred_1 203 1909
LSTM
ほぼ同じ結果でした
オマケ前処理が面倒なので、1文字ずつで LSTMしてみた
precision recall f1-score support
0 0.82 0.76 0.79 672
1 0.93 0.95 0.94 2274
avg / total
0.91 0.91 0.91 2946
true_0 true_1
pred_0 510 162
pred_1 111 2163
LSTM using single char
オマケ学習済みモデルで slackbotにしてみた
https://oi-study.herokuapp.com
machine_learningチャンネルで、@toccoで呼びかけよう!
※改行すると返事が来ません
ご清聴ありがとうございました