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でハイパーパラメータを試行錯誤してみる

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

 - 機械学習

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

  関連記事

2152048926_d60b8ea093_z
不均衡データでClassification of text documents using sparse featuresしてみる

読み取った新書のデータから自分にとって興味あるか否かを判定する、という一連をやった。 生まれつき好奇心が全く無い病気なので、全体の比で見ると「興味あり」が圧倒的に少ない。 …

2152048926_d60b8ea093_z
コード読みながら理解する機械学習〜porn_sieve〜

porn_sieveは、好みの動画(xvideos)を数値評価することでアナタに最適な動画(xvideos)を提供してくれるPython製アプリだ。 最適な動画を選定するために「機械学習」ってのが使われているわけですね。 …

images
imbalanced-learnで不均衡データをアンダーサンプリングしてみる

https://github.com/scikit-learn-contrib/imbalanced-learn ↑ドキュメントを読めば終わり。 …

no image
[WIP]単純ベイズ分類器がまったく単純じゃないので入門

書き途中&間違いあるかも 単純(ナイーブ)ベイズ分類器というものがある。 …