自然言語処理における畳み込みニューラルネットワークを用いたモデル

## はじめに
最近、畳み込みニューラルネットワーク(CNN)を用いた自然言語処理が注目を集めています。CNNはRNNと比べて並列化しやすく、またGPUを使うことで畳み込み演算を高速に行えるので、処理速度が圧倒的に速いという利点があります。

この記事は、自然言語処理における畳み込みニューラルネットワークを用いたモデルをまとめたものです。CNNを用いた自然言語処理の研究の進歩を俯瞰するのに役立てば幸いです。



## 文の分類(評判分析・トピック分類・質問タイプ分類)

### [Convolutional Neural Networks for Sentence Classification](https://arxiv.org/abs/1408.5882)(2014/08)
評判分析や質問タイプの分類などの文分類を行うCNNを提案している論文。
<img width="893" alt="スクリーンショット 2017-02-03 5.39.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/77079/b56a94b5-d54c-207e-98bb-474fe3d22e8b.png">

具体的には文を単語ベクトルの列として表し、それに対してCNNを用いて特徴抽出・分類を行っている。論文では事前学習済みの単語ベクトル(Google Newsをword2vecで学習したもの)を使うことで性能が向上したことが報告されている。2つのチャンネルそれぞれで単語ベクトルを表し、一方は学習中に更新、もう一方は更新しないようにすることで性能が上がるのが面白いところ。評判分析や質問タイプ分類を含む7つの文書分類タスクで評価したところ、7つ中4つのタスクで今までで最高の結果になった。

