tensorflowで訓練したline botをaws lambdaで動かしてみた

Post on 06-Jan-2017

737 Views

Category:

Engineering

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

株式会社ガラパゴス

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

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

● サーバーエンジニア

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

ガラパゴスって?

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

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

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

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

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

デモ

まずはデモしましょう!

LINEで友達を追加!

Botについて

このbotを作るには

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

このbotを作るには

● 人工無能

● 少し知能を育てたい

このbotを作るには

● 人工無能

● 少し知能を育てたい

訓練します!

Botを訓練するデータ

● おやすみ

● おめでとう

課題

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

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

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

超大変

これを見かけた

絵文字

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

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

● おやすみ

● おめでとう

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

現状のデータ

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

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

○ テスト用:3万文

● ラベルスタンプ数:46

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

テキスト分類問題

テキスト分類

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

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

○ 感情分析

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

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

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

● 機械学習の一部

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

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

○ 音声認識

○ 画像キャプション生成

流れ

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

○ MeCabで分かち書き

● 単語をRNNに入れる

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

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

単語の列

RNNモデル

スタンプID

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

分かち書き

訓練環境

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

● 訓練時間:8時間程度

訓練結果の可視化

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

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

問題点と今後の方針

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

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

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

AWS構成

大変お世話になった記事

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

感想

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

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

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

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

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

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

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

最後に

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

○ ものづくりが好きだ

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

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

○ 自動化が好きだ

○ etc ...

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

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

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

● LINE Messenging APIを利用

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

作る

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

● Line SDK (Python)を利用する

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

要)

参考: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 # 文の長さ

      )

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

test

train

steps

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

loss

test

train

データを増やすべき?

steps

top related