ChatGPT向けの広告スタックの構築は従来とは異なっていました。ユーザーの意図は会話をまたいで発展し、会話の複数ターンにわたって変化し、時には広告にふさわしい場面がないこともあります。ChatGPTの広告システムの構築には、リクエスト・レスポンス型の広告アーキテクチャを超え、ユーザーの信頼と価値を優先しながら潜在的な経済的機会を見つけるための広告スタックをゼロから構築する必要がありました。OpenAIは、この新しいパラダイムに対応するために専用の広告配信システムを構築しました。

従来の広告システムは、ユーザーがオンラインで何かを検索したり閲覧したりすると、そのクエリやページビューをイベントとして受け取り、そのイベントに基づいて合う広告を探すという形で、個別のユーザー意図の単位に応答するよう作られています。このような従来の広告リクエストは通常、明確に定義されたイベントから始まります。ユーザーが検索クエリを送信するかWebページを開くと、広告システムがリクエストを受け取ります。このシステムは比較的単純で、広告候補を検索(retrieval)し、ランキングし、オークションを実行して機会を適切に価格設定し、結果の広告をユーザーに表示します。

ChatGPTの広告システムでは、ポストトレーニング済みLLMが広告フロー全体のオーケストレーションを担い、ユーザーの現在のターンと会話履歴の両方に基づいて、適切なタイミングで表示する適切な広告を判断します。このような自己改善する広告システムの立ち上げには、かつては何年もかかりましたが、ChatGPT Adsはローンチから200日足らずで年換算収益ランレート10億ドルに達しました。ローンチ以降、10万社を超える広告主がChatGPTで広告を出稿しています。

3つの設計判断と回答生成との分離

ChatGPTの広告システムは、進化していくユーザーの目的のニュアンスに対応するため、3つの主要な設計判断を行っています。1つ目はステートフルな広告セッション(stateful ads sessions)を実装することであり、これにより会話のターンをまたいで、また複数の会話をまたいで情報が記憶されます。2つ目は、ツール呼び出し(tool calls)アーキテクチャを使うカスタムのポストトレーニング済みLLMに依存することです。このポストトレーニング済みLLMは会話の文脈と根底にある意図を解釈し、広告を選択・ランキングし、配信します。3つ目は、広告の選択処理をChatGPTの回答生成とは別の独立したサービスで実行することであり、これにより広告が回答に影響するのを防ぎ、ChatGPTの中立的な声(neutral voice)を保ちます。広告の選択(ads selection)プロセスは、ChatGPTの通常の応答生成と並行して動き、広告フローがChatGPTの応答に影響しないようにしています。

ChatGPTは、従来の広告リクエストの起点となるような具体的な瞬間を自然には生み出しません。ChatGPTの会話では、人は1つの答えを求める検索クエリではなく、目的を持って訪れます。旅行の計画、自社向けソフトウェアの選定、家の家具選び、新しい趣味の学習などが例です。これらは会話の1ターンでは完結せず、ChatGPTは途中でユーザーが何を重視するかを明確にする手助けをすることが多いです。OpenAIのエンジニアリングチームがレースに向けたトレーニング方法をChatGPTに尋ねた例では、会話はランニングに関する一般的な質問から始まり、数ターン後にトレーニング用のシューズについて尋ねました。制約が加わるたびに会話の商業的な意味が変わり、このパーソナライズされた文脈は複数のセッションにわたって変化します。

最初のメッセージの時点で動作するシステムは、ユーザーの意図をまったく誤って検索する可能性があり、ユーザー体験を損ね、邪魔になるおそれがあります。従来型の広告システムのようにすべてのメッセージを独立したリクエストにすると、チャットの用途では4つのリスクがありました。それは、(1)ユーザーの目標を単純化しすぎて読み誤る、(2)ユーザーの本当のニーズが明確になる前に広告フローを始めてしまう、(3)ユーザーの流れを支えずに邪魔する広告を表示する、(4)リクエストが変わるたびに広告フローを非効率に再実行し、ノイズとコストの無駄を生む、という点です。

ChatGPTと広告システムの間のアーキテクチャ上の境界は、別々のサービスが別々のモデルと別々のコードを使うというものです。ChatGPTのコアサーバーはオーガニックな応答の生成を担当し、広告システムは適切な広告機会があるかを独立して評価し、あれば別のサービング(serving)プロセスを通じてスポンサー枠を準備します。ChatGPTは広告システムに依存しておらず、両サービスは絡み合っておらず、コンテンツ生成モデルも共有しません。そのため、広告配信システムが利用できない場合や遅い場合でも、ChatGPTのオーガニックな応答は影響を受けずに続きます。つまり、広告システムがChatGPT製品を停止させたり遅延させたりすることはできません。また、ChatGPTと広告システムを分離するもう一つの利点は、価値ある広告に対する基準を非常に高く保てることです。広告を返さないことは通常の成功した結果であり、システムはユーザーと広告主の双方にとって明らかに有益な場合にのみ広告を配信します。

