DROBEプロダクト開発ブログ

DROBEのプロダクト開発周辺の知見や考え方の共有をしていきます

OpenAI の GPT-4-vision-preview (VLM) を利用した商品画像のタグ付け

はじめに

OpenAIが Dev Day で発表したGPT-4-Vision-Previewは、画像処理と自然言語処理を組み合わせた最先端の技術です。

このモデルは、画像を理解し、その内容に基づいてテキスト情報を生成する能力を持っています。例えば、写真やイラストから物体を識別し、それに関連する説明や情報をテキストとして提供できます。この技術は、画像とテキストの間のギャップを橋渡しするものであり、多様な応用が可能です。

DROBEは、多様なファッション商品を取り扱うECサイトを運営しています。我々の挑戦の一つは、膨大な数の商品画像と説明文から、正確で有用なタグを抽出し、整理して保存しておく事です。このプロセスは従来、時間がかかり、人手に依存していましたが、GPT-4-Vision-Previewを導入する事でこの課題を解決できないかを検討しようと考えました。

DROBE の課題と GPT-4-Vision-Preview を試すモチベーション

ファッションの商品情報は多岐にわたりますが、特に検索や商品管理に重要な要素をあげると以下のようなものになります。

項目名 概要 対象カテゴリ
価格 共通
サイズ S, M, L など 共通
季節 SS, FW など 共通
無彩色、中間色、など 共通
テイスト カジュアル、綺麗め、など 共通
半袖、長袖、など トップス
シルエット ワイド、スリム、など パンツ
デザイン ストレート、など パンツ
シルエット タイト、フレア、など スカート

価格やサイズなどは商品に記載されているテキスト情報にたよるしかないですが、一方で色や袖などは画像を見る事で判断が可能になります。

テイストなどはテキストと画像を一緒に見る事で判断ができるようなものです。

GPTP-4-vision-preview を試すモチベーションは、テキストと画像を一緒に取り扱えるという事でファッションにおけるデータ構造化問題に対して有効な解決策になり得る可能性があると考えました。

ケーススタディ

以下にケーススタディの概要と結果を記載します。 利用した SDK は *1 openai-python v1.3.3 です

入力するデータ

入力としては以下のようなものを使います

商品画像

説明文

■デザイン

上品な仕上がりで高見え効果抜群のオーバーサイズカーディガン

アクセントとなる大ぶりの配色ボタンがこなれ感をアップ。

前を閉じた状態、羽織の状態どちらでもスタイリングを確立してくれる万能アイテムです。

■素材

もっちりとした手触り。しっかりとした肉感を持ち合わせた素材。

やや硬めに仕上げ、シルエットを崩さずキープしてくれます。

ポケット: なし

裏地: なし

伸縮性: なし

透け感: なし

光沢感: なし

モデル身長:165cm/Mサイズ着用

素材

表地 ポリエステル:60% アクリル:40% 裏地 ポリエステル:100

メーカー公称の色

グリーン

こういった情報を入力として利用します。 今回は問題を難しくするため、 メーカー公称の色 を グリーン ではなく ブラックとし、画像とテキストに矛盾があるデータに対するモデルの挙動を確認します。

推論周辺部分のコード

画像は以下のようなコードで base64 にして投げる方式にしました

def image_url_to_base64(url, new_width):
    try:
        # URL から画像をダウンロード
        response = requests.get(url)
        response.raise_for_status()

        # PIL を使って画像を処理
        with Image.open(io.BytesIO(response.content)) as image:
            # resize
            width, height = image.size
            aspect_ratio = height / width
            new_height = int(new_width * aspect_ratio)
            image = image.resize((new_width, new_height), Image.ANTIALIAS)
            print(f"resized to width:{new_width}, height:{new_height}")

            # バイト配列に変換
            buffered = io.BytesIO()
            image_format = "PNG"
            image.save(buffered, format=image_format)
            img_byte = buffered.getvalue()

            # Base64 にエンコード
            img_base64 = base64.b64encode(img_byte).decode()

        # 正しいフォーマットでBase64データを返す
        return f"data:image/{image_format.lower()};base64,{img_base64}"

    except Exception as e:
        return f"Error: {str(e)}"

推論する部分のコードは以下です

def extract_tag(system_prompt, category, material, description, maker_color_name, image_url):

    base64_image = image_url_to_base64(image_url, 1000)
    prompt = f"{system_prompt}\n\nカテゴリは{category}です\n\n説明文は以下です\n{description}\n\n素材は以下です\n{material}\n\nメーカー公称のこのアイテムの色は{maker_color_name}です"

    response = client.chat.completions.create(
        model="gpt-4-vision-preview",
        messages=[
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": prompt},
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": f"{base64_image}",
                            "detail": "low",
                        },
                    }
                ],
            },
        ],
        max_tokens=300
    )

    return response.choices[0].message.content

プロンプト

基本となるプロンプトは以下です。 extract_tag 関数の system_prompt 変数として入力します。

あなたはアパレルの商品管理エージェントです

与えられた説明文や画像から以下の情報を抽出してください
color, occasion, sleeve_length で定義されている中の情報を取得できなければ空文字にしてください

color
- 無彩色
- 中間色
- 寒色
- 暖色
- その他

occasion
- カジュアルマニッシュ
- きれいめマニッシュ
- カジュアルフェミニン
- きれいめ
- フェミニン
- ニュートラル
- その他

sleeve_length
- ノースリーブ
- フレンチ
- 半袖
- 7分袖
- 長袖

結果は以下の json で返してください
{
   "color": "",
   "occasion": "",
   "sleeve_length": ""
}

これを基本形として、以下のように画像を優先する旨の指示や、タグを選択した理由を言語化してもらうバージョンのプロンプトも準備しました。

色に関しては、与えられるメーカー公称の色の名前と画像の両方から判断してください
カテゴリとして与えられた商品に着目してください
画像と公称で矛盾がある場合は画像からの判断を優先してください
結果は以下の json で返してください
{
   "color": "",
   "occasion": "",
   "sleeve_length": ""
   "reason_color": "" // colorタグを選んだ理由を記載してください
   "reason_occasion": "" // occasionタグを選んだ理由を記載してください
   "reason_sleeve_length": "" // sleeve_lengthタグを選んだ理由を記載してください
}

実験結果

試行# プロンプト output
1 基本 color: 無彩色
occasion: きれいめマニッシュ
sleeve_length': 長袖
2 基本 + 画像優先の指示 + 理由の言語化 color: 寒色
occasion: ニュートラル
sleeve_length 長袖
reason_color: メーカー公称の色がブラックであるため無彩色と判断したが、画像で見ると緑のような寒色に見えるため、寒色とした。
reason_occasion: デザインから判断して、オーバーサイズカーディガンでありどちらのスタイリングにも適応可能なため、ニュートラルな装いに適していると考えられます。
reason_sleeve_length: モデルが着用しているカーディガンは長袖であることが明確なため

この商品の期待結果は以下です

color: 寒色
occasion: ニュートラル
sleeve_length: 長袖

期待結果との比較を踏まえると、画像と文章のどちらを優先するかを明確に指示しつつ、その判断結果を言語化してもらうという指示を出したパターンの方が良いという結果となりました。

今回取り組んだタスクは、画像とテキストの推論結果に基づいて最終判断を下す必要があります。これは、多段階の推論を要するタスクです。 このような多段階の推論を必要とするタスクにおいて、推論を促すようなプロンプトが性能を高めるというのはLLM を対象とした研究である *2 Large Language Models are Zero-Shot Reasoners で報告されています。

具体的には、「Let's think step by step.」というZero-shot Chain of Thought(CoT)プロンプトや、「Let's think about this logically.」などのプロンプトを使うことで多段階の推論が必要なタスクでの性能向上が確認されています。このようなプロンプトは、LLM の Zero-shot での推論能力を向上させる、推論を促すような(instructive)プロンプトとされています。 今回の reason を述べさせるプロンプトも推論を促すようなプロンプトであり、それが VLM(Vision Language Model)での Zero-shot での推論能力の向上につながった可能性があると考えています。

とはいえこのような挙動がVLMでも起こるかはまだ十分に検証されていないように思えます。今後さらに論文のサーベイや手元のデータを使った実験によって調査を進めたいと思っています。

最後に、その他いくつかの商品を試した結果を載せておきます。

