狠狠撸

狠狠撸Share a Scribd company logo
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/
自社アプリ
Start fit うごく猫
運動習慣支援アプリ
iPhone, AppleWatch
猫好きホイホイアプリ
iPhone
ひっそり30万DL ニャー
LINEスタンプも作ってます
ダイエット 作画崩壊 ゆるゆる 取り急ぎ闯碍
デモ
まずはデモしましょう!
LINEで友達を追加!
TensorFlowて?訓練したLINE BotをAWS Lambdaて?動かしてみた
叠辞迟について
この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時間程度
訓練結果の可視化
?近いほど意味が近いという
?「スタンプの意味空間」
問題点と今後の方針
● 未知の単語に対してはまだ弱い
○ 訓練データを増やす
● 絵文字からスタンプにマッピングは主観的
● 本物の訓練データ収集機能を実装したい
○ スタンプが間違ったらユーザー指摘できるように
础奥厂构成
大変お世話になった記事
http://qiita.com/hiyuzawa/items/10e7bf2f6ad5d1c7fc9c
TensorFlowて?訓練したLINE BotをAWS Lambdaて?動かしてみた
TensorFlowて?訓練したLINE BotをAWS Lambdaて?動かしてみた
TensorFlowて?訓練したLINE BotをAWS Lambdaて?動かしてみた
TensorFlowて?訓練したLINE BotをAWS Lambdaて?動かしてみた
TensorFlowて?訓練したLINE BotをAWS Lambdaて?動かしてみた
感想
● 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 # 文の長さ
      )
参考:パラメータチューニング前:overfitting
loss
test
train
steps
参考:dropoutを入れた結果:underfitting?
loss
test
train
データを増やすべき?
steps

More Related Content

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