この新しい広告システムでは、広告はChatGPTの回答経路(answer path)と並行して動作します。広告スタックには、会話を解釈して広告フロー全体を動かすポストトレーニング済みLLMであるオーケストレーターが導入されています。オーケストレーターは、ユーザーにとっての価値と広告主にとっての価値のバランスを取るよう設計されており、常にユーザーを最優先にします。広告原則に基づくシステムの境界と、LLMベースのオーケストレーターを組み合わせることで、すべての会話を広告リクエストとして扱うことなく、広告を有用なものにすることが可能になります。

オーケストレーターによる広告検索

広告フローの最初の部分は、検索プロセスを始めるためにユーザーの意図を理解することです。検索とは、後で絞り込むための候補広告を、高速かつ意図的に広く集める工程です。会話を段階的に受け取ると、検索における課題はより豊かになる一方で、より曖昧になります。これは、広告システムが現在のユーザーの意図と古くなったコンテキストを区別する必要があるためです。

この新しい種類の広告スタックは、カスタムのポストトレーニング済みLLMに基づいています。このポストトレーニング済みLLMは、検索、ランキング、関連性の評価、および最終的な広告選択と価格設定のためのオークション実行について、ツール呼び出しを行います。ここでの検索は上位の候補を特定すること、ランキングはユーザーのエンゲージメントを予測すること、関連性(relevance)は広告の有用性を評価することを指します。

OpenAIは、会話を解釈してエージェント的なループの中で広告フロー全体を実行するこのLLMを、オーケストレーターと呼んでいます。広告オーケストレーターは、利用できる会話とユーザーのコンテキストを使って反復的に広告を探し、その会話とコンテキストに最も適切な広告を見つけることを根本の目的として、どのツールをいつ呼び出すかを繰り返し選びます。この際、広告オーケストレーターは価値のある広告を見つけるために広告配信ツールを反復的に呼び出します。また、オーケストレーターは大まかに、会話を短いテキスト要約にし、それを意味埋め込み(semantic embeddings)に変換し、その意味埋め込みで広告候補を検索し、予算・ユーザー設定・その他の予備的チェックに基づいて候補の適格性をフィルタし、品質と関連性を評価し、最終的なランキングでチャット応答の末尾に配置する価値の高い機会を特定します。意味埋め込みとは、広告システムが選別しやすい、保存された意味のことです。ここでいう最も適切な広告とは、ユーザーにとっての価値と広告主にとっての価値の両方が高い広告のことです。

広告オーケストレーターは、以前のメッセージへの言及を解釈し、ユーザーが仮定の話をしているときを認識し、製品やサービスへの言及をすべて購入の依頼として扱うことを避ける必要があります。会話が進んで広告オーケストレーターがより新しい情報を得ると、更新されたコンテキストで新たなツール呼び出し一式を実行してより良い広告を探し、クライアントに返せるようになります。もしクライアントにその新しい広告が間に合って届けば、それを使用できます。ユーザーが広告のパーソナライズを選んだ場合、広告オーケストレーターは、過去の会話に関する利用可能な機微でない情報も考慮して、最適な広告のマッチを探します。

ChatGPTの広告システムでは、orchestratorが行う一連の工程(候補の検索、適格性フィルタ、品質・関連性の評価、最終ランキング)を経るため、各広告は配置の対象となるために、適格性と関連性の両方で高い基準を満たさなければなりません。広告オーケストレーターのLLMはまず、関連する商業的意図を表す1つ以上のクエリを用意します。これには、会話コンテキストを書き換えて、1対1の検索クエリを超えて商業的な可能性を広げることや、意味表現を作ることが含まれます。意味表現の作成では、マルチターンの会話を検索システム向けの要約版にまとめ、データベースから広告を絞り込んで検索します。

ChatGPTの広告システムは、個々のイベントを中心に組むのではなく、ステートフルなセッションを維持する仕組みを持っています。ChatGPTは最初のリクエストのコンテキストを広告サーバーに送ります。広告システムは、単一の平坦化されたクエリに頼るのではなく、展開していくやり取りに追従して適応します。広告セッションは対象となるターンの間続き、情報が変化するのに合わせて記憶と更新を行います。

検索システムは複数のクエリを使うことで、会話全体を1つの文字列に圧縮せず、意図のさまざまな側面を保持できます。たとえば旅行計画の会話には、交通、宿泊、アクティビティに関する別々のニーズが含まれうる場合があります。広告システムの検索とは、意図的に広範な広告候補のプールを作る工程です。候補は異なる検索戦略から来ることがあり、のちに同じ配信上の制約のもとで競合することがあります。

