41
TensorFlowで訓練した LINE BotAWS Lambdaで動 かしてみた 2016/11/08 Van Huy 株式会社ガラパゴス

TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

  • Upload
    van-huy

  • View
    737

  • Download
    4

Embed Size (px)

Citation preview

Page 1: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

TensorFlowで訓練したLINE BotをAWS Lambdaで動

かしてみた2016/11/08 Van Huy

株式会社ガラパゴス

Page 2: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

About me● Van Huy (バン フイ)● @vanhuyz● ベトナム出身

● 東京大学電子情報工学科卒

● サーバーエンジニア

● 最近はTensorFlow, Elixirに興味がある

Page 3: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

ガラパゴスって?

● スマートフォンアプリの受託開発の会社です!

● https://www.glpgs.com● 技術:

○ 言語:Swift, Java, Ruby, Python, Elixir...

○ ツール: Slack, GitLab, GitLab-CI, Docker, Jenkins, Fastlane, Terraform, Ansible, Vagrant...

○ その他:ディープラーニング, IoT○ 技術ブログ: http://gtech.hatenablog.com/

Page 6: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

デモ

Page 7: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

まずはデモしましょう!

LINEで友達を追加!

Page 8: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた
Page 9: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

Botについて

Page 10: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

このbotを作るには

● 人工無能○ 単語レベルのパターンマッチ

Page 11: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

このbotを作るには

● 人工無能

● 少し知能を育てたい

Page 12: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

このbotを作るには

● 人工無能

● 少し知能を育てたい

訓練します!

Page 13: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

Botを訓練するデータ

● おやすみ

● おめでとう

Page 14: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

課題

● いい感じのbotを作るには大量のデータが必要

○ LINEのチャットデータは持っていない

○ メッセージ1個ずつスタンプラベルをつけるのが

超大変

Page 15: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

これを見かけた

絵文字

Page 16: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

絵文字からスタンプに変換(手動)

Page 17: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

ツイートから訓練データが作れる!

● おやすみ

● おめでとう

Page 18: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

Twitterには無限に訓練データがある!

Page 19: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

現状のデータ

● 3日間でツイートを収集

● ~23万のツイートを分割・整理して~28万文ができた○ 訓練用:25万文

○ テスト用:3万文

● ラベルスタンプ数:46

Page 20: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

ある文に適切なスタンプを推定

テキスト分類問題

Page 21: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

テキスト分類

● 応用○ スパムフィルタ:スパム/スパムでないメールを分類する

○ 新聞をカテゴリに分類する

○ 感情分析

● 機械学習の古典な手法○ ナイーブベイズ

○ サポートベクトルマシン(SVM)

Page 22: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

ディープラーニングの登場

● 機械学習の一部

● 自然言語処理においてRNN(Recurrent Neural Network - 再帰

型ニューラルネットワーク)が強い○ 機械翻訳 ○ 文章自動生成

○ 音声認識

○ 画像キャプション生成

Page 23: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

流れ

● テキスト前処理○ ツイートの固有単語を排除(RT, URLなど)

○ MeCabで分かち書き

● 単語をRNNに入れる

● RNNの出力からスタンプを推定

Page 24: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

誕生日 おめでとう ござい ます

単語の列

RNNモデル

スタンプID

誕生日おめでとうございます

分かち書き

Page 25: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

訓練環境

● GPU GeForce GTX 1080 8GB● TensorFlow v0.11● Docker経由

● 訓練時間:8時間程度

Page 26: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

訓練結果の可視化

・近いほど意味が近いという

・「スタンプの意味空間」

Page 27: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

問題点と今後の方針

● 未知の単語に対してはまだ弱い○ 訓練データを増やす

● 絵文字からスタンプにマッピングは主観的

● 本物の訓練データ収集機能を実装したい○ スタンプが間違ったらユーザー指摘できるように

Page 28: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

AWS構成

Page 29: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

大変お世話になった記事

http://qiita.com/hiyuzawa/items/10e7bf2f6ad5d1c7fc9c

Page 30: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた
Page 31: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた
Page 32: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた
Page 33: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた
Page 34: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた
Page 35: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

感想

● AWS Lambdaの実行コードのサイズ制限は厳しい○ MeCabの良い辞書が使えない

○ TensorFlowのモデルの表現能力 (capacity) が上げられない

● Python3系まだ対応していない

● Lambdaの起動タイムラグがある○ 長い間使わないと自動的停止してしまう

○ 2つのLambdaで合計5秒ぐらいのタイムラグがある

● 料金に関して○ ほとんど無料枠に収まる

○ VPC NAT Gatewayだけは料金がちょっと高い

Page 36: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

最後に

● ガラパゴスではエンジニアを募集中○ 最先端の技術に興味がある

○ ものづくりが好きだ

○ 難しい課題に取り組みたい

○ フレックスで自由に働きたい

○ 自動化が好きだ

○ etc ...

● 一つでも当てはまる方!是非一緒に働きましょう!!

Page 37: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

ご清聴ありがとうございました!

Page 38: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

参考:LINE Botの作り方について

● LINE Messenging APIを利用

● LINE Business Centerを登録して、Channel (bot)を管理画面で

作る

● Channel SecretとChannel Access Tokenがもらえる

● Line SDK (Python)を利用する

● サーバーのURLをBotのWebhook URLに登録する (httpsが必

要)

Page 39: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

参考:TensorFlowで単純なRNNの実装例

# LSTMを使う

cell = tf.nn.rnn_cell.BasicLSTMCell(LSTM_SIZE, state_is_tuple=True)# RNNの定義

outputs, state = tf.nn.dynamic_rnn(cell,       embed_inputs, # 単語ベクトル

      dtype=tf.float32,       sequence_length=sequence_length # 文の長さ

      )

Page 40: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

参考:パラメータチューニング前:overfittingloss

test

train

steps

Page 41: TensorFlowで訓練したLINE BotをAWS Lambdaで動かしてみた

参考:dropoutを入れた結果:underfitting?

loss

test

train

データを増やすべき?

steps