ElasticsearchによるZOZOTOWNへのベクトル検索の導入検討とその課題

ElasticsearchによるZOZOTOWNへのベクトル検索の導入検討とその課題

こんにちは。検索基盤部の橘です。ZOZOTOWNでは、商品検索エンジンとしてElasticsearchを利用し、大規模なデータに対して高速な全文検索を実現しています。

Elasticsearchに関する取り組みは以下の記事をご覧ください。

techblog.zozo.com

検索基盤部では、ZOZOTOWNの検索結果の品質向上を目指し、新しい検索手法の導入を検討しています。本記事ではベクトル検索と呼ばれる検索手法に関して得た知見を紹介します。

※本記事はElasticsearchバージョン8.9に関する内容となっています。

続きを読む

情報検索の評価指標の弱点と選択バイアスを考慮した改善アプローチ

ogp画像

こんにちは。検索基盤部の山﨑です。検索基盤部では、ZOZOTOWNの検索機能の改善を目的とした施策の有効性をA/Bテストで検証しています。

A/Bテストは、新たな施策の有効性を評価する手法として信頼性の高い手法ではあるものの、下記のような制約があります。

  1. 統計的に有意な差が出るためには、多くのユーザーからのフィードバックが必要である
  2. 比較手法を実際のユーザーに提示するため、ユーザー体験に悪影響を与えるリスクがある

これらの制約から、実験したい全ての施策をA/Bテストで検証することは困難なため、事前に有効な可能性が高い施策に絞った上でA/Bテストに臨むことが大切です。

事前に有効な可能性が高いことを示すためには、オフラインでの評価結果を活用します。しかし、オフライン評価とA/Bテストの結果は必ずしも一致しないことが知られており、ZOZOTOWNにおいても同様の問題が発生しています。

このような課題に対しては、反実仮想機械学習の分野で研究されているOff-Policy Evaluation(OPE: オフ方策評価)が有効であると考えられます。OPEについての詳細は、下記の記事を参照してください。

techblog.zozo.com

本記事ではOPEの詳細を説明しませんが、OPEの考え方を踏まえながら、オフライン評価とA/Bテストの結果が一致しない問題に対しての実践的な対応策について紹介します。

まず、ZOZOTOWN検索においてオフライン評価とA/Bテストの結果が一致しない問題と、その実践的な対応策を解説します。そしてデータの選択バイアスを中心に、この問題の解決策をいくつか紹介します。

続きを読む

深層距離学習における平均場理論

深層距離学習における平均場理論

はじめに

こんにちは、ZOZO研究所AppliedMLチームの古澤です。私たちは商品画像の検索の基礎として、深層距離学習という技術を研究しています。本記事では、本研究所からICLR2024に採択された「Mean Field Theory in Deep Metric Learning」という研究について紹介します。対象読者としては、機械学習系のエンジニアや学生を想定しています。

続きを読む

クーポン推薦モデルとシステム改善の取り組み

ogp

はじめに

ML・データ部推薦基盤ブロックの佐藤(@rayuron)です。私たちはZOZOTOWNのパーソナライズを実現するために、機械学習モデルとシステムを開発・運用しています。本記事ではクーポン推薦のための機械学習モデルとシステム改善に取り組んだ話を紹介します。

背景

ZOZOTOWNでは一部の提携するショップで使用可能なクーポンが発行されます。クーポンが発行されていることをユーザーに知らせるため、メールやPush通知のチャネルを通してクーポン対象のショップとアイテムの訴求を行なっています。以下はメール配信のイメージ画像です。

coupon_mail1

coupon_mail2

coupon_mail3

クーポン対象となるショップおよびアイテムが決まっている条件下において、メール配信の対象者と推薦ショップ、推薦アイテムを決定するために機械学習モデルとシステムを運用しています。以降、この機械学習モデルをクーポン推薦モデルと表現して紹介します。

課題

既存のクーポン推薦モデルとシステムには以下の課題がありました。

1. 古い基盤でシステムが運用されている

弊社の機械学習パイプラインはVertex AI Pipelinesを標準としているのですが、既存のクーポン推薦のパイプラインは標準化前のCloud Composerで運用されていました。Vertex AI Pipelinesは運用を簡易化するために内製の整備が進んでいる一方、Cloud Composerは整備されていないため運用業務が煩雑で時間を要します。さらにCloud Composerで機械学習パイプラインを作成している社員がほぼいないので属人性が高いという課題がありました。

2. KPIに改善の余地がある

前述の様にクーポン推薦モデルでは配信対象者の選定、ショップ推薦、アイテム推薦という3つの観点を考えます。

overview

各観点に対する既存のアプローチは以下の通り大部分がルールベースのロジックで構成されているため、機械学習モデルに置き換えることでKPIを改善できると考えられます。

推薦の観点 既存のアプローチ
配信対象者の選定 Matrix Factorizationとルールベース
ショップ推薦 ルールベース
アイテム推薦 ルールベース

3. 機械学習モデルの評価体制がない

既存システムでも配信対象者の選定で機械学習モデルが利用されていますが、その当時は現在ほどMLOpsが整備されていなかったため、機械学習モデルを評価する体制がありませんでした。モデルやデータに変更がある際に精度の変化を確認できないためモデルの改善サイクルを回しにくく、意図せず低品質なモデルをデプロイしてしまう危険性がありました。

課題解決のために

上記の課題解決のために以下の3つに取り組みました。

  1. Vertex AI Pipelinesへの移行
  2. Two-Stage Recommenderの導入
  3. 機械学習モデルの評価と体制整備

1. Vertex AI Pipelinesへの移行

既存のシステムはCloud Composer上で機械学習パイプラインを構築していたため、現在弊社で機械学習基盤として利用されているVertex AI Pipelinesへ移行しました。移行に際し、2021年に公開した「Kubeflow PipelinesからVertex Pipelinesへの移行による運用コスト削減」という記事で今後の展望として挙げられていたパイプラインテンプレートを利用しています。パイプラインテンプレートはGitHubのテンプレートリポジトリ機能を利用し、Vertex AI Pipelinesの実行・スケジュール登録・CI/CD・実行監視等をテンプレート化したものです。以下のテックブログでもVertex AI Pipelinesの導入事例についてご紹介しているので是非ご覧ください。

techblog.zozo.com techblog.zozo.com

2. Two-Stage Recommenderの導入

KPIを改善するために、推薦分野で広く利用されているTwo-Stage Recommenderという推薦手法を導入します。このモデルアーキテクチャは推薦に関するコンペティションの上位解法でよく使用されており、最近だとKaggleのH&M Personalized Fashion Recommendationsなどで使用されていました。その名の通りCandidate GenerationとRerankingという2つのステージで構成されています。ユーザーとアイテムの全ての組み合わせに対するスコア計算が困難な場合に、ユーザーとアイテムに対するスコアの計算を一部の組み合わせに限定できます。

two_stage_recommender

Two-Stage Recommenderは以下の工程で推薦を実現します。

  1. Candidate Generationステージで、ユーザーと関連度の高いアイテムの集合を取得する
  2. Rerankingステージで、取得したアイテムをユーザーの関心度に基づいて並べ替える

プロジェクトへの導入

本プロジェクトでは前述の3つの推薦の観点を以下の様に変更します。

推薦の観点 変更前のアプローチ 変更後のアプローチ
配信対象者の選定 Matrix Factorizationとルールベース Two-Stage Recommender
ショップ推薦 ルールベース Two-Stage Recommender
アイテム推薦 ルールベース ショップ推薦を考慮したルールベース