広告システムは、システム上・プロダクト上の異なる制約に合わせて最適化した複数のインデックスを構築します。例えば、商品フィード広告(product feed ads)用のインデックスは、最適な広告を取得する際に商品レビューの肯定・否定を考慮するように設計されていますが、レビューが紐づかない他の広告にはこれは関係しません。各インデックスは、ユーザーの意図を表す埋め込みを使った近似最近傍(ANN)検索のいずれかの形に最適化されています。このANN検索は、大規模な意味インデックスに対する検索のための近似アルゴリズムであり、「正解」を探すのではなく良い解に近づくことで広告を非常に高速に取得しつつ、関連する候補の大半を保持します。

ハイキングシューズの会話例では、ユーザーがヨセミテでの旅行とシューズブランドを直接結びつけていない場合でも、広告システムはこの会話を `[shoes appropriate for hiking trip]` と `[new [brand] product lines good for travel]` のような2つのクエリで表現できます。これは最初の試みにすぎない可能性があり、オーケストレーターは、ユーザーにとって非常に価値の高い広告が在庫の中に見つかるまで、クエリによる会話の表現を反復するよう設計されています。なお、広告の選択プロセスは、広告フローがChatGPTの応答に影響しないよう、ChatGPTの通常の応答生成と並行して動きます。広告は、ChatGPTの応答生成とは別の、会話を入力として受け取るシステムによって、そのシステム自身の適格性・品質・配信の制約のもとでフィルタリング・選択されます。この会話は、(1)ヨセミテでの2日間の旅行で何を回るべきか、(2)来週は寒くなるか、(3)新しい[ブランド]の製品ラインは、という順で進みます。

フィルタリングからオークション、配信まで

広告システムは、広告検索の過程で、書き換えたクエリ(rewritten queries)を使って意味埋め込みを作り、広範な広告候補のプールを生成します。フィルタリングの目的は、関連性・入札・予算の観点で配置の基準を満たさない広告候補をすべて検討から外すことです。フィルタリングのチェックには、候補や設定に応じて、クリエイティブとキャンペーンの利用可否、キャンペーンのターゲティング、ポリシー上の制限、予算の有無、ペーシング(pacing)、配置の互換性、広告主・キャンペーン単位の重複排除(deduplication)などが含まれます。たとえば、キャンペーンのターゲティングはキャンペーンが配信を許可されているロケール、ペーシングはその日のうち今予算を使うべきか別の時間帯に使うべきか、重複排除は事業者間で公平に参加できるよう広告主ごとの適切な広告数を選ぶことを指します。

適格性チェック(eligibility checks)を通過した広告候補は、スコアリング段階(scoring phase)に進みます。この段階でorchestratorは各種スコアリングシステムへツール呼び出しを行い、セマンティックな関連性(semantic relevance)、予測エンゲージメント(predicted engagement)、過去の実績(historical performance)などの配信上の考慮事項を評価します。オーケストレーターは、オークションの前に、関連性と安全性を確保するために広告をフィルタリングし、準備された候補を会話の文脈の中で評価して、最終オークションに進める広告候補として妥当なものを選びます。orchestratorは、どの広告を配信するかを直接決めず、価格も設定しません。オーケストレーターは、文脈に適した候補を、オークションツールが評価するよう推薦(nominate)します。セマンティックな関連性は広告がユーザーの目的に関連しているか、予測エンゲージメントは広告が表示・クリックされ広告主の望む成果につながりそうか、過去の実績はこれまでユーザーに表示されたときに広告の成績が良かったかを見ます。

オークションは最終的な配信の仕組みを適用します。これには、オークションへの参加可否(関連性と価値の最低しきい値を通過すること)、ペーシング(広告予算をより均等に使うこと)、入札とオークション特徴量の計算、品質調整後のランキング、価格設定、および最終選択が含まれます。広告の配置は、ユーザーの意図を深く理解できているときにのみ表示されるほうが、ユーザーにとっても広告主にとっても良くなります。オークションの後に広告が配信されない経路は2つあり、どちらもChatGPTの会話という媒体に固有のものです。1つ目の経路として、インテグリティモデル(会話が広告配置に適切かを判断するモデル)が会話自体を広告配置に安全と判断し、かつ広告自体もポリシーに準拠していると判断した場合でも、特定の会話の文脈では広告が不適切に感じられることがあり、orchestratorはそのような広告の表示をブロックします。もう1つの経路として、ChatGPTのモデルが応答する準備ができていても広告の配置準備がまだできていない場合、広告リクエストはタイムアウトして広告は配信されません。

