chainer with natural language processing hands on

72

Upload: ogushi-masaya

Post on 06-Jan-2017

1.964 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Chainer with natural language processing hands on
Page 2: Chainer with natural language processing hands on

Chainer を用いた自然言語処理でソースコード自動生成に挑戦

(ハンズオン)

2

Page 3: Chainer with natural language processing hands on

自己紹介

大串 正矢

@SnowGushiGit

TIS株式会社 戦略技術センター

Tech-Circle 運営スタッフ

機械学習/自然言語処理

音声認識

Python

3

Page 4: Chainer with natural language processing hands on

アウトライン

• 自然言語処理における基盤技術

• 言語モデルの種類

• なぜ言語モデルが必要

• 言語モデルって何

• 言語モデルの代表例

– nグラム言語モデル

– ニューラル言語モデル

– リカレントニューラル言語モデル

• Hands On – 学習

– 言語モデルの評価方法

– 言語モデルの種類と用途

– 文字の予測

• ライトニングトーク

4

Page 5: Chainer with natural language processing hands on

Infrastructure Technology on the

Natural Language Processing

5

Page 6: Chainer with natural language processing hands on

6

句構造

S

NP

VP

NP

形容詞 名詞 名詞 動詞 冠詞 品詞

係り受け構造

自然言語処理における基盤技術

Neural networks improve the

言語モデルによる予測

accuracy Neural networks improve the

Page 7: Chainer with natural language processing hands on

The Varity of Language Model

and

How to use it

7

Page 8: Chainer with natural language processing hands on

言語モデルの種類と用途

8

多い

少ない

Nグラム

言語モデル

ニューラル

言語モデル

リカレントニューラル

言語モデル

テストに出ます

本日の説明範囲

データの量、種類

文脈自由文法

Page 9: Chainer with natural language processing hands on

Why Language Model

9

Page 10: Chainer with natural language processing hands on

なぜ言語モデルが必要

• 音声認識では一単語を聞き取れないだけで・・・

W1 = 私のこと が 好きなの?

私のことが好きなの?

W2 = 私のこと も 好きなの?

W3 = 私のこと の 好きなの?

10

Page 11: Chainer with natural language processing hands on

なぜ言語モデルが必要

• “が”、“に”などの機能語の違いで意味が大きく変わってくる・・・・

W1 = 私のこと が 好きなの?

W2 = 私のこと も 好きなの?

W3 = 私のこと の 好きなの?

11

and

Page 12: Chainer with natural language processing hands on

なぜ言語モデルが必要

• 一文字違うだけなのに理不尽・・・

どうにかならないの・・・

言語モデル

俺に任せろ!!!

12

Page 13: Chainer with natural language processing hands on

Language Model

13

Page 14: Chainer with natural language processing hands on

言語モデルとは

• 各文章にもっともらしさ(確率)を与える

W1 = 私のこと が 好きなの?

W2 = 私のこと も 好きなの?

W3 = 私のこと の 好きなの?

P(W1) = 0.8

P(W2) = 0.4

P(W3) = 0.2

14

Page 15: Chainer with natural language processing hands on

言語モデルとは

• 音声的に似ていても次の単語でもっとも不自然でない単語を選んでくれる!!!

W1 = 私のこと が 好きなの?

W2 = 私のこと も 好きなの?

W3 = 私のこと の 好きなの?

P(W1) = 0.8

P(W2) = 0.4

P(W3) = 0.2

15

Page 16: Chainer with natural language processing hands on

N-gram Language Model

16

Page 17: Chainer with natural language processing hands on

言語モデルの代表例

• 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

Page 18: Chainer with natural language processing hands on

言語モデルの代表例

• nグラム言語モデル

–利点

• 簡単

• それなりの精度

–欠点

• nの数に比例して指数関数的に計算量が増加

• 頻度の低い単語列にも影響を受けるため余計な単語列をいかにして削るか考慮が必要

• 離れた単語間の関係・・・

18

Page 19: Chainer with natural language processing hands on

言語モデルの代表例