配信対象者の選定とショップ推薦では同一のTwo-Stage Recommenderを使用しています。配信対象者の選定ではユーザー毎にTwo-Stage Recommenderのスコアの最大値を集計し、集計値が高い上位Nユーザーを配信対象とします。ショップ推薦ではTwo-Stage Recommenderのスコアが大きい順にショップを掲載します。アイテム推薦ではショップ推薦を考慮したルールベースのロジックを使用しますが、本記事では取り上げません。

ZOZOTOWNに出店しているショップは複数のブランドを取り扱うことがあるため、同じショップ内でもブランドによってユーザーの興味は異なるという仮説をモデルに反映します。以上を踏まえて、以下では本プロジェクトのTwo-Stage Recommenderの詳細について説明します。

Candidate Generation

Candidate Generationステージではユーザー、クーポン対象ショップ、取り扱いブランド、日付の組み合わせを取得します。

candidate_generation

以下の3つの軸を考慮してCandidate Generationを行いました。

  1. 過去の実績
  2. 人気ブランド
  3. 興味を持っているブランドの類似ブランド

1. 過去の実績

リターゲティング施策はコンバージョンにつながりやすいことが分かっているため、ユーザーのお気に入りブランドと過去N日間で閲覧したアイテムのブランドを推薦候補とします。

2. 人気ブランド

トレンドを考慮した推薦をするため、性年代別の人気ブランドの上位N件を取得しユーザーに紐付けます。

3. 興味を持っているブランドの類似ブランド

多様性のある推薦をするため、ユーザーが閲覧したブランドを元に以下の手順で類似ブランドを取得します。

  1. ユーザーのブランドに対する行動を学習データとしたMatrix Factorizationモデルを学習
  2. 学習の中間生成物であるブランドのEmbeddingを取得
  3. Embeddingから全ブランド同士のコサイン類似度を計算

ライブラリはLightFMを使用しています。指定可能なLogistic、BPR、WARPのロスを変えた時の精度を比較し、最終的には次項で説明する評価指標が最も良かったWARPロスを使用しました。

評価方法

Candidate Generationの評価は後述する全レコード数に対するRerankingモデルの正例の割合を使用します。使用データの日数や人気ブランドの取得件数などのパラメータは正例の割合と推薦に必要な最低ユーザー数を考慮して決定します。

Reranking

RerankingステージではCandidate Generationステージで取得した組み合わせを使用して、ユーザーが興味を持つ順番でクーポン対象ショップ、取り扱いブランドを並び替えます。

reranking

学習データの作成

ユーザーのブランドへの興味を数値化しランク付けをしたいのですが、興味を直接数値化することは困難です。そこで、ユーザーのブランドへの興味をアイテム閲覧データを用いて表現します。閲覧アイテムに紐づくブランドを取得し、アイテム閲覧データをブランド閲覧データに変換します。これをCandidate Generationで取得したデータに紐付けることでZOZOTOWN会員が次の日にあるブランドを閲覧することを正例とした学習データを作成します。ブランド推薦をメール配信以外でも展開したいという要件があったため、クーポン施策に関わるユーザー行動を正例とするのではなくZOZOTOWN全体のユーザー行動を正例としています。

アンダーサンプリング

前述の通りに学習データを作成するとCandidate Generationで取得したレコードでは正例の割合が1〜2%程度となります。学習時間の短縮と不均衡データへの対処を目的とし、学習と検証データに負例のアンダーサンプリングを行いました。後述するオフライン評価指標が低下しないことを確認し、最終的に正例:負例 = 1:1を採用します。

特徴量エンジニアリング

特徴量としてユーザーとアイテムのマスタデータに加えてユーザーの行動データを用います。行動データとはZOZOTOWN上での注文、検索、カートイン、お気に入り、閲覧などのデータです。特徴量は全てBigQueryを使用して作成します。

  • ユーザー軸

    • デモグラフィック属性
    • 価格に関わる指標
  • ブランド軸

    • ユーザー行動を集計した指標
    • 価格に関わる指標
    • クーポン付与ポイント
    • Candidate Generationで使用したモデルのEmbeddingを主成分分析した第N主成分
  • ユーザーとブランド軸

    • ユーザー行動を集計した指標
    • 価格に関わる指標
    • ブランドロイヤルティを表す指標

特に特徴重要度が高かった特徴量は以下です。

  • 価格に関わる特徴量
  • Embeddingを主成分分析した特徴量

学習

推薦モデルの学習にはLightGBMを使用し、スコアが0〜1の範囲に収まる様に二値分類をします。これはスコアが閾値以上の時に配信対象者とすることで将来的にはクーポンに興味があるユーザーのみに配信を送りたいという要件のためです。

バリデーション

Time Series Hold outによって検証データを作成します。最新のN日間のデータを取得し、約20〜30%が検証データとなります。アーリーストッピングを設定し検証データに対するロスが最善の時点で学習を終了します。

推論

Dataflowを使用して並列推論を行います。実験中に推論の実行時間に課題感を感じていましたが、導入後はテストデータと推薦対象データを対象に100GB超のデータに対して約20分で推論が完了します。

3. 機械学習モデルの評価と体制整備

上記の機械学習モデルを評価するためにオフライン評価の体制を整備します。具体的にはオフライン評価と実験管理の導入について紹介します。

オフライン評価

オフライン評価は定量評価と定性評価の2軸で評価をし、特に定量評価ではメトリクスの評価と過去の施策を活用したオフライン評価をします。

メトリクスのオフライン評価

テストデータに対するモデルメトリクスが向上していることを確認すると同時にvalidation lossやユーザーユニーク数などのメトリクスが異常ではないかを確認します。具体的には以下のメトリクスを確認します。

  • テストデータに対するprecision@k
  • テストデータに対するrecall@k
  • train loss
  • validation loss
  • 学習/推薦ユーザーのユニーク数
  • 学習/推薦ブランドのユニーク数

過去の施策を活用したオフライン評価

過去の施策によって変更前、変更後のモデルに関わらないメール配信者やメール経由サイト流入者のデータが手に入っていました。このデータを活用することで以下の指標を擬似的に再現し、変更前のモデルと変更後のモデルを評価します。

  1. N万位以内のユーザーの配信流入率
  2. メール経由流入者がN万位以内である割合

定性評価

定量評価に加えて、定性評価をチームメンバーに行なってもらいます。具体的には各自のZOZOTOWNアカウントを用いて推薦結果に対するフィードバックをしてもらいます。以下の様なフィードバックをもらい、モデル改善の方向性を決定する際の参考にしました。

  • 変更前の推薦は人気ブランドに偏っているが変更後の推薦はブランドのバリエーションが増えていて良い
  • ライトユーザーは変更前の推薦を好むが、ミドル/ヘビーユーザーは変更後の推薦を好みそう
  • 変更後の推薦は未知のブランドが多いが、その中に興味を持っているブランドがある時はかなり嬉しい

実験管理の導入

変更前の機械学習モデルは評価指標を保存する場所がなく他のモデルとの比較ができませんでした。対策として、オフライン評価指標の保存と参照を簡易化するために実験管理ツールであるMLflowを導入します。パラメータはパイプラインの実行時に保存され、メトリクスは学習や評価の際にMLflowへ保存します。保存したデータは以下の画像のように確認できます。メトリクスにはダミーの値を入れています。

▼ パラメーター mlflow1

▼ メトリクス mlflow2

▼ メトリクスの推移 mlflow3

結果

運用業務の簡易化

今回のシステム移行によってVertex AI Pipelinesを利用した他システムと同様の方法で簡単に運用業務が行えるようになりました。また、Cloud Composerを使用した機械学習モデルの運用が全社的に終了しVertex AI Pipelinesへと完全移行できました。

KPIの改善

配信対象者の変更とショップ推薦の変更に対して実施したA/Bテストではcontrolと比較してKPIが以下の様に改善しました。絶対数を表す指標は比率を、割合を表す指標は差を示しています。

