Corso
I dati testuali sono uno dei tipi di dati più comuni utilizzati oggi dalle aziende ma, non avendo una struttura chiara, può essere difficile e richiedere molto tempo estrarre insight da essi. Lavorare con dati testuali rientra nell’ambito del Natural Language Processing, uno dei sotto-campi dell’intelligenza artificiale.
Natural Language Processing (NLP) è un campo dell’informatica e dell’intelligenza artificiale che studia come i computer interagiscono con le lingue umane e come programmarli per elaborare e analizzare grandi quantità di dati in linguaggio naturale.
L’NLP viene usato in molti modi diversi, ad esempio per rispondere automaticamente alle domande, generare riassunti di testi, tradurre testi da una lingua all’altra, ecc. La ricerca in NLP è condotta anche in aree come scienze cognitive, linguistica e psicologia. La classificazione del testo è uno di questi casi d’uso per l’NLP.
In questo blog esploreremo i casi d’uso della classificazione del testo. Troverai anche un esempio end-to-end su come costruire una pipeline di preprocessamento del testo seguita da un modello di classificazione del testo in Python.
Se vuoi saperne di più sull’elaborazione del linguaggio naturale, i nostri percorsi Natural Language Processing in Python e Natural Language Processing in R sono utili. Acquisirai le competenze NLP fondamentali per trasformare i dati testuali in insight di valore. Inoltre, conoscerai le librerie NLP più popolari in Python, tra cui NLTK, scikit-learn, spaCy e SpeechRecognition.
Cos’è la classificazione del testo?
La classificazione del testo è un compito NLP comune utilizzato per risolvere problemi aziendali in vari settori. L’obiettivo è categorizzare o prevedere la classe di documenti testuali mai visti prima, spesso con l’aiuto dell’apprendimento supervisionato.
Analogamente a un algoritmo di classificazione addestrato su un dataset tabellare per prevedere una classe, anche la classificazione del testo utilizza il machine learning supervisionato. Il fatto che nella classificazione del testo siano coinvolti dati testuali è la principale distinzione tra i due.
È possibile eseguire la classificazione del testo anche senza usare l’apprendimento supervisionato. Invece degli algoritmi, si può progettare un sistema manuale basato su regole per svolgere il compito di classificazione del testo. Confronteremo pro e contro dei sistemi di classificazione basati su regole e su machine learning nella prossima sezione.

Se vuoi approfondire il machine learning supervisionato, consulta il nostro articolo dedicato.
Casi d’uso e applicazioni della classificazione del testo
Classificazione dello spam
Ci sono molti casi d’uso pratici per la classificazione del testo in numerosi settori. Per esempio, un filtro antispam è un’applicazione comune che usa la classificazione del testo per separare le email in categorie spam e non spam.

Classificare articoli di news e blog
Un altro caso d’uso è assegnare automaticamente i documenti testuali a categorie predefinite. Un modello di machine learning supervisionato viene addestrato su dati etichettati, che includono sia il testo grezzo sia il target. Una volta addestrato, il modello viene usato in produzione per ottenere una categoria (etichetta) su dati nuovi e mai visti (articoli/blog scritti in futuro).

Categorizzare le richieste di supporto clienti
Un’azienda potrebbe usare la classificazione del testo per categorizzare automaticamente le richieste di supporto in base all’argomento o per dare priorità e indirizzare le richieste al reparto appropriato.

Rilevamento dei discorsi d’odio
Con oltre 1,7 miliardi di utenti attivi al giorno, su Facebook è inevitabile la creazione di contenuti che violano le regole. I discorsi d’odio rientrano tra questi contenuti indesiderati.
Facebook affronta il problema richiedendo una revisione manuale dei post che un classificatore di testo AI ha identificato come discorsi d’odio. I post segnalati dall’AI vengono esaminati allo stesso modo di quelli segnalati dagli utenti. Solo nei primi tre mesi del 2020, la piattaforma ha rimosso 9,6 milioni di contenuti classificati come discorsi d’odio.

