前回のおさらい
こんにちは。
最近はLLMの出力結果をプロンプトベースで調整するということはしていましたが、LLMそのものを作ってみたいと思い、JaQuADデータセットを使って質問応答モデルを構築してみました。
結果は芳しくなかったものの、モデルの構築に手を出せたので、ようやくスタートラインに立てたかなという心境です。
前回の記事は下記のリンクにてチェックできます!
今回の目的
ここ数週間、gpt-4oやgpt-4o-miniモデルを用いて、システムプロンプトをベースに画像中から商標物を特定し、その名称を出力させるという取り組みをしていました。
この取り組みの過程で、世界的に有名な商標については比較的正確に名称を出力できる一方で、知名度の低い商標については出力できなかったり、結果が不安定になったりするという課題がありました。
原因として考えられるのは、gptモデルが学習ていないデータの範囲外にある商標については適切に認識できない可能性が高いということです。
そこで今回は、より安定した結果を得ることを目的に、権利関係やライセンスの制約に注意しつつ、可能な範囲でgpt-4oモデルをファインチューニングし、商標物への対応力を高める取り組みを行ってみたいと思います。
ファインチューニングとは?
ファインチューニングという手法をご存じでしょうか?
ファインチューニングとは、大規模データで事前に学習済みのモデルを、さらに独自のデータセットで追加学習することで、特定のタスクに最適化させる方法です。
例えば、車や動物といった現実世界のオブジェクトだけで構成されたデータで学習したモデルは、その範囲においては正確な推論が可能です。
一方で、2次元や特殊なカテゴリに関しては、事前学習済みモデルだけでは精度が低下することがあります。
そこで専用のデータセットを用いて追加学習することで、こうしたタスクにも対応できるようになります。
なお、OpenAIが提供するファインチューニング機能では、データは .jsonl形式 で用意する必要があると定められていました。
この形式に従うことで、モデルに対して効率的に追加学習を行うことが可能になります。
データの作成
画像の文字列化
今回の目的は、gptモデルがこれまで特定できなかった商標物の画像にも対応できるようにファインチューニングをしてみます。
OpenAIの公式ドキュメントによると、ファインチューニングに利用する画像は Base64形式にエンコード しなければならず、さらに 10枚以上の学習サンプル を準備する必要があります。また、画像を入力として扱えるのは gpt-4oモデルに限られている点も重要です。
一方で、商標画像には権利上の制約があるため、今回は弊社の公式ロゴとそれを加工したバリエーションのみを学習サンプルとして収集しました。
その後、公式ドキュメントに従って画像をBase64形式へ変換し、学習用データとして利用できるよう整備しました。(なお、文字列化後のデータは非常に長いため、ここでは割愛します。)



jsonlファイルの作成
gptモデルをファインチューニングする際の参考事例を調べると、システムプロンプト形式 に似た書き方を目にしたため、今回はその形式に倣って学習データを作成しました。
具体的には、gptが正しく認識できていなかった商標画像をBase64形式にエンコードし、jsonlファイルに組み込んだ上で、「これは株式会社インプルのロゴです。」 と正解ラベルを付与しました。
さらに、加工した画像については 「これは株式会社インプルの公式ロゴではありません。」 というラベルを与えることで、モデルに「正しいロゴ」と「非公式な変形版」との違いを学習させ、識別能力を高めることができると思います。
{ "messages": [ { "role": "user", "content": [ {"type": "text", "text": "画像に写っているロゴや文字を説明してください。"}, {"type": "image_url", "image_url": "data:image/png;base64,…."} ] }, { "role": "assistant", "content": "これは株式会社インプルの公式ロゴです。" } ] }, { "messages": [ { "role": "user", "content": [ {"type": "text", "text": "画像に写っているロゴや文字を説明してください。"}, {"type": "image_url", "image_url": "data:image/png;base64,…."} ] }, { "role": "assistant", "content": "これは株式会社インプルの公式ロゴではありません。" } ] },
追加学習
GPTモデルのファインチューニングは、OpenAIの管理画面から 「+Create」ボタン をクリックして開始できます。

クリックすると設定画面が表示されるので、今回は以下のように順に設定しました。
・Method:デフォルトのまま
・Base Model:画像入力に対応している gpt-4o-2024-08-06 を選択
・Suffix:モデル名を任意に指定(例:gpt-4o-tuning
)
・Seed:任意で設定(今回は 0
)
・Training_data:準備した .jsonl
ファイルをアップロード
・その他の設定:デフォルトのまま
なお、2025年9月25日現在、サーバー側の問題により学習が正常に進行していません。そのため、テストは次回に持ち越す予定です。
おわりに
いかがでしたでしょうか。
今回は、独自に用意したデータサンプルを活用し、gptモデルがこれまで特定できなかったロゴに対応できるようファインチューニングをしてみました。
権利面の制約から、学習に使用したのは弊社ロゴと加工したバリエーションのみであり、データに偏りがありました。
そのため、実際にどのような結果が得られるかについては、まだ未知数な部分もあります。
しかし、ファインチューニングという手法の概要や具体的な流れを共有できたと思いますのでぜひ皆さんも独自のデータを作成してファインチューニングをしてみてください!
参考URL