KPI 配信対象者の変更 ショップ推薦変更
売上 124.69 % 104.02 %
1配信あたりの売上 123.81 % 104.40 %
注文者数 120.08 % 103.76 %
配信流入率 + 0.12 pt + 0.01 pt
配信注文率 + 0.004 pt + 0.001 pt

リリースサイクルの改善

MLflowの導入によってモデルの精度比較が簡単にできるようになったため、モデル改善のサイクルが早まりました。また、モデルに関わらない変更をリリースする際も精度が低下していないことを確認できるためリリースの安全性が向上しました

今後の展望

バイアスの考慮

現在はアイテムを閲覧したブランドを学習データとしてショップ推薦をしています。このデータは推薦経由であっても記録されるため推薦モデルが自己の学習データに影響を与えることになります。推薦したブランドは再び推薦されやすくなるというバイアスを生み出しているため、このバイアスを考慮した設計をする必要があります。

評価体制の改善

評価指標の探求

現在の評価指標は推薦の精度に着目したものが多いです。一方で推薦には多様性、新規性、意外性等の精度以外にも考慮すべき指標が提案されています。弊社でも長期的な推薦の価値を捉えた指標を明らかにし、モニタリングする必要があると考えています。

定性評価の体制整備

今回のプロジェクトでは定量評価の体制を整備しましたが、定性評価がモデル改善の方針の参考になることが多かったため、定性評価の方法も標準化することでモデル改善を加速させたいと考えています。

おわりに

本記事ではクーポン推薦モデルとシステムの改善について紹介しました。現在ZOZOでは「ワクワクできる『似合う』を届ける」という経営戦略のもとパーソナライズを強化している最中です。推薦を含め機械学習に関わるエンジニアを募集しているので、ご興味がある方は是非以下のリンクからご応募ください。

hrmos.co hrmos.co

MIRU2023 参加レポート

MIRU2023参加レポート

こんにちは。ZOZO Researchの研究員の古澤・北岸・平川です。2023年7月25日(火)から7月28日(金)にかけて画像の認識・理解シンポジウムMIRU2023に参加しました。この記事では、MIRU2023でのZOZO Researchのメンバーの取り組みやMIRU2023の様子について報告します。

続きを読む

Amazon Personalizeの導入における知見と注意点

OGP

こんにちは、ZOZO NEXTでウェブエンジニアを担当している木下です。先日、弊社が運営するオウンドメディアのFashion Tech Newsにおいて、記事リストのパーソナライズを行いました。本記事ではパーソナライズ導入における、要件定義、レコメンドエンジンの比較、実装での知見や注意点についてまとめます。

fashiontechnews.zozo.com

続きを読む

推薦システムの実績をLookerでモニタリングする

ogp

はじめに

こんにちは。ML・データ部/推薦基盤ブロックの佐藤(@rayuron)です。私たちは、ZOZOTOWNのパーソナライズを実現する機械学習を用いた推薦システムを開発・運用しています。また、推薦システムの実績を定常的に確認するためのシステムも開発しています。本記事では、Lookerを用いて推薦システムの実績をモニタリングするシステムの改善に取り組んだ件についてご紹介します。

続きを読む

教師データがないPoCにおける定量評価のポイント

タイトル画像

こんにちは。ML・データ部データサイエンス1ブロックの尾崎です。データサイエンス1ブロックでは機械学習モデルや、データ分析によって得られたルールベースのモデルの開発をしています。特に、ZOZOTOWNやWEARの画像データを扱っています。

本記事では、教師データがないPoC特有の「モデルの評価をどうするか」という課題への対策を商品画像の色抽出の事例とともに紹介します。教師データが無いという同じ境遇に置かれた方々の一助となれば幸いです。

目次

事業上の課題

アパレル商品の検索において、カラーは重要な要素の1つです。ZOZOTOWNでは15色のカラー(図1)を指定して検索できますが、より細かな粒度で商品を検索したいユースケースもあります。最近ではメイクやファッションにパーソナルカラーを取り入れることが流行しています。自分のパーソナルカラーに合う色で検索したいユーザもいることでしょう。ただ、現在のZOZOTOWNの検索だと「黄緑色」の商品に細かく絞り込みたくても、検索結果に「濃い緑色」の商品などが含まれてしまいます(図2)。

図1 ZOZOTOWNのカラー検索で使える色
図2 「緑色」の条件で絞り込んだ検索結果

詳しいカラーで検索できる機能があるとUX向上にも寄与します。そのためには、これまでのカラーデータよりも詳細なカラーデータを得る必要があります。そこで、データサイエンス1ブロックでは教師データがない状況から、商品画像のカラーを抽出するモデルを開発しました。

どのようなモデルを作ったか

図3が、作ったモデルによる抽出・検索結果です。カラーコードの色で検索した結果を列ごとに表示しています。教師データがない状況でここまでの精度を出すことができました。

モデルによる出力結果

図3 モデルによる出力結果

モデルの概要図は図4です。商品画像からカラーと比率を抽出するモデルです。

カラー抽出モデル概要図

図4 カラー抽出モデル概要図

以下のステップでカラー抽出を実現しました。

  1. 商品画像からセマンティック・セグメンテーションによってファッションアイテムのマスクを抽出する
  2. 商品のカテゴリ情報から最適なマスクを選択する
  3. マスク内のピクセルのカラーをクラスタリングし、代表色にまとめる

カラーはL*a*b*(以下、簡単のためLabと表記する)色空間上の3次元のベクトルで表現しています。Lab色空間は人間の視覚に近くなるよう設計されており、人間が知覚する色差をユークリッド距離で表せます。

モデルの評価をどうしたか

教師データがないので、工夫して定量評価できるようにしました。定量評価をわざわざ行えるようにした理由は実験サイクルを早く、正確に回すためです。定性評価では実験のたびに関係者へ評価をお願いするので時間がかかりますし、評価に主観が入り込んでしまいます。

次の節からその工夫を解説します。主に正解ラベル、アノテーションを外注/内製するか、評価指標の決め方を紹介します。

何を正解ラベルとするか

教師データがなくても、定量評価には正解ラベルが必要です。正解ラベルは、商品画像に含まれる「カラーのみ」としました。他にも以下の表1の案がありました。

表1 正解ラベル案の比較

正解ラベル案の比較

「カラーのみ」を選んだ理由はアノテーションコストが最も低く、かつ検索というユースケースにおいては「カラー」と「カラー数」が評価できれば十分だったからです。

アノテーションを外注するか、内製するか

今回は内製にしました。理由は「1件あたりのアノテーション時間」を計測し、最終的にかかる時間を見積もったところ、コア業務に支障がでない時間で終わりそうだったからです。この判断により、外注費用の節約ができましたし、アノテーションがまったく終わらないという事態も回避できました。

評価指標の設計をどうしたか

IoU (Intersection over Union) など、セマンティック・セグメンテーションの指標ではなく、評価指標を独自に定義する必要がありました。なぜなら、正解ラベルとして「ピクセル単位のラベル」ではなく、商品に含まれる「カラーのみ」を採用したからです。

まず、評価したい観点として以下の2つを洗い出しました。

  • カラーが近いか?
  • カラー数が同じか?

カラー数も評価する理由は今回のユースケースである検索において、どんなに色が近くても色数が異なればユーザ体験が損なわれると判断したからです。

この2つの観点を測るため、以下の図5のように色の近いペアごとに類似度を計算し、その和を正解と予測のうち多い方の色数で割った値を評価指標としました。

評価指標概要図

図5 独自に定義した評価指標の概要

これを数式で表現すると以下になります。

