カテゴリ:

目次
1.はじめに
2.実験データ
3.ニューラルネットワークの実装
3.1 コメント文の前処理
3.2 埋め込み層
3.3 畳み込み層
3.4 プーリング層
3.5 出力層
3.6 目的関数の定義
3.7 データの学習
4.精度および評価
4.1 畳み込み層1ノードのCNN
4.2 畳み込み層2ノードのCNN
4.3 畳み込み層3ノードのCNN
5.実験評価
5.1 7つのモデルの総合評価
5.2 CNN構成の最適化についての考察
6.結論
7.まとめ
参考文献

1.はじめに

 人工知能を使ったロボットや自動返答ボットなどが数多く登場した.SoftBank の Pepper[1]や Microsoft の女子高生 AI りんな[2]などが,その典型的な例である.このように人工知能という技術が広く使われるようになった背景として,近年のインターネットの普及やコンピュータの性能の向上が挙げられる.それと同時に,ディープラーニング[3]を含め機械学習を簡単に行うための便利なツールやライブラリなどが容易に利用できるようになった.ディープラーニングの中でも畳み込みニューラルネットワーク(Convolutional Neural Network,以下 CNN)は,画像データの分類に広く用いられている.近年ではコメントデータのような文章の分類など自然言語処理に用いる研究[4]も行われている.本研究では,CNN によるコメントのランク分類を行うことを目的としている.また,CNN の構成の最適化について考察する.

2.実験データ

 本研究では,楽天市場の商品レビューデータ(2011年7月28日)[5]を利用した.このデータには17個の項目が登録されており,評価ポイントとレビュー内容の2つの項目のデータを学習および評価に利用した.評価ポイントは0〜5の6段階評価である.本研究では2分割されているデータのうち,1297697件を学習データに,1216726件を評価データとした.購入者が投稿したレビューデータのコメントをその商品に対する購入者の評価ランクで分類する.

3.ニューラルネットワークの実装

 自然言語処理におけるCNNで問題なのは,ニューラルネットワークへの文章の入力方法である.画像はピクセルの集合であり縦×横の行列であると考えられるので,文章もこれに類似した行列に変換する.したがって,埋め込み層で単語の埋め込み表現を学習し,それで畳み込みを行う.この分類処理のCNNによる実装を以下に示す.

(1) コメント文の前処理(トークン化)
(2) CNNの定義
  入力層,埋め込み層,畳み込み層,
  プーリング層,全結合層,出力層
(3) 目的関数の定義
(4) データの学習

 全体的なCNNの処理の流れは,図1である.

03
図1 :  定義するCNN
 

3.1 コメント文の前処理

 埋め込み層で単語の埋め込み表現を学習するために文を形態素に分割し,単語をトークンにし,あらかじめ決定しておいた単語番号に変換する.

3.2 埋め込み層

 埋め込み層では,トークン化された入力文の埋め込み表現を学習する.これはフレームワークが提供している埋め込み表現の学習用の関数を使うことで,任意の大きさのベクトル表現が得られる.単語ベクトルの例を図2に示す.

17
図2 : 「スマホ」の単語ベクトル

3.3 畳み込み層

 畳み込み層へは,埋め込み層から出力された単語のベクトル表現を縦に並べ,文の単語数×単語ベクトルの大きさの行列を作る.1つの文ごとにひとまとめにして入力する.
 次の畳み込み層の処理では,行列に対して指定した高さと幅のフィルタごとに畳み込みを行う.フィルタの幅は,入力行列の各行が1つの単語トークンとなっているため,それに対応させ,埋め込み表現の次元数と同じ大きさに設定する.また,フィルタの高さを任意に設定する.畳み込み層は,畳み込みで得られるデータを特徴マップとしてベクトルを出力する.