image desc material maker_color_name output
image 長袖ブラウスです。ほのかな光沢と滑らかな風合いの生地を使用。斜めに切り替えたペプラムがアイキャッチ。動きのある表情を演出します。ラウンドネックがすっきとした佇まい。ドロップショルダーが柔らかな雰囲気を演出します。バックネックの涙開きもポイント。ベーシックな無地デザインで、程よく抜け感のあるスタイリングが楽しめる一枚です。

フリル・ボートネック・ペプラム・長袖・パフスリーブ・ポリエステル・サテン・通勤・オフィス・オンオフ・休日・カジュアル・フェミニン・きれいめ・大人・上品
ポリエステル100% ライトグリーン color: 中間色
occasion: きれいめ
sleeve_length: 長袖
reason_color: メーカー公称の色がライトグリーンで、画像もライトグリーンのような中間色に見えるため
reason_occasion: 説明文に「オフィス」「オンオフ」「休日」「カジュアル」「フェミニン」「きれいめ」とあるが、上品なデザインと袖やペプラムのディテールから特に「きれいめ」に分類する
reason_sleeve_length: 説明文に「長袖」とあるため
image ややゆったりとしたシルエットなので、腰まわりを自然にカバーできます◎
ナチュラル加工が施された、デイリーに着回ししやすい一枚です。
インディゴブルーカラーはシーズンやトレンドに左右されずにお召しいただけます。
ボタンとファスナーは金属のシルバーカラーを使用しています。

■素材
柔らかい綿100%デニム素材を使用。
ナチュラルな加工を施しています。

ポケット: あり
裏地: なし
伸縮性: ややあり
透け感: なし
光沢感: なし

モデル身長:cm/サイズ着用
綿100% ネイビー系 color: 寒色
silhouette: レギュラー
detail: ストレート
reason_color: 画像に写っているアイテムはインディゴブルーであり、寒色系に分類されるため。メーカー公称の色もネイビー系とのことで、これも寒色に分類される。
reason_silhouette: 説明文によるとややゆったりとしたシルエットなので、スリムでもワイドでもなく、中間にあたるレギュラーと判断。
reason_detail: 画像のパンツは裾にかけて広がりも狭くなりもせず、ストレートなシルエットが見て取れるため。
image ■デザイン
ボディラインをタイト見せてくれる着痩せ効果抜群のタートルネックニット。
袖は手の甲が隠れる長さに仕上げ、フィンガーホールを施しました。
シャツやベストのインナーとしても◎もちろん1枚着としてもご着用いただけます。
何枚あっても重宝する万能ニットです。
■素材
しっかりとした肉感でインナーのあたりの心配なし。
細畝のリブの編み地は伸縮性があり、タイトなシルエットながら柔らかな着用感です。
ポケット: なし
裏地: なし
伸縮性: あり
透け感: なし
光沢感: なし
モデル身長:167cm/Mサイズ着用
レーヨン50%、ポリエステル29%、ナイロン21% レッド color: 暖色
occasion: きれいめマニッシュ
sleeve_length: 長袖
reason_color: メーカー公称の色がレッドであり、画像にも赤色のトップスが確認できるため
reason_occasion: タートルネックニットで着痩せ効果があり、シャツやベストのインナーとしても着用可能なため、きれいめマニッシュに分類
reason_sleeve_length: 袖が手の甲を隠す長さで、フィンガーホールが施されていることから長袖と判断
image ■デザイン
リブハイネックがポイントのカットソープルオーバー。
ダンボール素材を使用しているので、ストレッチ性に優れ、軽やかな着心地がポイントです。
ボックスシルエットなので体のラインをひろいにくく、ゆったりと着ていただけます。
首元と袖口にはリブを使用しメリハリをプラスしています。
優しい印象を与える淡色展開です。

■素材
膨らみのあるダンボールカットソー素材を使用。
表面が滑らかで、柔らかな風合いが特徴です。

ポケット: なし
透け感: なし
光沢感: なし
本体:レーヨン74%、ナイロン17%、ポリウレタン9%、リブ:ポリエステル95%、ポリウレタン5% ライトブルー color: 中間色
occasion: カジュアルマニッシュ
sleeve_length: 長袖
reason_color: メーカー公称の色がライトブルーであり、画像からもライトブルーに見えるため
reason_occasion: ボックスシルエットで体のラインを拾いにくく、カジュアルながらもハイネックとリブがメリハリをつけており、マニッシュな印象を与えるため
reason_sleeve_length: 袖口にリブが見え、袖自体が長いため
image ■デザイン
オーバーサイズの片畦メランジニット。
身頃から裾までストレートシルエットなので、腰回りもゆったりとしてお召しいただけます。
サイドスリットを入れることで、大きめサイズに抜け感を取り入れています。
お袖はややパフシルエットで女子感をプラス◎

■素材
もちもちとした柔らかいメランジ糸を使用。
片畦で編み立てることで厚みをだし、暖かみのあるタッチです。

ポケット: なし
裏地: なし
透け感: なし
光沢感: なし
アクリル65%、ポリエステル32%、ポリウレタン3% カラシ color: 暖色
occasion: カジュアルフェミニン
sleeve_length: 長袖
reason_color: メーカー公称の色がカラシであり、画像においてもカラシ色、つまり暖色系の色が確認できるため
reason_occasion: オーバーサイズでリラックス感がありながら、ややパフシルエットの袖が女性らしさを加えるデザインなのでカジュアルフェミニンに該当する
reason_sleeve_length: 画像から見て手首まである袖であり、長袖に該当する

おわりに

現在 (2023年11月時点) ではまだ rate limit が厳しく、数十万枚もあるような画像を分類するタスクへの本番投入はできません。 ただしこの問題は (OpenAI が落ち着けば) 早晩解決すると思いますので、その際にはいち早く作業を自動化できると考えています。

本取り組みを通じてこの技術が商品画像からの情報抽出とそれに基づくタグ付けにおいて高い性能を発揮する事がわかりました。 これにより、商品の特徴を瞬時に識別し、顧客が求める正確な情報を提供することが可能になります。 また、スタイルやトレンドをテキストデータとして解析し、顧客の好みや市場動向を予測することもできます。

ファッション業界は常に変化し、新しいスタイルやトレンドが絶え間なく生まれています。 GPT-4-Vision-Previewのようなマルチモーダルモデルは、これらの動きをリアルタイムで捉え、ビジネスの意思決定やマーケティング戦略を支援します。 この技術の柔軟性と適応性は、ファッション業界の持続的な革新と成長を支える鍵となると考えています。

参考文献

プロダクトバックログアイテムに取り掛かるタイミングを勘違いしてたはなし

こんにちは、角田です。 今回はスクラムでの失敗談です。

PBIへ取り掛かるタイミング

みなさんは、プロダクトバックログアイテム(PBI)へ取り掛かるタイミングはいつでしょうか?DROBEでは以前は、 スプリントバックログへ移し、スプリントが始まったら でした。一見正しそうなのですが、肝心なことを見落としていたため、効率的にデリバリーできない状態になっていました。

遅かった影響範囲調査

というのも、スプリントバックログへ移しスプリントが始まった後で、影響範囲の調査や該当箇所の洗い出しをしていました。この影響範囲調査や該当箇所の洗い出しにより、スプリント内での作業時間が圧迫された結果、非効率になっていました。

ディスカバリー不足だった

この時のPBIは、ほぼ『やることリスト』化していたのが大きな原因ではないかと思っています。PBIを作る際に、開発チームとPBI作成者とのコミュニケーションが不足し、本来であればディスカバリーを行う必要があったところを、行わずにプロダクトバックログ・スプリントバックログに積んでいました。

改善したこと

これを受け、現在のDROBEでは以下のことを考えながら行動しています。

ディスカバリーを行う

影響範囲や該当箇所洗い出しなどの調査や、技術的な確認については『ディスカバリー』というで最小コストで学びを得るステップでやろうとチームに共有し、実践しています。PBI作成者にも作成時に悩むことがあれば、いつでも開発チームへ相談するよう連絡し、早い段階からコミュニケーションをとって、PBIの精査を行うようにしはじめました。

ディスカバリーとデリバリーの関係