\displaystyle{\frac{\sum^{\min (|\boldsymbol{L} _ 1|,|\boldsymbol{P} _ 1|)} _ {t=1} \max _ {\boldsymbol{l} \in \boldsymbol{L} _ t, \boldsymbol{p} \in \boldsymbol{P} _ t} s(\boldsymbol{p},\boldsymbol{l})}{\max (|\boldsymbol{P} _ 1|,|\boldsymbol{L} _ 1|)}}
\boldsymbol{L} _ {t+1} = \boldsymbol{L} _ {t} - \{\text{arg} \max _ {\boldsymbol{l} \in \boldsymbol{L} _ {t}, \boldsymbol{p} \in \boldsymbol{P} _ {t}} s(\boldsymbol{p},\boldsymbol{l})\}
\boldsymbol{P} _ {t+1} = \boldsymbol{P} _ {t} - \{\text{arg} \max _ {\boldsymbol{l} \in \boldsymbol{L} _ {t}, \boldsymbol{p} \in \boldsymbol{P} _ {t}} s(\boldsymbol{p},\boldsymbol{l})\}
  • \boldsymbol{L} _ {1}= \{ \boldsymbol{l}_{1},\dots,\boldsymbol{l}_{M} \}:正解カラーの集合(\boldsymbol{l}_{j} \in \mathbb{R}^ 3:Lab色空間上のベクトル)
  • \boldsymbol{P} _ {1}= \{ \boldsymbol{p}_{1},\dots,\boldsymbol{p}_{N} \}:予測カラーの集合(\boldsymbol{p}_{i} \in \mathbb{R}^ 3:Lab色空間上のベクトル)
  • s(\boldsymbol{p},\boldsymbol{l}):予測カラーと正解カラーの類似度(詳しい定義は後述)

なぜ、この式で2つの観点を測れるのかを解説していきます。まず、1つ目の観点である「カラーが近いか?」は、分子(類似度s(\boldsymbol{p},\boldsymbol{l})を足し合わせること)で測れます。ただし、近い色のペアのみに絞ります。なぜなら、すべてのペアだと以下の問題があるからです。

  • 同系色間の類似度が強く反映されてしまう
  • 近くない色のペアによって平均化されてしまう

例えば、以下の図6の左の類似度行列の予測には緑の同系色\boldsymbol{p}_{1}, \boldsymbol{p}_{2}が含まれています。影の色を異なる同系色として抽出してしまうことがよくあります。こうなると白系のペア(\boldsymbol{p}_{3}, \boldsymbol{l}_{2})と比べて、緑系のペア(\boldsymbol{p}_{1}, \boldsymbol{l}_{1}), (\boldsymbol{p}_{2}, \boldsymbol{l}_{1})の占める割合が高くなり、緑系が強く評価指標に反映されてしまいます。また、図6の左の方が右よりも上手く抽出できていますが、類似度の和は同じ3.3になってしまいます。これは、近くない色のペア(\boldsymbol{p}_{1}, \boldsymbol{l}_{2}), (\boldsymbol{p}_{2}, \boldsymbol{l}_{2}), (\boldsymbol{p}_{3}, \boldsymbol{l}_{1})も含めているからです。

2つの類似度行列の例

図6 2つの類似度行列の例(説明の簡単のため、正確な値ではありません)

近い色のペアのみ(\boldsymbol{p}_{1}, \boldsymbol{l}_{1}), (\boldsymbol{p}_{3}, \boldsymbol{l}_{2})に絞ることで、緑は\boldsymbol{p}_{1}のみが使われ、緑と白が対等に評価されます。また、左右の類似度の和は、それぞれ1.9、1.5となり「左の方が右よりも上手く抽出できている」ということを表せます。

\boldsymbol{L}_{t},\boldsymbol{P}_{t}の漸化式(以下に再掲)は、正解・予測カラーの集合から「近い色のペア=類似度が最大のペア」を順に取り出していくことを表しています。

\boldsymbol{L} _ {t+1} = \boldsymbol{L} _ {t} - \{\text{arg} \max _ {\boldsymbol{l} \in \boldsymbol{L} _ {t}, \boldsymbol{p} \in \boldsymbol{P} _ {t}} s(\boldsymbol{p},\boldsymbol{l})\}
\boldsymbol{P} _ {t+1} = \boldsymbol{P} _ {t} - \{\text{arg} \max _ {\boldsymbol{l} \in \boldsymbol{L} _ {t}, \boldsymbol{p} \in \boldsymbol{P} _ {t}} s(\boldsymbol{p},\boldsymbol{l})\}
  • \boldsymbol{L} _ {1}= \{ \boldsymbol{l}_{1},\dots,\boldsymbol{l}_{M} \}:正解カラーの集合(\boldsymbol{l}_{j} \in \mathbb{R}^ 3:Lab色空間上のベクトル)
  • \boldsymbol{P} _ {1}= \{ \boldsymbol{p}_{1},\dots,\boldsymbol{p}_{N} \}:予測カラーの集合(\boldsymbol{p}_{i} \in \mathbb{R}^ 3:Lab色空間上のベクトル)

この漸化式を図解したものが以下の図7になります。赤字が最も近いペアとして取り出されていきます。この赤字の類似度の和が分子になります。

漸化式を類似度行列で図解

図7 漸化式を類似度行列で図解

ところで、類似度s(\boldsymbol{p},\boldsymbol{l})の定義は以下になります。