• 頻度の低い単語の考慮が大変(汗

ニューラル

言語モデル

俺に任せろ!!!

19

Page 20: Chainer with natural language processing hands on

Neural Network Language Model

20

Page 21: Chainer with natural language processing hands on

言語モデルの代表例

• ニューラルネットの適用

21

Page 22: Chainer with natural language processing hands on

言語モデルの代表例

• Bag of word を入力にする

22

I :0

am:0

show:1

me:0

your:0

you:0

:

when:0

are:0

Page 23: Chainer with natural language processing hands on

言語モデルの代表例

• 不要な情報が多い

23

I :0

am:0

show:1

me:0

your:0

you:0

:

when:0

are:0

不要な情報が多い!!!

推定したいものだけに厳選したい

Page 24: Chainer with natural language processing hands on

言語モデルの代表例

• 必要な情報だけに洗練する

24

変換行列

辞書サイズ

I :0

am:0

show:1

me:0

your:0

you:0

:

when:0

are:0

× =

単語ベクトル

洗練された情報

単語ベクトルサイズ

Page 25: Chainer with natural language processing hands on

言語モデルの代表例

25

単語ベクトル

次の 単語

例文:Show me your hair

show me

バイグラムのように次の単語予測

Page 26: Chainer with natural language processing hands on

言語モデルの代表例

• ニューラル言語モデル

–利点

• 単語を限定されたベクトル空間に変換可能(計算量が減る)

• 文脈を考慮した学習が可能

–欠点

• ドメインが全く違うデータに弱い可能性が

• 入力層は固定にする必要があるので入力できる文章に限りがある

26

Page 27: Chainer with natural language processing hands on

Recurrent Neural Network

Language Model

27

Page 28: Chainer with natural language processing hands on

言語モデルの代表例

• リカレントニューラル言語モデル

28

0

0

0

0

1

:

0 出力層

例文:Show me your hair

your

hair 隠れ層

𝑈

変換行列

meの時

隠れ層

𝑊

𝑉

重要

Page 29: Chainer with natural language processing hands on

言語モデルの代表例

• リカレントニューラル言語モデル

–利点

• 単語を限定されたベクトル空間に変換可能(計算量が減る)

• 過去の単語を利用して学習し、過去の単語はさらに過去の単語に影響を受けているので文脈の考慮できる長さが長い

–欠点

• ドメインが全く違うデータに弱い可能性

• メモリをすごく消費する

• 速度が遅い

29

Page 30: Chainer with natural language processing hands on

言語モデルの代表例

• 学習されるパラメータ

単語を潜在空間に写像

重み

次の単語を予測

30

0

0

0

0

1

:

0 出力層

your

hair 隠れ層

変換行列

meの時

隠れ層

𝑈

𝑊

𝑉

Page 31: Chainer with natural language processing hands on

言語モデルの代表例

• 学習方法はイメージだけ

真の単語列

差を取る

31

0

0

0

0

1

:

0 出力層

your

隠れ層

変換行列

meの時

隠れ層

𝑈

𝑊

𝑉

Page 32: Chainer with natural language processing hands on

言語モデルの代表例

• 学習方法はイメージだけ

真の単語列

差を取る

32

0

0

0

0

1

:

0 出力層

your

隠れ層

変換行列

meの時

隠れ層

更新

𝑈

𝑊

𝑉

Page 33: Chainer with natural language processing hands on

言語モデルの代表例

• 学習方法はイメージだけ

真の単語列

差を取る

33

0

0

0

0

1

:

0 出力層

your

隠れ層

変換行列

meの時

隠れ層

更新

過去の単語考慮

𝑈

𝑊

𝑉

Page 34: Chainer with natural language processing hands on

言語モデルの代表例

真の単語列

差を取る

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

𝑈

𝑊

𝑉

𝑈

𝑊

𝑉

Page 35: Chainer with natural language processing hands on

言語モデルの代表例

• リカレントニューラル言語モデル

(ここを本格的に説明するとハンズオンに入れないので軽く)

– LSTM • 長期的に記憶するための工夫

– Drop out • 隠れ層のユニットをランダムになくすことにより、偏った学習を防ぐ

–ミニバッチ • データをすべて使用せずに一部だけ使用することで学習効率を高める

35

Page 36: Chainer with natural language processing hands on

Hands On

• リカレントニューラル言語モデルを作成しよう!!!・・・どうやって??

Chainer

俺に任せろ!!!

36

Page 37: Chainer with natural language processing hands on

Chainer

37

Page 38: Chainer with natural language processing hands on

Chainer

参照:DLフレームワークChainerの紹介と分散深層強化学習によるロボット制御

http://www.slideshare.net/ryokuta/dlchainer#19

38

Page 39: Chainer with natural language processing hands on

Chainer

• ニューラルネットを記述するのに必要な機能

–ニューラルネット

–順伝搬、逆伝搬

–勾配法によるパラメータ最適化

• Chainerの特徴

–順伝搬は単純にPythonのスクリプトとして書ける

–スクリプトの実行結果は計算手順を記憶しているため逆伝搬を書く必要なし!!

39

Page 40: Chainer with natural language processing hands on

Chainer

• Chainerによる実装

–ニューラルネットの構成

–順伝搬、逆伝搬、学習

40

𝑥

FunctionSet

順伝搬実装

逆伝搬反映

最適化

Page 41: Chainer with natural language processing hands on

Chainer

41

𝑥

FunctionSet

Function(パラメータあり) W(重み), b(バイアス)

順伝搬実装

逆伝搬反映

最適化

Page 42: Chainer with natural language processing hands on

Chainer

42

𝑥

FunctionSet

順伝搬実装

逆伝搬反映

最適化

Function(パラメータなし)

Page 43: Chainer with natural language processing hands on

Chainer

43

𝑥

FunctionSet

順伝搬実装

逆伝搬反映

最適化

4行で済みます

Page 44: Chainer with natural language processing hands on

Chainer

• これだけ

– まず勾配をゼロ初期化:zero_grads()

– 入力データを利用して順伝搬実行

– 逆伝搬を実行

– 最適化ルーチンを実行: update()

optimizer.zero_grads()

loss = forward(x, t)

loss.backward()

optimizer.update()

44

Page 45: Chainer with natural language processing hands on

Hands On

45

Page 46: Chainer with natural language processing hands on

Hands On

• Chainer with Recurrent neural language

model

Chainer

俺に任せろ!!!

46

Page 47: Chainer with natural language processing hands on

Hands On

ハンズオン資料

(Connpassページにリンク貼ってます)

http://goo.gl/XEeM7Q

47

Page 48: Chainer with natural language processing hands on

Hands On Task

48

Page 49: Chainer with natural language processing hands on

Hands On

• プログラミングさぼりたい・・・・

49

単純なプログラム誰か作ってくれねーかな とりあえず明日から本

気出す

Page 50: Chainer with natural language processing hands on

Hands On

50

プログラム作るプログラム作れば良いじゃん

俺って天才

Page 51: Chainer with natural language processing hands on

Hands On

51

• ルール地獄・・・・

Page 52: Chainer with natural language processing hands on

Hands On

• パターンが多くて破綻する

52

機械学習の出番

Page 53: Chainer with natural language processing hands on

Hands On

• ハンズオンの目的

–ソースコード自動生成

53

Page 54: Chainer with natural language processing hands on

Hands On

• リポジトリ構成について

• 構成理由

–モデルとデータのフォルダは別にする

– iPython notebookでノウハウ共有を簡単に

54

CV:プログラムで生成します

data_hands_on

プログラミングコードなど

Page 55: Chainer with natural language processing hands on

Hands On

• リカレントニューラル言語モデル作成のプロセスを体験

• 今回は学習から文字の予測までを一つのPythonファイルで行っています。

– *注意:通常は学習モデルのクラスは別で用意します。

• iPython notebookの画面を開いて下さい

55

Page 56: Chainer with natural language processing hands on

Learning

56

Page 57: Chainer with natural language processing hands on

Hands On

• リカレントニューラル言語モデル作成のプロセスを体験

57

プログラム実行

上記から実行していきます

Page 58: Chainer with natural language processing hands on

Hands On

• リカレントニューラル言語モデル作成のプロセスを体験

58

CV

data_hands_on

プログラミングコードなど

モデルが作成されればOK

Page 59: Chainer with natural language processing hands on

How to Evaluate it ?

59

Page 60: Chainer with natural language processing hands on

言語モデルの代表例

• どうやって評価するの? – 言語モデルの複雑さ:パープレシティ

• 平均分岐数:言語モデルの複雑さを表す。低い方が良い

– 単語の網羅率:カバレージ

• 言語モデルがどれだけテストデータの文字列をカバーできているか

単語数 −未知の単語数

単語数

60

Page 61: Chainer with natural language processing hands on

Predict the words

61

Page 62: Chainer with natural language processing hands on

Hands On

62

• パラメータが適切でないと・・・

Page 63: Chainer with natural language processing hands on

Hands On

63

• この馬鹿なモデルを賢くするのはあなた次第です!!!

Page 64: Chainer with natural language processing hands on

Hands On

64

• パラメータ最適化の一般的な手法

–グリッドサーチ

–ランダムサーチ

–モデルベースメソッド

Page 65: Chainer with natural language processing hands on

Predict the words (Re-try)

65

Page 66: Chainer with natural language processing hands on

Hands On

66

• 時間内に学習が終わりません・・

–高速化できるGPUの使い方をQiitaに書いておきました

Page 67: Chainer with natural language processing hands on

Enjoy Chainer !!

Enjoy Language Model !!

67

Page 68: Chainer with natural language processing hands on

Thank you!!

68

Page 69: Chainer with natural language processing hands on

補足:RmsPropについて

69

入力とパラメータに対する損失関数の勾配

過去の勾配減衰

現在の勾配減衰

損失関数の勾配は小さいほど良いのでマイナスの場合は重みを増やし、プラスの場合は減算する

過去と現在の勾配の影響度合いを算出

Page 70: Chainer with natural language processing hands on

参考資料

• 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

Page 71: Chainer with natural language processing hands on

参考資料

• 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

Page 72: Chainer with natural language processing hands on

参考資料

• 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