こんにちは。LINEヤフー株式会社の鈴木です。業務ではYahoo!オークションとYahoo!フリマの検索改善を担当しています。
最近、Yahoo!フリマで「見た目が似ている商品を探せる機能」をリリースしました。この機能により、商品ページから視覚的に類似した商品を検索でき、キーワードでは表現しづらい商品も簡単に見つけられるようになりました。
Yahoo!フリマ Topics:見た目が似ている商品を探せるようになりました! 2025/08/15
この機能は、出品された商品画像を機械学習モデルでベクトル化し、ベクトル検索によって視覚的に類似した商品を高速に検索する仕組みで実現しています。
この記事では、Yahoo!フリマで画像ベクトル検索をどのように実現したのかについて解説します。
ベクトル検索の基本
構築したベクトル検索システムを説明する前に、ベクトル検索という技術について、従来のキーワード検索と比較しながら説明します。
従来のキーワード検索では、「ワンピース 赤」のようなキーワードで検索すると、商品名や説明文に「ワンピース」と「赤」が含まれる商品が見つかります。しかし、この方法には以下のような限界があります。
- 出品者が「ドレス」や「レッド」と記載している場合、その商品は見つからない
- 言葉で表現しにくいデザインや質感は検索できない(例:「スタイリッシュ」「もこもこ」)
- 「この商品に似たものが欲しい」という要望に応えられない
ベクトル検索は、これらの課題を解決する検索手法です。
ベクトル検索では、画像やテキストを数値の配列(ベクトル)に変換します。例えば、商品画像を[0.2, -0.5, 0.8, ...]のような数百〜数千次元のベクトルに変換します。このベクトルは、その画像の「特徴」を数値で表現したものです。
重要なのは、似ている画像は似たベクトルに変換されるという性質です。赤いワンピースの画像は、別の赤いワンピースの画像と近いベクトルになり、青いジーンズの画像とは遠いベクトルになります。
検索時は、ベクトル間の距離(類似度)を計算することで、似ている商品を見つけ出します。これにより、キーワードに依存せず、見た目の特徴から商品を検索できるようになります。
ベクトル検索システムのアーキテクチャ
今回構築したベクトル検索システムのアーキテクチャの概要図を以下に示します。
各コンポーネントについて説明していきます。
商品検索サービス
商品検索サービスは、クライアントから検索リクエストを受け取り、リクエスト内容から検索クエリを組み立てて、商品検索エンジンに検索クエリを送ります。
その後、商品検索エンジンから受け取った検索結果を、クライアントに返します。
後で詳しく説明しますが、今回構築したベクトル検索機能は既存のキーワード検索機能システムを拡充する形で実装しました。
そのため、商品検索サービスは検索リクエストとしてキーワードを受け取ることも、画像を受け取ることも可能です。
画像ベクトル推論サービス
画像ベクトル推論サービスは、クライアントから画像情報を受け取り、機械学習モデルによって画像ベクトルを推論し、クライアントに返します。
ベクトル検索システムにおいて、画像ベクトル推論サービスは以下の二つの用途で利用されます。
- 商品検索時の入力となる画像 情報をベクトルに変換する
- 出品商品の商品画像情報をベクトルに変換する
推論サーバーの実装には Triton Inference Serverを利用し、CuttySarkという社内の機械学習モデル推論サービスを利用してデプロイしています。
特徴量計算サービス
特徴量計算サービスは、出品メッセージキューから商品情報を受け取り、商品に関する各種「特徴量」を計算する非同期処理サービスです。
ここでの「特徴量」とは、Yahoo!フリマのさまざまな機能で活用される、商品に関する付加情報を指します。検索やレコメンドをはじめとして、幅広い用途で利用されています。
このサービスの重要な点は、計算コストの高い処理を出品時にリアルタイムで行うのではなく、メッセージキューを介した非同期処理として実装していることです。これにより、出品処理を妨げることなく、バックグラウンドで複雑な特徴量計算を実行できます。
ベクトル検索システムにおいては、先述した画像ベクトル推論サービスと連携して商品画像ベクトルを生成し、その結果を特徴量メッセージキューを通じてフィードサービスに渡します。
フィードサービス
フィードサービスは、特徴量メッセージキューから商品の特徴量情報を受け取り、検索エンジンに特徴量情報をフィードします。
この特徴量情報の中に、先ほど画像ベクトル推論サービスで得られた商品画像ベクトルが含まれています。
Vespaによるベクト ル検索の実現
Vespaを利用した背景
Yahoo!フリマにおけるキーワードを用いた商品検索機能は、検索エンジンVespaを利用して実装されています。
今回構築したベクトル検索システムは、もともと商品検索エンジンとして使われていたVespaのベクトル検索機能を使うことで実現しました。
この方針には以下のメリットがあります。
- 新規にベクトル検索エンジンを構築する必要がない(検索エンジンの運用コストは一般的に大きい)
- Vespaの豊富なベクトル検索機能を活用できる(文書属性によるフィルタリング、pre-filtering・post-filteringの細やかなチューニングなど)
- キーワード検索と組み合わせた検索(ハイブリッド検索)ができる。見た目が似ている商品を探す機能ではキーワード検索は使っていないが、将来的な施策の幅が広がる。
- 複数のベクトル検索インデックスを管理できる。今回は商品画像のベクトルを対象としているが、商品のテキスト情報からなるベクトルや、ユーザー行動を加味したベクトル、他の機械学習モデルによるベクトルなど、さまざまなベクトルを一つの検索エンジンで管理でき、運用コストを抑えられる。
一方で、検索エンジンの負荷に関する懸念もありました。
- 従来のキーワード検索リクエストを受けつつ、新たにベクトル検索リクエストも受けるようになるため、検索エンジン負荷が大きくなる。
- ベクトルをフィードする負荷が追加されるため、検索エンジン負荷が大きくなる。
これらの懸念については、事前の負荷試験によって負荷を確認しながら、システムの構築を進めました。
Vespaでのベクトル検索設定
Vespaでは以下のような記述でベクトル検索インデックスを設定します。
field imageEmbedding type tensor<float>(x[256]) {
indexing: attribute | index
attribute {
distance-metric: angular
}
index {
hnsw {
max-links-per-node: 16
neighbors-to-explore-at-insert: 200
}
}
}
- 256次元の密ベクトル(各要素が実数値のベクトル)を格納するために、
tensor<float>(x[256])
と定義しています。 - ベクトル検索では、ベクトル間の類似性を測る距離関数の指定が必要です。ここでは
angular
(コサイン類似度)を使用しています。Vespaは他にもユークリッド距離や内積、ハミング距離など、さまざまな距離関数が実装されています。 - Vespaでは近似最近傍探索を利用したベクトル検索が可能です。アルゴリズムとしてはHierarchical Navigable Small World (HNSW) をサポートしており、
index
中にhnsw
を指定することで利用できます。max-links-per-node
やneighbors-to-explore-at-insert
をチューニングすることで、検索精度とコストのトレードオフを調整できます。
画像のベクトル化で利用する機械学習モデル
ベクトル検索を活用した施策の将来性を考えて、画像とテキストを扱えるマルチモーダル基盤モデルを採用しました。
マルチモーダル基盤モデルを採用することで、例えば以下のような機能を実現できます。
入力 | 検索対象 | 内容 |
---|---|---|
画像 | 商品画像 | 商品画像や撮影した写真から、見た目が似ている商品を検索 |
テキスト | 商品画像 | 自然文による検索(e.g. 「桜の季節に映える淡いピンクの春らしいワンピース」) |
画像とテキストを扱える代表的なマルチモーダル基盤モデルといえばCLIPが挙げられます。
LINEヤフーでは日本語に特化したマルチモーダル基盤モデルであるclip-japanese-baseを公開しています。
社内ではclip-japanese-baseを改善したモデルがあり、Yahoo!フリマにおけるベクトル検索ではこちらの改善版モデルを利用することにしました。
おわりに
この記事ではYahoo!フリマにおける画像ベクトル検索機能の実装事例を紹介しました。
構築したベクトル検索機能を利用し、「見た目が似ている商品を探せる機能」をリリースしました。今後さらに、ベクトル検索を利用した機能をリリースしていく予定です。
また、ベクトル検索システム自体も改善していく予定です。例えば現状のフローでは、フィード時に一度画像ベクトルを推論しているにもかかわらず、検索時にも同じ画像ベクトルを推論しており、無駄な推論コストが発生しています。Vespaのチュートリアルでは、既にVespaにフィードされているベクトルを利用してベクトル検索を実行するフローが紹介されており、参考にする予定です。
Yahoo!フリマは24時間365日、新しい商品が出品されたり売れたりしています。そのため検索エンジンから見ると、インデックス対象の情報が絶えず更新されるという問題設定であり、ベクトル検索システムを構築するという点において難易度の高いサービスです。
検索性能と更新性能に優れ、ベクトル検索に関わる機能が豊富に実装されているVespaは、まさにこのような難易度の高いケースにおいて、良い選択肢と言えるでしょう。
本記事が、ベクトル検索の導入を検討されている方や、すでに運用されている方、そしてベクトル検索技術に興味をお持ちの方の参考になれば幸いです。