キッズ - TECH PLAY - TECH PLAY

TECH PLAY

キッズ

イベント

マガジン

技術ブログ

はじめに こんにちは、検索基盤部の検索グロースブロックに所属する しゅがー です。普段はZOZOTOWNの検索体験を改善する施策の企画と開発を担当しています。 近年、CLIPをはじめとするマルチモーダルモデルの登場によって、画像とテキストを同じ特徴空間で比較できるようになりました。一方で、検索結果の並び順を学習するランキング学習(LTR: Learning to Rank)では、行動実績やテキストに基づく特徴量を使うことが一般的です。画像の情報をどう取り込むかには、まだ検討の余地があります。 本記事では、日本語CLIPモデルで算出した商品画像と検索クエリの類似度をランキング学習モデルの特徴量として追加すると精度がどう変わるのか、ZOZOTOWNの検索ログを用いてオフラインで検証します。類似度は、検索クエリをキーワードや性別、カラーといった属性に分解し、属性ごとに計算して複数渡します。検証の結果、nDCGは最大でおよそ0.7%改善し、渡す類似度の数を増やすほど改善幅は大きくなりました。要因として、各類似度が互いに異なる情報を持っていたことが示唆されました。なぜそう言えるのかSHAPを用いて掘り下げます。 目次 はじめに 目次 検証の背景と目的 CLIPを用いた画像・テキスト類似度の算出 CLIPとは 商品画像と検索クエリの類似度 オフライン検証の設計 検証結果 類似度とCTRの関係 類似度を特徴量として追加する 圧縮したベクトルを特徴量として追加する なぜ精度が改善したのか まとめ 検証の背景と目的 ファッションECの検索結果の画面をながめてみると、目に入る情報のほとんどは商品画像です。ブランド名や価格も表示されますが、ユーザーはまず画像を見て、クリックするかどうかを判断していると考えられます。 一方で、ランキング学習の特徴量としてよく使われるのは、クリック数や購入数といった行動実績や、価格やカテゴリーといった商品属性です。これらの特徴量は強力ですが、画像にしか現れない情報は捉えられません。たとえば「きれいめ ワンピース」のような検索では、その商品がきれいめかどうかは商品名や属性情報には必ずしも現れず、多くの場合、商品画像を見て判断するしかありません。 そこで本検証では、ランキング学習モデルの特徴量に商品画像と検索クエリの類似度を追加したとき、並び順の精度がどれだけ変わるのかをオフラインで調べます。 CLIPを用いた画像・テキスト類似度の算出 CLIPとは CLIP(Contrastive Language-Image Pre-training)は、画像とテキストを共通の特徴空間に埋め込むための訓練手法です。OpenAIが論文「 Learning Transferable Visual Models From Natural Language Supervision 」で提案しました。画像を入力するImage Encoderと、テキストを入力するText Encoderの2つを用意し、対応する画像とテキストのペアが近くに配置されるように学習します。 学習の流れは次のとおりです。 画像とテキストのペアをそれぞれのエンコーダーに入力し、特徴ベクトルを得る 画像側とテキスト側の特徴ベクトルの間でコサイン類似度を計算し、類似度の行列を作る 対応するペアの類似度が高く、対応しないペアの類似度が低くなるように最適化する CLIPの対照学習。対応するペア(対角成分)の類似度を最大化する この「画像とテキストを同じ空間で比較できる」という性質を使うと、商品画像と検索クエリがどれくらい似ているかを数値にできます。 商品画像と検索クエリの類似度 ZOZOTOWNの検索ログでは、ユーザーの入力した検索クエリが、キーワードと検索条件(性別やカテゴリーなど)に分解された形で記録されています。たとえば「メンズ シャツ 大きめ」という入力であれば、性別にメンズ、カテゴリーにトップス、サブカテゴリーにシャツ/ブラウスが対応します。 本検証では、この分解された次の7つの属性を対象にしました。 属性 内容 キーワード 検索条件に分解された後に残った検索キーワード 性別 メンズ、レディース、キッズの指定 カテゴリー トップスなどの大カテゴリー サブカテゴリー Tシャツ/カットソーなどの小カテゴリー カラー 選択された色 ブランド 選択されたブランド こだわり条件 ボーダー柄などの条件 キーワード以外は、ユーザーが明示的に指定していなくても値が埋まっていることが多い項目です。 これらの属性を、たとえば性別なら「男性の商品」、カラーなら「ホワイト系の商品」のように自然文へ変換したうえでText Encoderに入力し、商品画像との類似度を属性ごとに計算します。 手法の概要。図中の類似度の数値はダミーです。 利用したモデルは、LINEヤフーが公開している clip-japanese-base-v2 です。選定にあたっては次の2点を重視しました。 日本語で訓練、またはファインチューニングされていること 汎用的な多言語モデルと比べても、日本語の性能と汎化性能が同程度であること この2点を満たす候補モデルを複数選び、小規模なデータで商品画像と検索クエリの類似度を計算したうえで、類似度とCTRの相関がもっとも強かったものを採用しました。 オフライン検証の設計 ベースラインには、商品やユーザーの実績値に基づく特徴量で構成した勾配ブースティング木のランキング学習モデルを、本検証用に用意しました。このベースラインに画像由来の特徴量を追加し、精度の変化を比較します。 検証は2つの段階に分けました。 小規模なデータセットで、類似度とCTRの間に関係があるかを確認する ZOZOTOWNの検索ログを使って特徴量を追加したモデルを訓練し、精度の変化を評価する 1つ目の段階を挟んだのは、そもそも類似度がクリックの傾向と結びついていなければ、特徴量として追加しても意味がないためです。数万件規模のサンプルで7つの属性それぞれの類似度を計算し、CTRとの関係を調べました。 2つ目の段階では、追加する特徴量の入れ方を2つの方針で比較しました。 方針1:属性ごとの類似度を特徴量として追加する。複数の観点から画像の情報を渡すことを狙う 方針2:類似度に加えて、主成分分析で次元を削減した画像とテキストのベクトルを直接渡す。類似度では表せない細かい特徴も渡すことを狙う 評価指標にはnDCG@kを用い、ベースラインからの改善幅を比較します。訓練、検証、テストの各データは期間で分割しています。テストに使うのは、訓練よりも後の期間のログです。 検証結果 類似度とCTRの関係 はじめに、小規模なデータセットで類似度とCTRの関係を確認しました。 属性ごとに類似度の分布を見ると、キーワードと性別はほとんどの検索で類似度を計算できる一方、カラーやこだわり条件は指定される検索が少なく、類似度が欠損になりがちです。仮にCTRとの関係が強くても、欠損が多い属性は予測に貢献しにくいと考えられます。 次の図は、キーワードの類似度とCTRの関係です。類似度をビンに区切り、ビンごとのCTRを折れ線で、サンプル数を背景の棒で示しています。類似度が高いほどCTRも高くなる、右肩上がりの傾向が見て取れます。 キーワードの類似度とCTRの関係。軸の数値は非公開のため省略しています CTRとの相関を調べたところ、キーワードとカラーの類似度には有意な正の相関が見られました。画像と検索クエリが似ている商品ほどクリックされやすい、という関係を確認できたことになります。一方でカテゴリーやサブカテゴリーの類似度は、CTRとの関係がほとんど見られませんでした。 類似度を特徴量として追加する 次に、属性ごとの類似度をランキング学習モデルの特徴量として追加しました。 結果として、いずれの条件でもベースラインを上回るnDCGを記録しました。この傾向はnDCG@1とnDCG@10のどちらの評価位置でも同じです。さらに、追加する類似度の数を増やすほど改善幅も大きくなり、7つの属性すべてを追加したときにもっとも大きな改善が得られています。改善幅は最大でおよそ0.7%でした。 予測への貢献度を見ると、追加した類似度はいずれもベースラインの特徴量と比べて上位に入っていました。なかでもキーワードと画像の類似度の貢献度は高く、モデルがこの特徴量を予測に強く役立てていることが分かります。 また、単体ではCTRとの相関が弱かったカテゴリーやサブカテゴリーの類似度も、追加すると精度の向上に寄与しました。これは、勾配ブースティング木が単変量の相関では捉えられない非線形な関係を利用できるためだと考えられます。 圧縮したベクトルを特徴量として追加する 類似度はベクトル同士の関係を1つの数値に集約したものなので、その過程で捨てられている情報もあります。そこで、CLIPが出力したベクトルそのものを主成分分析で圧縮し、特徴量として渡す方法も試しました。 こちらも類似度だけを追加した場合より精度が改善しました。画像とテキストの両方のベクトルを渡したときの結果が、もっとも良好でした。渡す画像の情報を増やすほど精度が上がる傾向は、類似度の実験と同じです。 補足として、主成分分析の累積寄与率(圧縮後の次元で元のベクトルの分散をどれだけ説明できるかの割合)は、一般的な画像特徴量を圧縮する場合に比べてかなり低い水準にとどまりました。CLIPのベクトル空間では意味の情報が特定の次元に偏らず、多くの次元に分散して表現されているためだと考えられます。 なぜ精度が改善したのか 複数の類似度を追加するほど精度が上がる理由として、次の3つの仮説を立てました。 仮説A:画像に由来する特徴量の数が増え、予測に占める割合が高まったから 仮説B:各類似度が異なる意味を捉えており、情報の多様性が増したから 仮説C:複数の類似度が組み合わさり、決定木の分岐のパターンが豊かになったから 検証にはSHAPを用いました。SHAPは、モデルの個々の予測を特徴量ごとの寄与に分解する手法です。ある特徴量が予測をどれだけ押し上げ、または押し下げたのかを、サンプル単位で数値にできます。さらに、2つの特徴量が組み合わさったときにだけ生まれる寄与を交互作用として分けて算出できるため、仮説Cのような、特徴量の組み合わせに関するものも検証できます。 まず仮説Aについては、画像由来の特徴量が予測全体に占める寄与の割合が、類似度の追加によってどれだけ変わるかを調べました。結果として、類似度を7つに増やしても割合はわずかしか増えず、大半はベースラインの特徴量が占めたままでした。キーワードの類似度の使われ方も、単体で追加したときとほとんど変わりません。画像由来の特徴量が予測を支配するようになったから精度が上がった、という説明は成り立たないため、仮説Aは棄却しました。 次に仮説Cについては、類似度同士の交互作用による寄与の大きさを、それぞれの類似度が単独で持つ寄与と比べました。交互作用は主効果と比べて小さく、それぞれの類似度は独立に予測へ寄与していました。組み合わせの妙で効いているわけではないため、仮説Cも棄却しました。 最後に仮説Bについては、類似度同士がどれだけ重複した情報を持つかを確かめるため、類似度同士の寄与の相関を調べました。もし2つの類似度が同じ情報を捉えているなら、予測への効き方も似るはずで、寄与の相関は高くなります。実際に調べると、値はどれも非常に小さくなりました。唯一やや高い相関を示したのはカテゴリーとサブカテゴリーの組み合わせで、これは両者が親子の関係にあることを考えれば自然な結果です。この寄与の相関の低さは、追加する類似度の数を増やすほど精度が改善したという結果とも一致します。以上から、各類似度は互いに重複の少ない情報をモデルに渡せていたと考えられ、仮説Bを支持する結果が得られました。 この結果が示しているのは、属性ごとに分けて類似度を計算したこと自体が効いていた、ということです。類似度を1つだけ渡すよりも、「何と似ているのか」を属性ごとに分解して複数渡すほうが効く、という示唆が得られました。この考え方は、CLIPに限らず他の特徴量の設計にも応用できそうです。 まとめ 本記事では、ランキング学習モデルに商品画像の情報を追加するオフライン検証を紹介しました。 商品画像と検索クエリの類似度は、CTRと有意な正の相関を持つ 類似度をランキング学習モデルの特徴量として追加すると、オフライン評価でnDCGが最大でおよそ0.7%改善する 類似度だけでなく、圧縮した画像のベクトルを渡すとさらに精度が上がる 精度の改善に効いていたのは特徴量の数ではなく、互いに独立した情報を渡せていたこと ZOZOでは、一緒にサービスを作り上げてくれる方を募集中です。ご興味のある方は、以下のリンクからぜひご応募ください。 corp.zozo.com
みなさんこんにちは。 SHIFTで人材育成の仕事をしている、タカハシです。 小学生界隈では、夏休みですね。 5年前の2021年、読書感想文について、こんなブログを書きました。
ニフティに新卒入社したエンジニアは、3か月間の新入社員研修と技術研修を経て、7月からOJT期間に入ります。8か月の間に3つの部署をジョブローテーションし、業務知識やチームでのプロジェクトの進め方、エンジニアとしての技術を身につけたうえで、4月からの本配属に備えるという流れです。 実際にプロジェクトの一員として働くニフティのOJTは、単に仕事を覚えるだけでなく、自分自身の適正を知り、会社員やエンジニアとしての歩み方を見定めていく期間でもあります。前回は2025年度に新卒入社した4名の新人に、OJTで得た学びや気づき、入社前のイメージと実際に働いてみてのギャップについて聞きました。今回は、ニフティの働きやすさや休みの取りやすさについて、また、本配属を前にした決意を語ってもらいました。 ニフティは良い意味で「ゆるふわ」な会社? 職場の雰囲気も含めた、働きやすさという点に関してはどのように感じていますか? Nさん 職場の雰囲気はとても良いです。ニフティって固い会社だと思われがちなのですが、良い意味で年次による壁がないように感じます。1年目のジョブローテで3つの部署を回りましたが、どのチームもコミュニケーションを大事にしていて、新人が遠慮なく先輩や上司に相談できる雰囲気でしたね。 Sさん 言い方が適切か分かりませんが、ちょっと“ゆるふわ”な空気がありますよね。自分もどちらかというと緩いタイプなので居心地は良いです(笑)。また、今は原則出社なのですが、個人的にはそのほうがやりやすいですね。特に新人のうちは分からないことが多いので、色んな部署の人に直接会いに行ってコミュニケーションできるのはありがたいです。 Yさん 私も風通しの良さは感じます。たとえば、所属部署の定例会議に新人も参加するのですが、1年目なので理解できないことも多くて。ただ、分からないことがあってもSlack上にある「会議実況チャンネル」に投稿すれば、会議の合間で誰かが拾ってくれて、マネージャーや部長がその場で回答してくださるので全くついていけないということはなかったです。 Tさん 社内の雰囲気やコミュニケーションの部分については、私もみんなと同意見です。たまにオフィス内のフリースペースで仕事をしていると、他部署の先輩たちがフランクに話しかけてくれたりして、いいリフレッシュにもなっています。業務で凝り固まった思考を、雑談でほぐしてくれるんです。 自由参加の社内飲み会みたいなものも週1であって、ここにいるメンバーは全員参加したことがあります。他部署の人だったり、マネージャーだったり、普段の業務ではあまり接点のない人ともお酒を飲みながらコミュニケーションできるのがいいですね。 それから個人的に感じるのは、ニフティって「褒め上手」な人が多いなと。たとえ些細なことでも、誰かが何かしらの成果を出せば素直に称える。そんな文化が根付いている気がします。逆に、否定から入る人は少ないです。たとえば、私が出したアイデアに対して頭ごなしに否定されるようなことはなく、まずは検討してくれる。結果的に採用されなかったとしても、ちゃんと理由を説明してくれるので納得感がありますし、また提案してみようと思えます。 1年目から有給休暇をフル活用し、海外旅行へ ワークライフバランスに関してはいかがでしょう? 休みの取りやすさや業務量など、不満も含めて感じていることを教えてください。 Nさん 休みはすごく取りやすいです。有給休暇は1年目から20日間付与され、新人だから遠慮して取得しづらいみたいなことも全くないですね。逆に私の場合は取得しすぎて、あと3日しか残っていません。先日は海外旅行に行くために5日間ほど休みました。先輩たちも有給やフレックス制度をうまく使ってライブに行ったりと、仕事とのバランスを取りながらプライベートを充実させている印象です。 Yさん 逆に有給休暇を全く取っていないと、周囲が取得を促してくれます。私も、ほぼ使わずにいたら当時の上長から「ちゃんと有給を消化しようね」と言われました。有給休暇以外の休暇制度も充実していますし、雰囲気的にも休みを取ることに対する抵抗はないですね。業務量についてはまだ1年目ということでセーブしてもらっているところもあると思いますが、先輩たちを見ていても過重労働にならないようコントロールされているのかなと。 Sさん 有給休暇に関しては相談するというよりも、「この日に取ります」と宣言するような形ですね。取得するのが当たり前というか。今のチームではSlack上で申請するだけで勤務表への打刻まで自動でやってくれるシステムを使っているので、そういう意味でも取りやすい。私自身も有給はしっかり消化しています。土日休みとくっつけて実家にちょくちょく帰ったりしてました。 Tさん 私も有給休暇は積極的に取得しています。土日に趣味のイベントがある時に、月曜を有給にすることが多いですね。土日は思い切り楽しんで、月曜は静養に充てています。 休みも取りやすいですし、仕事中に体調が悪くなった場合もすぐに早退できたり、お子さんが急に熱を出した時に在宅勤務に切り替えたりと、急なアクシデントにも柔軟に対応してもらえます。フレックスタイムにしても在宅勤務にしても、現場の要望や社員の働きやすさを考慮した上で制度が設計されているように感じますね。 新人たちがこれからチャレンジしたいことは? 1年目のOJTとジョブローテが終わり、4月からはそれぞれの部署に本配属となります。これからニフティで挑戦したいことや、現段階で思い描く将来像を教えてください。 Tさん 直近で取り組みたいと思っているのは、ニフティの会員様の満足度向上です。新しい会員を増やすことも大事ですが、今ご契約いただいているお客様に対してインターネットの接続サービス以外の部分でも、「ニフティの会員になって良かった」と思っていただけるような施策に携わっていきたいと思っています。 将来像については、ざっくりとしていますが「なんでもできる人」になりたいです。技術に関しても、何か一つを極めるというよりも色んな選択肢を持てるよう、幅広い知見を身につけたいと思っています。その点、幅広いサービスを手掛けるニフティはうってつけですし、オンライン学習や社外イベントへの参加を通じて業務外の技術にアプローチできる環境をうまく活かしていきたいですね。 Sさん OJTを通じて感じたことでもあるのですが、直近でやりたいのは社内業務フローの改善です。どんどん自動化を進めて工数を減らし、本来エンジニアがやるべき業務に注力できるような取り組みを進めていきたいですね。将来像はTさんと似ていますが、いわゆるフルスタックエンジニアとして、どんなことにも挑戦していきたいと思っています。そういう意味では、ジョブローテではバックエンド、フロントエンド、インフラ関連と、異なる領域に触れることができたので、いい経験になりました。 Yさん まだ配属先が決まっていない段階(2026年3月5日時点)ですので、やりたいことが具体的に固まっているわけではないのですが、現在ニフティでは全社的にAWSへの移行を進めていて、どのチームに配属されたとしてもクラウドにまつわる知見やスキルは重要になってくると思います。まずはそこを深めていきたいですね。将来は、社内インフラの整備やサポートといった、ニフティの社員に快適に働いてもらうための業務に携わりたいと考えています。 Nさん ニフティには職人的に技術をひたすら磨き抜いているスーパーエンジニアもいますが、私自身は技術に特化するというよりも、技術をベースとしつつもサービスの知識や、ビジネス側との調整スキル、顧客ニーズを捉える力などを総合的に伸ばしていきたいと思っています。プロダクトマネジメントに主眼を置いて、サービスをよりよいものにしていけるエンジニアになりたいですね。 前編もご覧ください! 今回はニフティの2025年度 新卒社員のインタビューの様子をお届けしました。あわせて前編もご覧ください。 【インタビュー】入社から1年。成長の実感は? 新人たちが振り返るOJTの日々【2025年度 新卒社員 前編】 ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です! ご興味のある方は以下の採用サイトよりお気軽にご連絡ください! このインタビューに関する求人情報/ブログ記事 ニフティ株式会社 求人情報

動画

書籍