Tipi di sistemi di classificazione del testo
Esistono principalmente due tipi di sistemi di classificazione del testo: basati su regole e basati su machine learning.
Classificazione del testo basata su regole
Le tecniche basate su regole usano un insieme di regole linguistiche costruite manualmente per categorizzare il testo in categorie o gruppi. Queste regole indicano al sistema di classificare un testo in una determinata categoria in base al contenuto, usando elementi testuali semanticamente rilevanti. Ogni regola è composta da un antecedente o pattern e da una categoria prevista.
Per esempio, immagina di avere molti nuovi articoli e che il tuo obiettivo sia assegnarli a categorie pertinenti come Sport, Politica, Economia, ecc.
Con un sistema di classificazione basato su regole, effettuerai una revisione manuale di alcuni documenti per definire regole linguistiche come questa:
- Se il documento contiene parole come money, dollar, GDP o inflation, appartiene al gruppo (classe) Politica.
I sistemi basati su regole possono essere raffinati nel tempo e sono comprensibili per gli esseri umani. Tuttavia, ci sono alcuni svantaggi in questa strategia.
Innanzitutto, questi sistemi richiedono una conoscenza approfondita del dominio. Sono dispendiosi in termini di tempo, poiché creare regole per un sistema complesso può essere difficile e spesso richiede ampi studi e test.
Dato che l’aggiunta di nuove regole può modificare i risultati di quelle preesistenti, i sistemi basati su regole sono anche difficili da mantenere e non scalano efficacemente.
Classificazione del testo basata su machine learning
La classificazione del testo basata su machine learning è un problema di apprendimento supervisionato. Impara l’associazione tra i dati in input (testo grezzo) e le etichette (note anche come variabili target). È simile ai problemi di classificazione non testuali, in cui addestriamo un algoritmo di classificazione supervisionato su un dataset tabellare per prevedere una classe, con la differenza che nella classificazione del testo l’input è testo grezzo invece di feature numeriche.
Come in qualsiasi altro apprendimento supervisionato, la classificazione del testo tramite machine learning ha due fasi: training e predizione.

Fase di training
Durante la fase di training, un algoritmo di apprendimento supervisionato viene addestrato sul dataset etichettato in input. Al termine, otteniamo un modello addestrato che possiamo usare per ottenere predizioni (etichette) su dati nuovi e mai visti.
Fase di predizione
Una volta addestrato, un modello di machine learning può essere usato per prevedere etichette su dati nuovi e mai visti. Di solito si fa distribuendo il miglior modello da una fase precedente come API sul server.
Pipeline di preprocessamento del testo
Il preprocessamento dei dati testuali è un passaggio importante in qualsiasi compito di NLP. Aiuta a pulire e preparare i dati testuali per l’ulteriore elaborazione o analisi.
Una pipeline di preprocessamento del testo è una serie di passaggi applicati al testo grezzo per prepararlo all’uso in compiti di elaborazione del linguaggio naturale.
I passaggi in una pipeline di preprocessamento possono variare, ma in genere includono attività come tokenizzazione, rimozione delle stop word, stemming e lemmatizzazione. Questi passaggi aiutano a ridurre la dimensione dei dati testuali e migliorano anche l’accuratezza di compiti NLP come classificazione del testo ed estrazione di informazioni.
I dati testuali sono difficili da elaborare perché sono non strutturati e spesso contengono molto rumore. Questo rumore può presentarsi sotto forma di errori di ortografia, errori grammaticali e formattazioni non standard. Una pipeline di preprocessamento del testo mira a ripulire questo rumore in modo che i dati testuali possano essere analizzati più facilmente.

Vuoi saperne di più? Dai un’occhiata al nostro percorso Text Mining with R.
Estrazione delle feature
I due metodi più comuni per estrarre feature dal testo, ossia convertire i dati testuali (stringhe) in feature numeriche per poter addestrare un modello di machine learning, sono: Bag of Words (alias CountVectorizer) e Tf-IDF.
Bag of Words
Un modello bag of words (BoW) è un modo semplice per rappresentare i dati testuali come feature numeriche. Consiste nel creare un vocabolario di parole note nel corpus e quindi creare, per ciascun documento, un vettore che contiene le conte di quante volte compare ogni parola.