ディスカバリーはデリバリーしようと思うアイデアやストーリーの『リスク』を軽減して学びを得る作業をスプリントに固執せず自由なタイミングで行っていきます。アイデアにユーザやビジネス的に価値があるか検証したり、技術的に実現が可能か調べたりして、リスクを軽減していきます。リスクが軽減していけば、あとはスプリントで開発を行う作業を行えばデリバリーするだけです。

前述のスプリント開始後に影響範囲の調査を行っていたのは、まだPBI的にリスクがある状態であり、スプリント開始よりも前にディスカバリーを行っていれば、開発作業だけに集中することができていました。

定期的な『次スプリントのPBI作成・精査』の促進

スプリントが始まって2,3日経ったあたりから、次のスプリントのPBIについて確認をとるようにしています。これにより、作成途中のPBIを早めに認識して、コミュニケーションをとりやすくしています。

まだまだこれから

上記の改善を行い、以前よりは効率的なデリバリーができるようになりました。とはいえ、まだまだな感じは拭えないですし、また別の課題が出てき始めています。課題が山積みだとは思いますが、以前参加したLeSSの夜明けで参加者の方とお話ししていた際、「常に課題にぶち当たる」とおっしゃってたので、こんなものだと思って、日々改善していこうと思います。

(続)ファッションにおける類似商品検索アルゴリズムの性能評価

DROBEで機械学習エンジニアをしております、藤崎です。

概要

  • ファッションアイテムを特徴づけるための情報として、画像とテキストがある。これらは異なる情報を含んでいると考えられる。
  • 類似のファッションアイテムを検索する場面で、画像とテキストの情報を両方活用することで、検索の精度を向上させることができると推測される。
  • 類似のファッションアイテムを検索するタスクで、両方の情報を活用した提案手法の性能を評価し、片方の情報だけを活用するよりも、大幅に性能が改善することを確認した。

背景・目的

  • この記事は以下の記事の続編です

tech.drobe.co.jp

以前の記事で、私たちはプロのスタイリストが作成した評価データセットを用いて、複数のアルゴリズムを類似商品検索の設定で定量的に評価しました。 その設定では、画像だけを入力とするアルゴリズムが最も優れた性能を持っていることを確認しました。

ただし、ファッションの領域においては、商品のすべての特徴を画像のみから抽出するのは困難であると感じています。その理由として、ファッション商品の情報には、色やカテゴリ、柄といった視覚的に判断できる要素だけでなく、どのような商品と組み合わせると良いのか、どのシーンでの使用が適しているのか、どんな素材かといった、視覚的には判断しづらい情報も含まれているからです。多くの場合、このような情報はテキストで表現され、画像だけでは完全に捉えるのは難しいのです。

従って、画像とテキスト情報を組み合わせることで、さらに精緻に商品から特徴を抽出できると考えています。 この考えに基づき、我々はファッションにおける商品の画像情報とテキスト情報を組み合わせる手法の開発に取り組みました。後述するように類似の手法はすでに存在していますが、我々の取り組みの特長としては、画像とテキストの両方を活用することで、単一の情報源だけを使用するよりもどれだけ性能が向上するかを定量的に示した点にあります。

関連研究

JSAI2023で発表された 画像情報及び言語情報に基づくファッションコーディネート投稿の推薦*1 が我々と似た発想の手法を提案しております。 岩井らはコーディネートの推薦の手法では画像情報のような「見た目」の情報だけでは推薦の困難性が高いとし、コーディネートに関連するタグ情報、すなわち単語情報の活用を提案しています。 具体的には以下のような処理の流れで、画像と単語情報から得られるランキングを活用しています。

ここで、

  •  \text{Image Score} : 画像特徴ベクトルを元に計算したクエリに対する類似度のスコア
  •  \text{Text Score} : テキスト特徴ベクトルを元に計算したクエリに対する類似度のスコア
  •  \text{Image Ranking} : 類似度のスコアを元に計算したランキング
  •  \text{Text  Ranking} : 類似度のスコアを元に計算したランキング
  •  \alpha : 調整可能なハイパーパラメタ

論文内の図表2を参考に作成した処理の流れ

岩井らの研究では、画像の特徴ベクトルをImage2StyleGANを用いて、また単語の特徴ベクトルをDoc2Vecを使用して取得しています。このように、彼らは画像情報とタグ情報の両方を効果的に組み合わせることで、ユーザが求めるコーディネートを推薦する手法を提案しています。しかしながら、その手法における定量的な評価手法の確立は、今後の研究の課題とされていました。

提案手法

私たちの提案法では、岩井らが採用していたランキングを用いた手法とは異なり、その前段で得られる(何かしらの距離関数を用いて算出された)スコアのベクトルを活用します。このスコアは連続的な値として表現されるため、細かな差異も詳しく捉えることができます。これに対して、ランキングベースの手法は、微小な違いによっても順位が大きく変わる可能性があります。

改めて、スコアとランキングにはそれぞれ以下のような利点が考えられると認識しています。

  • スコア:連続的な数値を持つため、細かい違いや差異を精密に捉えることができる
  • ランキング:全体的なスケールが統一されているので、異なるタイプの距離関数を使っても、適用が容易である

提案手法の処理の流れ

  •  \text{Image Score} : 画像特徴ベクトルを元に計算したクエリに対する類似度のスコア
  •  \text{Text Score} : テキスト特徴ベクトルを元に計算したクエリに対する類似度のスコア
  •  \alpha : 調整可能なハイパーパラメタ[0, 1]

この実験では、以前のブログでも使用したアルゴリズムを使用しています。具体的には、テキストの特徴ベクトルの取得にはBERTを採用しています。一方、画像の特徴ベクトルの取得には複数の手法を試しています。

そして、特徴ベクトル間の類似度の計算にはコサイン類似度を使用しています。コサイン類似度は、ベクトルの向きの近さを計算する方法であり、0から1の範囲の値を取ります。この方法は、出力が特徴ベクトルのスケールの大きさに依存しないという利点があります。

実験

アルゴリズムの説明

実験で用いた深層学習モデルは以下の通りです。(使用するモデルは以前のブログと同じです)

# モデル名 推論時の入力 DROBEが持つデータでの学習
1 ResNet-50 画像 なし
2 ResNet-50
(自己教師あり学習での学習)
画像 あり
画像10万枚で学習)
3 CLIP 画像 なし
4 BLIP-2 画像 あり
画像と自然言語の1万ペアで学習)
5 BERT テキスト なし

上記各モデルの概要は以下の通りです。

  1. ResNet-50 は教師あり学習の文脈で、画像に対してその正解のラベルを正しく推定するように学習されたモデルです。

  2. ResNet-50を自己教師あり学習の文脈で学習したモデルです。そして、この自己教師あり学習をDROBEの画像データを使って行っています。ここで自己教師あり学習とはラベルデータを使わずに、大量の未ラベルデータから特徴を学習する手法です。1.のようなラベルデータを作成するのは手間なので、ラベルを使わずに1.のような性能を得ることはメリットが大きいです。(自己教師あり学習については、日本語で沢山の技術解説記事があります。*2) 自己教師あり学習では沢山の手法が提案されていますが、SimSiamという手法を使用しました。*3

  3. CLIPは、インターネットから収集した大量(4億)*1の画像とそれに対応する自然言語の説明文のペアを使用してモデルを学習する方法です。このモデルは、入力された画像と自然言語の対応関係の良さを識別する能力を持っており、特定のタスクに対する訓練なしで、多様な画像認識タスクに適用することができます。つまり、あらかじめ訓練された知識を用いて未知のタスクを解決する能力があります。

  4. BLIP-2とはVQAタスク(入力した画像に対する質問を言語モデルに答えさせるタスク)で一定の性能を示した手法です。BLIP-2の枠組みの中に画像と言語の処理を行う深層学習モデルが含まれており、この関係性を捉えるモデル(Q-Former)を学習します。 具体的には画像と質問を投げ、正解の文章を答えられるようにするように学習することで、質問に答えるための良い画像からの特徴の抽出法を学習します。*4

    BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Modelsより

  5. BERTは言語モデルの一種で、言語モデルといえばChatGPTのような言語生成にも活用できますが、文章を受け取ってその文章の意味性に基づいて固定長のベクトルに変換することにも応用できます。5.ではこのような方法で取得したベクトルを使用しました。使用したモデルではベンチマーク*5 において多言語にも対応できるかつ性能が良いMultilingual-E5-largeを選択しました。

