Help us understand the problem. What is going on with this article?

Natural Language : Doc2Vec Part2 - Document Classification

目標

Microsoft Cognitive Toolkit (CNTK) を用いた文書分類の続きです。

Part2 では、Part1 で準備した文書データを用いて CNTK による文書分類を行います。
CNTK と NVIDIA GPU CUDA がインストールされていることを前提としています。

導入

Natural Language : Doc2Vec Part1 - livedoor NEWS Corpus では訓練データと検証データを準備しました。

Part2 では Doc2Vec モデルを作成して文章分類を行います。

Doc2Vec

Doc2Vec [1][2][3] は Word2Vec を発展させたものです。今回実装した Doc2Vec は、1つの文書に含まれるすべての単語の埋め込み層の出力を平均し、どのカテゴリーの文書かを分類するシンプルなニューラルネットワークにしました。

doc2vec.png

訓練における諸設定

各パラメータの初期値は CNTK のデフォルト設定を使用しています。多くの場合、Glorot の一様分布 [4] になっています。

Word2Vec では単語を予測するため出力層の高速化に Sampled Softmax [5] を採用しましたが、今回の文書分類は 9カテゴリーなので通常の Softmax 関数と Cross Entropy Error を使用しました。

最適化アルゴリズムには Adam [6] を採用しました。Adam の学習率は 0.01、ハイパーパラメータ $β_1$ は 0.9、$β_2$ は CNTK のデフォルト値に設定しました。

モデルの訓練はミニバッチ学習によって 300 Epoch を実行しました。

実装

実行環境

ハードウェア

・CPU Intel(R) Core(TM) i7-6700K 4.00GHz
・GPU NVIDIA GeForce GTX 1060 6GB

ソフトウェア

・Windows 10 Pro 1909
・CUDA 10.0
・cuDNN 7.6
・Python 3.6.6
・cntk-gpu 2.7
・cntkx 0.1.29
・numpy 1.17.3
・pandas 0.25.0

実行するプログラム

訓練用のプログラムは GitHub で公開しています。

doc2vec_training.py

 

結果

訓練時の損失関数と誤認識率のログを可視化したものが下図です。左のグラフが損失関数、右のグラフが誤認識率になっており、横軸はエポック数、縦軸はそれぞれ損失関数の値と誤認識率を表しています。

doc2vec_logging.png

Part1 でデータを準備する際に切り離しておいた検証データで性能評価してみると以下のような結果になりました。

Accuracy 84.44%

勾配の逆伝播を用いて文書分類の際、文章中のどの単語が重要であるかを調べてみました。

dojujo-tsushin
1 女性
2 女性
3 女性
4 女性
5 女性
6 女性
7 女子
8 嬉しい
9 溝
10 魅力

独女通信の記事では「女性」という単語が重要なようです。

it-life-hack
1 Android
2 ゲーム
3 追加
4 開発
5 発表
6 発表
7 発表
8 Bluetooth
9 事前
10 対応

ITライフハックの記事では「Android」や「ゲーム」などの IT に関連する単語が重要なようです。

sports-watch
1 彼ら
2 決意
3 デビュー
4 使命
5 素晴らしい
6 戦争
7 推薦
8 話
9 良い
10 祖国

Sports Watch の記事では一見スポーツとは縁遠い単語が散見されますが、スポーツは戦争とも言うので割と的を射ているような印象を受けます。

参考

Natural Language : Doc2Vec Part1 - livedoor NEWS Corpus
Natural Language : Word2Vec Part2 - Skip-gram model

  1. Quoc Le and Tomas Mikolov. "Distributed Representations of Sentences and Documents", International Conference on Machine Learning. 2014, pp 1188-1196.
  2. Andrew M. Dai, Christopher Olah, and Quoc V. Le. "Document Embedding with Paragraph Vectors", arXiv preprint arXiv:1507.07998 (2015).
  3. Jey Han Lau and Timothy Baldwin. "An Empirical Evaluation of doc2vec with Practical Insights into Document Embedding Generation", arXiv preprint arXiv:1607.05368 (2016).
  4. Xaiver Glorot and Yoshua Bengio. "Understanding the difficulty of training deep feedforward neural networks", Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics. 2010, pp 249-256.
  5. Sebastien Jean, Kyunghyun Cho, Roland Memisevic, and Yoshua Bengio. "On Using Very Large Target Vocabulary for Neural Machine Translation", arXiv preprint arXiv:1412.2007 (2014).
  6. Diederik P. Kingma and Jimmy Lei Ba. "Adam: A method for stochastic optimization", arXiv preprint arXiv:1412.6980 (2014).
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした