画像収集基盤の構築ログ4
目的は、人間の代わりに画像を集めてきてくれるシステムを構築すること。個人的な趣味からイラスト画像を対象としている。
進捗
- illustration2vecのタグ学習済みモデルの全結合層から特徴ベクトルを抽出
- 自動クロッピングのAPIを作成
- DBへ挿入
- システムが煩雑化してきたのでDockerを検討
- 画像のランク付けのために、k-top selectionを検討
- 画像ストレージをセットアップ
- グラフDBを調査
- Image Influence APIを調査
作業記録
Jubatusのレコメンダーか近似最近傍探索を利用するため、画像特徴量が必要になった。 illustration2vec
に extract_feature
という関数が用意されていたが、配布しているモデルのレイヤー名が変わったせいで、動作しなかった。直したものをPull Requestする予定。 http://illustration2vec.net/models/illust2vec_tag.prototxt
によれば全結合層は conv6_4
のようだった。
参考資料
- [Python] numpy.ndarrayを普通の配列(list)にする
- Python: Converting Epoch time into the datetime - Stack Overflow
- API | Tumblr
- GitHub - cayleygraph/cayley: An open-source graph database
- Demo of Cayley - Graph Database written in Go - YouTube
- Image Influence API|PRODUCT|A3RT
- MySQL :: MySQL 5.7 Reference Manual :: 11.1.9.8 Converting Between 3-Byte and 4-Byte Unicode Character Sets
画像収集基盤の構築ログ3
目的は、人間の代わりに画像を集めてきてくれるシステムを構築すること。個人的な趣味からイラスト画像を対象としている。
まだ良いコードネームは思いつかない。
進捗
- 自動で画像収集を行い始めた
- エラーに対応できるようにスクリプトを改良
- RedisとSidekiqを使ったジョブキューの導入の検討
- 参考資料を漁った
- 国内でクローラーと言えば、VASILY。ブログ記事を読み漁った。
- 画像変換サーバーへの依存をRMagickへの依存へ変更。ネットワークを介さなくした。
- スマートクロップの改良の検討
- AnimeFaceのカスケーディングを使って顔認識してみたが思ったように検出できなかったため断念
- 画像収集用のストレージを購入する
- ユーザが気軽に画像分類するにはどうするか考えた(検討段階)
雑記
タスク管理が困難になってきたので、todoistのCLIクライアントを使って管理しようと思う。
おすすめリンク
VASILYのブログはいつも参考になる。クローラーや画像処理まさに僕がやりたいことが揃っている。
画像収集基盤の構築ログ2
目的は、人間の代わりに画像を集めてきてくれるシステムを構築すること。個人的な趣味からイラスト画像を対象としている。
画像収集基盤という名前だが、何かコードネームが欲しい。
進捗
- 管理サーバーをインターネットに公開した
- illustration2vecで画像の特徴ベクトルを抽出できることがわかった
- Jubatusを使って類似画像の近傍探索ができることがわかった
- プライベートGitLabにリポジトリを作成した
- YOLOv2を用いた画像の自動クロッピングを実装した
- mitproxyを使えば閲覧とスクレイピングが同時に行えることがわかった
- 画像のランキング・選抜について調査をした
- 構成図を書いた
次にやること
- 画像収集用のストレージを購入する(購入完了)
- illustration2vec + Jubatusを使った類似画像検索を試す
- alt-i2vを試してもいいかもしれない
- YOLO v2によるスマートクロッピングを管理画面に導入する
- MySQLを使ったバッチ処理環境を構築する
- 画像をillustration2vecを使ってメタ情報を付与する
- クローラー戦略を考える
- どのようにURLを探っていくか
- どのURLをスクレイピングするか
- ユーザが気軽に画像分類するにはどうするか考える
- ユーザ行動を教師データとして利用するにはどうするか
- Labellio
- 構想を整理する
- ユーザが好みそうな画像を収集するクローラー戦略を作るのか
- ユーザが好みそうな画像を推薦するのか
作業記録
スマートクロップ
画像を正方形サムネイルに変換するときのクロッピング戦略をYOLO v2という一般物体認識アルゴリズムを基に構築した。アルゴリズムの実装自体は難しくなかったが、PILとOpenCV(Numpy)のデータ構造の相互変換に戸惑った。クロッピングがうまく行ったかどうかの指標はあるのだろうか?まだ調べていないが、画像周りのアルゴリズムの指標はまだ未成熟のようだ。
インターネットへの公開
自宅の外でも作業がしたかったため、サーバーをインターネットへ公開することにした。キャッシュ+リバースプロキシとしてNginxを導入した。現在サムネイル生成には、thumborというpythonで書かれた画像変換サーバーを用いている。クエリとして画像変換対象のURLを含める必要があるが、Nginxのmerge_slashにより//
が/
に変換されてしまい、原因を調べるのに多くの時間使ってしまった。今までlocalhostだけで動作確認ができていた管理サーバーだが、外部公開の問題を早期に解消できたのは良かった。
人力ソート
人の判断基準を学習させたいと昔から思っていた。そのきっかけはキャラソートだった。特定の作品に登場するキャラクターを2名表示して「どちらが好きか」という二者択一の比較を行っていくもの。人の「好き」という気持ちは体系化されていないことが多く、このようなツールを利用することで自分の嗜好が整理されることに僕は感動を覚えた。自分の判断基準を学習して将来的には自分の代わりに自分の分身がインターネットを探ってくれる未来を夢見ている。
画像収集のための判断基準を学習するためには、ユーザ行動を画像の評価として結びつけなければならない。評価についてはいくつかアイデアがある。画像のLike
などは重要な指標になることはあたりまえだが、多くの画像が並んでいるような状況でその画像を選んだことにも着目したい。選ばれなかった画像の評価を下げるという評価を試してみたい。また、人は好きよりも嫌いに反応しやすいため、Like
よりもDislike
に比重を置きたいと思っている。
類似画像検索
類似画像検索を行うにあたり思い出したことがあった。とあるニュースで、類似画像検索では違いが重要であると報道されていた(http://jp.techcrunch.com/2011/12/07/20111206cmu-researchers-one-up-google-image-search-and-photosynth-with-visual-similarity-engine/)。可能であれば、現在構築中のシステムにもこのアイデアは導入したい。
この記事を書いている最中に、以下の記事を見つけた。このOSSをうまく使えれば、Jubatusよりも早い類似画像検索が実装できるかもしれない。
参考資料
- http://www.clouderaworldtokyo.com/session-download/C2-Cloudera_Tokyo_2016_DMM_submit%20.pdf
- GitHub - GINK03/alt-i2v
- C89 3日目に行ってきた - kivantium活動日記
- ブラウザで巡回しながら、特定の条件にマッチする URL の場合にダウンロード - Qiita
- jubatusでおすすめのいらすとをレコメンドしてみた - Qiita
- ディープラーニングを使ったイメージの切り抜き | カメリオ開発者ブログ
- 「多数決」以上に民意を反映できる選挙方法とはどのようなものなのか? - GIGAZINE
- 推薦システムになにができるのか - Techcompass
- ベイズ推定とDeep Learningを使用したレコメンドエンジン開発
- Mac OS Xでlaunchdでcronのように定期実行するメモ - launchd.plistの作成とか - tweeeetyのぶろぐ的めも
- launchd を使ってスクリプトを自動実行してみた
- [python] PILでリサイズしたファイルデータを保存せずにS3にアップロードする | とりあえずやってミタ
- python - How can Pillow open uploaded image file from StringIO directly? - Stack Overflow
- python - Can an uploaded image be loaded directly by cv2? - Stack Overflow
- python - cv2.imread flags not found - Stack Overflow
- Does python-opencv support to read in-memory image - Stack Overflow
- python - How to send image generated by PIL to browser? - Stack Overflow
- OpenCVとPIL(python Image library)のデータ変換 - tataboxの備忘録
- Crop Images with PIL/Pillow
- Jubatusにcurlでアクセスするインタフェースについて - Qiita
- Jubatus をインストールして使ってみる【2017年版】 - Qiita
- nginx: How to keep double slashes in urls - Stack Overflow
- nginxのproxy_passの注意点 -- ぺけみさお
- Module ngx_http_core_module
- NGINX コンテントのキャッシング | NGINX 日本語訳
- GitHub - rezoo/illustration2vec: A simple deep learning library for estimating a set of tags and extracting semantic feature vectors from given illustrations.
- Nearest Neighbor — Jubatus
- Jubatusを使った感情分析を行うLINE Botの作成 - Qiita
画像収集基盤の構築ログ1
自動画像収集基盤を作成しています。
- 収集基盤管理サーバー: Sinatra
- 動的サムネイル変換: thumbor
- クローラー+スクレイパー: Rubyスクリプト
- 画像メタ情報推定サーバー: Flask+illustration2vec
- DB: MySQL
RubyはGemが充実しているので、最短時間が作れると判断しました。将来的にLispでリプレイス予定です。
1日目
スクレイピングをするための基盤を作りました。スクレイパーにはURLを与えます。スクレイパーは、URLから設定ファイルをディスパッチします。設定ファイルにはスクレイピングするためのレシピが入っています。その後、設定ファイルをたくさん作成し、動作確認をしておきました。
2日目
DB設計を始めます。プロトタイプなので、そんなに複雑に考えません。たくさんのサイトを巡って情報の共通点を探り出しました。そこからどういう情報が必要か、どういう関連図になるかDB設計に落としていきます。スクレイピング時にDBへ記録するようにしました。
DBに格納したデータに基いてクローラーを回します。この時点では、まだタスクキューにはしていません。クローリング時に、画像は動的サムネイル変換サーバーを介して縮小変換をかけて、ストレージに保存しました。
管理サーバーの作成に取り掛かり、管理者の入力に応じてDBの値をいじったり、特筆事項をメモできるようにしました。
スクレイピングで剥ぎ取れなかったデータを補間するため、保存した画像をillustration2vecによるメタ情報取得を検討します。なかなかな精度だったため、本格的に載せることにしました。illustration2vecはPythonで動いているため、Flaskを導入し画像を入力とするメタ情報推定サーバーを構築しました。
つづく
まだシステム構築中ですが、引き続き作業を継続していきます。
A-FrameでWebVRを試した
A-Frameというライブラリを使って、WebVRを試しました。 aframe.io
説明
パブリックドメインの天球画像を使って、カメラ(自分)を取り囲むように画像を配置しています。
デモ
コード
デモのコードはここから触れます。一部デッドコードがあるので注意してください。
vr_gallery/index.html at master · tamanobi/vr_gallery · GitHub
コードを書かずにHerokuボタンひとつでデプロイ!LINEチャットボットを試す全手順を公開
GitHubとHerokuを使ってLINE Messaging APIがどういうものか試せるようにしました。
この記事で何ができるようになるの?
- コードを書かずに、LINE上で動く超簡単なチャットボットが作れます
- LINEチャットボットの簡単な始め方がわかります
この記事の目的
僕は確信しています。チャットボットは新しいパートナーだと。ウェブサービスの新規登録ボタンを見つけることができなくても、「登録したい」とチャットボットに言えばサービスを受けられる世の中が来ると。でも、そんなチャットボットは、ツールではなく、パートナーになっていくんだと。いなかったら寂しいやつだと。そう僕は思っています。
僕はぜひともみんなに、チャットボットに触ってほしい。だからこの記事を書いています。
もう一つの目的
この記事は、サポーターズのイベントで話した内容をまとめたものです。当日は急な繰り上げでコンピュータを持参できなかった方が何人かいました。その人たちを始めとする参加者のみんなにまとまった資料を提供するという目的もあります。
主催者いわく、4月にも開催予定とのことですので興味のある方はよろしくお願いします。
supporterz-seminar.connpass.com
チャットボットを始めるための準備
それでは、始めていきましょう。今回、チャットボットを始めるために必要なことはシンプルです。
- LINEのアカウント(日常利用しているもので十分)
- Herokuのアカウント
- LINE Business Centerへ登録
どれもお金は不要です。
Herokuのアカウントを作る
さあ、Herokuのアカウントを作りましょう。Herokuをアカウントがあれば、無料でウェブアプリケーションを公開する基盤が手に入ります。レンタルサーバーやVPSを借りる必要はありません。
Sign up for free から始められます。
Herokuの準備は完了です
HerokuはRubyやPHPを始めとするいくつかのプログラミング言語に対応しています。公式に対応していなくてもBuildpackを自分で用意すれば、Herokuで利用することができます。
以下の画面が出れば、Herokuの準備は完了です。次はLINEの準備をしていきましょう。
LINE Business Centerに登録しよう
LINE上で動くチャットボットを作るために、LINE Business Centerで登録しましょう。まずは、すでに持っているLINEアカウントでログインをしてみます。ログインするときは、メールアドレスを求められます。メールアドレスはLINEアプリの設定をみれば、思い出せます。
Messaging APIの利用をDeveloper Trialで始めてみよう
最近店舗で利用される機会が増えているビジネス向けのアカウント: LINE@が提供されています。LINE@は、友達追加時に「友達に追加してくれてありがとー!」のような自動応答を設定できます。
定型文じゃ味気ない、これをもっとユーザのメッセージに応じて柔軟にしたい!と思うのは必然です。
ユーザからのメッセージを取得するためには、自分の用意したサーバー(Heroku)のエンドポイント(http://example.net/callback
)を登録する必要があります。Messaging APIのDeveloper Trial*1に申し込んで設定していきましょう。
Messaging APIの申し込み手順
Developer Trialを始めると、事業主を選択するように促されます。事業主を登録していなくても選択をクリックすれば、事業主を追加するボタンから登録することができます。
以下の画面までたどり着けば、完璧です。LINE Business Centerに登録できました。ここから再び、Messaging APIのアイコンをクリックして進めていきましょう。
Developer Trialをクリックすれば、アカウント名の設定を求められます。アカウント名は後から変更できるので気楽に決めましょう。ただし、LINEの友達となったユーザにはアカウント名が公開されますので、公開するときは早めに変更してください。
さあ、申込みが終わりました。チャットボットを試すために、LINE@MANAGERの設定を変更しましょう。
LINE@MANAGERの設定をしてユーザからのメッセージを送信するようにしよう
今回は、Messaging APIを利用してチャットボットを試してみるのが目的です。警告文を読んで、APIの利用を開始しましょう。
以下の画面のように設定を変更していきます。Webhook送信、Botのグループトーク参加は「利用する」を選択、自動応答メッセージ 、友だち追加時あいさつは「利用しない」を選択して保存するようにします。
Webhook送信を利用することで、自分が用意したサーバー(Heroku)にユーザの送信したメッセージを受信できるようになります。次は、LINEのトークンを確認していきます。
Messaging APIの利用に必要なLINEのトークンを確認しよう※メモを忘れずに。
Webhook送信などの設定した画面のステータス欄にLINE Developersで設定する というリンクからトークンを確認する画面へ移動できます。
画面が移動すると少し雰囲気が変わります。ページのShowとISSUEというボタンをクリックして表示された文字列をメモとして残しておきましょう。
メモするべきトークンは3つ
トークンを3つメモしておきましょう。Herokuを使ってチャットボットをウェブアプリケーションとして動かすときに必要になります。
- Channel Secret
- Channel Access Token
- UserID
Channel Secret
Channel Access Token
UserID
これは、あなた自身のLINEアカウントIDです。これを使えば、あなた自身にメッセージを送ることができます(Push Message)。
これらのトークンは大切なものですから、メモを誤って公開しないようにしてください。では、GitHubへ移動してHerokuへデプロイしていきます。
GitHubからボタン一発デプロイ
LINEチャットボットを簡単に試せるように、GitHub上にHerokuボタンを設置しました。以下のリポジトリからボタンを押してみましょう。のちほどプログラムに変更を加える人は、自分のリポジトリにフォークしてからやる良いでしょう。
アプリ名やトークンを入力してデプロイ
ボタンを押すと、デプロイするアプリについて情報入力を求められます。アプリ名はアプリのURLとなります。たとえば、your-chatbotline
とすればあなたのアプリケーションのURLは、 https://your-chatbotline.herokuapp.com
となります。
アプリ名を入力したら、先程メモしたChannel Secret、Channel Access Token、UserIDの3つを入力してデプロイします。デプロイ後、https://your-chatbotline.herokuapp.com
にアクセスしてhelloという文字列が見れた成功です!
最後にLINE Developersにウェブアプリを教える
さきほどデプロイしたウェブアプリには、LINE Serverからのメッセージを受け付ける先(callback)が用意されています。そのコールバック先を、LINE Developersを開いて登録しましょう!登録する場所は以下の画像を参考にしてください。
登録するURLは、https://your-chatbotline.herokuapp.com/callback
ですのでお間違えなく。
入力したら、verifyというボタンを押して通信ができているか確認して終了です!次から、ついにウェブアプリが動き出します!
Push Messageを試してみよう
あなた自身のLINEに対して、Messageを送ってみます。/test/push
というエンドポイントにブラウザでアクセスすることで、「push message」というMessageを送ることができます。例: https://your-chatbotline.herokuapp.com/test/push
オウム返しを試してみよう
LINEアカウントに対して、メッセージを送るとあなたが送ったメッセージと同じメッセージが返ってきます。
改造するならリポジトリをフォークすれば
以上で、LINEチャットボットの簡単な試し方の手順説明は終わりです。プログラムの中身を知りたかったり、改造したい場合は以下のリポジトリにコードがあるので参考にしてください。
*1:Developer Trialであれば友達人数の最大が50人に制限されますが、無料でPush Messageを試すことができます。
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-smi
でGPUを知れるのでさくっと適切なマシンに入れる。
アーキテクチャ
- 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で日本語の自然言語処理が簡単にできるよ。
- 問題: 単語の切れ目がわからない。
分かち書きが必要
救世主: 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はすごい簡潔
まとめ
- 分散学習をかきたいときTensorFlowは便利
- ヒートマップ作成例のようなヴィジュアライゼーションにも良い!
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する
まとめ
- ABテストの結果、CTRが150%改善!
- 関連記事: https://cloudplatform-jp.googleblog.com/2017/02/gmo-bigquery-tensorflow-google-cloud-platform.html
聞いてきたこと
- Jupyterでも限界がある
- ソースコードと精度の結果をすべてDBに入れる。モデルの名前も入れる
- デプロイはまだ研究段階
- 誰でもさわれるような環境を用意する
- Infra as a Codeなので継承して目的別にDockerを管理すると良い