Svelando il futuro dell’analisi del testo Trendy Topic Modeling con BERT

Il futuro dell'analisi del testo con BERT

Introduzione

Un metodo altamente efficace nell’apprendimento automatico e nell’elaborazione del linguaggio naturale è la modellazione degli argomenti. Un corpus di testo è un esempio di una collezione di documenti. Questa tecnica consiste nel trovare soggetti astratti che vi compaiono. Questo metodo mette in evidenza la struttura sottostante di un corpo di testo, portando alla luce temi e pattern che potrebbero non essere immediatamente visibili.

Per analizzare il contenuto di grandi collezioni di documenti, come ad esempio migliaia di tweet, gli algoritmi di modellazione degli argomenti si basano su tecniche statistiche per trovare pattern nel testo. Questi algoritmi classificano i documenti in pochi argomenti selezionati dopo aver esaminato la frequenza e la co-occorrenza delle parole nei documenti. Di conseguenza, il contenuto appare più ordinato e comprensibile, rendendo più semplice riconoscere i temi e i pattern sottostanti nei dati.

Latent Dirichlet Allocation (LDA), l’analisi semantica latente e la fattorizzazione matriciale non-negativa sono alcune delle tecniche convenzionali per la modellazione degli argomenti. Tuttavia, questo articolo del blog utilizza BERT per la modellazione degli argomenti.

Per saperne di più: Modellazione degli argomenti utilizzando Latent Dirichlet Allocation (LDA)

Obiettivo di apprendimento

Ecco un obiettivo di apprendimento per un workshop di modellazione degli argomenti utilizzando BERT, presentato come elenco puntato:

  • Conoscere le basi della modellazione degli argomenti e come viene utilizzata nell’elaborazione del linguaggio naturale.
  • Comprendere le basi di BERT e come crea incorporamenti dei documenti.
  • Preparare i dati di testo per il modello BERT, preprocessandoli.
  • Utilizzare il token [CLS] per estrarre gli incorporamenti dei documenti dall’output di BERT.
  • Utilizzare metodi di clustering (come K-means) per raggruppare materiali correlati e trovare argomenti latenti.
  • Utilizzare le metriche appropriate per valutare la qualità degli argomenti generati.

Con l’aiuto di questo obiettivo di apprendimento, i partecipanti acquisiranno esperienza pratica nell’utilizzo di BERT per la modellazione degli argomenti. Utilizzando questa conoscenza, si prepareranno ad analizzare ed estrarre temi nascosti da ampie collezioni di dati di testo.

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Caricamento dei dati

Questo è il contenuto prodotto dalla Australian Broadcasting Corporation reso accessibile su Kaggle negli ultimi otto anni. Contiene due colonne significative: publish_date: la data di pubblicazione dell’articolo, nel formato yyyyMMdd. La traduzione in inglese del testo del titolo è headline_text. Questa è la conoscenza che il modello di argomento utilizzerà.

import pandas as pd 

# Leggi il dataset
data = pd.read_csv('../input/abc-news-sample/abcnews_sample.csv')
data.head()

# Crea una nuova colonna contenente la lunghezza di ogni testo del titolo
data["headline_text_len"] = data["headline_text"].apply(lambda x : len(x.split()))
print("Il titolo più lungo ha: {} parole".format(data.headline_text_len.max()))

# Visualizza la distribuzione delle lunghezze 
import seaborn as sns
import matplotlib.pyplot as plt
sns.displot(data.headline_text_len, kde=False)

for idx in data.sample(3).index:
    headline = data.iloc[idx]
    print("Titolo #{}:".format(idx))
    print("Data di pubblicazione: {}".format(headline.publish_date))
    print("Testo: {}\n".format(headline.headline_text))

Modellazione degli argomenti

In questo esempio, esamineremo gli elementi chiave di BERT Topic e le procedure necessarie per creare un potente modello di argomento.

Per saperne di più: Guida per principianti alla modellazione degli argomenti in Python

