Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

【カンファレンス・レポート】TensorFlow Dev Summmit 2019に参加してきました!

メルカリのAI Engineeringでエンジニアリング・マネージャを務めている澁井です。 米国カリフォルニアのGoogleキャンパスで開催されたTensorFlow Dev Summit 2019に参加してきました。 TensorFlow Dev SummitはTensorFlow(以下TF)の開発者向けにGoogleが主催しているカンファレンスで、今年は03/06(水)-03/07(木)に開催されました。

f:id:shibui-yusuke:20190308101719p:plain:w400

特に面白かったセッションをピックアップして紹介します。

TensorFlow 2.0

当日03/06にTF 2.0 alphaがリリースされました。TF 2.0はTFのメジャーアップデートで、昨年くらいから少しずつ情報提供されていました。nightly-releaseで使うこともできましたが、ようやくalphaバージョンが出ました。 2019年3月7日時点では pip install -U --pre tensorflow でインストールして使うことができます。 TensorFlow 1.xとの大きな違いは以下です。

  • ユーザビリティ改善
    • 標準的な機械学習モデルの定義、学習の記述方法はtf.keras ベースになります。
    • eager execution をデフォルトで有効化します。
    • session を使わなくても良くなります。
  • tf.function()autographでPythonコードをコンピュテーション・グラフに変換可能(TensorFlowで実行可能)になります。
  • デバッグ改善
    • エラー時にエラー箇所(コードの行番号)が表示されます(地味に凄い嬉しい)。

モデル開発が tf.keras ベース(High level)になるため、一般的に開発効率は向上すると思います。一方でカスタムレイヤーやLow levelな計算を定義するには、これまでの tf.Variable 等々を使うことができます。独自に計算グラフを定義するには tf.function() を使う方針になると思います。

f:id:shibui-yusuke:20190308102850p:plain:w400

既存のtf1.xからtf2.0への移行にはアップグレード・ツールが提供されます。このツールを使えば、.pyファイルや.ipynbファイルのtfコードをtf2.0に置き換えることができるそうです。

あとTF2.0ではユニコード型の文字列をサポートするようです。日本語の自然言語処理には大きなメリットになります。

TF2.0のリリーススケジュールですが、Alphaリリース(3/6)後、春のうちにRCになり(春っていつまでだ?)、GAは今年中予定、だそうです。

TensorFlow Extend(TFX)

TFXは機械学習のワークフローをEnd to EndでカバーするためのTensorFlowの実装です。

機械学習のモデルは開発からリリースするまでに、以下画像のようなフローが必要になります。機械学習というと学習と評価ばかりがフォーカスされがちですが、実際には更に多くのタスクが必要になります。モデルを開発するにはデータを取得し前処理する必要がありますし、リリースして推論できるようにするにはサーバやデプロイメントが必要になります。TensorFlowも従来はデータの簡単な前処理からモデル定義、学習、評価、推論(TF serving)しか用意されていませんでしたが、より広いフローをカバーするため、TFXが提供開始されています。

f:id:shibui-yusuke:20190308101957p:plain:w400

TFXでは各タスクをコンポーネント化してパイプラインにして連携させます。永続化するデータはmetadataストアに格納し、再利用や管理可能になるようです。パイプラインの途中でエラーになった場合、以前の処理データを再利用できる、というメリットがあります。

metadataストアのメリットは前処理や学習の履歴を保存しておけることで、小さい変更であれば履歴を使って時間短縮できること、らしいです。TensorFlowに依存する(Schikit-learnやPytorchで使えるのか不明)のが難点かもしれませんが、他のライブラリと共存できればすごい便利なツールになりそうです。

f:id:shibui-yusuke:20190308102133p:plain:w400

TFXはワークショップも催されていました。1時間程度で、AirflowでTFXライブラリを使ってみる、というものでした。GUIでTFXのフローを進捗確認できて、とても便利そうでした。

メルカリでは機械学習のワークフローを実行する基盤を独自開発していますが、TFXはとても参考になりました。

TensorFlow.js

TensorFlowのJavaScript版です。version1.0がリリースされ、今回のデブサミでもユーザ層の厚さや熱心さが伝わってきました。

モデルの書き方はKerasベースです。React Nativeのようにコンポーネントを組み込めるような書き方になるのでしょうかね?

f:id:shibui-yusuke:20190308103613p:plain:w400

