TAMALOG

プログラミングがあれば遠いところへ行けます。プログラムと人の共生を記録します。

TensorFlow User Group #3に行ってきました

TensorFlow User Group#3に参加しました。TensorFlowはデータフローグラフを用いた数値演算ライブラリです(2月15日にv1.0が出ました)。機械学習、Deep Learning周りへ応用されています。詳しく知りたい人は、Talk about ML and DL for happy engineer’s lifeを見て下さい。

TensorFlow User Group#3は、TensorFlowを実運用してみた話が中心です(奇数回は実運用、偶数階は技術の話)。

発表の様子がYouTubeで見られます

https://www.youtube.com/watch?v=dd7JdUVNP5Y&feature=youtu.be

ToC

  • Dockerを使った機械学習基盤の構築と運用@Retty
  • 口コミ文字列をソースとしたCharacter level CNNによる店舗属性の推定@Retty
  • SENSYにおける深層学習活用事例とTensorFlowの悩み相談@カラフルボード
  • MLPを用いたSSP収益の最適化@GMO AD MARKETING

超圧縮したまとめと所感

  • 機械学習基盤はストレージを共有(NFS)したDocker環境を作ると便利
  • 文字列データでもCharacter level CNNを使えば分類器が作れる(お問い合わせ分類もいけそう)
  • モデルとコードをそれぞれ管理することは難しいので両方ともにデータベース(ソースコードごと!)に格納し管理する
  • toC向けの機械学習はあまり行われていない(研究段階)
  • TensorFlowはユーザコミュニティが大きく、Githubでどのライブラリよりも人気
  • 機械学習自体はライブラリの恩恵を受けることで簡単に試すことができる
  • 生成モデルについての評価はまだ確立されていない

Dockerを使った機械学習基盤の構築と運用@Retty

2016年12月にバズったRetty流『2200万ユーザを支える機械学習基盤』の作り方の詳しい解説です。

発表者

名前: Taruishi Masato(@taru0216) 略歴: Debian Project公式開発者 -> Red Hat -> Google (SWE/SRE) -> Rakuten -> Retty (CTO)

発表内容

マシンを組み立ててネットワークにつなぐと自動でインストールされるように構築

  • どのマシンにログインしても同じデータがある(NFS)。そのため、マシンが重くなっても別のマシンに接続して作業が継続できる。
  • Jupyterをインストールして、SSHだけでなくブラウザでも操作ができる(デザイナやディレクタが触る環境を用意している)。
  • nvidia-smiGPUを知れるのでさくっと適切なマシンに入れる。

アーキテクチャ

  • Rubuntu(Retty Ubuntu) ServerとKubernetes、Juju、MAASを使っている
  • 開発者はDockerコンテナを使う
  • Dockerなので、手元のマシンでも動かすことができる

Dockerによって環境を持ち運ぶ(Infrastructure as Code)

  • Dockerによってセットアップを容易にしている
  • すべてのDockerイメージはコアDocker(retty2-runtime-core)から継承している
  • 手元のマシンを動かすときには retty2-runtime-devというdockerを用いる

環境を健全に、容易に利用するための工夫

  • シェルプロンプトにビルドバージョンを表示するようにして、混乱しないようにする
  • docker buildは、configure && make -jで依存を解消しながらビルドする
  • Circle CIと組み合わせて、プルリクがきたら docker build が自動で走るようにしている
  • KubernetesのDeamon Set機能で全マシンにデプロイするような仕組み
  • Kubernetes自体は、Juju & MAASでネット自動インストール

口コミ文字列をソースとしたCharacter-based CNNによる店舗属性の推定

  • 文字単位(Character-based)CNNによる口コミ分類
  • 口コミからこのお店がデート向けか判別する判別器を作った
  • CNNで日本語の自然言語処理が簡単にできる

スライド

TFUG#3 RettyにおけるDeep Learningの自然言語処理への応用事例

関連記事

character-level CNNでクリスマスを生き抜く

発表者

名前: 氏原淳志(Retty株式会社) 略歴: 薬学部 -> Retty株式会社

発表内容

  • CNNで日本語の自然言語処理が簡単にできるよ。
  • 問題: 単語の切れ目がわからない。

分かち書きが必要

  • 分かち書き
  • 問題: 辞書が必要
  • Rettyの場合はお店の名前とかある。口語表現も難しい。→MeCabだけで解決できない
  • 辞書を延々と構築する作業になりがち

救世主: CNN

  • 画像分類のコンテストでCNNを用いたチームが優勝。自然言語でも使えるかも
  • 文字列をベクトル化する必要がある
  • Word2vecというGoogleのライブラリで、言葉をベクトル化できそう
  • 実は、Word2Vecは、単語をベクトル化している。→単語分割が必要→分かち書き→本末転倒

