Yahoo!ショッピング類似画像検索の取り組み #yjbonfire

0.9K Views

November 05, 19

スライド概要

bonfire data&science #1 イベントで,ヤフーの類似画像検索について紹介した。システム設計の内容から実サービスに反映させる際の技術や学びまで、幅広く触れられている。

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

公開 Yahoo!ショッピング 類似画像検索の取り組み 2019年10月28日 ヤフー株式会社 佐藤純一 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved.

2.

自己紹介 • ヤフー株式会社 ショッピング統括本部 プロダクション2本部 検索技術部 佐藤純一 • 2017新卒 (3年目) 2 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

3.

ヤフーでの仕事 • 商品検索APIの開発 • 検索エンジンの保守、運用自動化 • 類似画像検索システムの開発 3 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

4.

類似画像検索の取り組み (業務外) • 今回説明するシステムとほぼ同じ仕組みで作成 • • 画像をベクトル化する際の機械学習モデルが異なる 社内ハッカソン (HackDay) で 旅行の類似画像検索システム 「ウユニ塩湖に行きたいんやが」を開発 ResNet-152 + カラーヒストグラム 社外で同じ仕組みのサービスを作成中 • 顔画像検索 似た有名人の顔画像を検索 FaceNetを利用 写真: アフロ 4 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

5.

ヤフーショッピングとは • オンラインショッピングモール • 約3億の商品が存在 5 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

6.

ヤフーショッピング検索の課題 • 約3億の商品から欲しいものを見つけるのは 至難 • ファッション商品はビジュアルが重要 • ビジュアルは自然言語で表現しにくい => 画像による検索で解決 類似画像検索 6 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

7.

Yahoo!ショッピング (iOS) • • • • 7 iOSアプリ 7月リリース 商品詳細ページから 虫眼鏡アイコンを押す → 似た商品 現在はファッションの 一部商品に限定 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

8.

Yahoo!ブラウザ (Android) • • • • 8 Androidアプリ 6月末リリース カメラで撮った 画像から似た商品を探す バックエンドは Yahoo!ショッピング アプリと同じ Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

9.

スケジュール 2019年10月 2019年12月 2019年3月 2019年4月 2019年7月 2019年9月 2019年10月 9 プロジェクトスタート 開発開始 BEのシステムが完成 アプリ開発、運用改善 リリース GPUサーバー増設 Vald移行 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

10.

担当領域 • Yahoo!ショッピング • バックエンド (発表者: 佐藤) • iOSアプリ • Yahoo!検索 (Yahoo!ブラウザー) • Yahoo! JAPAN研究所 • NGT (次の発表者: 岩崎) • テックラボ • 物体検出・特徴抽出のモデル開発 10 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

11.

類似画像検索システム概要 11 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

12.

公開 ① 物体検出 • • • 背景画像のノイズを除去し、 検索精度を向上 トップス ファッションの物体の 矩形領域とカテゴリを推定 画像に複数の物体が存在するため、 ボトムス 物体検出は重要 靴 写真: アフロ 12 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved.

13.

② 特徴抽出 • • 物体検出後の画像から特徴ベクトルを作成する 現在は以下の組み合わせ • 低次特徴量 (商品の色などの情報) • カテゴリ特徴量 (商品のカテゴリ) vector: [ -0.08681105, -0.01660820, -0.00286146, -0.00457980, 0.00345631, ... ] 写真: アフロ 13 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

14.

③ NGTへのインデックス • 1000万件を超える商品数を格納 • 高速な検索を可能にするため、 NGTのインデックスを作成 vector: [ -0.08681105, -0.01660820, -0.00286146, -0.00457980, 0.00345631, ... ] NGT https://github.com/yahoojapan/NGT 14 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

15.

④ NGTを利用した検索 • 画像からベクトルを作成、NGTで検索を行う ベクトル 画像 NGT アプリ 15 検索結果 API Copyright 距離の近い 上位n件 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

16.

ベクトル化・インデックス更新 Kafka 商品情報 商品情報取得 画像 16 Copyright 物体検出・ベクトル化 (GPUマシン) 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

17.

NGTインデックス作成 NGT Kafka NGTインデックス作成 毎時アップロード 17 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. クラウドストレージ (s3互換) 公開

18.

Kafkaに格納する理由 • 複数の種類のインデックスを作りたい • • • パラメータや条件を変える Consumer Groupを分けて並列化 Offsetを戻して、インデックスを作り直せる Kafka 18 公開 Copyright A Group Aのインデックス B Group Bのインデックス 2019 Yahoo Japan Corporation. All Rights Reserved.

19.

クラウドストレージに保存する理由 • • インデックスを最初から作り直すのは時間がかかる 万が一壊れてもすぐに復旧できるように 過去のインデックスをクラウドストレージに保存 クラウドストレージ 19 Copyright Tag: A A-2019-10-15-12.gz Tag: A A-2019-10-15-13.gz Tag: B B-2019-10-15-12.gz 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

20.

