chainer with natural language processing hands on
TRANSCRIPT
Chainer を用いた自然言語処理でソースコード自動生成に挑戦
(ハンズオン)
2
自己紹介
大串 正矢
@SnowGushiGit
TIS株式会社 戦略技術センター
Tech-Circle 運営スタッフ
機械学習/自然言語処理
音声認識
Python
3
アウトライン
• 自然言語処理における基盤技術
• 言語モデルの種類
• なぜ言語モデルが必要
• 言語モデルって何
• 言語モデルの代表例
– nグラム言語モデル
– ニューラル言語モデル
– リカレントニューラル言語モデル
• Hands On – 学習
– 言語モデルの評価方法
– 言語モデルの種類と用途
– 文字の予測
• ライトニングトーク
4
Infrastructure Technology on the
Natural Language Processing
5
6
句構造
S
NP
VP
NP
形容詞 名詞 名詞 動詞 冠詞 品詞
係り受け構造
自然言語処理における基盤技術
Neural networks improve the
言語モデルによる予測
accuracy Neural networks improve the
The Varity of Language Model
and
How to use it
7
言語モデルの種類と用途
8
多い
少ない
Nグラム
言語モデル
ニューラル
言語モデル
リカレントニューラル
言語モデル
テストに出ます
本日の説明範囲
データの量、種類
文脈自由文法
Why Language Model
9
なぜ言語モデルが必要
• 音声認識では一単語を聞き取れないだけで・・・
W1 = 私のこと が 好きなの?
私のことが好きなの?
W2 = 私のこと も 好きなの?
W3 = 私のこと の 好きなの?
10
なぜ言語モデルが必要
• “が”、“に”などの機能語の違いで意味が大きく変わってくる・・・・
W1 = 私のこと が 好きなの?
W2 = 私のこと も 好きなの?
W3 = 私のこと の 好きなの?
11
and
なぜ言語モデルが必要
• 一文字違うだけなのに理不尽・・・
どうにかならないの・・・
言語モデル
俺に任せろ!!!
12
Language Model
13
言語モデルとは
• 各文章にもっともらしさ(確率)を与える
W1 = 私のこと が 好きなの?
W2 = 私のこと も 好きなの?
W3 = 私のこと の 好きなの?
P(W1) = 0.8
P(W2) = 0.4
P(W3) = 0.2
14
言語モデルとは
• 音声的に似ていても次の単語でもっとも不自然でない単語を選んでくれる!!!
W1 = 私のこと が 好きなの?
W2 = 私のこと も 好きなの?
W3 = 私のこと の 好きなの?
P(W1) = 0.8
P(W2) = 0.4
P(W3) = 0.2
15
N-gram Language Model
16
言語モデルの代表例
• nグラム言語モデル
W = <s> 私 の こと が 好きなの </s>
下記のように表す。(バイグラムの場合)
P(W1 = 私 | W0 = <s>)
P(W2 = の | W1 = 私)
P(W3 = こと | W2 = の)
P(W4 = が | W3 = こと)
P(W5 = 好きなの | W4 = が)
:
17
私 の
文書
<s> 私 私 の
<s>
Count up
言語モデルの代表例
• nグラム言語モデル
–利点
• 簡単
• それなりの精度
–欠点
• nの数に比例して指数関数的に計算量が増加
• 頻度の低い単語列にも影響を受けるため余計な単語列をいかにして削るか考慮が必要
• 離れた単語間の関係・・・
18
言語モデルの代表例
• 頻度の低い単語の考慮が大変(汗
ニューラル
言語モデル
俺に任せろ!!!
19
Neural Network Language Model
20
言語モデルの代表例
• ニューラルネットの適用
21
言語モデルの代表例
• Bag of word を入力にする
22
I :0
am:0
show:1
me:0
your:0
you:0
:
when:0
are:0
辞
書
サ
イ
ズ
言語モデルの代表例
• 不要な情報が多い
23
I :0
am:0
show:1
me:0
your:0
you:0
:
when:0
are:0
辞
書
サ
イ
ズ
不要な情報が多い!!!
推定したいものだけに厳選したい
言語モデルの代表例
• 必要な情報だけに洗練する
24
辞
書
サ
イ
ズ
変換行列
辞書サイズ
I :0
am:0
show:1
me:0
your:0
you:0
:
when:0
are:0
× =
単語ベクトル
洗練された情報
単語ベクトルサイズ
言語モデルの代表例
25
単語ベクトル
次の 単語
例文:Show me your hair
show me
バイグラムのように次の単語予測
言語モデルの代表例
• ニューラル言語モデル
–利点
• 単語を限定されたベクトル空間に変換可能(計算量が減る)
• 文脈を考慮した学習が可能
–欠点
• ドメインが全く違うデータに弱い可能性が
• 入力層は固定にする必要があるので入力できる文章に限りがある
26
Recurrent Neural Network
Language Model
27
言語モデルの代表例
• リカレントニューラル言語モデル
28
0
0
0
0
1
:
0 出力層
例文:Show me your hair
your
hair 隠れ層
𝑈
変換行列
meの時
の
隠れ層
𝑊
𝑉
重要
言語モデルの代表例
• リカレントニューラル言語モデル
–利点
• 単語を限定されたベクトル空間に変換可能(計算量が減る)
• 過去の単語を利用して学習し、過去の単語はさらに過去の単語に影響を受けているので文脈の考慮できる長さが長い
–欠点
• ドメインが全く違うデータに弱い可能性
• メモリをすごく消費する
• 速度が遅い
29
言語モデルの代表例
• 学習されるパラメータ
単語を潜在空間に写像
重み
次の単語を予測
30
0
0
0
0
1
:
0 出力層
your
hair 隠れ層
変換行列
meの時
の
隠れ層
𝑈
𝑊
𝑉
言語モデルの代表例
• 学習方法はイメージだけ
真の単語列
差を取る
31
0
0
0
0
1
:
0 出力層
your
隠れ層
変換行列
meの時
の
隠れ層
𝑈
𝑊
𝑉
言語モデルの代表例
• 学習方法はイメージだけ
真の単語列
差を取る
32
0
0
0
0
1
:
0 出力層
your
隠れ層
変換行列
meの時
の
隠れ層
更新
𝑈
𝑊
𝑉
言語モデルの代表例
• 学習方法はイメージだけ
真の単語列
差を取る
33
0
0
0
0
1
:
0 出力層
your
隠れ層
変換行列
meの時
の
隠れ層
更新
過去の単語考慮
𝑈
𝑊
𝑉
言語モデルの代表例
真の単語列
差を取る
34
0
0
0
0
1
:
0 出力層
“your”
隠れ層
“me” 0
0
1
0
0
:
0 0
0
1
0
0
:
0
“show”
過去の単語考慮部分
例文:Show me your hair
𝑈
𝑊
𝑉
𝑈
𝑊
𝑉
言語モデルの代表例
• リカレントニューラル言語モデル
(ここを本格的に説明するとハンズオンに入れないので軽く)
– LSTM • 長期的に記憶するための工夫
– Drop out • 隠れ層のユニットをランダムになくすことにより、偏った学習を防ぐ
–ミニバッチ • データをすべて使用せずに一部だけ使用することで学習効率を高める
35
Hands On
• リカレントニューラル言語モデルを作成しよう!!!・・・どうやって??
Chainer
俺に任せろ!!!
36
Chainer
37
Chainer
参照:DLフレームワークChainerの紹介と分散深層強化学習によるロボット制御
http://www.slideshare.net/ryokuta/dlchainer#19
38
Chainer
• ニューラルネットを記述するのに必要な機能
–ニューラルネット
–順伝搬、逆伝搬
–勾配法によるパラメータ最適化
• Chainerの特徴
–順伝搬は単純にPythonのスクリプトとして書ける
–スクリプトの実行結果は計算手順を記憶しているため逆伝搬を書く必要なし!!
39
Chainer
• Chainerによる実装
–ニューラルネットの構成
–順伝搬、逆伝搬、学習
40
𝑥
FunctionSet
順伝搬実装
逆伝搬反映
最適化
Chainer
41
𝑥
FunctionSet
Function(パラメータあり) W(重み), b(バイアス)
順伝搬実装
逆伝搬反映
最適化
Chainer
42
𝑥
FunctionSet
順伝搬実装
逆伝搬反映
最適化
Function(パラメータなし)
Chainer
43
𝑥
FunctionSet
順伝搬実装
逆伝搬反映
最適化
4行で済みます
Chainer
• これだけ
– まず勾配をゼロ初期化:zero_grads()
– 入力データを利用して順伝搬実行
– 逆伝搬を実行
– 最適化ルーチンを実行: update()
optimizer.zero_grads()
loss = forward(x, t)
loss.backward()
optimizer.update()
44
Hands On
45
Hands On
• Chainer with Recurrent neural language
model
Chainer
俺に任せろ!!!
46
Hands On
ハンズオン資料
(Connpassページにリンク貼ってます)
http://goo.gl/XEeM7Q
47
Hands On Task
48
Hands On
• プログラミングさぼりたい・・・・
49
単純なプログラム誰か作ってくれねーかな とりあえず明日から本
気出す
Hands On
50
プログラム作るプログラム作れば良いじゃん
俺って天才
Hands On
51
• ルール地獄・・・・
Hands On
• パターンが多くて破綻する
52
機械学習の出番
Hands On
• ハンズオンの目的
–ソースコード自動生成
53
Hands On
• リポジトリ構成について
• 構成理由
–モデルとデータのフォルダは別にする
– iPython notebookでノウハウ共有を簡単に
54
CV:プログラムで生成します
data_hands_on
プログラミングコードなど
Hands On
• リカレントニューラル言語モデル作成のプロセスを体験
• 今回は学習から文字の予測までを一つのPythonファイルで行っています。
– *注意:通常は学習モデルのクラスは別で用意します。
• iPython notebookの画面を開いて下さい
55
Learning
56
Hands On
• リカレントニューラル言語モデル作成のプロセスを体験
57
プログラム実行
上記から実行していきます
Hands On
• リカレントニューラル言語モデル作成のプロセスを体験
58
CV
data_hands_on
プログラミングコードなど
モデルが作成されればOK
How to Evaluate it ?
59
言語モデルの代表例
• どうやって評価するの? – 言語モデルの複雑さ:パープレシティ
• 平均分岐数:言語モデルの複雑さを表す。低い方が良い
– 単語の網羅率:カバレージ
• 言語モデルがどれだけテストデータの文字列をカバーできているか
単語数 −未知の単語数
単語数
60
Predict the words
61
Hands On
62
• パラメータが適切でないと・・・
Hands On
63
• この馬鹿なモデルを賢くするのはあなた次第です!!!
Hands On
64
• パラメータ最適化の一般的な手法
–グリッドサーチ
–ランダムサーチ
–モデルベースメソッド
Predict the words (Re-try)
65
Hands On
66
• 時間内に学習が終わりません・・
–高速化できるGPUの使い方をQiitaに書いておきました
Enjoy Chainer !!
Enjoy Language Model !!
67
Thank you!!
68
補足:RmsPropについて
69
入力とパラメータに対する損失関数の勾配
過去の勾配減衰
現在の勾配減衰
損失関数の勾配は小さいほど良いのでマイナスの場合は重みを増やし、プラスの場合は減算する
過去と現在の勾配の影響度合いを算出
参考資料
• Deep Learning のフレームワーク Chainer を公開しました
• https://research.preferred.jp/2015/06/deep-learning-chainer/
• 言語モデルのカバレージ、パープレキシティの説明
• http://marujirou.hatenablog.com/entry/2014/08/22/235215
• ディープラーニングフレームワークChainerをEC2のGPUインスタンスで動かす g2.2xlarge
instance
• http://ukonlly.hatenablog.jp/entry/2015/07/04/210149
• Drop Out
• http://olanleed.hatenablog.com/entry/2013/12/03/010945
• Learning to forget continual prediction with lstm
• http://www.slideshare.net/FujimotoKeisuke/learning-to-forget-continual-prediction-with-lstm
• Zaremba, Wojciech, Ilya Sutskever, and Oriol Vinyals. "Recurrent neural network regularization."
arXiv preprint arXiv:1409.2329 (2014).
• Google Mikolov
• http://www.rnnlm.org/
• Neural Network(NN)を利用したLanguage Model(LM),つまりNeural Network Language
Model(NNLM)の一種であり, Recurrent Neural Network(RNN)を使ったRecurrent Neural Network
Language Model(RNNLM)
• http://kiyukuta.github.io/2013/12/09/mlac2013_day9_recurrent_neural_network_language_model.
html 70
参考資料
• Long Short-term Memory
• http://www.slideshare.net/nishio/long-shortterm-memory
• RNNLM
• http://www.slideshare.net/uchumik/rnnln
• スパース推定概観:モデル・理論・応用
• http://www.is.titech.ac.jp/~s-taiji/tmp/sparse_tutorial_2014.pdf
• 正則化学習法における最適化手法
• http://imi.kyushu-u.ac.jp/~waki/ws2013/slide/suzuki.pdf
• リカレントニューラル言語モデル作成参考
https://github.com/yusuketomoto/chainer-char-rnn
• ニューラルネット 自然言語処理
http://www.orsj.or.jp/archive2/or60-4/or60_4_205.pdf
• 言語モデル作成
http://www.slideshare.net/uchumik/rnnln
• 自然言語処理プログラミング勉強会n-gram言語モデル
http://www.phontron.com/slides/nlp-programming-ja-02-bigramlm.pdf
• Statistical Semantic入門 ~分布仮説からword2vecまで~
http://www.slideshare.net/unnonouno/20140206-statistical-semantics
• linux source code
https://github.com/torvalds/linux 71
参考資料
• Chainerのptbサンプルを解説しつつ、自分の文章を深層学習させて、僕の文章っぽい文を自動生成させてみる
• http://d.hatena.ne.jp/shi3z/20150714/1436832305
• なぜGPUコンピューティングが注目を浴びているか - 慶應義塾
http://www.yasuoka.mech.keio.ac.jp/gpu/gpu_0.php
• CUDA技術を利用したGPUコンピューティングの実際(前編) ―― グラフィックス分野で磨かれた並列処理技術を汎用数値計算に応用
http://www.kumikomi.net/archives/2008/06/12gpu1.php?page=1
• GPGPU
https://ja.wikipedia.org/wiki/GPGPU#.E7.89.B9.E5.BE.B4.E3.81.A8.E8.AA.B2.E9.A1.8C
• 自然言語処理論I
• http://www.jaist.ac.jp/~kshirai/lec/i223/02.pdf
• Chainerで始めるニューラルネットワーク
• http://qiita.com/icoxfog417/items/96ecaff323434c8d677b
• ぱくたそ
• https://www.pakutaso.com/
72