Un compromesso tra coerenza e creatività dei modelli LLM

Un compromesso tra coerenza e creatività dei modelli LLM

Condividi con i tuoi amici...

Abbiamo già spiegato che cos’è L’apprendimento per rinforzo applicato ai modelli di AI: Reinforcement learning.

Reinforcement Learning from Human Feedback (RLHF)

Il Reinforcement Learning from Human Feedback (RLHF) è un approccio nell’ambito dell’apprendimento automatico che combina il reinforcement learning (apprendimento per rinforzo) con il feedback umano per migliorare le prestazioni di un modello. Questo metodo si basa sull’idea che i modelli di intelligenza artificiale possano apprendere più efficacemente quando ricevono indicazioni dirette da esseri umani, oltre ai segnali di ricompensa o punizione tradizionali utilizzati nel reinforcement learning standard.

Gli esseri umani forniscono feedback direttamente sulle azioni dell’agente, indicando se sono appropriate o meno. Gli esseri umani possono esprimere preferenze tra diverse azioni o risultati, aiutando a guidare l’apprendimento dell’agente verso comportamenti desiderati.

Processo di RLHF:

  • Determinare l’obiettivo che l’agente deve raggiungere e definire l’ambiente in cui opererà.
  • Gli esseri umani osservano le azioni dell’agente e forniscono feedback, che può essere positivo (ricompensa) o negativo (punizione).
  • L’agente utilizza il feedback ricevuto per aggiornare il suo modello interno e migliorare le sue decisioni future.
  • Il processo viene ripetuto, con l’agente che apprende progressivamente a prendere decisioni migliori basate sul feedback umano e le ricompense ambientali.

L’integrazione del feedback umano può portare a un apprendimento più rapido ed efficiente rispetto all’uso delle sole ricompense ambientali. Il feedback umano aiuta a garantire che le azioni dell’agente siano allineate con le aspettative e i valori umani. In contesti complessi o ambigui, il feedback umano può fornire informazioni cruciali che l’agente potrebbe non essere in grado di dedurre autonomamente.

Trade-off tra coerenza e creatività

Sembra che vi sia un trade-off tra coerenza e creatività dei modelli LLM.

D’ora in poi parleremo di modelli base quando ci riferiremo a modelli privi di RLHF, mentre parleremo di modelli allineati quando ci riferiremo a modelli in cui è intervenuto il feedback umano nella fase di apprendimento.

Prendiamo in considerazione il seguente studio recente

Creativity Has Left the Chat: The Price of Debiasing Language Models

Gli esperimenti descritti nel documento hanno l’obiettivo di indagare gli effetti del processo di Reinforcement Learning from Human Feedback (RLHF) sulla creatività e la diversità degli output dei modelli di linguaggio di grandi dimensioni (LLMs).

Nello specifico, gli esperimenti si concentrano sull’analisi della potenziale riduzione della creatività dovuta all’allineamento dei modelli con le preferenze umane, esaminando tre aspetti chiave: la diversità semantica, la diversità sintattica e la capacità dei modelli di generare output vari e creativi.

Il principale obiettivo degli esperimenti è analizzare se il processo di allineamento tramite RLHF influisce negativamente sulla capacità dei modelli di linguaggio di generare output con alta diversità sintattica e semantica, una qualità definita come “creatività”. Questo aspetto è cruciale nei contesti di marketing e altre applicazioni creative dove la varietà e l’originalità degli output sono essenziali per l’efficacia e l’engagement delle iniziative.

Per capire se un modello di linguaggio è più coerente o più creativo, è necessario considerare diversi fattori legati alla diversità sintattica e semantica delle risposte generate dal modello.

Diversità Sintattica

L’entropia dei token misura l’incertezza nella distribuzione delle parole generate. Un’entropia più alta indica una maggiore varietà nelle scelte di parole e strutture grammaticali. Modelli base (non allineati) tendono ad avere un’entropia più alta rispetto ai modelli allineati, suggerendo una maggiore creatività.

Diversità Semantica

Gli embedding dei modelli base sono più sparsi e distribuiti nell’ambiente a molte dimensioni, suggerendo una maggiore varietà di significati e idee. Al contrario, i modelli allineati tendono a formare dei cluster distinti, indicativi di una gamma limitata di output e, quindi, minore creatività.
L’analisi dei punteggi di similarità coseno può evidenziare quanto le risposte siano simili tra loro. I modelli con maggiore diversità semantica avranno punteggi di similarità più bassi tra le risposte generate.

