マルチモーダルLLMのソフトラベル生成による、アパレル画像分類モデルの構築手法
1. 課題設定
1.1 「人が見ても割れる」属性の画像判定モデルを、LLM を使って効率的に構築したい
当社はアパレル領域の商品画像・着用画像に対する画像解析 AI を独自に構築しており、特に「商品画像から意味のある属性を自動かつ少ない計算量で付与する」ということに興味を持って研究開発を行ってきました。前段となるゼロショット分類パイプラインについては、 軽量な画像言語モデルによるアパレルドメインでのゼロショットクラス分類パイプラインの構築 で紹介しました。
実運用では、一日で数万枚の新商品画像に対して、埋め込みベクトルを生成し、学習済みの軽量な二値 MLP(Multi-Layer Perceptron、多層パーセプトロン)によって各種商品属性を抽出するというパイプラインが構築されています。CPU 上で数十万枚を一日で捌くことができ、かつ属性の追加・更新は、この MLP を 1 つ学習し直すだけで済む、再利用性の高い設計としています。
図 1: 本番の属性推論パイプラインと、本記事が対象とする分類器の位置。
本記事では、その属性のひとつ
is_character
、すなわち次の基準
アニメや漫画のキャラクター、または、著名なキャラクターが、写真に明確に含まれているか
を満たすかどうかの二値判定モデルの構築手法を紹介いたします。
このビジネス背景にも軽く触れておきます。キャラクターのライセンス商品はアパレル EC において特別な需要を持ちます。「キャラクター物を選ぶ顧客」と「無地を選ぶ顧客」は客層としてかなり異なりますので、商品の分類として区別する価値は高いです。また、キャラクターが含まれる写真はライセンス問題を抱えることがあるため、その判定材料としても有用な情報となります。
一見、このキャラクター判定基準は明確なもののように見えますが、画像だけから判定しようとすると、人間が見ても答えが割れる、という厄介な類のものです。たとえば、以下のような例をみればその曖昧さは了解されるものと思います。
- 商品そのものは無地でも、パッケージの隅に漫画のコマが印刷されている(コラボ商品)
- ブランド名のロゴ文字だけが入っている(キャラクターではない)
- 動物のイラストは入っているが、特定の著名キャラクターではない
- マイナーなご当地マスコットが描かれている(キャラクターではあるが、著名ではなく知識が必要)
1.2 人力アノテーションの限界
また、ルールを完璧にしたところで、人力のアノテーションは相当時間がかかるものとなります。
今回のデータは、学習用 82,484 枚、検証用 17,841 枚、合計 100,325 枚を用いました。
仮にダブルチェックをせず、1 枚 5 秒で人が判定するとしても、約 139 時間(約 20
人日)となり、一つの属性判定モデル構築にかけて良いコストではありません。そして最大の問題は、
判定基準を少しでも変えるとこの作業が丸ごとやり直しになる
ことです。アパレルの商品サイクルは短く、基準は運用しながら磨かれていくため、人手アノテーションを前提にするのは筋の悪い選択となります。
1.3 単純な LLM の援用とその限界
この前提において、マルチモーダル LLM を使ってアノテーションを自動化するのは、自然な方針となります。
ただ、単純にローカルLLMに 1 回だけ推論させ、その出力をそのまま 0 / 1
のラベル(ハードラベル)として MLP
を学習させる方法では、人手は劇的に減らせますが、後に見るように、
境界例のラベルが不安定である
という問題を生じます。
ロゴ文字だけの商品や一般的なイラストに対して、LLM の出力が推論のたびに揺れ、その揺れが
0 か 1
かに丸め込まれ、モデルは「揺れている」という事実を知らないまま学習が続けられることになり、これが精度のボトルネックとなります。
1.4 手法:多重アノテーション結果を用いたソフトラベル学習
そこで本件では、LLM を用いた正解判定(いわゆる LLM as a Judge)のプラクティスに倣い、次の仮説を立てました。
観点の異なる複数のプロンプトで LLM に独立に判定させ、その賛成票の比率をそのまま学習ターゲット(ソフトラベル)として使えば、境界例の不確実性を失わずに学習できる。
これは、複数人のアノテータの全員が true と答えた画像と、意見が割れたが多数決 true となった画像を、同じ「1」として扱うのは、情報が失われて勿体ない、という発想です。
このソフトラベル手法の効果を測るため、成功基準は次のとおりとしました。
- ゴールドラベル(人間が正しいと確信できる評価データ)に対して、「ハードな多数決ラベル」で学習したモデルに勝つこと(=ソフトラベルであること自体の効果を示す)
- 判断が割れる画像に対して、0 か 1 かではなく中間のスコアを出すこと(確率較正の改善)
- 比較対象のハード多数決ラベルのMLPと最終アーキテクチャを揃えること(条件を揃え、かつモデルの重みだけで差替えができる運用メリットもある)
全体像を図 2 に示します。
図 2: ソフトラベル学習の全体像。
2. ソフトラベル学習の詳細
2.1 なぜソフトラベルが有利か - ハードラベル化で捨てられる情報
まず、票がどれだけ割れるのかを実データで確認します。学習用 82,484 枚に対して 4 プロンプトの判定を行った結果の分布が図 3 と表 1 です。
図 3: 学習用 82,484 枚に対する賛成票の分布。
| 賛成票 | ソフトラベル | 枚数 | 構成比 | ハード多数決での扱い |
|---|---|---|---|---|
| 0 / 4 | 0.00 | 54,453 | 66.0% | 負例 |
| 1 / 4 | 0.25 | 1,731 | 2.1% | 負例(0 に切り捨て) |
| 2 / 4 | 0.50 | 1,672 | 2.0% | 学習から除外 |
| 3 / 4 | 0.75 | 2,991 | 3.6% | 正例(1 に切り上げ) |
| 4 / 4 | 1.00 | 21,637 | 26.2% | 正例 |
表 1: 賛成票の分布と、単純なハード多数決ラベルに変換したときの扱い。
ここでのポイントは、多数決によるハードラベルは、得票率 3/4 の画像のスコアを 1.0
に切り上げてしまうことです。
ハード化すると 2:2 の 1,672 枚(2.0%)が学習データから完全に消え、1 票および 3 票の
4,722 枚(5.7%)は 0 / 1 に書き換えられ、結果的に 6,394 枚、全体の 7.8%
の情報が失われることになります。
切り上げられた画像に対してモデルは、本来なら曖昧なはずの画像に対して、過剰に自信を持つよう学習してしまうことが問題となります。
2.2 損失関数の選定
ソフトラベルを学習に使う方法として、二値分類で標準的に使われる BCE(Binary Cross-Entropy、二値交差エントロピー損失) をここでは採用します。具体的には
と書かれます。ここで、 は正解となるソフトラベル(ターゲット)、 はモデルの出力する logit(シグモイドに通す前の生のスコア)、そしてシグモイド関数 です。
この損失関数に、ここで少し解釈を与えておきます。まず損失関数の形から、「ソフトラベル
の画像を、『重み
の正例』と、『重み
の負例』の 2 行に複製して荷重和を取ったもの」と見ることができます。
特に、
とすれば右辺は通常の二値交差エントロピーに一致し、この式はハードラベル学習を特殊ケースとして含んでいることも分かります。
また BCE 損失関数の最小値を実現する を求めると、シグモイドの微分 より
となり は について狭義凸であり、最小点は一意に
で与えられます。つまりソフトターゲット BCE は、 モデルの出力確率が賛成票の比率に一致したときにちょうど最小になる 損失であることが分かります。すなわち、この結果得られたモデルの出力スコアは、その属性の判定確率そのものと解釈できることになります。
3. マルチモーダル LLM による票の生成
3.1 ソフトラベルの定義 - 多様性のあるプロンプトに基づく投票率
票の価値は、プロンプト同士がどれだけ独立した観点を持つかで決まります。同じ問いの言い回しを少し変えただけでは結果に多様性が生まれません。そこで、 言語・根拠の要求・厳しさ という 3 つの軸で観点を散らしています。具体的には、今回の属性判定については、以下のように設計しました。
| ID | 観点 | 内容 | 狙い |
|---|---|---|---|
| p1 | 英語・基準を直接提示 | 判定基準を英語で提示し、衣服のプリント・パッケージ・タグ・背景など写真内のどこにあってもよいと明示して true / false を答えさせる | 素直な基準適用のベースライン |
| p2 | 日本語・基準を直接提示 | p1 と同一内容を日本語で提示 | 出力言語に由来するバイアスを分離する |
| p3 | 根拠を先に出させる | 写っているキャラクター名をまず列挙させ、その上で判定させる | 「名前を挙げられるか」を経由させ、判断根拠を変える |
| p4 | 厳格版 | 動物柄・一般的なイラスト・ロゴやブランド名の文字・抽象柄は対象外と明示し、迷ったら false と指示 | 過検出側に厳しい観点を 1 つ入れる |
表 2: 4 プロンプトの設計。
そして、画像 に対して 4 プロンプトのうち 個が有効に応答し、そのうち 個が true と答えたとき、ソフトラベルを
と、単純に投票率として定義します。
3.2 判定に使ったモデルと処理時間
判定には、ローカル LLM を 2 種類使いました。Qwen3.6-35B-A3B と Gemma4(
google/gemma-4-31B-it
)です。いずれも
temperature
は 0 に固定し、推論過程(thinking)の出力は無効化しています。出力は true / false の 1
語だけなので、長い思考過程は生成トークン数を増やすだけでほとんど寄与しないためです。
この設定で、Qwen3.6 は学習用データの 82,484 枚 × 4 プロンプト = 329,936 リクエストを 3.7 時間 (約 24.8 req/sec)で処理できました。1.2 節で見積もった人手 20 人日と比べれば、コスト構造がまったく別物であることが分かります。
4. ソフトラベル学習
4.1 MLP のソフトラベル学習:損失関数の変更
通常のハードラベル学習ならば、例えば scikit-learn の
MLPClassifier
をそのまま使うことができます。
しかし、ソフトラベル学習を行おうとすると工夫が必要となります。
ここでは、変えるのは損失に渡すターゲットだけで済むよう、以下のような方針をとります。
図 4: ネットワーク構造と、ハードラベル学習・ソフトラベル学習の分岐点。
学習ループの中核は次の数行に尽きます。
import torch
from torch import nn
model = nn.Sequential(
nn.Linear(768, 256), nn.ReLU(),
nn.Linear(256, 256), nn.ReLU(),
nn.Linear(256, 1),
)
criterion = nn.BCEWithLogitsLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
for xb, target in loader:
# target は、ハードラベルなら 0.0 / 1.0、ソフトラベルなら 0.0 〜 1.0
logit = model(xb).squeeze(1)
loss = criterion(logit, target)
optimizer.zero_grad()
loss.backward()
optimizer.step()
細かい点ですが最適化条件は、比較の妥当性を保つため scikit-learn
MLPClassifier
の既定値に合わせ以下のようにしています。
| 項目 | 設定 | 対応する scikit-learn の既定値 |
|---|---|---|
| 最適化手法 | Adam | solver="adam" |
| 学習率 | learning_rate_init=0.001 |
|
| バッチサイズ | 200 | batch_size=min(200, n_samples) |
| シャッフル | あり | shuffle=True |
| 乱数シード | torch.manual_seed(42) |
random_state=42 |
| 早期終了 | holdout loss が を超えて 10 epoch 改善しなければ停止 | n_iter_no_change=10, tol=1e-4 |
| 最大 epoch | 200 | max_iter=200 |
| 学習データ | 埋め込み 82,484 件を 8:2 に分割 | train_test_split(random_state=42, test_size=0.2) |
表 3:
PyTorch 実装の最適化条件と、対応する scikit-learn
MLPClassifier
の既定値。
4.2 温度較正:スコアを的中確率として読めるようにする
今回のソフトラベル学習では、前節で見たように、ソフトラベルそのものを再現するように学習するため、スコアはそのまま確率として解釈できます(例えばスコア 0.9 の商品を 100 件集めたとき、実際にキャラクターが写っているのが 90 件、のような感覚で扱って良い)。
しかし、一般にハードラベル学習のときはこれが成立しません。ハードラベルでは学習を重ねると、出力スコアは唯一の正解である 0.0 または 1.0 に偏ってしまうためです。
そこで、ソフトラベル・ハードラベルの両方の結果を比較しやすいように、スコアに確率較正を行います。
ここでは事後的に温度スケーリング
で修正します。学習済みの重みには一切手を触れず、出力の logit を 1 個の温度変数 で割ってからシグモイドに通します。この温度 は、MLP 学習とは独立した追加の少数の学習データに対し、負の対数尤度(ソフトターゲット BCE と同じ式)を最小化して求めます。
目的関数が BCE でよいのは、その最小化解が真の条件付き確率に一致するという結果に基づきます。
5. 評価結果
5.1 評価の設計
評価用のゴールドラベルの準備
評価データに用いる正解は、 Qwen3.6 と Gemma4 の 8 票(各 4 プロンプト)が全会一致した画像だけ を採用しました。8 票すべてが true なら true、8 票すべてが false なら false とし、1 票でも割れたものは評価から外しています。そのうえで人間が最終的に目視確認を時間を決めて行ってゴールドラベルを決定します。
図 5: ゴールドラベルの絞り込み。
比較に用いるモデル
ソフトラベルの有効性を確認するため、学習レシピ(ソフトターゲット
BCE、ハイパーパラメータ、温度較正)はすべて共通とし、変えたのは教師ラベルだけです。
判定しきい値は、スコアが較正されているため 0.5 に固定することができます。
- A: ベースライン — 旧基準の LLM ラベル(1 回推論・ハード)で学習した出発点
- C: Qwen3.6 ソフト — Qwen の 4 票から作った で学習
- D: Gemma4 ソフト — Gemma の 4 票から作った で学習
- E: Qwen+Gemma 合算ソフト — 8 票を合算した (0 〜 1 の 9 段階)で学習
5.2 定量結果
ゴールドラベルを用いた結果をまとめます。ゴールドラベル画像は、ドメインが若干異なる 2 種類(val、val2)に分けてそれぞれ別々に層別評価を行いました。
| モデル | TP | FP | FN | Acc | Prec | Rec | F1 | AUC |
|---|---|---|---|---|---|---|---|---|
| A: ベースライン | 1,925 | 180 | 59 | 0.9689 | 0.9145 | 0.9703 | 0.9416 | 0.9922 |
| C: Qwen | 1,947 | 72 | 37 | 0.9858 | 0.9643 | 0.9814 | 0.9728 | 0.9983 |
| D: Gemma | 1,910 | 37 | 74 | 0.9855 | 0.9810 | 0.9627 | 0.9718 | 0.9987 |
| E: 合算 | 1,934 | 39 | 50 | 0.9884 | 0.9802 | 0.9748 | 0.9775 | 0.9988 |
表 4: val(7,676 枚、正例 1,984)における成績。 E(Qwen+Gemma 合算)が F1・AUC・Accuracy のすべてで単独最良 。
| モデル | TP | FP | FN | Acc | Prec | Rec | F1 | AUC |
|---|---|---|---|---|---|---|---|---|
| A: ベースライン | 1,648 | 328 | 60 | 0.9508 | 0.8340 | 0.9649 | 0.8947 | 0.9911 |
| C: Qwen | 1,653 | 178 | 55 | 0.9705 | 0.9028 | 0.9678 | 0.9342 | 0.9967 |
| D: Gemma | 1,628 | 107 | 80 | 0.9763 | 0.9383 | 0.9532 | 0.9457 | 0.9966 |
| E: 合算 | 1,652 | 124 | 56 | 0.9772 | 0.9302 | 0.9672 | 0.9483 | 0.9972 |
表 5: val2(7,887 枚、正例 1,708)における成績。こちらも E(Qwen+Gemma 合算)が F1・AUC・Accuracy のすべてで単独最良 。
図 6: 8 票全会一致ゴールドに対する 4 モデルの F1(横軸は 0.88 から表示)。
図 7: val と val2 における 4 モデルの Precision と Recall。
定量的な結論は、
教師を混ぜたモデル E が単独最良
となっています(F1・AUC・Accuracy すべてで首位)。
性能で劣る教師(val 単体では C 0.9728 / D
0.9718)を混ぜたのだから中間に落ちる、という素朴な予想とは異なり、LLMのバラエティがスコアに有利に働くことになります。
その理由としては、2 つのモデルが単に優劣の関係ではなく
Precision と Recall の相補関係にあること
が挙げられると思います。
実際、図 7 を見ると、Gemma 高 Precision、Qwen高 Recall
に寄っており、E(合算)はその中間にありますが、灰破線の F1
等高線では最も外側の高い位置に来ています。
Gemma の票は「迷ったらキャラクターではない」と慎重に振れるため FP が少なく、Qwen
の票は拾う方向に寛容なため FN が少なくなります。それらの 8 票を合算した E は、その LLM
間の評価のずれをソフトラベルを介して正確に学習したものと解釈できます。
5.3 定性結果:何を取りこぼし、何を過検出したか
誤りの中身を目視で確認したところ、失敗は 2 つの型に分かれました。実際の商品画像は掲載できないため、以下は同じ構図・同じ難しさを持つ架空のキャラクターで作成した再現イラストとなります。
取りこぼし(偽陰性)
キャラクターを検出できなかった画像は、多くは以下のような見た目になっていました。
図 8: モデルが false と判定したが LLM の票はすべて true だった画像の再現イラスト。
いずれもキャラクター要素が画像全体に対して小さく、かつ低コントラストである点が共通します。
| 例 | スコア | 目視での内容 |
|---|---|---|
| FN 1 | 0.002 | 男性肌着 2 枚組。商品自体は無地だが、パッケージ右側に漫画のコマが印刷されたコラボ商品 |
| FN 2 | 0.015 | ベビー肌着。淡色・低コントラストのキャラクター総柄が小さく入っている |
| FN 3 | 0.035 | ベビーパンツ。キャラクターの顔の小さな刺繍が数か所に点在 |
表 6: 偽陰性の代表例。
分類器のスコアは、いずれも 0.05 未満でモデルは「キャラクターは無い」と強く確信する一方、LLM 側は全会一致で true となっていて明らかな乖離が一部で発生しています。これはラベル品質の問題ではなく、SigLIP 2 が 224 × 224 の画像全体を 1 本の 768 次元ベクトルに要約する過程で小領域の情報が失われることによると考えられます。 これは特徴量側の限界であり、ラベルをどれだけ丁寧に作っても解消しない ものと言えます。
これを解消する場合は、より高解像度の画像を処理できる特徴量生成が必要となるでしょう。
過検出(偽陽性)
キャラクターの誤判定のパターンも大きく以下のようなものがありました。
図 9: モデルが true と判定したが LLM の票は false 寄りだった画像の再現イラスト。
| 例 | スコア | 目視での内容と解釈 |
|---|---|---|
| FP 1 | 0.983 | ペットベッド。一般的な犬のイラストと英字のロゴ文字。著名キャラクターではないため false が妥当 |
| FP 2 | 0.975 | デコシール。うさぎのマスコット風キャラクターが多数。1 票は特定の既存キャラと誤同定していた |
| FP 3 | 0.995 | 食玩のパッケージにマスコットが明確に印刷されている。目視ではキャラクターに見えるが、票は false 側に一致した |
表 7: 偽陽性の代表例。
いずれも「キャラクター風だが著名ではない」という基準の境界にあり、人が見ても知識や考え方で意見が分かれる例となります。これは、基準の厳格化を行うべきものであり、運用しながら改善していくべき類のものといえます。
5.4 中間スコアを正しく出力できているか
検証の最後に、ソフトラベルの効果で中間スコアが期待通りに分布しているかを確認します。
最適化された較正温度
まず、スコアを確率化するために最適化された、較正温度を確認します。
| モデル | 温度 | 較正によるロスの改善 |
|---|---|---|
| A: ベースライン | 4.0048 | 0.0447 → 0.0057 |
| C: Qwen ソフト | 1.1577 | 0.1438 → 0.1420 |
| D: Gemma ソフト | 1.2159 | 0.1260 → 0.1231 |
| E: 合算ソフト | 1.1246 | 0.1363 → 0.1352 |
表 8: 各モデルの較正温度。いずれも学習行の 20% を取り置き、その上での最適化で求めた。
が 1 から離れるほど、較正前の出力が確率として歪んでいたことを意味します。 A は logit を約 1/4 に縮める必要があった一方、ソフトラベル学習の 3 モデルは 1.12 〜 1.22 とほぼ較正不要 でした。較正による損失の改善幅もごくわずかで、学習を終えた時点ですでに確率として振る舞っていたことが分かります。2.2 節で見た「最小解が投票率に一致する」という性質が、実データでも働いているわけです。
中間スコアの分布
次に、票が割れた画像にモデルが中間のスコアを返せるかを見ます。
そのために、ゴールドラベルを作る際に弾いた、「
が 0.2 〜 0.8(8 票中 2 〜 6 票)の画像」すなわち LLM
の合議が迷った画像だけを取り出し、それに対するモデルのスコアも同じ 0.2 〜 0.8
に収まるかを計数することで定量評価します。
| モデル | val: 中間帯 | val: 内率 | val: 平均スコア | val2: 中間帯 | val2: 内率 | val2: 平均スコア |
|---|---|---|---|---|---|---|
| A: ベースライン | 86 / 757 | 11.4% | 0.602 | 118 / 479 | 24.6% | 0.677 |
| C: Qwen ソフト | 373 / 757 | 49.3% | 0.584 | 204 / 479 | 42.6% | 0.598 |
| D: Gemma ソフト | 337 / 757 | 44.5% | 0.411 | 235 / 479 | 49.1% | 0.510 |
| E: 合算ソフト | 400 / 757 | 52.8% | 0.504 | 225 / 479 | 47.0% | 0.563 |
表 9: LLM の合議が割れた画像(val 757 枚 / val2 479 枚)に対して、モデルのスコアが 0.2 〜 0.8 に収まった枚数・割合とスコアの平均。
ベースライン A が中間帯に留まるのは 11.4% / 24.6% にすぎず、平均スコアも true 側に偏っていますが、ソフトラベル学習の 3 モデルは約半数(42 〜 53%)で中間スコアを返し、なかでも E は平均が 0.504 / 0.563 と最も中立であることが分かります。
この結果から、中間スコアを適切な分布で出力させるという目的において、ソフトラベル学習は有効に働いたと結論できます。
6. まとめ
本記事では、人間が見ても判断の割れるアパレル画像の属性分類を、LLM as a Judge の手法とソフトラベル学習を組み合わせて、最低限の人手アノテーションで構築する手法を紹介しました。
アパレル領域における属性分類は、これ以外にも様々な属性が対象となりえます。要件の変化や追加にも素早く対応し、最低限の工期・計算リソースで最大限の結果を得るために、この記事で述べたような手法を突き詰め実践していく価値は大いにあると考えます。