\displaystyle{s(\boldsymbol{p},\boldsymbol{l})= \left\{ \begin{array}{l}
\displaystyle{\frac{d _ { \text{dissimilar}}-d(\boldsymbol{p},\boldsymbol{l})}{d _ { \text{dissimilar}}}} & (d(\boldsymbol{p},\boldsymbol{l}) \le d _ { \text{dissimilar}}) \\
0 & (\text{otherwise})
\end{array} \right.
}
  • d(\boldsymbol{p},\boldsymbol{l}):予測・正解カラー間のユークリッド距離。Lab空間上の2点間のユークリッド距離は人間が知覚する色差に近しい1
  • d _ { \text{dissimilar}}:関係者間で定性的に決めた「これ以上離れたら、全く異なる色に感じる距離」。データセット内の距離の最大値を使ってしまうと、ほとんどの色のペアの類似度が高くなってしまうため。

わざわざ距離を類似度に変換した理由は、最終的な指標を「何色中、何色あってるか」と解釈しやすくするためです。例えば、2色のうち1色は完全一致(類似度1)、もう1色は半分くらい似ている色(類似度0.5)のとき「2色のうち1.5色あっている」と解釈できるようにするためです。

2つ目の観点である「カラー数が同じか?」は分母(正解と予測のうち、多い方の色数\max (|\boldsymbol{P} _ 1|,|\boldsymbol{L} _ 1|)で割ること)によって測れます。他の案として類似度の平均にしてしまう、つまり、少ない方の色数\min (|\boldsymbol{P} _ 1|,|\boldsymbol{L} _ 1|)で割ってしまうと「カラー数が同じか?」を評価できません。例えば、正解が2色のとき、予測が2色でも100色でも分母は2となり同じ評価値になってしまいます。多い方の色数で割ることによって、100色より2色の方が良いことを表現できます。

以上より、今回の評価指標(以下に再掲)は、2つの観点「カラーが近いか?」と「カラー数が同じか?」を測れていると言えます。

\displaystyle{\frac{\sum^{\min (|\boldsymbol{L} _ 1|,|\boldsymbol{P} _ 1|)} _ {t=1} \max _ {\boldsymbol{l} \in \boldsymbol{L} _ t, \boldsymbol{p} \in \boldsymbol{P} _ t} s(\boldsymbol{p},\boldsymbol{l})}{\max (|\boldsymbol{P} _ 1|,|\boldsymbol{L} _ 1|)}}

最後に「予測の良し悪しと、評価値の良し悪しが連動するか」を具体的なデータで確認します。 評価値が高い/低い例

図8 評価値が高い/低い例

図8の評価値が高い例では、カラーの近さとカラー数が両方とも合っています。一方、評価値が低い例では、全然違うカラーだったり、カラー数が間違っています。つまり、予測の良し悪しが評価値の良し悪しに連動していることを確認できました。このように評価値が高い/低い例を確認することで、評価指標に欠陥がないかを確認できます。この確認のおかげで「近い色のペアのみに絞る」や「多い方の色数で割る」という改善を思いつくことができました。

まとめ

本記事では、教師データがないPoC特有の「モデルの評価をどうするか」という課題に対して、商品画像の色抽出の事例とともに以下の解決策を紹介しました。

  • 教師データが無くても、正解ラベルを用意して定量評価の方法を確立することで、実験サイクルを早く・正確に回せるようにしました。
  • アノテーションの外注か内製かを選ぶにあたり「1件あたりのアノテーション時間」を計測し、最終的にかかる時間を見積もりました。この判断により、外注費用の節約ができましたし、アノテーションがまったく終わらないという事態も回避できました。
  • 独自の評価指標や正解ラベルを定義する際は「ユースケースに必要十分な評価観点を明らかにすること」と「予測の良し悪しと、指標の良し悪しが連動するかを具体的なデータで確認すること」で適切な定量評価方法を設計できました。

ZOZOではデータサイエンティスト・MLエンジニアのメンバーを募集しています。今回紹介した画像タスクに興味ある方はもちろん、幅広い分野で一緒に研究や開発を進めていけるメンバーも募集しています。ご興味のある方は、以下のリンクからぜひご応募ください。

hrmos.co

参考


  1. Jain, Anil K. (1989). Fundamentals of Digital Image Processing. New Jersey, United States of America: Prentice Hall. pp. 68, 71, 73. ISBN 0-13-336165-9.

社内マッチングアプリ「CLUB ZOZO」のマッチングアルゴリズム

社内マッチングアプリ

こんにちは。ZOZO研究所の平川とML・データ部のデータサイエンスブロック2の荒木です。私たち2022年度の新卒入社メンバーは有志で社内マッチングアプリ「CLUB ZOZO」を運営しています。この記事では、興味関心が近い社員同士を自動でマッチングするアルゴリズムについてご紹介します。マッチング時のバッチ処理については推薦基盤ブロックの関口が解説していますので、興味のある方は併せてご覧ください。

qiita.com

目次

CLUB ZOZOとは

CLUB ZOZOは、興味関心が近い社員同士をマッチングし、週に1回15分間のChat Timeをセッティングするサービスです。Chat Timeとは「上司」と「部下」の関係で実施される1on1ではなく、同じ興味関心を持つもの同士で純粋に会話を楽しんで欲しいという願いを込めて作った造語です。ユーザはSlackアプリ上で自分の興味関心を登録し(以下では「趣味タグ」と呼びます)待つだけでChat Timeがセッティングされるため、気軽に新しい仲間との出会いを楽しむことができます。

社内マッチングアプリのUI

CLUB ZOZOは、新卒チーム開発研修で社内コミュニケーションを促進するためのツールを開発したことがきっかけとなり誕生したサービスです。2022年11月に社内リリースされ、2023年1月時点で約350名の社員が利用しています。

CLUB ZOZOを運営するにあたり解決すべき課題

CLUB ZOZOを運営する上でボトルネックとなるのがマッチングの生成です。サービスの性質上、以下の要件を満たす必要があるため手動での実施は運営側の負担が大きくなります。

  • 共通の話題がある
  • 同じ人とばかりマッチングしない
  • マッチング機会が特定のユーザに偏らない

そこで、私たちは機械学習と数理最適化を組み合わせたマッチングアルゴリズムを開発し、CLUB ZOZOの運営コストを大幅に削減することに成功しました。開発したアルゴリズムは、「word2vecを用いた趣味タグの類似度計算」と「数理最適化を用いた偏りのないマッチング生成」の2つの工程から成ります。

マッチングアルゴリズムの全体像

このアプローチは、ユーザのマッチング度合いに関する教師データが不要であるため、サービス立ち上げ段階で教師データが存在しない状況においても適用可能であるという利点があります。

以降では「ユーザ間の類似度を計るアプローチ」と「数理最適化を用いた偏りのないマッチング生成」について詳細を説明します。

ユーザ間の類似度を計るアプローチ

今回は、ユーザ間の類似度を「ユーザが登録しているタグの類似度」として計るアプローチを採用しました。具体的には、各ユーザのタグのすべてのペアに対して単語間の類似度を計算して、それを平均しています。

ユーザ間の類似度を計るアプローチ

こちらの図の例では、以下の3名がそれぞれ次のタグを持っているとします。

  • Aさん:テニス、君の名は。
  • Bさん:テニス、映画
  • Cさん:テニス、ママ

このとき、AさんとBさんは「テニス」という共通のタグを持っており、かつ「君の名は。」と「映画」という類似の趣味タグを持っているためユーザ間の類似度は55%となりました。一方で、AさんとCさんは「テニス」という共通の趣味タグを持っていますが、もう1つの「君の名は。」と「ママ」というタグはあまり似ていないためユーザ間の類似度は33.75%となります。つまり、AさんとBさんの方がより類似しているという直感をうまく反映できていると言えます。

また、単語間の類似度を計算する手法として「word2vec」を用います。word2vecは単語の意味をベクトルとして表現するモデルであり、自然言語を扱う機械学習モデルで広く用いられています。word2vecの学習には、Wikipediaが提供している全文データに対して、日本語用の形態素解析システムであるMeCabによる分かち書きを行ったデータを利用します。

しかし、このままでは辞書にない語句(=学習データに含まれない語句)や節はベクトル化できません。辞書にない語句や節の登録を禁止することも考えられますが、それではUX的にあまり嬉しくありません。そこで、もし趣味タグとして登録された文字列が辞書にない場合は、形態素解析で抽出した名詞のみを用いてベクトル化を行います。

辞書にないタグの距離を計算する場合

画像のように、辞書にない文字列のペアに対して類似度の計算を実現しています。例えば、「サッカー」と「スポーツ観戦」はどちらも辞書に存在するため、そのまま類似度を計算できます。一方で、「サッカー観戦」は辞書にないタグなので、一度分かち書きをして「サッカー」と「観戦」に分割します。そして、それぞれ「スポーツ観戦」とのスコアを計算し、その平均値を類似度とします。「サッカー観戦」と「サッカー実況」のようにタグのペアのうちどちらも辞書にない語句の場合は、それぞれ分かち書きを行い、各スコアを求めて平均した結果を類似度とします。

名詞以外が含まれるタグの距離を計算する場合

では、もしタグに少し長めの文章が入力された場合はどうなるのでしょうか。例えば「公園で子供とサッカーをする」と「縁側で猫と日光浴をする」というペアを考えてみましょう。分かち書きを行うと、それぞれ「公園・で・子供・と・サッカー・を・する」「縁側・で・猫・と・日光浴・を・する」になります。もし、このまま各単語のベクトルを平均して類似度を計算する場合、「で・と・を」といった助詞が類似度を底上げしてしまい不自然に高いスコアが出てしまいます。実際このペアの類似度は87.5%となります。そこで、今回は形態素解析をして、品詞が名詞である単語のみを用いてベクトルを平均します。名詞だけを用いる場合、今回のペアは59.5%となり少し低めに計算されました。また、「サッカーを観戦する」「サッカー観戦」という一見すると類似度が高めに出るはずのペアも、名詞以外を用いた場合は類似度が45.5%とかなり低めに計算されてしまいます。もちろん、名詞のみを用いた場合は100%となります。

ただし、分かち書きをしても単語が辞書に存在しない場合は、スコアを0%としています。この他にも、類似度が55%未満のタグのペアは経験的にあまりふさわしいペアでないことがわかっていますので、そのペアのスコアを0%にしてペアを無効化するなど細かな調整を入れています。

数理最適化を用いた偏りのないマッチング生成

上記の方法で全ユーザの組に対してユーザの類似度が計算できたとします。ユーザの類似度が高いペアから貪欲にマッチングを成立させた場合(図の「偏り制約なし」)、「マッチング機会が特定のユーザに偏らない」という要件を満たさないマッチング結果になる場合があります。

別の方針として、一度のマッチング機会で各ユーザが1人のユーザとだけマッチングするという制約を満たしつつ、マッチングスコアの総和を最大化する解(図の「偏り制約あり」)を見つけるということが考えられます。

数理最適化を用いたマッチング生成

この問題は以下の数理最適化問題として定式化できます。

 \displaystyle
\text{maximize}\sum_{i}\sum_{j\lt i}S_{ij}x_{ij}\quad \forall S_{ij}\in\lbrack 0, 1\rbrack \\\text{subject to}\sum_{i}\sum_{j \lt i}x_{ij}=N\quad \forall x_{ij} \in\{0,1\}\\\sum_{k \lt i}x_{ik} + \sum_{j \lt k}x_{kj}\leq 1\quad\forall k\in\{1, 2 \ldots M \}

ここで、 N は生成するマッチング数、 M はユーザ数、 S_{ij}  i 番目のユーザと j 番目のユーザの類似度、 x_{ij}  i 番目のユーザと j 番目のユーザがマッチングするか否かを表すバイナリ変数です(以下ではマッチング変数と呼びます)。この問題は「整数線型計画問題」と呼ばれるクラスの問題であり、PuLPなどの最適化ソルバーを用いて最適解を求めることができます。

この問題の最適化対象は、マッチングが成立した組のユーザ類似度の総和です。この値は全体の効用を表現しており、値が大きいほど良いマッチングを生成できていると考えられます。1つ目の制約条件は、生成するマッチング数が指定の数と一致することを保証するための条件です。例えば、 N=10 を入力すると、10組のマッチングが生成されます。2つ目の制約条件は、一度のマッチング機会で各ユーザが1人のユーザのみとマッチングすることを保証するための条件です(以下では重複制約と呼びます)。全ユーザが同時に重複制約を満たす条件は、任意のユーザが重複制約を個別に満たすことと同値です。

以下の図では、4番目のユーザ( k=4 / Dさん)に着目して重複制約の直感的なイメージを説明します。 k=4 のユーザがマッチングするか否かを決定する際に着目すべき領域は、図中の黄色に着色されたセル(以下では対象領域と呼びます)です。マッチング変数が赤色のセルはマッチング変数の値が1になり、黒色のセルはマッチング変数の値が0になることを表すものとします。この時、4番目のユーザが重複制約を満たすための条件は、対象領域に含まれるマッチング変数の中で値が1になるものが1個(DさんはEさんとだけマッチングする / 図の中央の例)もしくは0個(Dさんは誰ともマッチングしない / 図の右端の例)の場合に限ります。実際、図の左端の例のように対象領域に含まれるマッチング変数の中で値が1になるものが2つ以上存在する場合は、Dさんは2人以上のユーザとマッチングしてしまい不適となります。

数理最適化を用いたマッチング生成

さらに、運用上は重複制約に加えて、同じユーザとばかり連続でマッチングしない制約(以下では連続制約と呼びます)を加えることも重要です。連続制約については、上記の最適化問題をソルバーに入力する前段で、対応するユーザ同士のマッチングスコア S_{ij} に最低値である0を代入しておくことで達成できます。同様の原理を用いると、「部署指定マッチング」などの拘束条件付きマッチングについても実現できます。

ダミーデータでの推論結果

開発したアルゴリズムがうまくマッチングできるかを確認するために、ダミーのユーザデータを用いて実際にマッチングを行いました。

ダミーデータでの推論結果1

左側の表は完全にランダムでマッチングされた結果であり、ほとんどのペアが出鱈目で、良いマッチング結果とは言えません。対して右側の表はword2vecによるユーザの類似度を用いたマッチング結果であり、似ている趣味タグを持っているユーザ同士のマッチングを実現できたことがわかります。各表の中央にある「Score」は、各タグの類似度を示します。

ダミーデータでの推論結果2

続いて、マッチングの偏りを抑止する制約の有無による結果の比較です。左側の表は先程のword2vecの結果と同じですが、同じユーザIDにそれぞれ色をつけています。ユーザID: 4, 7, 14のユーザがそれぞれ2回マッチングしており、ユーザに偏りができてしまっていることがわかります。対して右側の表はマッチングの偏りを抑止する制約を入れた結果であり、どのペアも必ず違うユーザが選ばれており、特定ユーザに偏らないマッチングを実現できたことがわかります。

まとめ

本記事では、新卒研修で開発した社内マッチングアプリ「CLUB ZOZO」のうち、ユーザ間のマッチングを行うアルゴリズムについてご紹介しました。word2vecと数理最適化の組み合わせで、興味・関心が近いユーザ同士を偏りなくマッチングするアルゴリズムを実現しました。今後は、実際にツールを利用している方から得られたフィードバックを教師データとして活用するほか、部署指定といった新機能の追加を考えています。

最後に

ZOZOではファッションに関する様々な分野で、研究や開発を一緒に進めていくデータサイエンティスト・MLエンジニアを募集しています。ご興味を持たれた方は、以下のリンクからぜひご応募ください。

corp.zozo.com

zozonext.com

画像認識を用いたZOZOTOWN商品に対するシーン・スタイルタグ予測

ogp

はじめに

こんにちは。ML、データ部データサイエンス2ブロックの吉本です。

ZOZOTOWNの商品には「長袖」「クルーネック」「花柄」といった、アイテムの特徴を示すタグ(アイテム特徴タグ)や「ベーシック」「モード」「結婚式」といった、アイテムに合うシーンやスタイルを表すタグ(シーン・スタイルタグ)が付与されています。これらは商品情報の登録時、ブランドさんに付与していただいているものです。

これらタグに関する課題として、タグ付与の手間、シーン・スタイルタグのタグ付与率の低さがあります。アイテム特徴タグは例えばTシャツ/カットソーカテゴリでは約50種類、シーン・スタイルタグは約130種類のタグがあり、一つ一つの商品に対してこれらの中から該当するものを選んで付与することは手間のかかる作業となります。またシーン・スタイルタグについてはZOZOTOWNに導入されてから2年弱とまだ日が浅いことから、認知度が低くタグが付与される商品の割合が小さくなっています。

そこでZOZOではタグ登録の手間の軽減、タグ付与率の向上を目標に画像認識によるタグ予測に取り組んでいます。2023年1月からは、ブランドさんが商品にタグを登録する際に、予測したタグを推薦するという仕組みとして導入されています。

また現在稼働しているシーン・スタイルタグ推薦のモデルでは、予測精度が高いタグに限って推薦を行っていますが、モデル開発では引き続き対応タグを増やすための精度の向上に取り組んでいます。こちらの取り組みでは、スタイルタグを人手でアノテーションすることによって、学習データを改善し精度の向上を目指しました。

本記事では、はじめに現時点のタグ推薦で用いられているアイテム特徴タグ、シーン・スタイルタグのモデル(商品タグによるモデル)に関して簡単に紹介したのち、スタイルタグの対応タグ数増加のための取り組み(アノテーションデータによるモデル)に関して紹介します。

ZOZOTOWNの商品タグ

ZOZOTOWNでは、見た目の特徴や素材などに関するアイテム特徴タグや、活用シーンや合うスタイルを表すシーン・スタイルタグが商品に対して付与されています。

zozo_tag_images3

アイテム特徴タグは「着丈」「袖丈」「柄、デザイン」といったタググループに分かれていて、その中に例えばシャツ/ブラウスカテゴリなら「着丈」の「ショート丈」「ミドル丈」「ロング丈」といったタグがあります(上図左)。アイテムのカテゴリ(シャツ/ブラウス、ニット/セーターなど)ごとに対象のタググループが決まっていて、ブランドさんはそこから選んでタグを付与できるようになっています。ユーザーさんは各タググループごとにタグを指定することで、求める特徴を持つ商品に絞り込んで検索できます。アイテム特徴タグの付与率は比較的高く、Tシャツ/カットソーの「ネック」だと約84%の商品にタグが付与されています。

シーン・スタイルタグに関しては130個ほどあり、商品ページでは「このアイテムの関連キーワード」の欄に表示されています(上図中央)。商品ページからこれらのタグをクリックすることで、当てはまる商品を検索できるようになっています(上図右)。導入されてからまだ2年弱しか経過していないということもあり、何らかのタグが1つ以上付与されている商品は全体の10%程度であり、タグがついてる商品は未だ多いとは言えない状態です。

商品タグによるモデル

はじめに現在タグ推薦で利用されている、商品タグを用いて作成したモデルに関して簡単に紹介します。

アイテム特徴タグ

アイテム特徴タグは多くのタグで学習に十分なデータ量がありました。このためZOZOTOWNの商品画像と、商品に付与されたアイテム特徴タグを学習データとして用いました。

モデルとしてはベースネットワークの上に、タググループごとにタグを1つ予測する層を載せたモデルを学習しました。損失関数にはSoftmax Cross Entropy Lossを用いました。ベースネットワークとしては、速度と精度ともに良い数値が報告されていたEfficientNetV2-Sを用いました。

プロダクト導入に際しては社内の他部署に評価を依頼しました。各カテゴリごとに約100画像を用意し、各タググループに関して予想したタグが正しいかどうかを評価しました。この評価において、正解率が事前に定めた閾値を上回ったカテゴリ×タググループを導入することに決定しました。

シーン・スタイルタグ

シーン・スタイルタグは前述の通りタグ付与率が低い状態でした。そのため商品に付与されたシーン・スタイルタグだけでは十分なデータ量を確保できないタグが多くありました。データ量の確保のため、商品説明にシーン・スタイルタグと一致する文字列が含まれる場合、そのタグが付与されているとみなして、商品に付与されたシーン・スタイルタグに加えて用いました(以後これも合わせて商品タグと呼びます)。

モデルとしてはベースネットワークの上に、各タグを付与するべきかどうかを予測する層を載せたモデルを学習しました。損失関数には負例を多く含むデータセットで高い精度が報告されているAsymmetric Lossを用いました。ベースネットワークとしてはアイテム特徴と同じくEfficientNetV2-Sを用いました。

画像認識を用いるともに、人手によりカテゴリごとに対象タグを洗い出しました。これにより精度を細かく評価できるようになるとともに、評価作業や後ほどお話するアノテーション作業の手間を軽減できました。

アイテム特徴と同じく、プロダクト導入に際しては社内の他部署に評価を依頼しました。訓練画像が十分に存在するカテゴリ×タグを評価対象とし、対象画像は各カテゴリ×タグ中で予測スコアが上位5%に入るものから50枚ずつ抽出しました。アイテム特徴と異なり、シーン・スタイルタグはそのシーンやスタイルに当てはまるか、当てはまらないかではっきりと分けることができないため、タグとしてどのくらい妥当かを4段階で評価しました。

評価の結果、評価対象としたカテゴリ×タグの約91%に当たる約300個に関して、社内で定めた閾値を上回ったため導入を決定しました。ただ評価対象としなかったものを中心に、導入を見送ったカテゴリ×タグも多く残りました。

アノテーションデータによるモデル

商品タグによるシーン・スタイルタグのモデルでは、上述のとおり精度が足りないことから導入を見送ったタグが多くありました。これらの多くは、付与数が少ないタグや商品説明文の中であまり使われない用語に関するタグでした。例えばTシャツ/カットソーのスタイルタグでは「マリン」「ロック」「セクシー」「カレッジ」「ギャル」「リゾート」の6種類のタグが該当しました。

また商品タグによるデータセットの問題点として、タグが付与されるべき商品にタグが付与されているとは限らないという問題がありました。これは精度への悪影響に加え、このデータセットを用いて信頼のできる定量評価ができない、本来タグが付与されるべき商品の割合を知ることができないといった問題につながっていました。

そこで次のステップとして、人手によるスタイルタグのアノテーションを行ったデータセットを作成することで、上記の問題を解決し対応タグ数の増加を目指しました。

アノテーション

アノテーションは過去に実績のあるFastLabel社に依頼しました。65のカテゴリに対して、前述の人手で作成したカテゴリごとの対応タグリストを用いて、アノテーション対象のタグを設定しました。より主観的な要素が強いシーンタグは、アノテーション作業の効率や導入時の効果の観点から今回の対象から外し、スタイルタグのみを対象としました。

また、今回1つの画像に対して3人のアノテータにタグを付与していただきました。これは人によって各スタイルのイメージが異なり、社内で行った少量のアノテーションにおいても、人によってタグ付与の基準がばらつくという結果が出ていたためです。

アノテーション対象画像としては、約1年間分のZOZOTOWNの商品から約35万画像を抽出しました。この際に多くの商品で、1つの商品からは1カラーバリエーションの画像のみを選定するようにしました。アノテーション後、同じ商品の異なるカラーバリエーションの画像にも自動的に同じタグを付与することで、約70万の画像からなるデータセットとなりました。

予測スコアを用いた抽出

このアノテーション対象商品の選定方法ですが、今回の主目的が対応タグ数の増加にあるため、新たに対応を目指すタグが付与されそうな商品を重点的に抽出することを考えました。このために、新たに対応したいタグを対象に上述のモデルを用いて予測を行い、カテゴリ×タグごとに予測スコアが上位20%に入る商品からランダムに商品を抽出しました。トレーニングデータにおいて、この予測スコアを用いて集めた商品と、全商品からランダムに収集した画像をあわせて用いました。具体的なデータ数の目安としてはランダムに2500個(カテゴリごとにばらつきはありますが)、予測スコアを用いた分に関してはカテゴリ×タグごとに500個と設定しました。バリデーションデータ、テストデータに関しては、ZOZOTOWN上でのタグの分布と同じ分布のデータで評価するために、全量を全商品からランダムに集めたものとしました。4カテゴリに関してテスト発注、分析を行い効果が期待できそうであったため、残りの分もこの方法で収集しアノテーションを依頼しました。

結果分析

まずアノテーションデータと商品タグデータでタグ付与率を比較しました。この結果アノテーションデータでのタグ付与率の方が、商品タグデータでの付与率より4.14倍大きいことがわかりました。

3人のアノテータ間のタグの一貫性に関しても集計を行いました。カテゴリ×タグ内でタグが1人、2人、3人に付与された画像の割合を横軸に、各範囲に該当するカテゴリ×タグ数を縦軸にプロットしたヒストグラムを見ると以下のようになっています。

tag_proportion_test_123

予測スコアを用いた収集方法の効果検証として、予測スコアを用いて収集された画像とランダムに収集された画像のそれぞれで、別々にタグ付与率を算出し比較しました。この結果、予測スコアを用いたカテゴリ×タグの30/31個において、予測スコア収集分の付与率の方が高いことがわかりました。また平均では1.7倍高いという結果になりました。予測スコア収集の対象外のタグに関しては、予測スコア収集分ではタグ付与率が下がる傾向があり、最も下がっていたTシャツ/カットソーの「エレガント」「フェミニン」「キレイめ」「ガーリー」「ナチュラル」タグでは0.65-0.77倍となっていました。

モデル作成

アノテーションデータを用いた検証をする前に、商品タグを用いたデータセットでベースネットの精度検証を行いました。前述のEfficientNetV2-Sに加えて、CoAtNet-0、CoAtNet-2、VOLO-D2を試しました。新しく試したネットワークについてはkeras_cv_attention_modelsを用いて検証しました。報告されているImageNet上での精度と同様、順当にパラメータ数が多いものほど高い精度が出るという結果になり、最も精度が高かったVOLO-D2を採用しました。

データセットはアノテーション対象データの抽出元となった約1年分の商品から作成しました。ラベルとしてはアノテーションと商品タグを別に使えるように用意しました。モデルの方でもベースネットワークの上にアノテーションタグ、商品タグそれぞれに対して別に層を用意して、別に予測、学習を行うようにしました。プロダクトで用いる際には、アノテーションで十分なラベル量があるタグはアノテーションタグの方の予測(以下アノテーションタグ予測と呼びます)を用いることにし、そうでないタグ(主にアノテーションの対象としなかったシーンタグ)に関しては商品タグの方の予測(商品タグ予測と呼びます)を用いることにしました。

損失関数には前回と同様にAssymmetric Lossを用いました。またタグを付与したアノテータ数の情報を活かすため、付与した人数×0.5で正例を重み付けしました。

評価

アノテーションデータ上での評価

評価指標としては、Precision(モデルがそのタグと予測したもののうち、正解データでアノテータ3人中2人以上がそのタグをつけた割合)、Recall(3人中2人以上がそのタグをつけたもののうち、予測できた割合)をカテゴリ×タグごとに算出し用いました。

タグを付与する/しないを決定する閾値には、タグ付与率(そのカテゴリにおいて3人中2人以上がそのタグを付与した割合)に応じた値を設定しました。

結果、Precisionは対象カテゴリ×タグの中央値では0.31、Recallは0.42でした。またPrecision算出時の正解データの条件を変更し「1人以上がそのタグを付けた割合」とすると0.72でした。

リリースに向けた分析項目

リリースに向けて以下の項目を確認しました。

  1. タグ付与率とPrecisionの関係
  2. アノテーションデータ上での評価と社内評価の相関
  3. アノテーションタグ予測と商品タグ予測の相関

1はタグによる絞り込み検索の効果の参考として用いました。仮に検索対象の全商品に予測したタグを付与し、タグを指定して絞り込み検索をしたとすると、Precisionは絞り込み結果に正しくそのタグが該当する商品が含まれる割合を表します。絞り込まない場合にそのタグが含まれる割合はタグ付与率となります。タグ付与率とPrecisionを比較することで、絞り込み検索をした際にどの程度そのタグに該当する商品が増えるかを知ることができます。

2に関しては、一部のカテゴリ×タグについて商品タグを用いたモデルのときと同じく他部署の人に4段階で評価していただき、アノテーションデータでの評価が社内での評価と乖離していないかを確認しました。

3では、これまで用いてきた商品タグ予測とアノテーションタグ予測の間に大きな乖離がないかを見るため、ランキング指標を用いて確認しました。

分析結果

以下の左図が1のタグ付与率とPrecisionの関係を、カテゴリ×タグを1サンプルとしてプロットしたものになります。タグ付与率に比べてPrecisionが中央値で2.3倍となり、さらに付与率0.15以下のものに限ると4.6倍という結果になりました。絞り込みにより対象商品が数倍増えるという結果を得ることができました。

絞り込みにより対象タグの割合が増えても、タグと全く関係のない商品が検索結果の大半を占めると使われづらいことが予想されます。そこで正解データの条件を緩め、3人中1人以上がタグをつけたものとした場合のPrecisionも見てみました(下図右)。タグ付与率が0.01から0.05のものに限ると0.5、0.01以下だと0.26となりました。タグ付与率が低いカテゴリ×タグにおいても、絞り込み結果中のタグに関連する商品の割合を高くできそうなことがわかりました。

tag_proportion_precision12

2のアノテーションデータ上での評価と社内評価の相関に関しては下図右になります。アノテーションデータでのPrecisionが高いほど、定量評価の点数が高いという傾向が見て取れます。

precision_inhouse_evaluation

3の確認には、商品タグ予測とアノテーションタグ予測の間のケンドールの順位相関係数を用いました。全カテゴリ×タグのうち約97%で正の相関があることが確認できました。

対応タグの増加、タグ推薦対象の増加

これらの結果と人手でのタグリストのチェックの結果、217個のカテゴリ×タグについて、アノテーションタグ予測を用いて追加で対応することが決定しました。また現在稼働中のタグ推薦において既に対応済みのカテゴリ×タグのうち、スタイルタグの大部分になる164個に関してアノテーションタグ予測を用いることになりました。

このモデルでの改善点として、対応タグの増加の他に、推薦対象商品の増加があります。前節の商品タグを用いたデータセットでは、正確なタグ付与率を計算できませんでした。そのため社内で行った定性評価の結果などを元に、各カテゴリ×タグの中で上位10%に当たるスコアを持つ商品に対して、タグを推薦することにしていました。この方法だと、大部分の商品にそのタグが当てはまるようなカテゴリ×タグにおいては、そのタグが推薦される商品の割合が理想より小さくなってしまうといった問題がありました。今回のモデルでは、アノテーションされたタグの割合に応じて推薦のための閾値を定めたため、上記の問題を解決しタグ推薦対象の商品を増やすことができました。

さいごに

本記事では画像認識を用いた商品タグ予測に関する取り組み、特にアノテーションデータを用いた精度改善について紹介しました。今後も検索体験の向上や商品登録の手間の軽減に向けて、機械学習、システム面ともに改善を進めていきます。

ZOZOではMLエンジニアを募集しています。以下のリンクからご応募ください。

hrmos.co

ZOZOTOWN検索の精度改善の取り組み紹介

ogp画像

こんにちは。検索基盤部の山﨑です。検索基盤部では、検索基盤の速度改善やシステム改善だけではなく検索の精度改善にも力を入れて取り組んでいます。

検索システム改善についての過去の取り組み事例は、こちらのリンクをご参照ください。

techblog.zozo.com

また、ZOZOTOWNの検索ではElasticsearchを活用しています。Elasticsearchに関する取り組み事例はこちらのリンクをご参照ください。

techblog.zozo.com

本記事では、ZOZOTOWNで近年実施した検索の精度改善の取り組み事例を紹介します。

続きを読む

ZOZOTOWNホーム画面におけるログ設計と改善サイクルの紹介

データドリブンなトップ面

はじめに

こんにちは、ML・データ部推薦基盤ブロックの宮本(@tm73rst)です。普段は主にZOZOTOWNのホーム画面や商品ページにおいて、データ活用やレコメンド改善のプロダクトマネジメントを行っております。

近年ビックデータ社会と言われる中、データドリブンという言葉をよく耳にします。ZOZOTOWNのホーム画面は、ホーム画面の各パーツごとにViewable Impression(以降、view-impと表記)を取得できるようになったことでデータドリブンな評価や意思決定が促進されました。

本記事では特にZOZO独自のview-impの設計とview-impを用いてどのようにホーム画面を改善しているかについて紹介します。データドリブンな施策の推進を検討している方に向けて、本記事が参考になれば幸いです。

本記事におけるViewable Impressionの定義

本記事ではホーム画面のview-impの定義を「ホーム画面の各パーツに対して、ユーザーが実際に目に触れて認識した閲覧ログ」とします。そのため、パーツの内容を把握できない瞬間的な表示や部分的な表示はview-impの発火と見なさず、表示時間や表示面積などの発火条件を満たしたときに発火と見なします。具体的な発火条件に関してはこの後のセクションで説明します。

続きを読む
カテゴリー