Nota che i punti dei cluster in un’analisi K-means per la diversità semantica rappresentano gruppi di frasi o testi che sono semanticamente simili tra loro. In altre parole, K-means clustering è utilizzato per organizzare le frasi in gruppi basati sulla loro similarità semantica, dove ogni cluster contiene frasi che trattano idee o concetti simili.

Nel contesto della diversità semantica, i punti dei cluster possono mostrare quanto variegati sono i contenuti generati. Più i punti dei cluster sono distinti e sparsi nello spazio delle embeddings, maggiore è la diversità semantica. Al contrario, se i punti sono strettamente raggruppati, significa che i contenuti sono meno vari e più ripetitivi.

Dunque, un modello è considerato più coerente se produce risposte più consistenti e ripetitive, mentre è considerato più creativo se mostra una maggiore varietà nelle scelte sintattiche e semantiche. La scelta tra un modello coerente e uno creativo dipende molto dalle esigenze dell’applicazione specifica: per esempio, la creatività è cruciale nel marketing e nella generazione di contenuti innovativi, mentre la coerenza è più importante in contesti come il supporto clienti e la moderazione dei contenuti.

Esperimenti

Sono stati condotti tre esperimenti principali per valutare l’impatto del processo di allineamento tramite Reinforcement Learning from Human Feedback (RLHF) sulla creatività e diversità di output dei modelli linguistici.

Gli esperimenti si sono svolti utilizzando i modelli della serie Llama-2, sia nella versione base che in quella allineata, e sono stati strutturati come segue:

  1. Generazione di Personaggi Cliente e Recensioni di Prodotti

Questo esperimento ha confrontato la diversità dei personaggi cliente e le recensioni di prodotti generati dai modelli base e allineati. Ogni modello ha generato 100 personaggi cliente unici con attributi quali nome, cognome, genere, età, nazionalità, etnia e tipo di personalità.

Il modello allineato ha prodotto meno diversità rispetto al modello base. Ad esempio, i nomi generati erano più ripetitivi e meno vari.Le recensioni di prodotti generate dal modello allineato mostravano frasi e strutture ripetitive come “highly recommend” e “this machine is a game changer”

  1. Diversità Semantica
    Diversità semantica è stata esaminata tramite la capacità dei modelli di recitare un fatto storico su Grace Hopper in vari modi. Le uscite generate sono state codificate in embedding frasali e visualizzate tramite tecniche di riduzione dimensionale (t-SNE).

Gli embedding del modello base erano più sparsi e distribuiti, suggerendo una maggiore diversità semantica. Il modello allineato tendeva a formare cluster distinti, esprimendo le informazioni in modi limitati e favorendo certe frasi. L’analisi della similarità coseno ha mostrato che i punteggi di similarità delle risposte del modello allineato erano significativamente più alti rispetto a quelli del modello base, indicando una minore diversità semantica.

Creativity Has Left the Chat: The Price of Debiasing Language Models

3. Diversità Sintattica

Questo esperimento ha analizzato la diversità sintattica esaminando l’entropia dei token e le distribuzioni di probabilità sui token previsti. L’entropia misura l’incertezza nella distribuzione dei token generati dal modello.
Il modello base ha mostrato un’entropia media significativamente più alta rispetto al modello allineato, suggerendo una maggiore varietà sintattica.
Il modello allineato aveva distribuzioni di probabilità più concentrate su pochi token, comportandosi più come un algoritmo deterministico.

Questi esperimenti indicano che il processo di RLHF, pur riducendo bias e tossicità, può limitare la creatività dei modelli linguistici. I modelli base, pur essendo più creativi e vari, possono presentare rischi maggiore di bias e contenuti tossici.

La scelta del modello dipenderà dunque dalle esigenze specifiche dell’applicazione: maggiore diversità e creatività per il marketing e scrittura creativa, mentre maggiore coerenza e sicurezza per il supporto clienti e moderazione dei contenuti.