順位相関の確認

以下の内容は、BERTと画像を入力とするアルゴリズムとの間の順位相関、すなわちKendall's tauの結果です。

Kendall's tauは、2つのランキング間の順序の相関を評価する指標で、その値が1であれば完全な正の相関が存在し、-1であれば完全に負の相関が存在することを示します。

ここでは、BERTと画像を入力とした他のモデルとの間には、正の相関は見られるものの、その相関は非常に弱いことが確認されました。このことから、テキストから得た特徴と、画像から得た特徴とでは、アイテムの類似性をどのように認識するかが大きく異なることが考えられます。

ResNet-50 ResNet-50(SSL) CLIP BLIP
BERT 0.1566 0.1122 0.1352 0.1435

定量評価

前回と同じく評価は3万件のDROBEのデータについて行い、上記の1 ~ 5のモデルが出力する類似度のtop K個に正解データが含まれている割合を計測しました。

すなわち、指標としては以下の通りです。

 \frac{top K個の候補に正解データが含まれていた数}{テストデータの合計}

これをKが10, 100, 1000の場合で確認しました。 前回のブログでも述べたとおり、単体の情報を使った場合では以下のような結果になります。

単体の情報(画像 or テキスト)を入力した場合の性能

まず前回の結果において、画像モーダルで性能が高かったCLIPについて、提案法を適用してみます。

CLIP + BERT
先ほどの結果と比較してみると、性能が大きく向上していることが確認できます。 特にtop10の場合でCLIP単体で23%ほど( \alphaが0の場合)、BERT単体で20%ほど( \alphaが1の場合)だった指標値が31%まで向上しました。

(注 : 実験設定が変更し、データが少し変わったため、以前のブログに記載したCLIP単体の性能に少し誤差が出ています。)

次に順位相関が相対的に高かったResNet-50について確認してみます。

resnet-50 + bert
こちらも性能が大きく向上していることが確認できます。 特にtop10の場合でResNet-50単体で16%ほど( \alphaが0の場合)、BERT単体で20%( \alphaが1の場合)だった指標値が30%まで向上しました。

(注 : 実験設定が変更し、データが少し変わったため、以前のブログに記載したResNet-50単体の性能に少し誤差が出ています。)

表にまとめると以下の通りです。

単体での性能(top10) 提案法の適用によって得られた性能 最適な α
ResNet-50 約16% 約30% 0.6
CLIP 約23% 約31% 0.5

また、ResNet-50を使った場合とCLIPを使った場合で正解したidの重複は85%ほどであり、モデルが異なっていても正解できる問題が似ていることも確認しました。

定量評価の内訳

定量評価の結果から気になるのは、画像やテキストの両方を使うことでどれだけ正解するようになったのか、です。

CLIPを用いた実験において、正解したidを検証した結果の内訳は以下のようになり、16%のケースにおいては、画像とテキストの情報を組み合わせることで初めて正解するようになることが確認されました。これは、画像だけやテキストだけの情報では不十分であり、両方の情報を組み合わせることではじめて充足することができることを示しています。

  • 正解したidの内訳
両方のtopKに入っている 画像のtopKにしか入っていない テキストのtopKにしか入っていない どちらのtopKにも入っていない
0.394% 0.289% 0.157% 0.16%

定性評価

定量評価では、top K個の候補に正解が含まれているかだけに注目していました。

すなわち、正解以外のtop K個の候補の類似性が考慮されていません。そこで次にtop K個の全体感を評価するために可視化を行い、定性評価を行います。 定性評価では複数の観点について分析しました。 具体的には、ある商品と同じ カテゴリ、色、丈、柄 の商品が正しくtop K個内に出現させることができたかを確認しています。

表中の表現の目安は以下の通りです。

  • 高 : 10個中7個以上 で商品に対して同じ観点のものを検出できた
  • 中 : 10個中4個 ~ 6個 でクエリに対して同じものを検出できた
  • 低 : 10個中3個 以下 でクエリに対して同じものを検出できた
CLIPのみ BERTのみ 提案手法(CLIP + BERT)
カテゴリに対するロバスト性
色に対するロバスト性
丈に対するロバスト性
柄に対するロバスト性

定性的な評価から、提案手法ではtopKの出力において「相対的に」視覚的な統一感が低いという結果になりました。

具体的には、画像情報を単独で用いる場合、色や柄などの視覚的な要素における一貫性や統一感が見られた一方、テキスト情報のみを用いる場合には、雰囲気やテイストの一貫性が感じられました。しかし、これらの情報を組み合わせて使用する提案手法では、そのような統一感が損なわれてしまいました

定量的には提案手法が優れた結果を示しているにも関わらず、実際にこれを目にするユーザーは、出力が「ランダム」と感じられる可能性があることが懸念されます。今後は定量的な向上だけではなく、ユーザーがシステムの出力をどう認識するかという側面も考慮する必要があることを示唆しています。

おわりに

画像とテキストの類似度のスコアを組み合わせることで、ファッションにおける類似検索の精度を向上させる手法の有望性を確認しました。従来の方法では、画像やテキストの情報を独立して使っていました。

しかし、私たちのアプローチでは、これら画像やテキストの情報を組み合わせることで、より総合的な視点からの類似検索を実現し、その結果として検索精度の向上を達成しました。 今後の議論の方向性としては、出力の統一感をどのように保証するかだと認識しています。

参考文献

*1:, [Online]. Available: https://www.jstage.jst.go.jp/article/pjsai/JSAI2023/0/JSAI2023_2L6GS303/_article/-char/ja/

*2:“2020年超盛り上がり!自己教師あり学習の最前線まとめ!,” Qiita, Dec. 01, 2020. https://qiita.com/omiita/items/a7429ec42e4eef4b6a4d (accessed Oct. 14, 2023).

*3:理由としては、ベンチマークでの性能が高いこと。“Benchmarks — lightly 1.4.20 documentation.” https://docs.lightly.ai/self-supervised-learning/getting_started/benchmarks.html (accessed Oct. 14, 2023). 低いバッチサイズでも良い性能となりそうなことです。X. Chen and K. He, “Exploring Simple Siamese Representation Learning,” arXiv [cs.CV], Nov. 20, 2020. [Online]. Available: http://arxiv.org/abs/2011.10566

*4:J. Li, D. Li, S. Savarese, and S. Hoi, “BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models,” arXiv [cs.CV], Jan. 30, 2023. [Online]. Available: http://arxiv.org/abs/2301.12597

*5:https://huggingface.co/spaces/mteb/leaderboard

ファッションにおける類似商品検索アルゴリズムの性能評価

DROBEで機械学習エンジニアをしております、藤崎です。

概要

  • 類似商品検索の基盤となる複数の特徴抽出アルゴリズムについて、DROBEの保有するデータで評価した
  • 定量評価によると、画像単体を入力とする ResNet-50(自己教師あり学習)とCLIPの性能が高かった
  • 定性評価によって、取り扱うモーダルの違いによる各モデル出力の顕著な差異が確認できた

背景・目的

小売において、商品の在庫は無数に存在しています。そのため、消費者やサービス提供者が商品に紐づく情報(画像、商品の説明文など)を解釈して、特定の商品と類似したアイテムを人手で行うのは困難です。

この課題を解決するために、機械学習手法の活用が注目されています。 機械学習を用いた処理の流れは、

  1. 商品に紐づく情報を適切に 「要約」 し、
  2. 1.で 「要約」 した商品情報同士が似ているものを探してくる

という以下の図のような流れです。

ある無地の黒Tと類似の商品を見つけるイメージ

図ではこの要約後の情報をベクトルとしていますが、これは商品情報のテキストや画像などの、そのままだと情報量が多く取り扱いが難しい情報を圧縮したものです。 特に1の工程で機械学習のうち深層学習モデルの活用が考えられます。なぜなら、深層学習モデルは入力された情報から適切な特徴の抽出を得意としているからです。

このような類似商品を手早く特定する手法の応用として、例えば以下が考えられます。

  • 消費者は、気に入った商品と類似した、より低価格な商品を即座に探すことができる。
  • サービス提供者は、ユーザーが購入を検討している商品と類似し、より利益率が高い商品を迅速に特定できる