Addestramento

Prima di tutto, viene inizializzato BERT Topic. I nostri documenti sono in inglese, quindi impostiamo la lingua su “inglese”. Utilizza language=”multilingual” al posto di “language” se vuoi utilizzare un modello che supporta diverse lingue.

Saranno anche calcolate le probabilità degli argomenti. Tuttavia, questo può rallentare notevolmente BERT Topic quando si lavora con enormi set di dati (>100.000 documenti). È possibile accelerare il modello e disattivare anche questa opzione.

import warnings
warnings.filterwarnings("ignore")

!pip install bertopic

%%time
from bertopic import BERTopic
model = BERTopic(verbose=True,embedding_model='paraphrase-MiniLM-L3-v2', min_topic_size= 7)
headline_topics, _ = model.fit_transform(data.headline_text)

Per evitare che vengano visualizzati messaggi durante l’inizializzazione del modello, impostare Verbose su True. Il modello del sentence transformer con il miglior compromesso tra velocità e prestazioni è paraphrase-MiniLM-L3-v2. Abbiamo impostato Min_topic_size su 7, anche se il numero predefinito è 10. Il numero di cluster o temi diminuisce all’aumentare del valore.

Estrazione e Rappresentazione degli Argomenti

freq = model.get_topic_info()
print("Numero di argomenti: {}".format( len(freq)))
freq.head()

Nelle tre colonne principali della tabella sopra, tutti i 54 argomenti sono elencati in ordine decrescente di dimensione/contatore.

  • Gli outlier sono designati come -1 e identificati dal numero di argomento, che funge da identificatore. Poiché non contribuiscono alcun valore, tali argomenti dovrebbero essere evitati.
  • Il termine “contatore” si riferisce al conteggio delle parole dell’argomento.
  • L’argomento è conosciuto dal suo nome dato, “nome”.

Possiamo ottenere i termini principali di ciascun argomento e i loro punteggi c-TF-IDF associati. Più alto è il punteggio, più rilevante è il termine per il caso.

a_topic = freq.iloc[1]["Argomento"] # Seleziona il 1° argomento model.get_topic(a_topic) # Mostra le parole e i loro punteggi c-TF-IDF

Possiamo vedere da questo argomento che tutti i termini hanno senso riguardo all’argomento sottostante, che sembra essere i vigili del fuoco.

Visualizzazione degli Argomenti

Utilizzando la visualizzazione degli argomenti, è possibile apprendere di più su ciascun argomento. Ci concentreremo sulle opzioni di visualizzazione menzionate da BERTopic, che includono la visualizzazione dei termini, una mappa delle distanze tropicali e la gerarchia degli argomenti, per citarne solo alcune.

1. Termini dell’Argomento

È possibile utilizzare il punteggio c-TF-IDF per creare un grafico a barre dei termini essenziali di ciascun argomento, che offre un modo interessante per confrontare visivamente gli argomenti. Di seguito è riportata la visualizzazione relativa all’argomento sei.

model.visualize_barchart(top_n_topics=6)

L’argomento 1 è correlato al crimine perché le frasi principali sono “uomo, accusato, omicidio, carcere”. Ogni argomento successivo può facilmente portare alla stessa analisi. Più lunga è la barra orizzontale, più pertinente è l’argomento.

2. Mappa delle Distanze tra Argomenti

Per le persone che conoscono la libreria LDAvis per la Latent Dirichlet Allocation, l’utente di questa libreria ottiene accesso a un cruscotto interattivo che mostra le parole e i punteggi relativi a ciascun argomento. Con il metodo visualize_topics(), BERTopic fa la stessa cosa e va ancora oltre fornendo la distanza tra i casi (più breve è la lunghezza, più correlati sono gli argomenti).

model.visualize_topics()

3. Visualizzare la Gerarchia degli Argomenti