1文字ずつCNNすればいいじゃん

  • 画像を対象にしたCNNでは、1pxごとにCNNへ入れている
  • 同じ発想で、1文字ずつCNNに食べさせればいいじゃん
  • Character-level CNNと呼ばれる技術

Character-based NNの手順

  • 文字列をID化する必要がある
  • Unicode値を使う
  • 埋め込み表現を学習させる→グレースケール画像と同じ!→あとはCNNに食わせるだけ
  • ただし、CNNのカーネルサイズは横にN。つまり1文字分。縦は2,3,4,5の複数サイズ。これはN-gramをCNNに学習させている。

まとめ

  • デート目的店口コミと判断される口コミが多い店はデートに使えるのでは?
  • 20万口コミ(デート目的店の口コミ10万 + その他10万)で、Accuracyは83%
  • 重要: 教師作りのソルジャーが必要。最低、数万欲しい。数10万欲しい。

SENSYにおける深層学習活用事例とTensorFlowの悩み相談@カラフルボード

TensorFlowを含む深層学習の活用事例を紹介してもらった

発表者

名前: 武部雄一(カラフルボード)

スライド

SENSYにおける深層学習活用事例とTensorFlowの悩み相談 - TFUG#3

発表内容

広告CVR予測 with TensorFlow

  • マーチャントとパートナーの特徴量作成にオートエンコーダーを利用。RBFNを用いて、CVRの予測回帰モデルを作る
  • TensorFlow利用
  • 直近三ヶ月のCVRをもらった。膨大なクリックログ

ヒューマンオペレーションvs人工知能

  • 人による平均値をはるかに越える結果になった
  • 入力層1000次元。中間層200次元。出力層1000次元。autoencoder
  • 1000次元はユーザの数(パートナーのサイトを特長付けるユーザ数)
  • シグモイド関数を使った

ファッションアイテムの推薦最適化

  • 感性特徴空間を作成
  • 服に関する感性の二次元ヒートマップ
  • 画像特徴量をt-SNEで二次元に落とし込み、各画像の推定スコア(CNNの出力値)。chainerを使ってやった。

応用: 商品企画の方向性検討

商品企画の方向性検討 需要予測・MD計画の最適化

可視化されていると顧客と共通認識を持ちやすい。

より好みにマッチするアイテムの提案

TensorFlowにまつわる2点の悩み

過去に蓄積してきたモデルの流用が難しい。

  • モデルの変換が絶望的。
  • 解決方法はたぶんない

デバッグがしんどい

  • chainerは行列計算にNumpyを使っているCupy
  • 実行しながらモデルを作れる
  • stacktraceも置いづらい。

TensorFlowの魅力

  • 指示者が多く、コミュニティも熱狂的
  • 分散学習(Google Cloud ML, YahooによるTensorFlowOnSpark)
  • 学びやすさ
    • しょういちじかんで、opsノード、エッジ、データフロー構造、sess.run()といった基本的な構成要素を理解し、遊び始めラエル。Kerasはすごい簡潔

まとめ

NNで広告配信のユーザ最適化をやってみた

発表者

名前: 勝田隼一郎 略歴: 宇宙高エネルギー物理学 -> GMOインターネット次世代システム研究室データサイエンティスト兼アーキテクト

発表内容

  • インフィード広告を配信するようなアドネットワーク(AkaNe GMO AD MARKETING)にユーザごとに、より適切な広告を配信したい

実際につかったモデル(MLP)

  • 匿名ユーザごとに特徴量をつくる
  • 配信履歴よりclickしたUser、してないUserにわける(0/1)
  • これを教師データとしてMLPで学習を行い、インプットされた特徴量に対してclick率のようなものを求める
  • 確率の高いユーザを推薦ユーザとして配信ターゲットとする

入力から出力までの流れ

  • INPUT→生データ: 匿名ユーザのウェブ行動履歴、どのウェブサイトを見たか(スパース)
  • スパースなデータを少ない次元のベクトルに押し込む(embedding)
  • →OUT: モデル(MLP)のfeature

Embedding by ALS

  • UU: 数千万人を扱うため、Apache SparkのMLlibのALS(Alternating Least Squares)を用いた。Embeddingをした。
  • MLPに食べさせるために、各ユーザについてALSする

まとめ

聞いてきたこと

  • Jupyterでも限界がある
  • ソースコードと精度の結果をすべてDBに入れる。モデルの名前も入れる
  • デプロイはまだ研究段階
  • 誰でもさわれるような環境を用意する
  • Infra as a Codeなので継承して目的別にDockerを管理すると良い