本ブログでは、ファッションの設定において有効な商品情報の要約手法を探求し、プロのスタイリストによって作成したデータセットを使って、機械学習の手法のうち、自然言語や画像を処理する深層学習モデルの性能を検証しました。 この技術を使うことで、消費者とサービス提供者の双方にとって価値のある機能を提供することを目指します。

実験

実験の概要

実験ではプロのスタイリストが作成した評価データセットを使って、深層学習モデルの性能を検証しました。

この評価データセットは、ある商品と、類似度の高い商品がペアになっています。 このため深層学習モデルは与えられた商品に対して、評価データセットで示された類似商品を抽出して来ることが求められます。

実験で用いた深層学習モデルは以下の通りです。

# モデル名 推論時の入力 DROBEが持つデータでの学習
1 ResNet-50 画像 なし
2 ResNet-50
(自己教師あり学習での学習)
画像 あり
画像10万枚で学習)
3 CLIP 画像 なし
4 BLIP-2 画像 あり
画像と自然言語の1万ペアで学習)
5 BERT テキスト なし

上記各モデルの概要は以下の通りです。

  1. ResNet-50 は教師あり学習の文脈で、画像に対してその正解のラベルを正しく推定するように学習されたモデルです。

  2. ResNet-50を自己教師あり学習の文脈で学習したモデルです。そして、この自己教師あり学習をDROBEの画像データを使って行っています。ここで自己教師あり学習とはラベルデータを使わずに、大量の未ラベルデータから特徴を学習する手法です。1.のようなラベルデータを作成するのは手間なので、ラベルを使わずに1.のような性能を得ることはメリットが大きいです。(自己教師あり学習については、日本語で沢山の技術解説記事があります。*1) 自己教師あり学習では沢山の手法が提案されていますが、SimSiamという手法を使用しました。*2

  3. CLIPは、インターネットから収集した大量(4億)*1の画像とそれに対応する自然言語の説明文のペアを使用してモデルを学習する方法です。このモデルは、入力された画像と自然言語の対応関係の良さを識別する能力を持っており、特定のタスクに対する訓練なしで、多様な画像認識タスクに適用することができます。つまり、あらかじめ訓練された知識を用いて未知のタスクを解決する能力があります。

  4. BLIP-2とはVQAタスク(入力した画像に対する質問を言語モデルに答えさせるタスク)で一定の性能を示した手法です。BLIP-2の枠組みの中に画像と言語の処理を行う深層学習モデルが含まれており、この関係性を捉えるモデル(Q-Former)を学習します。 具体的には画像と質問を投げ、正解の文章を答えられるようにするように学習することで、質問に答えるための良い画像からの特徴の抽出法を学習します。*3

    BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Modelsより

  5. BERTは言語モデルの一種で、言語モデルといえばChatGPTのような言語生成にも活用できますが、文章を受け取ってその文章の意味性に基づいて固定長のベクトルに変換することにも応用できます。5.ではこのような方法で取得したベクトルを使用しました。使用したモデルではベンチマーク*4 において多言語にも対応できるかつ性能が良いMultilingual-E5-largeを選択しました。

定量評価

評価は3万件のDROBEのデータについて行い、上記の1 ~ 5のモデルが出力する類似度のtop K個に正解データが含まれている割合を計測しました。

例えば、

ID番号1の商品に対して、類似度の高い商品がID999とした場合、このID999の商品がID番号1の商品に対して計算された類似度ランキングでtop 10個以内に入っているかを確認します。入っていれば、そのペアは正確に識別されたと評価されます。

すなわち、指標としては以下の通りです。

 \frac{top K個の候補に正解データが含まれていた数}{テストデータの合計}

これをKが10, 100, 1000の場合で確認しました。

定量評価の可視化

結果はかなり均衡しています。

top 10では DROBEのデータで学習した2.と、 DROBEのデータで学習していない3.がほぼ同率となり、DROBEのデータに対するCLIPの汎化性能*5の高さを確認できました。

定性評価

定量評価では、top K個の候補に正解が含まれているかだけに注目していました。

すなわち、正解以外のtop K個の候補の類似性が考慮されていません。そこで次にtop K個の全体感を評価するために以下のような可視化を行い、定性評価を行います。

以下のように、商品(左上)に対してどのような商品が類似商品と挙げられたかをtop1 ~ top10まで可視化します。(著作権の関係でモデルが写った画像は例示できないので、物撮りの写真を掲載しております)

定性評価で使った画像のイメージ

このような画像を用いて複数の観点について分析しました。 具体的には、ある商品と同じ カテゴリ、色、丈、柄 の商品が正しくtop K個に出現させることができたかを確認しています。

表中の表現の目安は以下の通りです。

  • 高 : 10個中7個以上 で商品に対して同じ観点のものを検出できた
  • 中 : 10個中4個 ~ 6個 でクエリに対して同じものを検出できた
  • 低 : 10個中3個 以下 でクエリに対して同じものを検出できた
#1 #2 #3 #4 #5
カテゴリに対するロバスト性
色に対するロバスト性
丈に対するロバスト性
柄に対するロバスト性

特に差が顕著だった結果について補足します。

  • 入力ドメインへの依存性

定量評価には顕著な差が表れていませんでしたが、5.の手法の入力が自然言語であることの限界性が露呈しました。 具体的には5.の手法では多くの結果で、類似の色やカテゴリを抽出に課題があることが確認されました。 そもそも商品説明文には商品そのものに関する説明だけでなく、どのようなアイテムと合わせるべきかなど 「ノイズ」 も混じっているのでそのあたりの判別が難しいことが示唆されます。

  • 画像オーグメンテーションの影響

画像を入力とする2.でも色に対する相対的な精度の低下が確認されました。 しかし、これは学習データにバリエーションを出すために行う画像オーグメンテーション( = 学習データの水増し)の影響が大きい可能性があります。SimSiamの論文では色の変化に対するロバスト性を高めるために 強い Color Jitter*6を適用しています。これにより、色の違いに鈍くなってしまったことが示唆されます。

color jitterの例

おわりに

今回は類似商品検索の基盤のアルゴリズムについてさまざま探索しました。 定量・定性評価の結果としてDROBEのデータで自己教師あり学習の枠組みで学習したResNet-50や、CLIPの性能が最も良好でした。これらのモデルの性能はもっと大量のDROBEのデータを使って学習することで性能をさらに向上させることができると考えています。 引き続き実験を重ねていきます。

参考文献

*1:“2020年超盛り上がり!自己教師あり学習の最前線まとめ!,” Qiita, Dec. 01, 2020. https://qiita.com/omiita/items/a7429ec42e4eef4b6a4d (accessed Oct. 14, 2023).

*2:理由としては、ベンチマークでの性能が高いこと。“Benchmarks — lightly 1.4.20 documentation.” https://docs.lightly.ai/self-supervised-learning/getting_started/benchmarks.html (accessed Oct. 14, 2023). 低いバッチサイズでも良い性能となりそうなことです。X. Chen and K. He, “Exploring Simple Siamese Representation Learning,” arXiv [cs.CV], Nov. 20, 2020. [Online]. Available: http://arxiv.org/abs/2011.10566

*3:J. Li, D. Li, S. Savarese, and S. Hoi, “BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models,” arXiv [cs.CV], Jan. 30, 2023. [Online]. Available: http://arxiv.org/abs/2301.12597

*4:https://huggingface.co/spaces/mteb/leaderboard

*5:DROBEのデータで陽に学習していないと考えられる

*6:https://pytorch.org/vision/main/auto_examples/transforms/plot_transforms_illustrations.html#colorjitter

GPT-3.5に画像分類タスクを解かせる

DROBEで機械学習エンジニアをしております、藤崎です。

概要

  • ファッションの分野ではトレンドの変化とそれに伴う属性情報の変動に対応するため、画像分類AIモデルを頻繁にアップデートする必要性がある。
  • しかし、既存の画像分類AIモデルのアップデートには、労力と時間が掛かる。
  • 様々なタスクの遂行能力が高いGPT-3.5に画像処理能力を付与し、画像分類タスクに挑戦した。
  • 既存の研究(ex. HuggingGPT)と違って、GPT-3.5自体が画像分類の推論を行う点がユニークである。
  • 実験からは有望な結果が得られた。
  • 今後の性能向上はプロンプトを工夫するなど、比較的簡単な方法で達成できる可能性がある。