Alcuni argomenti sono vicini, come si può vedere nel cruscotto degli argomenti Interdistance. Una cosa che può venirti in mente è come posso ridurre il numero degli argomenti. La buona notizia è che puoi organizzare questi argomenti in modo gerarchico, consentendoti di scegliere il numero corretto di argomenti. Il modo in cui sono visualizzati facilita la comprensione di come sono collegati.

model.visualize_hierarchy(top_n_topics=30)

Possiamo osservare che gli argomenti con colori simili sono stati raggruppati guardando il primo livello del dendrogramma (livello 0). Ad esempio:

  • Gli argomenti 7 (salute, ospedale, mentale) e 14 (morto, crollo, ucciso) sono stati combinati a causa della loro vicinanza.
  • Gli argomenti 6 (agricoltori, fattorie, agricoltori) e 16 (bestiame, pecore, carne) devono essere classificati allo stesso modo.
  • Questi dettagli possono aiutare l’utente a capire perché gli argomenti sono stati confrontati tra loro.

Ricerca degli Argomenti

Una volta addestrato il modello degli argomenti, è possibile utilizzare il metodo find_topics per cercare argomenti semanticamente correlati a una determinata parola o frase di input. Ad esempio, possiamo cercare i primi 3 argomenti associati alla parola “politica”.

# Seleziona i 3 argomenti più simili
argomenti_simili, similarità = model.find_topics("politica", top_n = 3)
  • Gli indici degli argomenti in argomenti_simili sono elencati dal più simile al meno simile.
  • I punteggi di similarità sono mostrati in ordine decrescente all’interno di similarità.
argomenti_simili

più_simile = argomenti_simili[0]
print("Informazioni sull'Argomento più Simile: \n{}".format(model.get_topic(più_simile)))
print("Punteggio di Similarità: {}".format(similarità[0]))

È chiaro che frasi come “elezione”, “Trump” e “Obama”, che si riferiscono inequivocabilmente alla politica, rappresentano gli argomenti più comparabili.

Serializzazione e Caricamento del Modello

Quando sei soddisfatto del risultato del tuo modello, puoi conservarlo per ulteriori analisi seguendo queste istruzioni:

%%bash
mkdir './model_dir

# Salva il modello nella cartella precedentemente creata con il nome 'my_best_model'
model.save("./model_dir/my_best_model")

# Carica il modello serializzato
my_best_model = BERTopic.load("./model_dir/my_best_model")
my_best_model

Conclusioni

In definitiva, la modellizzazione degli argomenti utilizzando BERT offre un metodo efficace per individuare argomenti nascosti nei dati testuali. Anche se BERT è stato sviluppato inizialmente per varie applicazioni di elaborazione del linguaggio naturale, è possibile utilizzarlo per la modellizzazione degli argomenti mediante l’uso di incorporamenti dei documenti e approcci di clustering. Ecco i punti chiave di questo articolo:

  • L’importanza della modellizzazione degli argomenti sta nel permettere alle aziende di ottenere informazioni approfondite e prendere decisioni informate aiutandole a comprendere i temi sottostanti e i modelli in volumi massicci di dati testuali non strutturati.
  • Anche se BERT non è l’approccio convenzionale per la modellizzazione degli argomenti, può comunque offrire incorporamenti dei documenti informativi essenziali per individuare temi latenti.
  • BERT crea incorporamenti dei documenti rimuovendo i dati semantici dall’output del token [CLS]. Questi incorporamenti forniscono ai documenti una rappresentazione nello spazio vettoriale densa.
  • La modellizzazione degli argomenti con BERT è un’area in continua evoluzione in quanto nuove ricerche e sviluppi tecnologici ne migliorano le prestazioni.

In generale, sviluppare una padronanza della modellizzazione degli argomenti utilizzando BERT consente ai data scientist, ai ricercatori e agli analisti di estrarre e analizzare i temi sottostanti in corpora di testo di grandi dimensioni, producendo conclusioni informative e decisioni ben informate.

Domande Frequenti e Risposte

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e sono utilizzati a discrezione dell’autore.