TF-IDF
TF-IDF sta per term frequency-inverse document frequency ed è un altro modo per rappresentare il testo come feature numeriche. Ci sono alcune lacune nel modello Bag of Words (BoW) che Tf-IDF colma. Non entreremo nei dettagli in questo articolo, ma se vuoi esplorare ulteriormente il concetto, consulta il nostro corso Introduction to Natural Language Processing in Python.
Il modello TF-IDF è diverso dal bag of words perché tiene conto sia della frequenza delle parole nel documento sia dell’inverse document frequency. Questo significa che il modello TF-IDF ha maggiori probabilità di individuare le parole importanti in un documento rispetto al modello bag of words.
Esempio end-to-end di classificazione del testo in Python
Importazione del dataset
Per iniziare, importa il dataset direttamente da questo link GitHub. L’SMS Spam Collection è un dataset contenente 5.574 messaggi SMS in inglese insieme all’etichetta Spam o Ham (non spam). Il nostro obiettivo è addestrare un modello di machine learning che apprenda dal testo degli SMS e dalle etichette e sia in grado di prevedere la classe dei messaggi SMS.
# reading data
import pandas as pd
data = pd.read_csv('https://raw.githubusercontent.com/mohitgupta-omg/Kaggle-SMS-Spam-Collection-Dataset-/master/spam.csv', encoding='latin-1')
data.head()

Dopo aver letto il dataset, nota che ci sono alcune colonne extra di cui non abbiamo bisogno. Ci servono solo le prime due colonne. Procediamo a eliminare le restanti e a rinominare anche le prime due.
# drop unnecessary columns and rename cols
data.drop(['Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4'], axis=1, inplace=True)
data.columns = ['label', 'text']
data.head()
Analisi esplorativa dei dati (EDA)
Facciamo un po’ di EDA di base per vedere se ci sono valori mancanti nel dataset e com’è il bilanciamento del target.
# check missing values
data.isna().sum()

# check data shape
data.shape
>>> (5572, 2)
# check target balance
data['label'].value_counts(normalize = True).plot.bar()
Preprocessamento del testo
Qui avviene tutta la pulizia del testo. È un ciclo che itera su tutti i 5.572 documenti ed esegue quanto segue:
- Rimuovere tutti i caratteri speciali
- Convertire tutte le parole in minuscolo
- Tokenizzare
- Rimuovere le stopword
- Lemmatizzare
# text preprocessing
# download nltk
import nltk
nltk.download('all')
# create a list text
text = list(data['text'])
# preprocessing loop
import re
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
corpus = []
for i in range(len(text)):
r = re.sub('[^a-zA-Z]', ' ', text[i])
r = r.lower()
r = r.split()
r = [word for word in r if word not in stopwords.words('english')]
r = [lemmatizer.lemmatize(word) for word in r]
r = ' '.join(r)
corpus.append(r)
#assign corpus to data['text']
data['text'] = corpus
data.head()
Train-test split
Dividiamo il dataset in train e test prima dell’estrazione delle feature.
# Create Feature and Label sets
X = data['text']
y = data['label']
# train test split (66% train - 33% test)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=123)
print('Training Data :', X_train.shape)
print('Testing Data : ', X_test.shape)
>>> Training Data : (3733,)
>>> Testing Data : (1839,)
Estrazione delle feature
Qui usiamo il modello Bag of Words (CountVectorizer) per convertire il testo pulito in feature numeriche. Questo è necessario per addestrare il modello di machine learning.
# Train Bag of Words model
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
X_train_cv = cv.fit_transform(X_train)
X_train_cv.shape
>>> (3733, 7020)
Addestramento ed evaluation del modello
In questa parte addestriamo un modello di Regressione Logistica e valutiamo la matrice di confusione del modello addestrato.
# Training Logistic Regression model
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X_train_cv, y_train)
# transform X_test using CV
X_test_cv = cv.transform(X_test)
# generate predictions
predictions = lr.predict(X_test_cv)
predictions
>>> array(['ham', 'spam', 'ham', ..., 'ham', 'ham', 'spam'], dtype=object)
# confusion matrix
import pandas as pd
from sklearn import metrics
df = pd.DataFrame(metrics.confusion_matrix(y_test,predictions), index=['ham','spam'], columns=['ham','spam'])
df