背景・目的

ファッションの業界は、トレンドの変化が早く、新しいスタイルが次々と提案されます。それに伴い、スタイルに付随する属性情報も常に変化しています、それに応じてモデルの衣服着用画像から、そこに映るラベル(=属性)情報を抽出する画像分類AIモデルもトレンドが変化すればアップデートすることが求められます。

ところが、画像分類AIモデルをアップデートするとなると、データセットの再構築、モデルの再学習、評価のプロセスなど、多大な労力と時間が必要となります。

このような背景から、トレンドの変化に柔軟に対応でき、かつ上記の労力を削減できる画像分類AIモデルの構築に対するニーズが高まっています。例えばCLIPのようなモデル(後述)は、多様なラベルの推定が可能であり、これらのニーズをある程度満たすものとして注目されています。しかし、従来の画像分類AIモデルに比べ、性能面での課題がまだ残っています

そこで、今回の実験での目的は、自然言語タスクの遂行能力が高いGPT-3.5に画像処理機能を与え、画像分類タスクを解かせる手法の有望性を確認することです。これにより、トレンドの移り変わりに柔軟に対応できる画像分類AI作成の土台になると考えています。

関連研究

  • 画像分類手法について

画像分類に関して、教師あり学習とOpenAIが開発したCLIPの2つのアプローチに注目します。

教師あり学習は、特定のラベルを持つ有限個のデータセットでモデルを学習する方法です。例えば、3クラス(ex. 犬、猫、鳥)の動物の画像を分類するAIを作成したい場合、それぞれのクラスに属する画像を収集し、各画像に対してラベル(ex. 犬、猫、鳥)を付けてモデルを学習します。この学習が完了すると、モデルはこれら3つのクラスを識別できるようになります。 しかし、教師あり学習の限界は明らかです。この方法では、学習データに含まれないクラス(ex. 象)の画像は識別できません。これは、教師あり学習が有限個のラベルでしか学習できないためです。

一方、CLIPは、インターネットから収集した大量(4億)*1の画像とそれに対応する自然言語の説明文のペアを使用してモデルを学習する方法です。入力された画像と自然言語の対応関係の良さを識別する能力を持っています。またCLIPは公開されているので、多くの開発者がこれを利用しています。 CLIPの利用例を挙げますと、ユーザーがCLIPに画像とラベルの候補(ex. 犬、猫、鳥)を入力すると、CLIPはどのラベルが画像に最も適しているかを判定します。 さらに、CLIPのもう一つの利点は、ラベルの候補の数に制限がないことです。ある時は「犬、猫、鳥」という3つのラベルで試行を行い、次には「犬、猫、鳥、象、トラ」といったように、ラベルを追加したり変更したりすることが容易にできます。これにより、CLIPは多様なラベルに対して汎用的な予測を行うことが可能となっています。

しかし、重要な違いとして、基本的には教師あり学習の方がCLIPのような汎用的な画像分類モデルと比較して性能が高いです。

性能 汎化性能
教師あり学習
CLIP 中 ~ 高
  • GPTについて

GPTはLLM(Large Language Models、大規模言語モデル)の一種であり、大量の文書データを元に学習され、その結果、一般常識を問うタスク、翻訳、要約など、自然言語を入力とした多様なタスクを効率的に処理する能力を有しています。2023年10月時点で、画像処理能力も備えたモデルがChatGPTには順次公開され、更なる多様な応用が期待されていますが、まだAPIとしては提供されていません。*2

最新のGPT-4はその推論能力において、特定のタスクに於いては人間と比較しても遜色がないとされています。例として、日本の医師国家試験に合格するレベルの能力があることが報告されています*3

これらのモデルが高いパフォーマンスを発揮する理由として、多段階の学習プロセスが挙げられます。これは、膨大な量のテキストデータに基づいて初期の学習を行った後、人間の専門家がモデルに対してさらに具体的、かつ、精緻な指導を行うことで、その性能を引き上げています。これにより、GPTは非常に高い精度と汎用性を持ったツールとして、多岐にわたる分野での応用が可能となっているのです。

  • LLM(Large Language Model)を使った画像分類タスクの実行

LLMには画像情報を処理する機構がないため、LLMと外部の画像認識モデルを組み合わせ、画像処理の能力を付加するアイデアが存在しています。しかし、現在のところ、多くの研究がLLMを「指揮官(コントローラー)」の役割に徹しさせ、与えられた入力に対してどの画像認識タスクを解かせるのかを判断させる役割に徹しさせている認識です。

例として、Hugging GPT*4はLLMを中心に据え、ユーザーのリクエストに応じて複数のAIタスクを解決するフレームワークを提供しています。これにおいて、LLMはタスクの計画、モデルの選択等を担当しています。そのため、最終的に推論を行うのは、LLMによって選択された具体的な画像認識モデルとなります。

一方、提案手法においては、画像情報を処理するAIモデルを効果的に活用しながら、最終的な推論はLLM自体が行う、というアプローチを採っています。このアイデアは、新規性があると考えられます。

提案手法

画像分類のタスクにおいて、LLMの推論能力を活用できないかを検証します。

具体的な処理の流れは、以下の通りです。

  1. GPT-3.5でCLIPに入力すべきラベルの候補を作成する
  2. CLIPは画像と1.で作成したラベルの候補を入力して各ラベルのもっともらしさを計算する
  3. GPT-3.5は2.で得られたもっともらしさを元に次のラベルの候補を作成する
  4. 2 ~ 3.をくり返す(本実験では5回)
  5. GPT-3.5は1.~4.の全てのやりとりの履歴を踏まえてもっともらしいラベルを一つ回答する

GPT-3.5にはCLIPから得られたもっともらしさを勘案して、臨機応変に次の質問にうつっていく必要があります。 つまり、GPT-3.5は自身が持つ知識を前提として、CLIPというツールを駆使しながら、様々な観点について網羅的に画像から情報抽出を行なっていきます。 最終的にはGPT-3.5がCLIPを通して集めた情報を元に、自身の知識を活用して画像に何が映るのかを言い当てます。

  • CLIP + GPT-3.5のやりとりのイメージ
GPT-3.5の質問 CLIPの回答
1回目のやりとり 脊椎動物ですか?無脊椎動物ですか? 脊椎動物の確率は75%です。無脊椎動物の確率は25%です。
2回目のやりとり 魚類ですか?両生類ですか?爬虫類ですか?鳥類ですか?哺乳類ですか? 魚類の確率は10%です。両生類の確率は10%です。爬虫類の確率は10%です。鳥類の確率は10%です。哺乳類の確率は60%です。
: : :
n回目のやりとり 犬ですか?猫ですか? 犬の確率は40%です。猫の確率は60%です。
  • 図を使った処理の流れの説明

    • Interaction Phase(上記説明の1~4)ではCLIP + GPT-3.5が何度もやりとりをします。
    • Classification Phase(上記説明の5)ではInteraction Phaseで収集したCLIP + GPT-3.5のやりとりを踏まえて、画像に何が写っていそうかをGPT-3.5が判断します。

処理の流れ

実験

  • 設定

提案した画像分類手法の有効性を検証するために、公開データセットCIFAR-10の評価データから300枚の画像をランダムにサンプリングしました。CIFAR-10は、飛行機、自動車、鳥、猫、鹿、犬、カエル、馬、船、トラックといった10種類のラベルが付与されたデータセットです。

  • 試行1ではベースラインとしてCLIPのみを使用してCIFAR-10の10個のラベルの候補と画像を入力し、画像がどのラベルであるかを判定させました。

  • 次に、試行2では、CLIP + GPT-3.5を使用してClassification Phaseでクラス名が既知の設定で実験しています。これは、Classification Phaseが分類の出力がCIFAR-10の10個のラベルに絞られており、そのラベル名も知っている設定です。

  • 試行3では、CLIP + GPT-3.5を使用してClassification Phaseでクラス名が未知の設定で実験しました。これは、Classification Phaseが分類の出力がCIFAR-10の10個のラベルに絞られておらず、そのラベル名も知らない設定です。

これらの評価を通じて、CLIPとGPT-3.5を組み合わせた提案手法が、画像分類タスクにおいてどの程度の性能を発揮するのか、その有効性を明らかにすることを目指しています。

  • 結果

