Come abbiamo creato il nuovo sistema pubblicitario di ChatGPT, tra fiducia e pertinenza
Di Ritendra Datta e Karthik Gopalratnam, membri dello staff tecnico
I sistemi pubblicitari tradizionali sono progettati per rispondere a singole manifestazioni dell'intento dell'utente. Un utente cerca o visualizza qualcosa online; il sistema pubblicitario riceve le query e le visualizzazioni di pagina come eventi e cerca annunci corrispondenti sulla base di tali eventi. Costruire uno stack pubblicitario per ChatGPT è stato diverso: l'intento dell'utente si sviluppa attraverso le conversazioni e cambia nel corso di più turni, a volte senza che emerga un momento adatto alla pubblicità. Per supportare questo nuovo paradigma, abbiamo creato un sistema di erogazione degli annunci su misura. Questo nuovo tipo di stack pubblicitario si basa su un LLM di frontiera personalizzato e sottoposto a post-addestramento, che richiama strumenti per il recupero (individuare le opzioni migliori), la classificazione (prevedere il coinvolgimento degli utenti), la pertinenza (valutare l'utilità dell'annuncio) e la gestione delle aste per la selezione finale degli annunci e la determinazione dei prezzi.
Il nostro sistema pubblicitario tiene conto delle sfumature degli obiettivi degli utenti e della loro evoluzione grazie a tre scelte progettuali chiave: 1) implementare sessioni pubblicitarie con stato, che ricordano le informazioni tra i turni di una conversazione e tra conversazioni diverse; 2) affidarsi a un LLM personalizzato e sottoposto a post-addestramento, che usa un'architettura basata su chiamate a strumenti per interpretare il contesto e l'intento sottostante di una conversazione, quindi selezionare, classificare ed erogare gli annunci in modo efficace; 3) eseguire il processo di selezione degli annunci in un servizio dedicato, separato dalla generazione delle risposte di ChatGPT, per evitare che la pubblicità influenzi le risposte e mantenere neutrale la voce di ChatGPT. Usiamo il nostro LLM sottoposto a post-addestramento per orchestrare l'intero flusso pubblicitario, individuando l'annuncio giusto da mostrare al momento giusto in base sia al turno corrente dell'utente sia alla cronologia delle conversazioni. Se un tempo costruire da zero un sistema pubblicitario capace di migliorarsi autonomamente richiedeva anni, ChatGPT Ads ha raggiunto un ritmo di ricavi equivalente a 1 miliardo di dollari su base annua in meno di 200 giorni dal lancio. Da allora, oltre 100.000 inserzionisti hanno pubblicato annunci su ChatGPT.
Una richiesta pubblicitaria convenzionale nasce di solito da un evento ben definito. Un utente invia una query di ricerca o apre una pagina web e il sistema pubblicitario riceve una richiesta. Questo tipo di sistema è piuttosto semplice: recupera potenziali annunci candidati, li classifica, esegue un'asta per attribuire un prezzo adeguato all'opportunità e mostra all'utente l'annuncio risultante. In ChatGPT non si presenta spontaneamente un momento altrettanto definito.
Chi avvia una conversazione con ChatGPT ha degli obiettivi, non una query di ricerca a cui basta una sola risposta. Potrebbe voler organizzare un viaggio, scegliere un software per la propria azienda, arredare una casa o dedicarsi a un nuovo hobby. Non tutto questo si risolve in un solo turno di conversazione. Spesso ChatGPT aiuta l'utente a chiarire ciò che conta man mano che procede.
Ad esempio, il nostro team di ingegneria ha chiesto a ChatGPT come allenarsi per una gara: la conversazione inizia con una domanda generica sulla corsa. Diversi turni dopo, il team chiede quali scarpe usare per allenarsi. Il significato commerciale della conversazione cambia con ogni nuovo vincolo, e questo contesto personalizzato evolve attraverso più sessioni. Un sistema che agisse sul primo messaggio potrebbe fraintendere del tutto l'intento, rischiando di peggiorare l'esperienza dell'utente e di intralciarlo.
Per realizzare il nostro sistema pubblicitario abbiamo dovuto superare l'architettura basata su richiesta e risposta e costruire da zero uno stack capace di individuare potenziali opportunità economiche, dando la priorità alla fiducia degli utenti e al valore offerto loro.
Trasformare ogni messaggio in una richiesta a sé stante, come fa un sistema pubblicitario tradizionale, avrebbe comportato alcuni rischi nel contesto della nostra chat: 1) fraintendere l'obiettivo dell'utente semplificandolo eccessivamente; 2) avviare il flusso pubblicitario troppo presto, prima che la reale esigenza dell'utente sia chiara; 3) mostrare annunci che ostacolano il percorso dell'utente anziché sostenerlo; 4) rieseguire in modo inefficiente il flusso pubblicitario a ogni modifica della richiesta, generando rumore e costi inutili. Anziché essere incentrato su singoli eventi, il sistema pubblicitario, composto da recupero, classificazione ed erogazione, mantiene una sessione con stato. La sessione pubblicitaria resta quindi attiva per tutta la durata di un turno idoneo, ricordando e aggiornando le informazioni man mano che evolvono. ChatGPT invia il contesto iniziale della richiesta al server pubblicitario. Il sistema pubblicitario segue l'evoluzione dello scambio e vi si adatta, anziché basarsi su un'unica query che ne appiattisce il contesto.
Il processo di selezione degli annunci viene eseguito in parallelo alla normale generazione delle risposte di ChatGPT, per garantire che il flusso pubblicitario non le influenzi. Gli annunci vengono filtrati e selezionati da un sistema separato, che elabora la conversazione secondo i propri vincoli di idoneità, qualità ed erogazione. Questa importante separazione architetturale, con servizi diversi che usano modelli e codice distinti, lascia ai server principali di ChatGPT il compito di generare la risposta organica. Nel frattempo, il sistema pubblicitario valuta autonomamente se esiste un'opportunità adatta per la pubblicità e, in caso affermativo, prepara un posizionamento sponsorizzato attraverso un processo di pubblicazione separato.
La pubblicità viene gestita in parallelo al percorso di risposta di ChatGPT.
Oltre a tutelare l'esperienza utente, questa separazione ha alcune conseguenze pratiche. ChatGPT non dipende dal sistema pubblicitario: i servizi non sono in alcun modo interconnessi e non condividono un modello di generazione dei contenuti. Quindi, se il sistema di pubblicazione degli annunci non è disponibile o è lento, la risposta organica di ChatGPT prosegue senza risentirne. Questo significa che il sistema pubblicitario non può bloccare né rallentare ChatGPT. Un altro vantaggio di questa separazione è che mantiene molto alta la soglia di valore richiesta agli annunci. Non restituire alcun annuncio è un esito normale e positivo. Il sistema eroga un annuncio solo se offre un chiaro vantaggio a utenti e inserzionisti.
L'altro componente architetturale chiave del nostro stack pubblicitario è l'LLM sottoposto a post-addestramento che interpreta le conversazioni e gestisce l'intero flusso pubblicitario in un ciclo agentico, richiamando tramite strumenti le funzioni principali del sistema: dal recupero degli annunci alla classificazione, fino all'asta e, infine, all'erogazione. Chiamiamo questo LLM orchestratore.
La prima fase del flusso pubblicitario consiste nel comprendere l'intento dell'utente per avviare il recupero: una raccolta rapida e volutamente ampia di potenziali annunci da filtrare in seguito. Ricevere la conversazione in modo incrementale rende il problema del recupero più ricco di informazioni, ma anche più ambiguo, perché il sistema pubblicitario deve distinguere l'intento attuale dal contesto ormai superato. L'orchestratore deve interpretare i riferimenti ai messaggi precedenti, riconoscere quando l'utente sta facendo un'ipotesi ed evitare di trattare ogni menzione di un prodotto o servizio come una richiesta di acquisto.
L'orchestratore pubblicitario usa la conversazione e il contesto utente disponibili, procedendo per iterazioni alla ricerca di annunci validi e scegliendo di volta in volta quale strumento richiamare e quando. L'obiettivo è trovare l'annuncio più adatto a quella conversazione e a quel contesto, bilanciando un elevato valore per l'utente con un elevato valore per l'inserzionista. Se l'utente sceglie di personalizzare gli annunci, l'orchestratore considera anche le informazioni non sensibili disponibili sulle sue conversazioni passate per trovare gli annunci più adatti.
L'orchestratore pubblicitario richiama in modo iterativo gli strumenti di erogazione per trovare annunci di valore.
Man mano che la conversazione prosegue e riceve informazioni più aggiornate, l'orchestratore pubblicitario può eseguire una nuova serie di chiamate agli strumenti con il contesto aggiornato per trovare annunci migliori e restituirli al client, che può usarli se arrivano in tempo.
L'orchestratore è progettato per bilanciare il valore per gli utenti e quello per gli inserzionisti, dando sempre la priorità agli utenti.
Il sistema pubblicitario è composto da singoli strumenti, che l'orchestratore richiama in modo iterativo per trovare gli annunci migliori per una conversazione. In sintesi, l'orchestratore trasforma le conversazioni in brevi riepiloghi testuali, poi convertiti in embedding semantici (rappresentazioni del significato memorizzate in una forma che il sistema pubblicitario può analizzare più facilmente). Usa questi embedding per recuperare annunci candidati, li filtra in base all'idoneità (considerando budget, impostazioni dell'utente e altri controlli preliminari), ne valuta qualità e pertinenza e li classifica un'ultima volta per individuare opportunità di alto valore da inserire alla fine di una risposta in chat. Ogni annuncio deve quindi soddisfare criteri rigorosi di idoneità e pertinenza per poter essere inserito.
L'LLM orchestratore prepara innanzitutto una o più query che rappresentano l'intento commerciale rilevante. Può, ad esempio, riformulare il contesto della conversazione per ampliare le possibilità commerciali oltre le query di ricerca con corrispondenza diretta, per poi creare rappresentazioni semantiche. L'orchestratore condensa così una conversazione di più turni in una sintesi destinata al sistema di recupero, che cerca gli annunci nel nostro database in modo mirato.
Gli annunci saranno più utili sia agli utenti sia agli inserzionisti se verranno mostrati solo quando l'intento dell'utente è stato compreso a fondo. L'uso di più query permette di preservare aspetti diversi dell'intento. Una conversazione sull'organizzazione di un viaggio, ad esempio, potrebbe contenere esigenze distinte legate a trasporti, alloggi o attività. Il sistema di recupero può mantenere queste distinzioni anziché comprimere l'intera conversazione in un'unica stringa letterale.
A titolo di esempio, consideriamo una possibile sequenza di messaggi sulle scarpe da trekking:
Cosa dovrei visitare durante un viaggio di due giorni a Yosemite?
Farà freddo la prossima settimana?
Nuove linee di prodotti di [insert brand]?
Sebbene l'utente non abbia collegato la domanda sulla marca di scarpe al viaggio a Yosemite, nel nostro sistema pubblicitario questa conversazione potrebbe essere rappresentata da due query, come [shoes appropriate for hiking trip] e [new [brand] product lines good for travel]. Questo potrebbe essere solo il primo tentativo: l'orchestratore è progettato per affinare queste rappresentazioni in modo iterativo, finché non trova nel nostro inventario annunci di grande valore per l'utente.
Il recupero è il processo con cui si crea un insieme volutamente ampio di possibili annunci. I candidati possono provenire da strategie di recupero diverse e competere in seguito con gli stessi vincoli di pubblicazione. Creiamo più indici, ottimizzati per diversi vincoli di sistema e di prodotto. Ad esempio, l'indice per gli annunci da feed di prodotti è progettato per tenere conto delle recensioni positive o negative dei prodotti mentre recupera i migliori annunci possibili. Questo aspetto non è rilevante per altri annunci a cui potrebbero non essere associate recensioni. Ogni indice è ottimizzato per una variante della ricerca approssimata dei vicini più prossimi (ANN), utilizzando embedding che rappresentano l'intento dell'utente. Questa ricerca ANN è un algoritmo di approssimazione per il recupero su grandi indici semantici: recupera gli annunci molto rapidamente, avvicinandosi a una buona soluzione anziché cercare “quella giusta”, e conserva la maggior parte dei candidati pertinenti.
Il sistema pubblicitario usa query riformulate per creare embedding semantici durante il recupero degli annunci e generare un ampio insieme di annunci candidati.
Il filtraggio serve a escludere tutti gli annunci candidati che non soddisfano i requisiti di pubblicazione in termini di pertinenza, offerte e budget. A seconda del candidato e della configurazione, i controlli possono riguardare la disponibilità di creatività e campagne (se la campagna o le creatività pubblicitarie sono attive), il targeting della campagna (ad esempio, in quali aree geografiche e lingue può operare), i vincoli delle policy (i requisiti di conformità su ciò che può essere pubblicizzato), la disponibilità di budget (se la campagna dispone ancora di fondi da spendere), il ritmo di spesa (se la campagna debba spendere ora o in un altro momento della giornata), la compatibilità del posizionamento (in quali tipi di conversazione l'annuncio può comparire) e la deduplicazione a livello di inserzionista e campagna (selezionare un numero adeguato di annunci per inserzionista per garantire una partecipazione equa tra le aziende).
I candidati che superano i controlli di idoneità passano alla fase di assegnazione dei punteggi. Qui l'orchestratore richiama tramite strumenti vari sistemi di valutazione per considerare aspetti della pubblicazione come la pertinenza semantica (l'annuncio è pertinente all'obiettivo dell'utente?), il coinvolgimento previsto (è probabile che l'annuncio venga visualizzato, riceva clic e porti al risultato desiderato dall'inserzionista?) e le prestazioni storiche (finora l'annuncio ha ottenuto buoni risultati quando è stato mostrato agli utenti?). Prima dell'asta, l'orchestratore filtra inoltre gli annunci per garantirne pertinenza e sicurezza. Questi sistemi restringono la selezione a un insieme più piccolo di candidati pronti per l'asta, ma non determinano ancora quale annuncio verrà erogato.
L'orchestratore valuta i candidati preparati nel contesto della conversazione e sceglie quali annunci siano abbastanza adatti da accedere all'asta finale. L'orchestratore non decide direttamente quale annuncio verrà pubblicato, né ne stabilisce il prezzo. Propone candidati adatti al contesto, che lo strumento d'asta valuterà.
L'asta applica i meccanismi finali di pubblicazione, tra cui l'ammissione all'asta (superamento di una soglia minima di pertinenza e valore), il ritmo di spesa (distribuzione più uniforme del budget pubblicitario), il calcolo delle offerte e delle caratteristiche dell'asta, la classificazione corretta per la qualità, la determinazione del prezzo e la selezione finale.
Dopo l'asta, un annuncio potrebbe non essere erogato per due motivi, entrambi specifici della natura conversazionale di ChatGPT.
L'annuncio potrebbe risultare inappropriato nella chat: anche se i modelli di integrità (quelli che decidono quando è opportuno pubblicare un annuncio) hanno ritenuto sicura la conversazione per un posizionamento pubblicitario e l'annuncio è stato giudicato conforme alle policy, a volte può comunque risultare inappropriato nel contesto di determinate conversazioni. L'orchestratore impedisce che questi annunci vengano mostrati.
La richiesta pubblicitaria potrebbe non arrivare in tempo: se il modello di ChatGPT è pronto a rispondere ma l'annuncio non è ancora pronto per essere inserito, la richiesta pubblicitaria va in timeout e l'annuncio non viene erogato. Uno degli obiettivi del sistema pubblicitario è quindi funzionare il più velocemente possibile. Il tempo di risposta del modello di ChatGPT è variabile e non ritardiamo le risposte in chat per attendere il caricamento degli annunci.
Se tutti i controlli precedenti vengono superati, inviamo l'annuncio al frontend per il rendering. Consideriamo questo passaggio un'erogazione dell'annuncio lato server, ma potremmo comunque non mostrarlo all'utente: è una scelta progettuale.
In un prodotto conversazionale come ChatGPT, l'erogazione lato server di una creatività pubblicitaria non garantisce che l'annuncio venga visualizzato: deve anche arrivare in tempo per essere incluso nel turno corrente. La creatività pubblicitaria include titolo, descrizione, link di destinazione ed eventuali inviti all'azione. Il sistema pubblicitario restituisce anche un preambolo generato dal modello: una breve introduzione neutra che spiega il legame tra l'annuncio e la conversazione. Tenere il preambolo separato dalla creatività preserva il messaggio dell'inserzionista e mantiene neutrale la voce di ChatGPT.
Il frontend di ChatGPT riceve il preambolo e la creatività pubblicitaria in un unico pacchetto. Se il pacchetto arriva prima che la risposta di ChatGPT sia stata interamente generata, il frontend mostra l'annuncio sotto la risposta, indicandolo chiaramente come sponsorizzato. Se arriva troppo tardi, l'annuncio non viene mostrato in quel turno. È questa la differenza tra l'erogazione di un annuncio lato server e un'impressione pubblicitaria effettivamente visibile all'utente.
La selezione del vincitore e l'erogazione sono eventi distinti. Un annuncio selezionato viene considerato erogato solo dopo che ChatGPT ne ha approvato e mostrato il posizionamento e l'erogazione è stata confermata.
Il nostro stack pubblicitario utilizza sistemi tradizionali di logging e pipeline di dati, con tre vantaggi principali: gli inserzionisti possono integrare più facilmente i propri sistemi esistenti con il nostro stack, possono migliorare le loro strategie grazie ai dati dei report e il nostro team può individuare le aree del sistema da migliorare. Oltre a questi strumenti di reportistica e ottimizzazione, utilizziamo un modello di alta qualità per valutare l'erogazione e addestrare altri modelli pubblicitari, creando un potente ciclo di automiglioramento.
Le analisi dettagliate di ciò che è accaduto ci aiutano a comprendere e migliorare separatamente ogni componente del sistema pubblicitario. Il sistema di elaborazione dei log registra anche esiti granulari, come:
Il turno non era idoneo alla pubblicità.
È stata avviata una sessione pubblicitaria, ma non è stato richiesto alcun recupero.
Il recupero non ha restituito candidati.
Sono stati recuperati candidati, ma l'idratazione dei dati non è riuscita o i controlli di idoneità non sono stati superati.
È stato erogato un annuncio, che ha poi ricevuto un'interazione.
Queste analisi dettagliate ci aiutano a migliorare separatamente ogni componente del sistema di pubblicazione degli annunci. Per migliorare il rilevamento delle opportunità servono evidenze diverse da quelle necessarie per migliorare il recupero, la qualità dei candidati, la partecipazione alle aste o l'affidabilità dell'erogazione.
I sistemi di erogazione, pubblicazione e qualità osservano ciascuno una parte diversa del ciclo di vita. L'elaborazione soggetta a controlli sulla privacy determina quali dati possono essere usati per la misurazione e il miglioramento dei modelli.
L'idea alla base della valutazione tramite modelli è che i nostri modelli più potenti e con le maggiori capacità di ragionamento osservino e valutino i risultati del sistema, per poi migliorare l'LLM sottoposto a post-addestramento attraverso ulteriore addestramento. Ad esempio, possiamo usare modelli più piccoli ed efficienti, o con minori capacità di ragionamento, per l'orchestrazione o il recupero, se il nostro modello più potente raccoglie feedback e addestra questi piccoli esecutori a svolgere il lavoro nel miglior modo possibile.
Raccogliamo il feedback delle persone e lo usiamo per intervenire: dai clic e dagli annunci nascosti dagli utenti ai sondaggi rivolti agli utenti, fino ai commenti diretti degli inserzionisti tramite Ads Manager. Durante lo sviluppo, il nostro team resta inoltre disponibile a ricevere feedback e ascolta direttamente ciò che desiderano sia gli utenti di ChatGPT sia gli inserzionisti. Questo feedback orienta le nostre scelte ancora più di quello basato sulle osservazioni del modello ed è uno dei fattori che ci hanno permesso di arrivare rapidamente, per iterazioni successive, alle giuste decisioni di prodotto. Il modello può comprendere l'intento dell'utente e ragionare in modo critico per offrire qualcosa di utile, ma sono le persone a definire il buon gusto.
Un anno fa non avevamo un sistema pubblicitario e solo poche persone stavano riflettendo su queste sfide. Oggi abbiamo un sistema pubblicitario solido che genera ricavi per oltre 1 miliardo di dollari su base annua, al ritmo attuale, con un orchestratore basato su LLM che gestisce il flusso pubblicitario. Codex ha moltiplicato in modo decisivo le nostre capacità, permettendoci di costruire il sistema da zero e raggiungere questo importante traguardo di utilizzo con una rapidità senza precedenti. Fin dall'inizio abbiamo organizzato il team e i flussi di sviluppo per usare Codex e costruire e ampliare rapidamente il sistema. Abbiamo creato misure di protezione per consentire a Codex di rilasciare codice in modo affidabile e sicuro. In parallelo, abbiamo predisposto per Codex plugin per l'infrastruttura dati, riducendo drasticamente i tempi tra la raccolta di informazioni utili e l'introduzione di miglioramenti al sistema: nuove funzionalità di prodotto, maggiore qualità e migliori prestazioni.
La combinazione dei limiti del nostro sistema, fondati sui nostri principi pubblicitari, e dell'orchestratore basato su LLM ci permette di rendere utile la pubblicità senza trattare ogni conversazione come una richiesta di annunci. In futuro continueremo a sperimentare formati pubblicitari più dinamici per aumentare il valore per gli utenti (ad esempio, permettendo loro di parlare direttamente con le aziende tramite gli annunci) e per gli inserzionisti. L'architettura dello stack, capace di migliorarsi autonomamente e basata su modelli OpenAI con cicli di feedback continui, ci permetterà di migliorare sempre più rapidamente pertinenza e personalizzazione nel tempo.



