GPT-4o mini Fine-tuningモデルで広告コピーを作ろう!
はじめに
こんにちは、D2Cのデータサイエンティストの髙橋と申します。
現在、キョウソウAIという広告制作に特化したAIソリューションを開発しております。
先日、OpenAI社がXにて以下の内容をポストしていました。
ついに、弊社の環境においてもGPT-4o mini
でFine-tuningができるようになりました。
ここで注意点を挙げると、今回のリリースは対象者が限定されています。
OpenAI APIにはTier制が導入されていて、今回はTier4,5
に属するユーザが対象となっています。
Tier制について詳しく知りたい方はこちらを参照してください。
問題設定
早速、GPT-4o mini
を用いてFine-tuningを試してみたいと思います。
Fine-tuningとは、特定のタスクに特化させるために、新しいデータを用いて事前学習済みモデルのパラメータ[1]を再学習させる手法です。
今回の目的は、広告コピーの自動生成を実現することです。
配信実績が良好だった広告コピーを学ばせて、弊社のコピーライターの「相棒」を作りたいと思います。
広告制作においては、どの会社でも「稼働逼迫」が課題になっているのではないでしょうか。
そのため、広告コピーを自動生成できると、制作業務の効率化につながると考えております。
ただし、生成された広告コピーが必ずプロと同じ水準になるかというと、そうではないと思います。
生成物には必ず人間の監修が必要で、以下のポイントを押さえる必要があります。
- 広告コピーとしての品質は十分か
- 内容に虚偽が含まれていないか
- 既存の権利を侵害していないか
その意味で、今回のモデルは広告コピーのたたき台を用意する「相棒」を目指したいと思います。
実は、同様の取り組みをGPT-3.5 Turbo
でも実施しており、そちらも記事になっております。
よろしければ、お手すきの際にご覧いただければ幸甚でございます。
実装手順
事前準備
今回はPythonでのコーディングを前提にして実装していきます。
GUI操作でもFine-tuningを行うことができますが、この記事ではスコープ外となります。
前述の通り、今回の対象者はTier4,5
の方ですので、記事の内容も既存ユーザ向けになっております。
ですが、念のため最初にやらなければならないことを記載させていただきます。
- アカウントの登録
- API Keyの新規作成
- クレジットカード情報の登録
また、OpenAI APIではタスクやモデルの種類、トークン数に応じたコストがかかります。
例えば、Fine-tuningモデルのコストは以下通りで、詳細については画像をクリックしてください。
ちなみに、新旧比較[2]すると、GPT-4o mini
への乗り換えによって以下のようにコスト削減できます。
Input | Output | Training |
---|---|---|
▲90% | ▲80% | ▲62.5% |
データセットの準備
まずは、今回のタスクに合わせてデータセットを作っていきます。
GPT-3.5 Turbo
以降は、JSONL形式の会話型データセットに変換する必要があります。
以前の記事でGPT-3.5 Turbo
の性能を検証した際のデータセット[3]を以下に例示させていただきます
{"messages":[
{"role": "system", # モデルに対して役割を定義する
"content": "あなたはコピーライターです。"},
{"role": "user", # ユーザからのPromptを入力する
"content": "受験生に向けたキャッチコピーを作成してください。クライアントは株式会社ジアタマ製薬で、学力向上効果をアピールしてジアタマ・ヨクナールを売り出しています。"},
{"role": "assistant", # GPTからのCompletionを入力する
"content": "勉強の新時代、ジアタマの力。脳に新しい風を吹き込み、才能を目覚めさせよう。"}
]}
今回のケースでは、Promptには「広告コピーの与件情報」を含めていきます。
一方で、Completionには「配信実績の良好な広告コピー」を入力したいと思います。
ここで気になるのは、果たしてどの程度のデータ数があれば良いのか、ということです。
OpenAIによると、品質の良い50件のデータセットから検証を始めるのがおすすめ、とのことです。
We recommend starting with 50 well-crafted demonstrations and seeing if the model shows signs of improvement after fine-tuning.
出典:Fine-tuning - OpenAI API
私は過去に作成したデータセット550件分を使用していこうと思います。
このデータセットには、架空のコピー(ジアタマ・ヨクナール)だけではなく自社の広告コピーも含まれます。
データセットのアップロード
次に、OpenAI APIを利用してデータセットをアップロードしていきます。
1GBまでしかアップロードできませんが、そこまでのデータサイズは不要であると公式ドキュメントに記載があります。
from openai import OpenAI
client = OpenAI(api_key = API_Key) # ご自身のAPI Keyを入力してください
client.files.create(
file = open("train_data.jsonl", "rb"),
purpose = "fine-tune"
)
ちなみに、今回は検証を目的にサンプルコードを記載していることをご了承ください。
情報漏洩のリスクなどがあるため、商用環境ではAPI Keyをハードコーディングしないようにしましょう。
上記のアップロード処理を行うと、以下のような返り値が出力されるはずです。
FileObject(id='file-XXX', bytes=XXX, created_at=XXX, filename='train_data.jsonl', object='file', purpose='fine-tune', status='processed', status_details=None)
このうち、引数id
に記載のある'file-XXX'
が今回のデータセット名になります。
Fine-tuning
いよいよ、GPT-4o mini
のFine-tuningモデルを活用していきます。
実行するコードはとてもシンプルで、上記のデータセット名を引数training_file
に記載します。
client.fine_tuning.jobs.create(
training_file = File_Name, # アップロードしたファイル名を入力してください
model = "gpt-4o-mini-2024-07-18"
)
注意点としては、上記のコードを実行するとすぐに返り値が出力されます。
そのため、Fine-tuningが爆速で終わったように見えるのですが、実際にはジョブは完了していません。
OpenAIからメールでジョブの完了が通知されるので、それまでしばしお待ちください。
今回のジョブの詳細は以下の通りです。
前回のGPT-3.5 Turboとの比較ができるようにまとめております。
モデル名 | データサイズ | 実行時間 | コスト |
---|---|---|---|
GPT-4o mini | 532KB(学習データ 550件) | 約0.5h | 無料 |
GPT-3.5 Turbo(1106版) | 532KB(学習データ 550件) | 約1h | 約4ドル |
モデルの推論
最後に、完成したモデルを用いて広告コピーを生成してみましょう。
メールの中に「モデル名」が記載されているので、こちらを用いて推論を実行していきます。
以下のように「ジョブ名」も本文に含まれているため、混同しないように注意しましょう。
Your fine-tuning job <ジョブ名> has successfully completed, and a new model <モデル名> has been created for your use.
モデルの性能を評価したいので、前回と同様のテーマで検証してみたいと思います。
以下のサンプルコードの中で、引数model
に上記のモデル名を入力してください。
response = client.chat.completions.create(
model = Model_Name, # Fine-tuningモデル名を入力してください
messages = [
{"role": "system", "あなたはコピーライターです。"},
{"role": "user", "content": "受験生に向けたキャッチコピーを作成してください。クライアントは株式会社ジアタマ製薬で、学力向上効果をアピールしてジアタマ・ヨクナールを売り出しています。"}
]
)
print(response.choices[0].message)
架空のクライアント「株式会社ジアタマ製薬」の主力商品「ジアタマ・ヨクナール」を売り出すための広告コピーは、以下のように生成されました。
ChatCompletionMessage(content='賢者の一錠、「ジアタマ」の魔法。', role='assistant', function_call=None, tool_calls=None)
引数content
に生成した広告コピーが記載されています。
前回の結果と比較できるよう、モデル名と広告コピー、その結果が得られるまでに試行した回数を記載します。
モデル名 | 広告コピー | 試行回数 |
---|---|---|
GPT-4o mini | 賢者の一錠、「ジアタマ」の魔法 | 2回 |
GPT-3.5 Turbo(1106版) | いま、知薬の新時代。勉強の質を変える一粒 | 5回 |
広告コピーの質としては、素人目線ではどちらも悪くないように思われます。
ただ、GPT-4o mini
はより少ない試行回数でそれらしい広告コピーを生成できました。
その後も推論を繰り返してみたところ、素人目線で良いと思える広告コピーが出力されました。
「頭脳のカギ、ジアタマ一錠。未来への扉、学びで開け」
「IQブースト、一錠で未来を拓け」
あくまで肌感覚ですが、GPT-4o mini
はワードセンスも良いと思いました。
おわりに
今回は、以前の記事を踏襲してGPT-4o mini
のFine-tuningモデルを検証してみました。
破格のコストメリットはもちろん、処理時間や性能の面でも着実な進化を遂げていると感じました。
LLMについては各社競争が激化していて、現時点で目を見張るほどの性能を持つAIばかりです。
半年も経たずに、この領域のデファクト・スタンダードは変わっていくと思われます。恐ろしい話です。
日々の業務を言い訳にせず、絶えず変化する技術トレンドをキャッチアップしていきたいと思いました。
最後までお読みいただき、誠にありがとうございました!
参考情報
執筆にあたって、以下のページを参考にさせていただきました。
株式会社D2C d2c.co.jp のテックブログです。 D2Cは、NTTドコモと電通などの共同出資により設立されたデジタルマーケティング企業です。 ドコモの膨大なデータを活用した最適化を行える広告配信システムの開発をしています。
Discussion