著者によるTheano実装とGoogle BrainのDenny BritzによるTensorFlow実装です:
[https://github.com/yoonkim/CNN_sentence](https://github.com/yoonkim/CNN_sentence)
[https://github.com/dennybritz/cnn-text-classification-tf](https://github.com/dennybritz/cnn-text-classification-tf)

[ichiroex](http://qiita.com/ichiroex)さんによる日本語での簡単な解説と実装
[【Chainer】畳み込みニューラルネットワークによる文書分類](http://qiita.com/ichiroex/items/f225f6d8eceb6796cc7e)


### [Deep Convolutional Neural Networks for Sentiment Analysis of Short Texts](http://www.aclweb.org/anthology/C14-1008)(2014/08)
映画レビューやTwitterに対する評判分析を行うCNN(CharSCNN)を提案した論文。
<img width="735" alt="スクリーンショット 2017-02-03 5.42.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/77079/823f7936-0600-0433-364b-4c316b6a86c9.png">

Twitter等の短いテキストに対する評判分析は文脈情報が限られているので難しいという問題がある。その問題に対処するために、評判分析をする際に通常使われる単語レベルのベクトル表現だけでなく、文字レベルのベクトル表現を構築し、それらを用いて文のベクトル表現を得ることで性能を向上させるということを行った。映画レビュー(SSTb)とTwitter(STS)に対するデータセットを用いて実験した結果、今までの手法より良い結果となった。

[hogefugabar](https://github.com/hogefugabar)さんによるTheano実装です:
[https://github.com/hogefugabar/CharSCNN-theano](https://github.com/hogefugabar/CharSCNN-theano)

解説記事も書いておられます:
[深層学習でツイートの感情分析](http://qiita.com/hogefugabar/items/93fcb2bc27d7b268cbe6)


### [#TAGSPACE: Semantic Embeddings from Hashtags](http://emnlp2014.org/papers/pdf/EMNLP2014194.pdf)(2014/10)
SNSに使われるハッシュタグを教師として短いテキストの表現を学習するCNNを提案した論文。
<img width="863" alt="スクリーンショット 2017-02-03 5.47.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/77079/8049b0e7-ea89-f49b-5af1-24b881b72b54.png">

具体的にはCNNを用いて、入力テキストと対応するハッシュタグのペアに対してスコアを出力し、ハッシュタグのランク付けを行う過程でテキストの表現を学習する。ハッシュタグの予測と文書推薦タスクで評価を行った結果、ベースラインの手法よりも良い結果となった。



### [Effective Use of Word Order for Text Categorization with Convolutional Neural Networks](http://www.anthology.aclweb.org/N/N15/N15-1011.pdf)(2014/12)
語順を考慮したテキスト分類を行うためのCNNを提案した論文。
<img width="656" alt="スクリーンショット 2017-02-03 5.59.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/77079/46eeb96d-48a1-723e-18e8-56a396b3e620.png">

文書分類には様々なタスクがあるが、評判分析のようなタスクでは語順を考慮しないと高い性能が出ない。その問題に対処するために語順を考慮した文書分類を行うことのできるCNNを提案している。具体的には、たいていのCNNの手法では入力としてword embeddingを入力するが、この研究では高次元のone-hotベクトルをそのまま入力して、小さなテキスト領域のembeddingを学習する。評判分析(IMDB含む)とトピック分類に関する3つのデータセットでSOTAな手法と比較した結果、提案手法の有効性を示せた。

論文著者による実装です:
[http://riejohnson.com/cnn_download.html](http://riejohnson.com/cnn_download.html)



### [Semi-supervised Convolutional Neural Networks for Text Categorization via Region Embedding](https://arxiv.org/abs/1504.01255)(2015/04)
<img width="820" alt="スクリーンショット 2017-02-03 5.48.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/77079/f7911571-b91f-5572-4d44-85227869c640.png">

テキスト分類のためにCNNを使った半教師あり学習のフレームワークを提案した話。従来モデルでは事前学習済みのword embeddingを畳み込み層の入力に使っていたが、本研究では小さいテキストの領域から教師なしでembeddingを学習し、教師ありCNNにおける畳み込み層の入力の一部として使う。評判分析(IMDB, Elec)とトピック分類(RCV1)で実験したところ、先行研究より高い性能を示した。

論文著者による実装です:
[http://riejohnson.com/cnn_download.html](http://riejohnson.com/cnn_download.html)

### [Character-level Convolutional Networks for Text Classification](https://arxiv.org/abs/1509.01626)(2015/09)
<img width="794" alt="スクリーンショット 2017-02-03 5.43.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/77079/848c6556-ae42-bf67-28c2-c3e8445f2c73.png">

文字レベルの畳み込みニューラルネットワークをテキスト分類に使った話。シソーラスを使ってテキスト中の単語を同義語で置換することでデータを増やしている。比較は、伝統的な手法としてbow、bag-of-ngram、bag-of-means、Deep Learning手法として、単語ベースのCNN、LSTMを対象に行っている。8つのデータセットを作成してベースの手法と比較した結果、いくつかのデータセットでは有効性を示せた。

論文著者によるLua実装です:
[https://github.com/zhangxiangxiao/Crepe](https://github.com/zhangxiangxiao/Crepe)


### [A Sensitivity Analysis of (and Practitioners' Guide to) Convolutional Neural Networks for Sentence Classification](https://arxiv.org/abs/1510.03820)(2015/10)
<img width="792" alt="スクリーンショット 2017-02-03 5.46.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/77079/94361fc0-a88a-98a7-2cd7-0d6925edbf22.png">

CNNのモデルは文分類でいい結果を残しているけど、熟練者がアーキテクチャ決めたりハイパーパラメータを設定する必要がある。これらの変更がどのような結果を及ぼすのかよくわからないので、一層のCNNを使って検証した話。最後に、CNNで文分類するときにモデルのアーキテクチャやハイパーパラメータをどう設定すべきか実践的なアドバイスをしている。





## 系列ラベリング(品詞タグ付け・固有表現認識・チャンキング)
### [Natural Language Processing (almost) from Scratch](https://arxiv.org/abs/1103.0398)(2011/03)
<img width="654" alt="スクリーンショット 2017-02-03 5.52.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/77079/7c0bca50-c300-35d3-21d8-ed3bbe8e6bcf.png">

品詞タグ付け、チャンキング、固有表現抽出、意味役割付与を学習できるニューラルネットワークを提案した話。単純に学習させるだけではベンチマークより性能が下回ったが、ラベルなしデータを用いて言語モデルの学習を事前に行うことで、質の良い単語ベクトルが性能向上に寄与することを示した。さらに各タスクを解くためのモデル間でパラメタを共有してマルチタスク学習を行うことで性能がより向上することも示した。

日本語によるまとめスライドです:
[Natural Language Processing (Almost) from Scratch（第 6 回 Deep Learning 勉強会資料; 榊）](http://www.slideshare.net/alembert2000/deep-learning-6)



### [Learning Character-level Representations for Part-of-Speech Tagging](http://jmlr.org/proceedings/papers/v32/santos14.pdf)(2014/07)
<img width="524" alt="スクリーンショット 2017-02-03 5.51.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/77079/342745ed-a268-8be2-389f-4f26cdb3270a.png">

品詞タグ付けをCNN(CharWNN)を使って行う話。具体的には、単語レベルと文字レベルのembeddingsを統合して単語のベクトル表現を構築し、構築したベクトルを入力することで品詞のスコアを出力するCNNを構築した。英語とポルトガル語に対するデータセット(WSJとMac-Morpho)を用いて実験した結果、SOTAな結果となった。


## 言語モデル
### [Language Modeling with Gated Convolutional Networks](https://arxiv.org/abs/1612.08083)(2016/12)
<img width="459" alt="スクリーンショット 2017-02-03 9.05.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/77079/54af199b-53da-3d11-c75c-87be2611cf8d.png">

言語モデルのタスクで、CNNでLSTM同等以上の精度を出したという話。畳み込んだ結果をGRUに近い機構で処理し、過去の情報が消失しないようにしている。Google Billion Wordのデータセットでは、LSTMと同等の精度を出す一方計算効率が20倍程度改善された。

TensorFlowによる実装です:
[Language-Modeling-GatedCNN](https://github.com/anantzoid/Language-Modeling-GatedCNN)


# おわりに
機械学習・自然言語処理・コンピュータビジョンの最新の論文情報のまとめを以下のTwitterアカウントで配信しています。この記事を読んでくれた方にとって興味深い内容を配信していますので、フォローお待ちしています。
[arXivTimes](https://twitter.com/arxivtimes)
<a href="https://twitter.com/arxivtimes"><img width="550" src="https://qiita-image-store.s3.amazonaws.com/0/77079/a8c638c8-16b0-ae92-3844-08ee92e24267.png" /></a>


# 参考
* [UNDERSTANDING CONVOLUTIONAL NEURAL NETWORKS FOR NLP](http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp)

<!--
* [CNNを利用した自然言語処理技術まとめ（2017年1月）](http://ksksksks2.hatenadiary.jp/entry/20170122/1485082800)
* [CNNを利用したセンチメント分析](http://catindog.hatenablog.com/entry/2016/08/22/102406)
-->