
Text generation e NLP per marketing
Applicare NLP e generative AI al marketing: copy generation, sentiment e classificazione.
Cosa imparerai
- Misurare il sentiment di recensioni e ticket con VADER e TextBlob per segmento
- Estrarre temi ricorrenti con topic modeling LDA e tracciarne il volume nel tempo
- Generare varianti di copy con vincoli di tono e portarle in test con baseline e holdout
Collegamenti
Text generation e NLP per marketing
Questa lezione appartiene al binario ml-tabellare: anche il testo, una volta misurato, diventa una tabella con cui ragionare. L’intelligenza artificiale generativa ha reso facile produrre parole; il nostro lavoro e renderle verificabili.
Dal testo al segnale misurabile
L’NLP per marketing trasforma recensioni, ticket e testi di campagna in segnali misurabili e varianti di copy da testare. Il testo smette di essere un’impressione e diventa un dato.
Il percorso in sei passi
La sequenza va dalla raccolta al test, e ogni passaggio mantiene la tracciabilita del testo originale.
- Definisci unita testuale, periodo e metrica di business prima di analizzare.
- Raccogli recensioni, ticket e testi con identificativo, data e segmento.
- Misura il
sentimentper documento e aggrega per mese e segmento. - Estrai temi ricorrenti e volume per tema nel tempo.
- Genera varianti di copy con vincoli di tono, lunghezza e compliance.
- Porta le varianti in test con baseline,
holdoute metrica incrementale.
Usi pratici per testi e recensioni
Generare e facile, governare e il lavoro. La tabella ordina gli usi per input tabellare e decisione.
| Uso | Input tabellare | Decisione supportata |
|---|---|---|
| Generazione copy | Scheda prodotto, comportamento, storico | Quali headline e subject testare |
Sentiment | Recensioni, social, ticket con data | Dove la percezione sta peggiorando |
Topic modeling | Migliaia di testi puliti | Di cosa parlano clienti e competitor |
| Classificazione intenti | Testo lead con etichetta | Come instradare informational e transactional |
| Personalizzazione | Comportamento recente e preferenze | Quale corpo email inviare a ciascuno |
Verdetto: dai priorita a sentiment e temi prima della generazione, perche senza misura della percezione le varianti restano creativita non verificabile.
Sentiment su recensioni e ticket
Due librerie coprono la maggior parte dei casi. VADER legge social con emoji e slang, TextBlob lavora meglio su testi formali come email e ticket.
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
from textblob import TextBlob
analyzer = SentimentIntensityAnalyzer()
# VADER: ottimizzato per social media (capisce emoji, slang, punteggiatura)
df['vader_compound'] = df['review_text'].apply(
lambda x: analyzer.polarity_scores(str(x))['compound'])
# TextBlob: più semplice, buono per testi formali (email, ticket)
df['textblob_polarity'] = df['support_ticket'].apply(
lambda x: TextBlob(str(x)).sentiment.polarity)
# Trend mensile del sentiment
df['month'] = pd.to_datetime(df['date']).dt.to_period('M')
sentiment_trend = df.groupby('month')['vader_compound'].agg(['mean', 'std', 'count'])
Un calo del sentiment superiore a 0.2 in un mese precede di 4-8 settimane un calo della retention e funziona come indicatore anticipatore.
Topic modeling con LDA
Con pulizia, vettorizzazione e LDA emergono i temi ricorrenti da migliaia di recensioni senza lettura manuale integrale.
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation
# Preprocessing
def clean_text(text):
text = re.sub(r'http\S+', '', str(text))
text = re.sub(r'[^a-zA-Z\s]', '', text.lower())
return ' '.join([w for w in text.split() if len(w) > 2])
df['clean_text'] = df['review_text'].apply(clean_text)
# Vectorize
vectorizer = CountVectorizer(max_df=0.9, min_df=0.01, stop_words='english')
dtm = vectorizer.fit_transform(df['clean_text'])
# LDA per 5 topic
lda = LatentDirichletAllocation(n_components=5, random_state=42)
lda.fit(dtm)
# Top parole per topic
for i, topic in enumerate(lda.components_):
top_words = [vectorizer.get_feature_names_out()[j]
for j in topic.argsort()[-10:]]
print(f"Topic {i}: {', '.join(top_words)}")
Nelle recensioni e-commerce i temi tipici sono qualita prodotto, velocita spedizione, servizio clienti, taglia e rapporto qualita prezzo. Il volume per tema nel tempo mostra dove il prodotto migliora o peggiora.
Varianti di copy da testare
Il modello produce ipotesi, il test decide. Le varianti entrano in A/B con regole rigide di tono e lunghezza.
def generate_email_variants(customer_context):
prompt = f"""Genera 3 varianti di subject line per email di carrello abbandonato.
Cliente: {customer_context['name']}
Prodotti nel carrello: {customer_context['items']}
Valore carrello: €{customer_context['value']}
Ultimo acquisto: {customer_context['last_purchase']}
Categoria preferita: {customer_context['preferred_category']}
Regole:
- Massimo 50 caratteri
- Tono friendly ma non disperato
- Una variante deve menzionare il prodotto specifico
- Una variante deve creare urgenza gentile
Output: solo le 3 subject line, una per riga."""
response = openai.ChatCompletion.create(
model="gpt-4", messages=[{"role": "user", "content": prompt}])
return response.choices[0].message.content.strip().split('\n')
Da cinquanta varianti generate ne entrano dieci in test dopo controlli su tono, promessa, compliance e differenziazione reale.
Similarita semantica per ricerca
Gli embeddings cercano per significato e non per parola esatta, con ricerca semantica e raccomandazione piu robuste.
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
# Embedding di descrizioni prodotto
products = df['product_description'].tolist()
embeddings = model.encode(products)
# Trova prodotti simili a una query
query = "scarpe running leggere per maratona"
query_emb = model.encode([query])[0]
from sklearn.metrics.pairwise import cosine_similarity
similarities = cosine_similarity([query_emb], embeddings)[0]
top_matches = df.iloc[similarities.argsort()[-5:][::-1]]
Una ricerca come vestito elegante per matrimonio trova abito cerimonia anche senza corrispondenza esatta di parole.
L’errore del testo senza filtro
L’errore piu comune e pubblicare testo generato senza filtri, senza revisione e senza test. Succede quando il team mostra varianti senza baseline, senza guardrail di brand e senza metrica incrementale. In quel caso il volume cresce ma qualita, coerenza e apprendimento peggiorano.
Il caso Sephora
Sephora applica NLP a milioni di recensioni prodotto con pipeline tabellare. Il sistema individua trend emergenti come acido ialuronico citato 3 volte piu spesso e personalizza le email in base al linguaggio usato dai clienti nelle recensioni. Le descrizioni prodotto ottimizzate per ricerca vengono generate in 8 lingue con revisione e controllo. Il team stima una riduzione del 60 per cento del tempo di produzione dei contenuti marketing, con qualita governata da misura e test.
Domande per chiudere la lezione
- Quale calo mensile di sentiment anticipa un calo di retention?
- Quale volume per tema indica un problema di prodotto in crescita?
- Quali controlli portano da cinquanta varianti a dieci testabili?
- Quale metrica incrementale valida una variante generata?
Bloccato su questo argomento o vuoi applicarlo al tuo caso? Prenota una call di 15 minuti con un analista esperto.
Percorso collegato
Lezioni da leggere insieme
Questi collegamenti portano la lezione dentro il resto del corso: basi da riprendere, passaggi successivi e connessioni tematiche tra moduli.