Consulta il DataLab workbook completo per maggiori dettagli.
Conclusione
L’NLP è ancora un’area di ricerca e sviluppo attiva, con molte università e aziende che lavorano allo sviluppo di nuovi algoritmi e applicazioni. L’NLP è un campo interdisciplinare, con ricercatori provenienti da diversi ambiti, tra cui informatica, linguistica, psicologia e scienze cognitive.
La classificazione del testo è un compito potente e ampiamente utilizzato nell’NLP che può essere impiegato per categorizzare automaticamente o prevedere la classe di documenti testuali mai visti prima, spesso con l’aiuto del machine learning supervisionato.
Non è sempre accurata, ma se usata correttamente può aggiungere molto valore alle tue analisi. Esistono molti modi e algoritmi per impostare un classificatore di testo e non c’è un unico approccio migliore. È importante sperimentare e trovare ciò che funziona meglio per i tuoi dati e i tuoi obiettivi.
Domande frequenti sulla classificazione del testo
La classificazione del testo può essere usata se ci sono più di due etichette?
Sì, se ci sono solo due etichette, allora userai algoritmi di classificazione binaria. Se ci sono più di due etichette, dovrai usare un algoritmo di classificazione multiclasse.
La classificazione del testo è un compito dell'NLP?
Sì, l’NLP è un campo molto ampio. La classificazione del testo è uno dei casi d’uso fondamentali dell’NLP, con applicazioni in un’ampia gamma di settori.
La classificazione del testo è un problema di machine learning supervisionato?
I sistemi di classificazione del testo possono essere anche basati su regole, ma stanno rapidamente passando di moda perché sono difficili da mantenere e scalare. Un sistema basato su machine learning per i compiti di classificazione del testo usa l’apprendimento supervisionato.
Che cos'è il Natural Language Processing?
Il Natural Language Processing (NLP) è un campo dell’informatica e dell’intelligenza artificiale che si occupa delle interazioni tra computer e lingue umane (naturali), in particolare di come programmare i computer per elaborare e analizzare grandi quantità di dati in linguaggio naturale.
La classificazione del testo è la stessa cosa dell'analisi del sentiment?
L’analisi del sentiment è un esempio di sistema di classificazione del testo. Tuttavia, come suggerisce il nome, l’analisi del sentiment si fa di solito quando l’etichetta è una qualche forma di sentimento (positivo o negativo, felice o triste, ecc.).
Si può fare la classificazione del testo senza usare il machine learning?
Sì, possiamo anche usare sistemi basati su regole per la classificazione del testo.
Possiamo usare il deep learning per la classificazione del testo?
Sì, possiamo usare qualsiasi algoritmo di deep learning al posto del machine learning. Dai un’occhiata a questo fantastico corso su Recurrent Neural Networks (RNN) for Language Modeling in Python per saperne di più su NLP e Deep Learning. Se vuoi costruire un modello di classificazione del testo usando TensorFlow, dai un'occhiata a questo case study su TensorFlow 2.0 su Datacamp.
Qual è il miglior algoritmo per la classificazione del testo?
Non esiste un algoritmo migliore in assoluto. In genere, l’algoritmo Naive Bayes offre buone prestazioni su dati ad alta dimensionalità (testo).
BERT viene usato per la classificazione del testo?
Sì, BERT, acronimo di Bidirectional Encoder Representations from Transformers, si basa sull'architettura dei Transformers, un modello di deep learning. Tra i molti casi d’uso, BERT può essere utilizzato anche per sistemi di classificazione del testo. Vedi il nostro tutorial su NLP con BERT per maggiori dettagli.
La classificazione del testo e il Text Mining sono la stessa cosa?
No, il Text Mining è il processo di trasformazione del testo non strutturato in un formato strutturato per identificare pattern significativi, mentre l’obiettivo della classificazione del testo è categorizzare o prevedere la classe di documenti testuali mai visti prima, spesso con l’aiuto del machine learning supervisionato.