すべてのチェックを満たすと、広告はレンダリングのためフロントエンドに送られます。これはサーバー側の広告配信とみなされますが、それでもユーザーに広告が表示されないことがあり、これは意図した設計です。ChatGPTのような会話型プロダクトでは、広告クリエイティブのサーバー側配信は広告が表示されることを保証しません。広告は現在のターンに含められるよう、間に合って到着する必要があります。広告クリエイティブには、タイトル、説明、リンク先、およびコールトゥアクション(ある場合)が含まれます。また、モデルが生成するpreamble(広告が会話とどう関連するかを説明する、短く中立的な導入文)も返されます。ChatGPTのフロントエンドはpreambleと広告クリエイティブをひとまとまりで受け取ります。ChatGPTの応答が完全に生成される前に届けば、フロントエンドはChatGPTの応答の下に、スポンサーであることを明示するラベルを付けて広告を表示します。届くのが遅すぎた場合、そのターンでは広告は表示されません。勝者の選択(winner selection)と配信は別のイベントであり、選ばれた広告が配信になるのは、ChatGPTが配置を承認して表示し、その配信が確認(acknowledged)されてからです。preambleをクリエイティブと分けておくことで、広告主のメッセージを保ちつつ、ChatGPTの語り口を中立に保てます。

ログ記録と評価、フィードバックの活用

OpenAIの広告スタックは、従来型のログ記録とデータパイプラインを使用しており、3つの主な利点があります。広告主が既存システムをこのスタックに統合しやすいこと、広告主がレポートデータで戦略を改善できること、そしてチームがシステムの改善点を見つけられることです。また、レポートや最適化のツールに加えて、高品質なモデルを配備して配信を評価し、他の広告モデルの訓練にも使うことで、強力な自己改善ループを作っています。

何が起きたかの詳細な内訳は、広告システムの各部分を個別に理解し改善するのに役立ちます。ログ処理システムは、ターンが広告の対象外だった場合や、広告セッションが始まったが検索が要求されなかった場合、検索が候補を返さなかった場合、候補は取得されたがhydrationまたは適格性の確認に失敗した場合、そして広告が配信されその後インタラクションを受けた場合などの粒度の細かい結果も記録します。機会検出の改善に必要な証拠は、検索、候補の品質、オークションへの参加、または配信の信頼性の改善に必要な証拠とは異なります。

配信、サービング、および品質のシステムは、ライフサイクルのそれぞれ異なる部分を観測します。プライバシー制御された処理によって、測定とモデル改善に何を使ってよいかが決まります。モデルベース評価(model-based evaluation)の考え方は、最も強力で推論能力の高いモデルがシステムの結果を観察・評価し、その評価をもとにポストトレーニング済みLLMがより良く動作するよう訓練して改善するというものです。例えば、最も強力なモデルがフィードバックを集めて小さなワーカーモデルが可能な限り優れた仕事ができるよう訓練する場合、オーケストレーションや検索には、より小さく効率的なモデルや推論能力の低いモデルを使えます。

OpenAIは、ユーザーのクリックと非表示という人間のフィードバック、ユーザー向けのアンケート、およびAds Manager経由の広告主からの直接のフィードバックを集めて活用しています。モデルはユーザーの意図を理解し、批判的に考えて価値あるものを届けられるかもしれませんが、好みを形づくるのは人間です。開発中にはチームがフィードバックを受けられるようにしており、ChatGPTユーザーと広告主の双方が望むことに直接耳を傾けています。このフィードバックはモデルの観察に基づくフィードバックよりもさらに方向性を左右し、正しい製品判断へ素早く反復できた一因となっています。

Codexの活用と今後の広告フォーマット

1年前のOpenAIにはChatGPTの広告システムがなく、この問題領域を考える人も数人しかいませんでしたが、現在は年換算ランレートで10億ドルを超える規模を支える堅牢な広告システムがあり、LLMベースのオーケストレーターが広告フローを動かしています。Codexは根本的なフォースマルチプライヤー(force multiplier)であり、OpenAIがこの大きな利用規模のマイルストーンを他に類を見ない速さで達成することを可能にしました。OpenAIは最初から、システムを素早く構築・拡張するためにCodexを使うようチームと開発ワークフローを整え、Codexが確実かつ安全にコードを出荷できるガードレールを構築しています。また、並行してCodex向けにデータインフラのプラグインを整備し、インサイトの収集から、新しいプロダクト機能、品質改善、システム性能の向上といったシステム改善の反映までのループを大幅に短縮しました。

今後OpenAIは、ユーザーにとっての価値と広告主にとっての価値を高めるため、より動的な広告フォーマットの実験を継続します。例として、広告を通じてユーザーが企業と直接話せるようにすることが挙げられます。OpenAIのモデルを基盤とし、継続的なフィードバックループを備えた広告スタックの自己改善アーキテクチャは、関連性とパーソナライゼーションを時間をかけて改善し続ける能力を加速させます。