3.4 プーリング層

 プーリング層ではマックスプーリングのルールに従い,畳み込み層の各フィルタから出力された特徴マップの行列から最大値を取得し,次元削減後,それを結合して1つのベクトルにする.これが文章の特徴ベクトルとなる.この特徴ベクトルは,文章の長さが変わっても常に同じ次元数のベクトルを作る.

43
図3 : 畳み込みとプーリングイメージ


3.5 出力層

 出力層では,全結合層のからの出力に,ソフトマックス関数を適用させて分類する各クラスに属する確率を出力する.畳み込み層・プーリング層を通って全結合層から出力される文章の行列ベクトル(x[1], x[2], ・・・, x[m])が評価値kである確率を次に表すソフトマックス関数を用いる.
29

3.6 目的関数の定義

ニューラルネットワークの学習は,学習時に出力層から出力される確率値と教師ラベルに属する確率値を大きくするように重みを学習する.その指標となるのが目的関数である.出力層でソフトマックス関数を使用しているため,目的関数に交差エントロピーを用いた.データX[n]=(x[1], x[2], ・・・, x[m])が教師ラベルt[k'][n]に属する確率値P(x[n])を最大化するには,次式に表す目的関数Eを最小化する.
40

3.7 データの学習

 定義したニューラルネットワークの学習を複数回繰り返し行う.データの学習は,目的関数の微分による勾配を利用したアルゴリズムに従って目的関数の値を最小化する.

4.精度および評価

ニューラルネットワークの実装とアルゴリズムに対して,畳み込み層でのフィルタの高さ(図4)と畳み込み層とプーリング層の並列数(ノード数)(図5)を変えた7つのモデルを評価した.

16
図4 : 畳み込み層のフィルタの高さイメージ

15

図5 : ノード数イメージ

4.1 畳み込み層1ノードのCNN

 畳み込み層とプーリング層が1ノードで高さが2〜6とそれぞれ違う畳み込みフィルタを用いたCNNを図6に示す.また,その精度を,表1〜5に示す.

32
図6 : 畳み込み層1ノードモデル

表1 : 1ノードモデル(高さ2)の精度
1

表2 : 1ノードモデル(高さ3)の精度
2

表3 : 1ノードモデル(高さ4)の精度
3

表4 : 1ノードモデル(高さ5)の精度
4

表5 : 1ノードモデル(高さ6)の精度
5

 5回の学習における各回の損失と精度を見てみると,2,3回学習時での精度が最も高く,それを境に損失も大きくなり精度も低下している.最も高い精度と5回学習時の精度を比較すると,およそ1.5〜2%も精度が低下している.また,5回学習時の精度が5回の中でも一番低く,過学習していると考えられる.このモデルでの学習回数は2,3回が適切でありそれ以上学習する必要はない.また,フィルタの高さを2〜6と変えて学習したが,高さを高くし,より多くの単語を一度に畳み込むほど精度が高くなっている事が分かる.しかし,高さ5と高さ6の精度はそこまで差がみられないため,これ以上高くしても効果は見られないと考える.しかし,高さ6のほうが高さ5よりも1回すくない学習回数で同程度の精度に到達している.

4.2 畳み込み層2ノードのCNN

 畳み込み層とプーリング層を並列に2ノードにし,高さ3と高さ4の畳み込みフィルタを用いたCNNを図7に示す.また,その精度を,表6に示す.

36
図7 : 畳み込み層2ノードモデル

表6 : 2ノードモデルの精度
6

 5回の学習における各回の損失と精度を見てみると,1ノードの時と同様に2回学習時での精度が最も高く,それを境に損失も大きくなり精度も低下している.1ノードの高さ3と高さ4での精度と比較すると,0.1%程度であるが,それぞれ1ノードずつで分類するよりも高い精度が得られているので,ノードを複数個にすることで,精度が向上する可能性が考えられる.

4.3 畳み込み層3ノードのCNN

 畳み込み層とプーリング層を並列に3ノードにし,高さ3と高さ4と高さ5の畳み込みフィルタを用いたCNNを図8に示す.また,その精度を,表7に示す.

28
図8 : 畳み込み層3ノードモデル

表7 : 3ノードモデルの精度
7

 5回の学習における各回の損失と精度を見てみると,1ノード・2ノードの時と同様に2回学習時での精度が最も高く,それを境に損失も大きくなり精度も低下している.このモデルでは,1回目の学習で既に精度が69%を超えてきており,実験に用いたCNNのなかで一番速い.また精度もどのCNNよりも高い値が得られており,ノード数の複数化による精度向上に多少期待できる.

5.実験評価


5.1 7つのモデルの総合評価

 7つのモデルにおいて学習回数ごとの精度を図9のグラフ(N:ノード数,H:フィルタの高さ)に示す.どの種類のモデルでも類似した値の変化になっているが,中でも3ノードのモデル(N:3 – H:3,4,5)は学習を重ねるに連れて,精度の低下度合いが大きい事がわかる.

57
図9 : 学習回数ごとの精度変化グラフ

5.2 CNN構成の最適化についての考察

 CNNによるコメント分類での精度向上の最適化は次の手順で行う.

(1) 1ノードの高さが小さいフィルタで学習する.
(2) 精度が低下するまで学習し,精度が悪くなったら1つ前のモデルを使い局所最適化を行う.
(3) フィルタの高さを大きくし,同様に学習する.
(4) フィルタの高さを大きくしても精度に変化が見られなければ,ノード数を増やす.
(5) 1ノードの時の精度を参考にフィルタの高さを設定し同様に学習する.

 この手順を2ノード,3ノードと繰り返すことで多少の精度向上は見込めると考えられる.

6.結論

 実験結果とその評価から,今回の実験データでより高い精度を得るためには,畳み込み層の高さを変え,ノードを複数並列にしたCNNを用いるのがよい.また,学習回数は2,3回にするのがよい.しかし,畳み込みを行う処理が多ければ多いほど,より時間がかかるので精度と学習時間との兼ね合いが大切である.

7.まとめ

 本稿では,CNNでの自然言語処理として,商品レビューのコメントデータの評価分類を行うCNNの実装方法を示した.このようなニューラルネットワークはパラメータの数が多く学習には膨大な時間が必要である.本来ならばフィルタ数や次元数などをもっとチューニングすべきであるが,時間の都合上その点が疎かになってしまっている.学習時間を短くするには学習データをもっと小さいデータにし,学習回数を少なくすれば良いと考えられる.今後は,少ない学習データでも同程度の精度が得られるかどうか,パラメータやノード数の違いによる精度への影響を評価する必要がある.

参考文献

[1] Life with Pepper | ソフトバンク, http://www.softbank.jp/robot/special/pepper/, (2017/01/01 参照)
[2] りんな, http://rinna.jp/, (2017/01/01参照)
[3] NTTコムウェア | ディープラーニング, https://www.nttcom.co.jp/research/keyword/dl/, (2017/01/01 参照)
[4] Yoon Kim, Convolutional Neural Networks for Sentence Classification, EMNLP(2014), 1746-1751
[5] 国立情報学研究所, http://www.nii.ac.jp, (2017/01/01 参照)
[6] 新納浩幸,Chainerによる実践深層学習,オーム社(2016)
[7] 浅川伸一,Pythonで体験する深層学習,コロナ社(2016)
[8] 斎藤康毅,ゼロから作るDeepLearning,オライリー・ジャパン(2016)
[9] 中井悦司, TensorFlowで学ぶディープラーニング入門, マイナビ(2016)
[10] 清水亮, はじめての深層学習プログラミング,(2017)
[11] TensorFlow, https://www.tensorflow.org/, (2017/01/01 参照)
[12] Keras Documentation, https://keras.io/, (2017/01/01 参照)


PDFファイル
PDFファイル(論文)