Nei contesti creativi, come la scrittura artistica o il marketing, una certa variabilità e innovazione negli output possono essere desiderabili. Qui, cluster meno distinti potrebbero indicare un’ampia gamma di espressioni e una maggiore capacità di generare risposte uniche. La diversità degli output permette di esplorare nuove idee e modalità di esprimere concetti, aumentando l’engagement e l’efficacia dei contenuti creativi.

D’altra parte, in applicazioni che richiedono risposte accurate e consistenti, troppo variabilità può essere problematica. Cluster distinti rappresentano un set di risposte più prevedibili e verificabili, che possono essere appropriati in contesti come assistenti virtuali, helpdesk, e sistemi di raccomandazione. Modelli allineati tendono a generare risposte più coerenti e conformi alle preferenze umane, risultando più affidabili per applicazioni sensibili.

Strumenti per confrontare i modelli LLM

Di seguito esploriamo gli strumenti matematici e le librerie python utili per fare confronti tra testi in ragione della loro diversità sintattica e semantica. Si tratta di esempi semplici che permettono di ottenere immediatamente un’idea di come ciò può essere fatto.

Entropia che misura la diversità sintattica

Questo codice permette di confrontare l’entropia associata a due testi (text1 e text2) utile per misurare la diversità sintattica

import numpy as np
from collections import Counter
from scipy.stats import entropy

def calculate_entropy(text):
    words = text.split()
    word_counts = Counter(words)
    word_freq = np.array(list(word_counts.values()))
    return entropy(word_freq)

# Esempio di testo
text1 = "a b a b"
text2 = "Il sole splende luminoso. La luna è piena e brillante."

entropy_text1 = calculate_entropy(text1)
entropy_text2 = calculate_entropy(text2)

print(entropy_text1, entropy_text2)

Output:

Diversità semantica

Per misurare la diversità semantica è necessario trasformare le parole in embedding che catturino le loro rappresentazioni semantiche. Gli embedding rappresentano le parole in uno spazio vettoriale continuo, in modo che parole con significati simili siano vicine tra loro. Questo approccio richiede l’utilizzo di un modello di embedding come Word2Vec, GloVe o le rappresentazioni di embedding prodotte da modelli più avanzati come BERT.

Per approfondire la rappresentazione vettoriale delle parole (embedding) leggi l’articolo
Word embedding e il modello Skip-gram

Il calcolo dell’entropia semantica non è diretto come quello sintattico, perché ora si lavora con vettori continui invece che con semplici conteggi di parole. Un approccio potrebbe essere quello di calcolare la distanza tra i vettori delle parole e usare queste distanze per derivare una misura di distribuzione.

Ecco un esempio di come si potrebbe procedere usando Word2Vec per calcolare l’entropia semantica dei testi:

Trasformare le parole in embedding.
Calcolare le distanze tra gli embedding.
Utilizzare le distanze per calcolare una misura di entropia.

Se le distanze tra gli embedding sono distribuite in modo uniforme, l’entropia sarà alta. Ciò indica che le parole nel testo sono semanticamente distinte l’una dall’altra in modo omogeneo. Un’entropia bassa, al contrario, suggerisce che le parole sono più semanticamente simili tra loro, indicando una minore varietà semantica.

L’entropia in questo contesto può essere vista come una misura dell’informazione o della complessità del testo. Testi con alta entropia contengono una maggiore quantità di informazione semantica diversificata, mentre testi con bassa entropia sono più ridondanti o monotematici.

Ecco un codice python completo utile per confrontare semanticamente due testi:

import numpy as np
from collections import Counter
from scipy.stats import entropy
from sklearn.metrics.pairwise import euclidean_distances
from gensim.models import Word2Vec

def calculate_semantic_entropy(text, model):
    words = text.split()
    word_embeddings = [model.wv[word] for word in words if word in model.wv]
    if not word_embeddings:
        return 0.0  # Handle case where no words are in the model vocabulary
    distances = euclidean_distances(word_embeddings)
    flat_distances = distances.flatten()
    nonzero_distances = flat_distances[flat_distances != 0]
    if len(nonzero_distances) == 0:
        return 0.0  # Handle case where all distances are zero
    dist_counts = Counter(nonzero_distances)
    dist_freq = np.array(list(dist_counts.values()))
    return entropy(dist_freq)

# Esempio di testo
text1 = "Hello, how are you?"
text2 = "The cat jumps on the table. The sun shines bright."