差分更新の仕組み • 商品情報が変わっても、 必ずしも画像が変わるわけではない • ベクトル化は重い • 画像が更新された時のみ再インデックス • 商品情報、在庫の更新はDBのみ更新 20 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

21.

公開 差分更新システム • • 差分更新時に商品情報を更新 物体検出結果、カテゴリなどをDBに更新 画像更新 があるとき Kafka 物体検出・ベクトル化 商品情報取得 商品情報 のみ更新 21 DB Copyright 検出領域 検出カテゴリ など 2019 Yahoo Japan Corporation. All Rights Reserved. NGT

22.

NGT API • • NGT (ngtpy)を利用したREST API 商品IDをキーとした検索機能を作りたい • • • 22 NGTは文字列をキーにデータ登録できない => 商品IDとObject IDの対応表を ローカルDB(LevelDB)に保存 ローカルDBとNGTのインデックスをまとめて管理 インデックスの種類の指定やバージョン管理が可能 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

23.

インデックス自動更新 • • クラウドストレージから NGTのAPIサーバにインデックスをダウンロード 毎時のダウンロードをトリガーにしてインデックスを再ロード (uWSGIのGraceful reloadを利用) クラウドストレージ (s3互換) 23 Copyright NGT API 毎時ダウンロード 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

24.

異なる種類のインデックス管理 • メンズ、レディースの商品はインデックスを分けている (絞り込みの検索を実現するため) 異なる種類のインデックスの管理のため「タグ」をつける • • • 公開 異なるパラメータで作ったインデックスの比較検証にも役立つ 設定ファイルで指定したタグのインデックスを自動ダウンロード NGT index クラウドストレージ (s3互換) 24 mens NGT API (Tag:mens) ladies NGT API (Tag:ladies) Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 類似画像検索API

25.

インデックスのバージョン管理 • • インデックスのバージョンを指定して、リカバリー可能 開発機で本番のインデックスを利用して検証することも可能 Tag: A A-2019-10-15-12.gz Tag: A A-2019-10-15-13.gz Tag: A 25 13時のインデックス を指定 A-2019-10-15-14.gz Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. NGT API 公開

26.

類似画像検索API • 物体検出、画像検索、ベクトル化 のエンドポイントを提供 • iOSアプリ、Y!ブラウザからリクエスト • API層の後段処理 • 商品の削除、在庫の有無をすぐに反映 • 同一画像の除去、まとめ上げ 26 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

27.

公開 類似画像検索API • NGTサーバ、各種GPUサーバ、データベースに対してリクエスト 物体検出API 特徴抽出API NGT API アプリ 27 類似画像検索API PCF (PaaS) Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. MySQL

28.

物体検出API、特徴抽出API • GPUマシン上にAPIを構築 • 社内提供のAPIを運用 • 物体検出API • Nginx + uWSGI + Falcon + Chainer • 特徴抽出 • Tensorflow Serving 28 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

29.

利用した技術 役割 言語、フレームワーク 類似画像検索API Java (Spring Boot) NGT API Python (ngtpy, Falcon) ベクトル化サーバ Python (Falcon) 各種バッチ、デーモン (Index作成、更新等) Python 29 運用自動化 Python (Fabric) 構成管理 Chef 可視化 Grafana + Prometheus Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

30.

開発を通しての学び • 小さな変更を積み重ねて作る • PR作ったら即リリース、1日に何度もリリース • 自動デプロイ、自動テスト • 30 検索精度の確認ツールを作る • 定量評価が良いからと言って、必ず定性の評価が良いわけではない • パラメータの選択、デバッグ作業に役立つ • 壊れても復旧可能な仕組みを作る → Kafkaでベクトルデータを保存, インデックスのバージョン管理 • 監視、可視化する → Grafanaで常にモニタリングし、動作を可視化 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

31.

Grafana ダッシュボード 31 • APIのリクエスト、エラーレート • ベクトル化、インデックス作成処理速度を可視化 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

32.

今後の方針 • 対象商品の拡大(インテリアなど) • 物体検出、特徴抽出モデルの性能改善 • Yahoo!ショッピングアプリで 物体を選択して類似画像検索可能に • NGTの検索システムをValdに移行 32 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

33.

現状のNGT APIの課題 33 • 現在はNGT (ngtpy)を利用し、APIを作成 • インデックスの自動更新、バージョン管理、タグ管理機能などを実装 インデックス同期の排他制御などに気をつける必要がある • インデックスが巨大化した場合のシャーディングや レプリケーションなど自前で実装しなくてはならない • 運用・開発コストが大きい • NGTの使い方をよく理解している必要がある Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開

34.

Vald • • • • ベクトルの最近傍探索エンジン (OSS, Apache-2.0) 次期ショッピングの類似画像検索バックエンド (11月中に置き換え予定) Kubernetes上で動作 容易にスケール、運用コストが低減 ベクトルの分散検索、分散インデクシング、 リカバリ、リランクなどの機能が提供される https://github.com/vdaas/vald 34 Copyright 2019 Yahoo Japan Corporation. All Rights Reserved. 公開