試行3において、他の設定に比べて性能が低下する結果となりました。しかし、クラス名を明示的に指示しないこの設定でも、一定の性能を示しています。これは、提案手法の有望さを示しており、後述するような考察を踏まえて改良することで性能向上が見込めると考えています

# 内容 Accuracy
試行1 CLIP単体 88.9
試行2 提案手法(Classification Phaseでクラス名が既知の設定) 84.3
試行3 提案手法(Classification Phaseでクラス名が未知の設定) 80.4
  • 考察
Phase 内容 内容の補足 改善案
Interaction Phase 収集した履歴の重要性 履歴中の情報を全てふんだんに使っており、履歴を活用できている。

例えば試行3の設定において、Interaction Phaseでの最終的なやり取りでは自動車であることがもっともらしいと言われながら、Classification Phaseではトラック予想し、正解していた。
Interaction Phase 良くないラベルの候補の生成 提案法では早い段階で具体性の高い質問に移行してしまったことが見られた。

例えば試行2, 3の設定などで序盤の質問で特定のジャンル(ex. 家電)を問うような質問に移行してしまっており、CIFAR-10の設定では問うべき動物や乗り物に関する質問に移行できなかった。
CLIPからの回答でもっともらしさが均衡していれば、より抽象的な質問に戻るなどのプロンプトの工夫が必要。
Interaction Phase 適切な回数のInteractionの実行 提案法ではまだ肝心な質問に移行する前にClassification Phaseにうつってしまっていた。 Classification Phaseに移るべきかを評価する仕組みの導入が必要。
Classification Phase 最終出力の形式 ラベルとして単語を出力して欲しいが、文章を生成してしまうことが見られた。 出力は単語であることをデモンストレーションによって見せる(ex. few-shot learning)などのプロンプトの工夫が必要。

終わりに

本ブログでは、GPT-3.5に画像処理能力を付与し、汎化的な画像分類能力を開発するための実験を行いました。期待の持てる結果が得られましたがこの試みの過程で、様々な改善点が明らかになりました。それらの改善点の多くは、プロンプトの工夫など、比較的簡易な方法で性能向上が期待できるものが多いと考えています。

今回は触れることができませんでしたが、新しいトレンドや変化にどれだけ迅速にGPT-3.5が適応できるかという点も今後検証していきます。 実験で得られた発見は特に、ファッション業界のように、画像分類AIの定期的な更新が求められる分野で、価値があると考えています。これらの知見をもとに、より高品質な画像分類モデルの開発を目指し、引き続き実験を重ねていく所存です。

参考文献

*1:A. Radford et al., “Learning Transferable Visual Models From Natural Language Supervision,” arXiv [cs.CV], Feb. 26, 2021. [Online]. Available: http://arxiv.org/abs/2103.00020

*2:2023/10より画像機能がChatGPTでは公開されている https://openai.com/blog/chatgpt-can-now-see-hear-and-speak

*3:J. Kasai, Y. Kasai, K. Sakaguchi, Y. Yamada, and D. Radev, “Evaluating GPT-4 and ChatGPT on Japanese medical licensing examinations,” arXiv [cs.CL], Mar. 31, 2023. [Online]. Available: https://github.com/jungokasai/IgakuQA

*4:Y. Shen, K. Song, X. Tan, D. Li, W. Lu, and Y. Zhuang, “HuggingGPT: Solving AI tasks with ChatGPT and its friends in Hugging Face,” arXiv [cs.CL], Mar. 30, 2023. [Online]. Available: https://github.com/microsoft/JARVIS

PHP Conference Japan 2023で登壇します

こんにちは。角田です。 DROBEは2023年10月8日(日)に開催される、PHP Conference Japan 2023で登壇します。

2000年より年に1回開催されている日本最大のPHPのイベントです。初心者から上級者まで幅広くたくさんの参加者が蒲田に集結します。今回の登壇もとてもバラエティに富んだ内容になっており、あと数日ですがワクワクが止まりません!

登壇内容

『25分で理解する!Symfonyの魅力とその実践的活用法』というタイトルで、Symfonyの魅力についてお話ししていきたいと思います。限られた時間ですが、しっかりお伝えできればと思います。

fortee.jp

ブース出展もします

今回はゴールドスポンサーとして協賛しており、ブースも出展いたします。ブースにお越しの方にはプレゼントをご用意しております。 登壇後のご質問などにもお答えできると思いますので、ぜひお立ち寄りください!

PHP Conference Japan 2023について

phpcon.php.gr.jp

Vision-Language Modelsを使った商品のトップ画像選定

 

DROBEで機械学習エンジニアをしております、藤崎です。

背景

商品のトップ画像はユーザーへの最初のタッチポイントとして機能し、購入を促進します。そのため、適切なトップ画像の選定は重要です。しかしながら、この選定は現在、手動に依存しており、複数の商品画像から最も効果的なものを選ぶ作業は、多大な時間と労力を消費しています。

商品の品揃えが拡大する中で、この作業のコストは切実な課題となっています。そこで、機械学習技術を用いてトップ画像の選別を自動化するアプローチを検討しています。これにより、商品登録時間の削減や業務の効率向上が期待されます。

本記事では、商品のトップ画像の自動選別に焦点を当て、画像分類手法を調査します。これにより、商品のトップ画像の自動選定を効果的に実行し、効率と精度を同時に向上させることを目指します。

結論

  • 本タスクでのVision-Language Modelsでの画像分類の性能は低かった。
  • Promptは長い文章とした方が性能が良いことが示唆された。
  • 統計量に注目することで、分類が困難な場合を特定できそうなことが示唆された。
  • Vision-Language Models + 単純な分類モデルで誤分類が少ない推論パイプラインの有望性が示唆された。

手法の検討

商品のトップ画像の選別は分類タスクなので、これを実現する手段としては、教師あり学習や基盤モデル(Vision-Language Models)がざっと候補に上がると思います。

教師あり学習は、学習段階で画像に対応したクラスラベルを用いてモデルを訓練します。このモデルは、推論段階で新たな画像が与えられた際に、学習時に設定されたクラスの中から、その画像が属する最も可能性の高いクラスを予測します。

一方、Vision-Language Modelsは、画像とテキストを同時に解析し、これらの複数のモダリティ間の関係を評価する能力を持つモデルです。このモデルを利用すると、特定の画像に対して複数の自然言語文を提示し、それぞれの文が画像とどれだけ類似しているかを判定することが可能になります。これにより、コンテキストに富んだ分類が実現できます。これは、教師あり学習があらかじめ設定されたクラスラベルを基に分類を行うのに対して、Vision-Language Modelsは、より動的で柔軟な分類手法であるという特長があります。

教師あり学習や基盤モデル(Vision-Language Models)のそれぞれの特徴はざっと以下のように認識しています。

  精度 データ作成コスト Zero-shot性能 デプロイコスト 推論コスト
教師あり学習(ex. ResNet, ViT) 中 ~ 高
基盤モデル(Vision-Language Models) 中 ~ 高

それぞれの列の説明としては以下のとおりです。

  • 精度: モデルが分類タスクをどれだけ正確に実行できるか。
  • データ作成コスト: 訓練データを収集、整理、アノテートするのに必要なコスト。
  • Zero-shot性能: 未見のデータに対してモデルが発揮できる精度。
  • デプロイにかかるコスト: モデルを実際の環境にデプロイするための時間的、金銭的コスト。
  • 推論コスト : 推論にかかる金銭的なコスト。

上記表のポイントとして、

教師あり学習モデルは一般に高い精度を達成することが期待できます。しかしながらZero-shot性能に制限があるため、特定のタスクに特化させるためには自社でデータを収集・整理し、モデルを学習する必要がありコスト(時間的、金銭的)がかかる可能性があります。

一方、Vision-Language Models(基盤モデル)の場合、教師あり学習モデルに比べて精度が若干劣る可能性はありますが、Zero-shot性能に優れているという利点があります。これは、公開されているモデルをそのまま使用しても、多様なタスクに対してある程度の性能を発揮するため、データの収集とアノテーション、モデルの学習といったコスト(時間的、金銭的)を節約できる可能性があると考えています。

そのため、今回はより実用性の高いVision-Language Modelsを対象に実験しました。

実験

実験概要

今回はVision-Language Modelsのうち、GCPのMultiModalEmbeddingModelを使用しました。

