金融と工学のあいだ

興味関心に関するメモ(機械学習、検索エンジン、プログラミングなど)

ChainerでRecursive Neural Networkによる感情分析のチュートリアルを書いてみた

Introduction

このチュートリアルではRecursive Neural Networkを使って文章の感情分析を行います。

感情分析とは、自然言語処理(Natural Language Processing:NLP)のタスクの1つで、文章に対して書き手の感情(sentiment)を識別する問題です。感情を表現する場合、基本的には肯定的か、否定的かを段階に分けて表現します。例えば、今回使用するデータセットの場合、1(really negative)、2(negative)、3(neutral)、4(positive)、5(really positive)のように5段階で感情を表現しています。

f:id:kumechann:20180524182951p:plain cited from [1]

このチュートリアルでは、感情分析をRecursive Neural Networkで行います。 Recursive Neural Networkとは木構造再帰的なニューラルネットです。NLPでは文章を木構造で表現することが多く、Recursive Neural Networkはよく使用されます。今回は、まず最初にミニバッチ化しないRecursive Neural Networkの学習方法を学んだ後、発展的な話として、ミニバッチ化したRecursive Neural Networkの学習方法を説明しています。

このチュートリアルでわかることは以下の通りです。

  1. Recursive Neural Networkとは
  2. Chainerを使ったRecursive Neural Networkによる感情分析の実装
    • ミニバッチ化しないRecursive Neural Networkの学習方法
    • ミニバッチ化したRecursive Neural Networkの学習方法

Recursive Neural Networkとは[2]

Recursive Neural Networkとは、再帰ニューラルネット(Recurrent Neural Network)を木構造に拡張したものです。 どちらも頭文字で省略するとRNNと表記することが多いので、どちらを表現しているか注意が必要です。多くの場合、Recurrent Neural Networkを指している事が多いですが、自然言語処理の場合Recursive Neural Networkを指していることもあります。

Recursive Neural Networkでは分岐数を固定した木構造をしようします。 二分木の場合、現在のノードの隠れ状態ベクトル {\bf h}_Pは、左と右の子ノードの隠れ状態ベクトル {\bf h}_L {\bf h}_Rから以下のように計算されます。

\begin{align*} {\bf h}_P = a \left( {\bf W} \left[ \begin{array}{l} {\bf h}_L \\ {\bf h}_R \\ \end{array} \right] + {\bf b} \right) \end{align*}

f:id:kumechann:20180524182158p:plain:w300

この演算は木構造の葉ノードからルートノードに向かって順番に計算されます。Recursive Neural Networkは要素数 Tの場合でも、 深さは \log_2(T)で済むため、Recurrent Neural Networkに比べて長距離の要素間の関係を表現しやすいことが期待されます。

Chainerを使ったRecursive Neural Networkによる感情分析の実装

以下のように、Colaboratoryで実装の説明を行っています。ブラウザさえあれば今すぐにGPU環境でチュートリアルを動かすことが可能なので、お試しください。

Google Drive

Chainer Colab Notebook - Google ドライブ の OfficialExample(ja)/sentiment_ja.ipynb f:id:kumechann:20180519104632p:plain

GitHub

github.com

Reference

メモ

作業ログ

f:id:kumechann:20180519103841p:plain:w100