moxt

Just another Blog site

KerasのCNNを使って文書分類する

   

TL;DR(笑)

これ見たら終わり。

fchollet/keras

日本語の文書分類したい

Mecabで分かち書きしたテキストを適当な配列に変換すればOK
配列変換はTokenizerという便利なクラスがKerasで用意してくれてるので、これを使う。

コードは下記の通り。
ほぼほぼ参考元と同じなので、自身の価値出してない。

わからないこと

テキストをどのような配列に変換するのが適当か?

今回はTokenizerを使ってテキストたちを配列へ変換した。

実装を読んでないので、詳しくは知らんがだいたい次のようなノリ。

  • 文書群に登場する単語に番号を貼る
  • 文書の単語を、単語に貼った番号に置き換えた配列にする

文章で説明するのが下手なので、具体例を挙げる。

['I am a pen', 'this is a pen', 'he is poop']という文書群が与えられたとする。

文書群に登場する単語に番号を貼る

素直に番号ふればいい。

{ I : 1, am : 2, a : 3, pen : 4, this: 5, is: 6, pen: 7, he: 8, poop: 9 }

こんな感じ。

文書の単語を、単語に貼った番号に置き換えた配列にする

‘I am a pen’ は [1,2,3,4]となり…
‘this is a pen’ は [5,6,3,7]となり…
‘he is poop’ は [8,6,9]となる…

上のような3つの配列を得たので『覚悟完了!』とはならない。

よくみると最後の配列だけ長さが違う。
Modelに突っ込む学習データの長さは統一しないとダメらしい。
なので、次のようなコードを追加してパディングする。

maxlenを5に指定すると長さ5の配列に膨らまされたり、切り詰められたりする。
例えば…’he is poop’ は [0,0,8,6,9]となる。

One-Hot配列とかはダメなのか気になる。
疎な配列はよくない?
後で試してみたい。

実行結果

以下のようになりました。

畳み込んだわりに、たいした精度出てないですね。

  • 学習に使うデータ数を増やす
  • ストップワードを指定する(現状、のような分類する上で不要、邪魔そうな記号が混ざってる)
  • GridSearchでハイパーパラメータを試行錯誤してみる

この辺をやったら良くなるのかな。

 - 機械学習

336px




336px




  • このエントリーをはてなブックマークに追加
  • follow us in feedly

  関連記事