分類モデルの基本的な処理の流れは以下のとおりです

    1. 候補となる全ての  prompt \in P のembeddingを作成する
    1. ある画像  image \in I のembeddingを作成する
    1. 1)と2)の内積をとり、argmaxを計算する。
    1. ある画像  image \in I のクラスが確定する

ここで、 prompt とは教師あり学習の枠組みでいうところのクラスを指し、今回の設定では具体的に以下のようなものを指します。

  1. 該当画像はモデルがアイテムを着用し、全身が写っている画像か?
  2. 該当画像はモデルがアイテムを着用しているが、モデルの体の一部しか映っていない画像か?
  3. 該当画像はアイテムのみが写ったモデルが着用していない、物撮りの画像か?

実験では約900画像に対して推論し、その性能を評価しました。

実験1 : 単純なPromptを投げる

素朴に、 prompt を以下とし、評価しました。

(このpromptはGPT-4が作成しました。)

  内容 prompt
#1 モデルがアイテムを着用し、全身が写っている画像か? The entire human body from head to toe is captured in the image.
#2 モデルがアイテムを着用しているが、モデルの体の一部しか映っていない画像か? Only a part of the human body is captured in the image.
#3 アイテムのみが写ったモデルが着用していない、物撮りの画像か? No human is captured in the image.

結果は以下の通りです。

  mean accuracy mean precision
試行1 0.46 0.39

ここで、

  • mean accuracyは複数のクラスがある分類タスクにおいて、それぞれのクラスでの正確さ(accuracy)を平均した値です。
    • また、accuracy とは各クラスでの正解数をそのクラスのサンプルの合計数で割った値です。
  • mean precisionは各クラスにおいて計算された適合率(precision)を平均した値です。
    • また、precision とは正と予測されたサンプルのうち、実際に正であったサンプルの割合です。

この結果を見ると性能はあまりよくないことがわかります。

以下らについてもう少し深掘りしてみます。

  • promptの分量の精度への影響
  • 間違った場合の考察

実験2 : Promptを工夫してみる

promptの分量の精度への影響について見てみます。

もしかしたら文章ではなくキーワードだけの方が性能が高いかもしれませんし、あるいは反対に長文にした方が性能が高いかもしれません。

promptは補足に掲載しますが、結果は以下の通りでした。

試行1 : ベースライン

試行2 : ベースラインからキーワードだけ抽出したもの

試行3 : ベースラインを長文化したもの

試行4 : ベースラインを長文化し、キーワードだけ抽出したもの

試行5 : 試行4のprompt間で意味が重複したキーワードらを排除したもの

  mean accuracy mean precision
試行1 0.46 0.39
試行2 0.15 0.43
試行3 0.64 0.32
試行4 0.69 0.39
試行5 0.22 0.28

この結果を踏まえると、promptにはなるべく多くのキーワードを盛り込んだ方が良さそうということがわかります。

しかし、ここで最もaccuracyが高い試行4ではpromptの中身をよく見てみると、異なるprompt間で似たキーワードを含んでいました。

そのため試行5では、そのような意味が重複した単語を排除しました。ただ不思議なことにこの試行では性能が大きく下がるという結果になっています。

実験3 : 間違った分類を回避するには?

ここで間違った問題についてもう少し深掘りしてみます。

仮説として、正解する場合は自信を持って正解するということです。すなわち以下の3)で特定のクラスだけ相対的に大きい値となることです。

逆に正解する場合は全てのクラスが同じような値になるのではないかということです。

    1. 候補となる全ての  prompt \in P のembeddingを作成する
    1. ある画像  image \in I のembeddingを作成する
    1. 1)と2)の内積をとり、argmaxを計算する。
    1. ある画像  image \in I のクラスが確定する

この差異は標準偏差で炙り出せるのではないでしょうか。

すなわち、正解する場合は標準偏差が大きく、失敗する場合は標準偏差が小さくなるということです。

実際に計算してみます。

  mean accuracy mean precision 正解した場合の3)工程での標準偏差 失敗した場合の3)工程での標準偏差
試行1 0.46 0.39 0.00421 0.0043
試行2 0.15 0.43 0.00719 0.00601
試行3 0.64 0.32 0.00463 0.00373
試行4 0.69 0.39 0.00616 0.00594
試行5 0.22 0.28 0.00513 0.00547

計算の結果、有望な性能を示したケースでは、正解時の3)の工程での標準偏差が、失敗時に比べて大きくなる傾向が確認されました。

試行4のデータについて頻度分布をヒストグラムで可視化し、分布の特徴を詳しく分析します。もし、正解と失敗の分布がはっきりと乖離している場合、特定の標準偏差を閾値として採用し、その閾値を下回る場合には、その画像の分類を避けるアプローチが有効であると考えられます。

 

試行4の標準偏差のヒストグラム

しかし、ヒストグラムの解析結果から、二つの分布がある程度重複していることが確認できます。これは、単純な閾値設定による分類の制限が難しいことを示唆しています。

それでも、3)工程の出力をもとに、「分類が成功するか、失敗するか」を判定する2値分類タスクを考えました。この方法により、分類が困難なケースを特定し、それらのケースに対する推論を避ける、あるいは特別に処理するという戦略を採用できます。

この分類モデルとしてXGBoostを使った2値分類タスクの結果は、accuracyが0.79、precisionが0.81となりました。これにより、分類が困難なケースを特定し、それを回避または別途処理できる可能性が示唆されます。言い換えると、特定の画像が誤分類される可能性を事前に排除または低減できる可能性があるということです。

Vision-Language Modelsによる分類が信頼できそうかを判定する分類モデルを活用した場合の処理の流れ

 

まとめ

今回の分析から、Vision-Language Modelsを単独で用いた場合には、今回の設定では実用的に使えないという結論になりました。しかし、性能向上の余地が存在することも明らかになりました。

例えばpromptの工夫や最適化によって、モデルの性能向上が期待されるということです。特に、promptの長文化(具体性の向上)によって、より適切な画像分類が可能となることが示唆されました。

さらにVision-Language Modelsを他の分類モデルと組み合わせて使用するアプローチも有望です。これにより、全体として誤分類のリスクを減少させることが可能です。

引き続き、これらのアプローチを深掘りし、検証を進めていく予定です。

参考文献

補足

- 実験2で用いた  prompt (このpromptはGPT-4が作成しました。)

  内容 prompt(試行1) キーワード(試行2) 長文prompt(試行3) キーワード(試行4) キーワード(試行5)
#1 モデルがアイテムを着用し、全身が写っている画像か? The entire human body from head to toe is captured in the image. entire body, head to toe, captured The image features a person fully dressed, providing a complete view of the attire from head to toe. All clothing items and accessories are clearly visible, offering an all-encompassing look at the fashion style. This allows for an in-depth analysis and categorization of the overall outfit, including design, color schemes, and combinations. person fully dressed, complete view, head to toe, clothing items, accessories, visible, fashion style, in-depth analysis, categorization, design, color schemes, combinations complete view, head to toe, fashion style, in-depth analysis, color schemes, combination
#2 モデルがアイテムを着用しているが、モデルの体の一部しか映っていない画像か? Only a part of the human body is captured in the image. part of body, captured In this image, attention is given to a specific part of the body and attire. The focused view presents detailed features of the clothing, including fabric, design, and accessories. This partial display aids in a concentrated analysis, enabling categorization based on the distinct visible elements. specific part of body, focused view, detailed features, clothing, fabric, design, accessories, partial display, concentrated analysis, categorization, visible elements specific part of body, detailed features, fabric, concentrated analysis, visible elements
#3 アイテムのみが写ったモデルが着用していない、物撮りの画像か? No human is captured in the image. no human, captured This image contains no human subject, featuring only clothing and accessories. The absence of a person allows for an unobstructed view of the attire’s design, texture, and style. It facilitates a straightforward classification of the clothing items, free from the influence of human form and posture. no human subject, clothing and accessories, unobstructed view, design, texture, style, straightforward classification, free from human form and posture no human subject, unobstructed view, texture, style, free from human form and posture

 

- 試行4での失敗例の画像

以下らの画像は 物撮りの画像(=人が写っていない) と分類されてしまいました。

(著作権の関係で画像を削除しました。編集 : 2023/10/04)

 


DROBE開発組織の紹介
組織情報ポータル