ディープラーニングで文書分類(1)


はじめに

前回前々回とSVM、ニューラルネットワークを使ったLivedoor Newsコーパス文書分類器を作成してきた。
今回からは、いよいよディープラーニングを使った文書分類器を作成してみたいと思う。ディープラーニングの中でも、畳み込みニューラルネットワーク (Convolutional Neural Networks: CNN) を使って、実装を行っていきたい。CNNと言うと、画像分類を思い浮かべる人が多いかと思われるが、最近はCNNを使った自然言語処理に関する研究も盛んになってきている。
まずは、文書分類に対してどのようにCNNを適用するのかを見ていきたい。
尚、CNN自体の説明は、ここでは行わない。

全体像

今回作成するモデルの全体像は、(いくらか省略はしているが)以下の図のようになる。
Livedoor Corpusの各文書をインプットに、畳み込み層(Convolution Layer)、プーリング層(Pooling Layer)と続き、9つのカテゴリーに分類する出力層へとつながっている。

入力層

これまで行ってきた分類問題では、インプットにBag of Wordsを利用してきた。これは、出現する単語全てを1つの袋に入れて、単語の出現回数を1つずつ数えるようなもので、文書のどの位置に単語が出現してきたのかは考慮されない。
それに対して、今回使うインプットは、以下の図のようになる。

行(縦)は、各文書の単語の並びだが、全文書で行数を合わせるために、最初の500単語で切っている。500単語に満たない文書の場合は、足りない部分を0でパディングしている。
列(横)は、以前作成した100次元のWord2Vecのモデルを利用する。
よって、500 x 100の行列がインプットとなる。

フィルタ

畳み込みを行う為のフィルタには、3単語、4単語、5単語の3種類を使うこととした。これにより、文書内に出てくる前後数単語を考慮した特徴量が抽出されることとなる。
またそれぞれの種類に対して128個のフィルタを使うので、合計384個のフィルタを利用することとなる。

畳み込み層

上述のインプットに対して、フィルタを1単語づつスライドさせながら掛け合わせることで畳み込みを行う。
また活性化関数にはReLU関数(ランプ関数)を使う。
結果、384個の特徴量が抽出できる。

プーリング層

畳み込み層で、それぞれのフィルタから計算された特徴量ベクトルからMax Poolingにより副次標本を取り、全ての副次標本をつなげて、ひとつのベクトルとする。

出力層

最後は、プーリング層の結果をインプットにソフトマックス関数を使って9つのカテゴリーに分類させる。

まとめ

今回は、Livedoor Corpusをカテゴリ分けする問題を、ディープラーニング(CNN)を使って行う方法について纏めてみた。
次回は、今回纏めた手法を、実際にTensorflowを用いて実装・テストを行っていきたい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です