TensorFlow.jsはブラウザ(従来のjs)、サーバ(Node.js)、デスクトップ(Electron)をカバーしており、マルチプラットフォームで実行できることが最大の強みだと思います。エッジ推論もそうですが、ブラウザやデスクトップで学習、推論できるなら、データをサーバに送るコストやセキュリティを気にする必要がなくなりますし、今後は機械学習をjsで開発する時代がくるのでは!?という熱量も感じられました。

Magenta StudioExperiments with Googleのようにtf.jsを用いてウェブ経由で多様なAIサービスを提供できていますし、今後さらに盛り上がっていくと思います。

くわえて、PythonのTensorFlowで開発したモデルをsaved_modelを使ってtf.jsで扱うことができるらしいです。モデル開発はPythonエンジニア(MLエンジニア)が担当し、推論やウェブサービス開発をJSエンジニアが担う、という役割分担も可能になると思います。

what-if-tool

セッションはなかったですが、ブース展示していたwhat-if-toolは便利そうでした。what-if-toolはTensorboardの追加機能で、学習済みモデルを評価するツールです。

以下画像のように、2値分類で推論結果の位置づけを可視化したり、特定のパラメータを調整して推論したりすることができます。

f:id:shibui-yusuke:20190308100708p:plain:w400

検証データやテストデータから漏れてしまっているパラメータを設定して推論することができるので、機械学習の境界値分析が可能になると期待しています。

機械学習のモデルをテストデータで評価することが多いですが、what-if-tool では値を適宜変更して推論結果を試してみることができます。推論時にテストデータに存在しない値が入力されることは頻繁に発生することなので、what-if-tool でモデルの品質を向上できる可能性があると思いました。

使い方はこちらでブラウザから試すことができます。

まとめ

とても楽しい2日間でした。 TensorFlowで機械学習を実用化するためのワークフローをエンドツーエンドでカバーしようという戦略が伺えました。実務ですぐ使えそうなツールでは what-if-tool が便利そうでした。TensorFlow.jsも機械学習を実行するプラットフォームをウェブ世界に広げる橋頭堡になると思います。

私は3年前にKerasでディープラーニングを学び始めたのですが、TensorFlowの本流がKerasになるのは嬉しい限りです。そして会場ではKeras作者のFrancois Cholletさんと一緒に写真撮影することができました。

f:id:shibui-yusuke:20190308102332p:plain:w400

あと秘密ですが、Apache Beamがさり気なくPython3.5以上をサポート開始していまして、これを教えてもらえたことも大きな収穫でした。

複数の機械学習モデルが動くシステムをモデルごとにマイクロサービス化したお話

はじめまして。メルカリのAIチームでSysMLエンジニアをしているChicaです。
SysMLという言葉はあまり馴染みがないかもしれませんが、「Systems and Machine Learning」の略で、AIを実際にサービスに組み込むためのミドルウェア・インフラを整備することを言います。

メルカリではAIを使った多くのサービスが動いていますが、今回はその中でも特にたくさんの機械学習モデルが動いている違反出品検知システムをモデルごとにマイクロサービス化したお話を紹介します。

メルカリで動いている違反出品検知システムとは

メルカリには禁止されている出品物に記載しているように、出品していただくことのできない(例えば現金のような)アイテムが存在します。対象のアイテムが出品されてしまったときに、間違って購入されないようCS(カスタマーサポート)チームが監視しています。

AIチームでは、CSチームを補助するため、

  • 禁止出品物Aかどうかを判定するためのModel A
  • 禁止出品物Bかどうかを判定するためのModel B

というように違反出品検知を行うモデルがたくさん動くシステムを提供しており、一つでも違反を検知するとCSチームへ通知が行き、メンバーが確認するようになっています。

続きを読む

バッチ処理の採用と設計を考えてみよう

こんにちは。メルペイで、決済・振込申請のバックエンドソフトウェアエンジニアをしている id:koemu です。

今日は、バッチ処理を行う理由について、考察を深めて設計に活かしていく話をしたいと思います。

はじめに

バッチ処理とは、ある決まったタイミングで1つのプログラムが複数のデータを 一括処理 することを指します。この反対の言葉として、オンライン処理があります。オンライン処理とは、お客様の操作を初めとしたイベントをもとに 逐次処理 されるものです。OLTP(Online Transaction Processing)とも言います。

本エントリでは、バッチ処理を採用するにあたり、どういったユースケースが適切なのかを整理して、今後のソフトウェアの設計の指針にできることを目指しています。今回は、「バッチ処理を採用するとき」と「バッチ処理の設計」の2つについて取り上げます。

続きを読む