祝! データサイエンス領域で初めての Bonfire!!
そんな記念すべき初回のイベントレポートを書かせていただきます、Yahoo!ショッピングでサイエンス領域を担当している東孝信です。
Bonfire Data & Scienceは、データとサイエンスに関わる人たちが情報共有できる勉強会/交流会です。
今後も定期的に開催される予定ですので、興味のある方は第2回以降もぜひチェックしてください!
さて、第1回のテーマは「画像検索」です!
- 最近EC系のサイトで類似画像検索が出来るようになったけどどうやってるの?
- 画像検索のモデルってどうしてるの?
- 画像検索のインフラはどうしてるの?
- 私たちの会社でも画像検索を用いたサービスを構築できるだろうか?
こういった疑問に答えたり、いま抱えている悩みを解決するヒントを得る場として開催されました。
当日は台風21号の影響もあって足元の悪い中、80名を超える参加者に集まっていただきました!
登壇者情報(登壇順)
- メルカリにおける写真検索機能
荒瀬 晃介さん◆ 株式会社メルカリ / AIエンジニアリングチーム - ZOZOTOWNにおける画像検索の運用・改善について
平田 拓也さん ◆ 株式会社ZOZOテクノロジーズ / AIエンジニアリングチーム - Yahoo!ショッピング 類似画像検索の取り組み
佐藤 純一 ◆ ヤフー株式会社 - 近傍探索ライブラリNGTと深層学習による類似ファッション検索
岩崎 雅二郎 ◆ ヤフー株式会社
(左から、佐藤、岩崎、荒瀬さん、平田さん)
メルカリにおける写真検索機能
荒瀬 晃介さん◆ 株式会社メルカリ / AIエンジニアリングチーム
トップバッターは、株式会社メルカリの荒瀬さんです。
C2Cならではの課題とその解決アプローチ、さらにはインフラ設計から将来の展望まで、幅広くご紹介いただきました!
「人の代表ベクトルを抽出できれば、画像から人情報を除けるはず」
メルカリのビジネスモデルは C2C(Customer to Customer)のため、投稿される商品画像が必ずしも綺麗とは限りません。例えばテーブルや床の上で撮影されたりします(皆さんも経験あるのでは?)。
一方で、画像検索で用いられるクエリ(=入力画像)は Instagram や公式HPから取得されたものも多く、欲しい商品を人が身につけていることもしばしばあるそう。
そうすると、画像上の人情報に引きずられてしまって検索結果に「人の写っている商品」ばかりが並び、業者出品の装いになってしまいます。
メルカリとしてはこれを避けたいので、「人が写っていようとなかろうと、注目したい商品が並ぶ世界」の実現を目指しました。
その手法が、 人の代表ベクトルを抽出して、入力画像から人情報を除外する というものです。
カテゴリー単位で「人あり画像」と「人なし画像」データを集めて差分を計算することで、人ベクトルを抽出できると考えました。
モデルにはMobileNet v2を使っていて、これはエッジデバイスでの処理を見据えての選択だったようです。
作成したモデルで評価した結果、クエリが非着用画像の場合は類似商品が並び、逆に着用画像の場合は人が写っていない類似商品が並ぶようになったとのこと。
さらに、物体検出することでその精度はより向上することが分かったそう。
このモデルの優れた点は、「クエリに対して特徴変換するだけで良くて、インデックス側の変更が必要ないのはサービスとして大きな利点」と話されていました。
サービスで扱う大量の商品に対して定常的に更新をかけるのは本当に大変なので、この設計はサービスを扱う会社ならではですね。
「リアルタイムに画像検索できる世界を」
メルカリでは今、物体検出から特徴抽出、そして検索までをリアルタイムに実現できる世界を目指しているそうです。
簡単なデモ映像を見ましたが、ユーザーは画像を撮影する必要がなく、カメラで写した物体をそのままクエリとして認識して類似画像を検索していました。(すごい!)
これは、物体検出と特徴抽出をエッジで行うことで実現しているそう。
ただ、エッジで機械学習を行う場合、精度やレイテンシ、エネルギー効率やモデルサイズなどさまざまなトレードオフ問題があり、これらのバランスを考慮するのがとても難しいと話されていました。
サービスとして実現するには難しい課題ですが、ユーザーにとってより使いやすいものになる期待感も大きいので、メルカリの今後の動向が楽しみですね!!
ZOZOTOWNにおける画像検索の運用・改善について
平田 拓也さん◆ 株式会社ZOZOテクノロジーズ / AIエンジニアリングチーム
2番目の登壇者は、株式会社ZOZOテクノロジーズの平田さんです。
ZOZOの機械学習基盤についてご紹介いただきました!
「MLエンジニアや研究者が開発に集中できる環境を提供することが使命」
ZOZOが画像検索で用いているアルゴリズムは、主に以下の3つです。
- 物体検出
- 特徴量抽出
- 近似最近傍探索
これらを実現するために、ZOZOではk8sを採用しているとのことでした。
k8sのモチベーションとしては、「ポータビリティに優れたコンテナベースのシステムにしたい」「GPUを使いたい(GAEではGPUを使えなかった)」などがあったそうです。
システムの監視面では、レスポンスタイムやステータス、ユーザーリクエスト数などを見ているそうです。
一方で、k8sはオートスケールできるため、CPU使用率などは見ていないとのことでした。
「MLopsチームではプロトタイプをプロダクトレベルに引き上げることも担っている」
講演では、ZOZOにおける画像検索の課題として以下の2点が挙げられていました。
- 物体検出や特徴量計算の推論に時間がかかり、レイテンシが大きい
- GPUのスケールアウトに時間がかかるため、急激なトラフィック増加に対応できない
1に関しては、シンプルに「推論部分をなくすことはできないか?」と考え、下記の改善を図ったとのこと。
画像検索の流れは「キャッシュの有無確認」「なければ推論」「近似最近傍探索」「在庫フィルタ」ですが、推論部分がネック。
実は取り扱う商品についてはインデックスのために毎日推論を行っていたので、この情報を再利用してAPI返却するようにすれば、不要な推論を削除できるのでは?と考えた。
そこで、データが登録された時点で推論結果を特徴量DBに保存するようにして、検索時にはそのDBを引きにいくことでレイテンシ改善を実現したそう。
2に関しては、常にGPUクラスタに余裕を持っておくことで対応しているそうです。
ZOZOでは地理的に離れたメンバーともうまく連携して進めており、新規プロジェクトだからこそ積極的に新しい技術を使うよう意識していると話されていました。
われわれも同じIT企業の人間として、新しい技術を積極的に取り入れ、サービス改善に努めていくぞという気持ちになりました。
Yahoo!ショッピング 類似画像検索の取り組み
佐藤 純一◆ ヤフー株式会社
3番目の登壇者は、ヤフーの佐藤です。
Yahoo!ショッピングの画像検索について語ってもらいました!
「3億商品の中から、自然言語で表現しにくい商品を見つけられるように」
Yahoo!ショッピングには3億もの商品があり、その中から自分の欲しいものを見つけるのは至難と言えます。
特にファッション商品には自然言語で表現しにくいものもあり、それらを画像検索によって見つけられるようにしたいと思っています。
現在はiOSアプリにて、一部のファッション商品を対象に画像検索ができるようになっています。
画像検索のシステム概要は先の2社とほとんど同様ですが、インデックスにはNGTを使っています(NGTについては次のセクションでも紹介するので割愛します)。
ベクトル化/インデックス更新の際には、Kafkaを経由しています。
Kafka経由の理由はデータを柔軟に扱える点で、複数種類のインデックスを作ることができたり、offsetを戻してインデックスを作り直すことができます。
また、万が一インデックスが壊れてもすぐ復旧できるように、毎時クラウドストレージ(社内で開発されたDragonという分散ストレージ)に保存しています。
その他、計算コスト削減のための差分更新システムや、検索結果改善のためのメンズ/レディースタグによるインデックス管理なども行っています。
「引き続き、Yahoo!ショッピングの画像検索改善に邁進していきます」
画像検索システムを新しく開発していくにあたり、佐藤は以下の学びを得たそうです。
- CI/CDを最初にしっかり整え、小さい変更をスピーディにやっていくのが大事だった
- 検索精度の確認ツールがあるとブレなく評価できるのでいい、デバッグにも役立つ
- 復旧可能なシステムは大事(幸いにも必要になった場面は未だない!)
- 監視・可視化は必須
特に2つ目はサービス改善の上で重要ですよね。
目指すべき世界がブレブレだと何をどう改善していけばいいのか分からなくなってしまうので、サイエンスの人間として肝に命じておきたいと思います。
今後の展開についてもいくつか紹介してくれました。
- 対象商品の拡大(インテリアなど)
- 物体検出、特徴量抽出のモデル性能改善
- アプリで物体を明示的に選択して類似画像検索できるようにする
- NGTをValdに移行予定
現在ファッションカテゴリー限定ですが、インテリアにも拡大していくとのこと。
また、物体検出と特徴量抽出のモデルについて大きな改善ができたようで、近いうちにリリースされるはずと話されていました。
さらには、画像から認識させる画像をユーザーが明示的に選択して類似画像検索できるシステムを近いうちにリリース予定とのこと。
この機能は全身コーデの写真から特定商品を認識させて検索したい! といったユーザーのニーズを満たすことができそうで、楽しみな機能ですね!
Valdについて少し紹介します。
NGTには、インデックス同期の排他制御やシャーディングなど、運用開発コストが少し高いという欠点があります。
これに対し、現在Valdと呼ばれるベクトルの最近傍探索エンジンを開発中です。
k8s上で動作し、運用コストの低減が見込めます。
ベクトルの分散検索、分散インデクシング、リカバリ、リランク機能が提供されているので、興味のある方はぜひのぞいてみてください!
近傍探索ライブラリNGTと深層学習による類似ファッション検索
岩崎 雅二郎◆ ヤフー株式会社
最後の登壇者は、ヤフーの岩崎です。
高速な近傍探索を実現するソフトウエアであるNGTについて語ってもらいました!
「世界トップレベルの高速高精度な近似近傍検索」
NGTは Neighborhood Graph and Tree for Indexing の略称で、大量の高次元ベクトルデータからクエリとして指定されたベクトルデータの近傍に存在するデータを高速に検索するソフトウエアです。
- ツリー構造とグラフ構造の2構造を取ることが特徴
- 世界トップレベルの高速高精度な近似近傍検索
- OSS
- データの追加削除ができる
- 多様な利用形態(python,C++, Go, shell)
- サーバー版NGT(ngtd, vald)提供
ann benchmarksの結果、NGTがトップレベルの性能を誇ることが証明されました!
その上で、データの追加削除や複数プロセス間でのインデックス共有ができ、サービス利用の面も考慮された設計となっています。
速さの理由は、インデックス生成の2構造性と探索方法にあります。
グラフで探索起点を決定するためにツリー構造を用意していて、ある1点を取って同心円状に空間分割することをくり返しながらグラフ構造にマッピングします。
グラフを作成する際には、ノード作成中に同時に近傍探索することで高速化を実現しています。
(こちらの記事もぜひご参照ください)
先のセッションで佐藤からもあったように、NGTはYahoo!ショッピングの画像検索で使われており、サービスでの実用性にも優れています。
また、他にもYahoo!ラボのFAVNAVIなどでも利用されていて、今後さらなるサービス利用が期待されています。
サービスにおいて、こういった要素技術の発展は非連続な成長を実現する要素の1つになり得るので、今後ますますの発展に期待せずにはいられませんね!
まとめ
記念すべき1回目のBonfire Data & Scienceでは、サービスにおける「画像検索」の現状についてメルカリ・ヤフー・ZOZOテクノロジーズの開発者の皆さまにお話しいただきました!
モデル改善の話からシステム構成の話まで幅広く聞ける機会になり、参加者の皆さんもスライドの写真を撮ったり頷いたりしながら熱心に聴講されていました。
こと画像検索の現場ではどの会社もk8sによるコンテナベースのインフラ構築を進めていたのが印象的で、個人的には「やはり時代はk8sか...」という気持ちになりました(笑)
今後のBonfire Data & Scienceの活動も楽しみにしておいてください!!! 予定はこちらのconnpassでお伝えします!
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました