メルカリに学ぶ深層学習基盤
tensorflow(keras)やchainerのおかげで深層学習モデルを実装できる人は増えてきたわけですが、そのモデルをシステムとして安定運用する基盤(機械学習基盤)は、作り方や運用の仕方を含めてまだ世の中的にもベストプラクティスを模索中のようです。
ちなみにこういった話は、機械学習 (MachineLearning) と運用 (Operations) ということで、DevOpsに倣って"MLOps"と呼ぶのが今風だそうです。
各事業会社がアプリやウェブコンテンツを作成すると、その機能には当然のようにユーザーセグメントやレコメンド、画像識別機能など、機械学習を常用する機能が必要となる昨今では、「今 システム基盤作るなら、将来的に深層学習も見据えて機械学習基盤を作りましょう」となるようで、事業会社ではホットなトピックのようです。
そんなホットなトピックを、ホットなメルカリさんがお話されるということで聞いてきました。 メルカリで実運用されている機械学習(深層学習)基盤のお話です。
スピーカーはメルカリのAI部2名で各30分。話題はそれぞれ
- メルカリにおける深層学習を用いた商品画像識別(出品アイテムの約1000クラスの分類タスク)
- AI部が構築している機械学習基盤(MLOps)について
※ 以下、突然の雑メモ。ビール片手に聞いていたのでちょこちょこ間違っているところがあると思われる
メルカリの商品画像識別
- 山口 拓真さん
- OCR/computer vision, super resolutionとかをずっとされていた方
- 前職はゲーム会社の分析基盤エンジニア
- 現在はメルカリサービスにおける画像認識タスク全般
- やってること: メルカリに出店された商品に自動でカテゴリーやブランド名を付与する機能の構築
- メルカリには1100商品カテゴリーがある
- inception v3を使って220Mの出品商品画像をスクラッチで学習
- 最初にやったときは29%エラー程度の精度
- 識別が難しかったやつ
- メンズとレディースのコンバースを分類(サイズが違うだけなのでムリ)
- 膝丈ドレスと膝上ドレスの分類(着る人によって違うやん...ムリ)
- アウトドアシューズか普段履きシューズか(人間でもわからんやん...むずい)
- 意外に出来たやつ
- 子供用スニーカー/大人用スニーカーの分類
- ニューバランスの大人用スニーカーはkid用とならずにきちんと分類できる
- 子供用スニーカー/大人用スニーカーの分類
- カテゴリ認識だけでなくブランド認識もできてる
- グッチ、トミーヒルフィガーなど分類できてる
- 画像中の非常に小さなブランドロゴでも意外にきちんと見つけて識別している
- ちなみに商品の正解ラベルはユーザーが出品時にラベル付けしたものを利用
- 投稿画像は全て正方形になるので学習するときいろいろ楽
- 深層学習アルゴリズムがどこに注目して識別しているかを可視化
- ブランド物の場合、ちゃんとロゴに注目している。しかも小さなロゴまで注目できている
- 人間は知らないブランドならスルーしてしまう。そういう意味で機械の方がブランド識別できている
- 商品分類タスクにはimageだけではなく、ユーザーが入力するtitle,category,brand,price,color情報も使える(しかし今は主に画像のみを対象に取り組んでいる)
- ユーザーが商品画像を投稿すると、リアルタイムで画像識別して、商品の属性情報をある程度自動で入力する(入力補助的な機能)
- 出品画像を使ってtrainしているので、その画角と大きく外れる出品画像はpredictできない
- 色認識
- この深層学習モデルのMLops的なこと
- kubernetes利用(いまはどこもかしこもkubernetes)
- 1日に100万品の商品が出品される。その全てに画像認識をしているが、このシステムの運用は1,2人でできている
- 深層学習モデルが走るのと、メルカリの本サービスは疎結合なので識別システムが落ちてもメルカリのサービス本体には影響しない
- 他にも、画像をクエリーにして検索する仕組みを作成中
- メルカリ技術ブログにも書いている-> 【Mercari Summer Internship】商品画像の色推定を行いました!
- 質疑
機械学習基盤(MLOps)の話
工藤さん @Hmj_kd
- MLエンジニア。物理畑の方。
現在構築中の基盤
学習モデルのバージョン管理...気になる。 自分もシステムの話は弱いのでふーん、という薄い理解ですが、システム概要図の行間にたくさんの明文化されていないテクニックがある雰囲気
- 質疑
Q&Aタイム
- 1日で100万画像とのことだが、実際どこまでさばける?
- 1日1億くらいは現実的な時間でレスポンスできそうだと思っている
- 類似画像検索は過去画像全体にかけるのか?計算できるの?
- 直近1,2ヶ月以内に投稿された画像は検索できる。過去商品全部は無理。
- 機械学習モデルのメンテナンスについて
- 深層学習だからといって別に複雑な仕組みはいらないと思っている。別にクーロンで回してもいいし。
- 新しい商品画像に対応するため、月に1回は新規出品画像を取り込んで再学習させている
- 論文そのまま実装以外にメルカリで作った独自アルゴリズムとかもあるの?
- アカデミアとの連携とかするの?
- これからしていくよ
- 落合陽一と画像検索アルゴリズムつくったりしようとしている
- 関連商品画像の検索はメルカリにとって重要な機能なので頑張りたい
- 機械学習システム構築するにあたり、社内的な進め方は?非技術者や偉い人をどうやって説得している?
- そもそもメルカリはそういった技術に理解がある方だよ(良い会社)
- 毎回簡単なデモをサクッと作って、それを見せながら説得する。それが良い。
- 他社の事例集とかを作る。良い説明資料となる。
- あと、こまめで丁寧なコミュケーションが大切
懇親会での質問
- 年末くらいにメルカリ研究部門の立ち上げのお披露目してけどあれって何です?
- メルカリが研究開発組織「mercari R4D」を設立、シャープなど6機関とIoT技術等をテーマに事業化を目指す技術研究を進める
- 何やるのか、もう少し詳しい内容が載った最近の記事 -> メルカリが「R4D」設立で、技術基盤を強化へ――オープンイノベーションの野望はどこまで広がる?
- メルカリももっと未来を見据えた技術力を付けるための取り組み。社員の人も数日前に知ったとかそういうレベルらしい。
- 精度が下がったら再学習する、の"精度"とは何をいっている?
- その時に存在するデータ(画像)をランダムサンプルしてデータセット作って、分割したtestデータでのPrecision・Recallを見ている感じ
- 月に1回は新規画像を取り込んで再学習させている、といっていたけど、実際どれくらい意味があるの?
- 再学習によって何がどれくらい当たるようになったか、みたいな評価はしていない。新しい商品に対応するためにとりあえず回しているという感じ。
- 画像データの前処理的なことって何もしていないの?
- 何もしてない。入って来る画像が多すぎて個別に前処理することも、一律に同じ処理を行うことも不可能
- 220Mの画像でinception v3でスクラッチで学習で29%エラーってそんなもの?低くない?
- 最初にやったときはそれくらいだったけど、今はtop1を8,9割で当てられるようになった。実は画像自体はもっとたくさんある。
- スクラッチではなく転移学習でも良かったのでは?
- 画像識別の機能を導入する前と後で、出品数とかリピート数が増えたから導入に踏み切ったという感じ?
- 正直ちゃんと測ってない。画像認識による属性の自動入力機能はユーザーにとって確実にプラスとなる機能なはずなので、最初に10%のユーザーを使ってABテストして、そこで何も問題なさそうだったので一気に全ユーザーに導入した。(スピード感)
- そういうABテストみたいなことをBIチーム(データサイエンティストの部)がしてるの?
- そう。でもこの画像認識機能に関してはきっと便利なはずという確信で一気に導入した。
- AIチームに人少なすぎない?BIチームから人をひっぱったりしないの?
- 実際BIチームも全然人が足りていない。しかもAIチームの必須スキルは"エンジニアリング"でデータサイエンティストとは少しスキルセットが違う。予算がないから人を増やせないのではなく、スキルセットを持っている人が希少なだけ。
- 事業会社でMLOpsが進んでいるところどこ?
- 一番はもちろんgoogle。日本の事業会社で言うと、リブセンス、グノシー、メルカリがうまくやってると思う。
- ちなみにリブセンスさんの記事 -> Kubernetes を利用したコンテナベース機械学習基盤の構築
雑感
事業会社が自社サービスに機械学習(深層学習)を持ち込んでやりたいことは、実際はstate of the artな最高精度のDLアルゴリズムを使った機能ではなく、inceptionV3で画像分類するとかちょっとしたNLPのアルゴリズム回す、的な比較的チープ目なMLやDL。むしろ、サービス安定稼働のためには複雑で(もしくは精度改善のためのコストが高い)、挙動がやや不明な感じの最新のDLアルゴリズムなんてリスク高くて載せられないですね当然、みたいな感じでした。
機械学習基盤のポイントは、ML/DLを『全自動で』『精度を保ったまま』『動かし続ける』ことのようです。
メルカリも、一定期間でDLのモデルを再学習させるようですが、日頃の精度の監視はもちろん、精度が閾値以下 なると"自動で"再学習を始めて勝手に精度を保つようにしているそうです。
普通にできそうな気もしますが、実際は「再学習する=必ず以前より精度が上がる」わけではないので、精度が下がった時or一向に上がらない時に人が対応するのかそれも自動で何かしら対応させるのか、そもそも良い悪いといっている”精度”は同じ定義を使い続けていいのかなど判断と試行錯誤が難しそうです。
安定稼働させるためのエンジニア力と、学習モデルが意図通り正しく(将来的にも)動き続けるかを判断するMLの知識を併せ持つ人材は実際レアなので、どちらか一方のスキルを持つ人を社内で育ててMLエンジニアにジョブチェンジさせるか、いやそうは言っても難しいよね実際、みたいな話題も懇親会でされていました。(データサイエンティスト獲得競争よりも、いつの間にかMLエンジニア獲得競争の方がニーズが大きくなっている...?)
そんな中でも少人数で既に(改良中であっても)基盤を作り、しかも既にサービスとして実稼働しているのはさすがメルカリさん。次のエンジニアリングのトレンドはこのあたりなんでしょうか。勉強すること多すぎるんやで...