# Addestrare un modello Word2Vec per l'esempio
corpus = [text1.split(), text2.split()]
model = Word2Vec(corpus, vector_size=100, window=5, min_count=1, sg=1)

semantic_entropy_text1 = calculate_semantic_entropy(text1, model)
semantic_entropy_text2 = calculate_semantic_entropy(text2, model)

print(semantic_entropy_text1, semantic_entropy_text2)

Ouput:

Un altro approccio è offerto da una rappresentazione in due dimensione dei cluster di punti. Dove questi identificano direttamente gli embeddings delle singole frasi di testo.

Codice Python d’esempio

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.manifold import TSNE
from sentence_transformers import SentenceTransformer
import re

# Funzione per dividere un testo in frasi
def split_into_sentences(text):
    sentences = re.split(r'(?<=[.!?]) +', text)
    return list(set(sentences))  # Rimuove i duplicati

# Testo di esempio con circa 20 frasi diverse
text = """
Il sole splendeva luminoso nel cielo azzurro. La giornata era perfetta per una passeggiata. Maria decise di uscire e godersi il bel tempo. Nel parco, i bambini giocavano e ridevano. Tutto sembrava perfetto. 
Carlo stava leggendo un libro sotto un albero. La brezza leggera faceva frusciare le foglie. Un cane correva felice dietro una palla. I fiori sbocciavano in colori vivaci. Le nuvole bianche fluttuavano pigre nel cielo. 
Un uccellino cinguettava allegramente. Il gelataio passava con il suo carretto. I bambini facevano la fila per un gelato. Un artista di strada suonava una melodia dolce. Gli anziani sedevano sulle panchine chiacchierando. 
Il suono delle risate riempiva l'aria. Una farfalla si posava su un fiore. Il tempo sembrava fermarsi in quel pomeriggio estivo. Ogni angolo del parco raccontava una storia. Le persone erano immerse nella loro felicità. 
Un palloncino rosso volava alto nel cielo. La natura mostrava tutta la sua bellezza. Era una giornata che nessuno avrebbe dimenticato. L'armonia della natura e delle persone era perfetta.
"""

# Dividi il testo in frasi
sentences = split_into_sentences(text)

# Carica il modello di embedding delle frasi
model = SentenceTransformer('all-MiniLM-L6-v2')

# Ottieni gli embedding per ciascuna frase
embeddings = model.encode(sentences)

# Esegui clustering con k-means
num_clusters = 3
kmeans = KMeans(n_clusters=num_clusters, random_state=42)
clusters = kmeans.fit_predict(embeddings)

# Riduci a due dimensioni con t-SNE
# Imposta un valore di perplexity più basso
tsne = TSNE(n_components=2, perplexity=5, random_state=42)
embeddings_2d = tsne.fit_transform(embeddings)

# Visualizza i risultati
plt.figure(figsize=(10, 8))
colors = ['r', 'g', 'b']
for i in range(num_clusters):
    points = embeddings_2d[clusters == i]
    plt.scatter(points[:, 0], points[:, 1], c=colors[i], label=f'Cluster {i}')
for i, sentence in enumerate(sentences):
    plt.annotate(sentence, (embeddings_2d[i, 0], embeddings_2d[i, 1]), fontsize=8)
plt.title('Clustering delle frasi con t-SNE')
plt.legend()
plt.show()


Questo approccio presenta alcuni difetti significativi

t-SNE e PCA sono tecniche di riduzione dimensionale che riducono gli embedding originali in uno spazio a bassa dimensione (2D o 3D). Durante questo processo, si perde molta informazione globale, rendendo difficile quantificare con precisione la diversità semantica complessiva dei testi. I risultati di t-SNE dipendono fortemente dai parametri come la perplexity e il learning rate. La scelta di questi parametri può influenzare significativamente la visualizzazione finale, rendendo i risultati meno robusti e meno affidabili per una quantificazione precisa.

Anche se i punti sono visualizzati in cluster, non sempre rappresentano cluster semantici distinti e discreti. Punti dello stesso cluster possono essere separati da punti di altri cluster, complicando l’interpretazione della diversità semantica.

La densità dei punti in un grafico t-SNE non riflette necessariamente la densità semantica. Punti vicini possono non essere semanticamente simili quanto appaiono, e viceversa.