Gli algoritmi di machine learning hanno mostrato un’efficacia piuttosto elevata nel contrasto all’hate speech sui social network e soprattutto – a differenza degli staff “umani” – permettono di processare centinaia o migliaia di messaggi al secondo.
Vediamo di seguito quali sono le tecniche e gli algoritmi principali che possono essere utilizzati per creare sistemi in grado di contrastare i messaggi di incitamento all’odio, ossia quei fenomeni di violenza verbale, di pregiudizi e di atteggiamenti minacciosi e intimidatori che spesso compaiono all’interno di discussioni tra diversi utenti all’interno dei social media.
Negli ultimi anni, infatti, la diffusione sempre maggiore di Internet all’interno delle nostre vite, in particolare grazie all’utilizzo di piattaforme sociali gratuite e molto semplici da usare quali Facebook, Twitter, Instagram, ecc., hanno reso questo fenomeno molto evidente e di difficile gestione, spesso risultando una vera e propria piaga sociale da combattere.
Le conseguenze dell’incitamento all’odio
La possibilità per le persone di sfruttare l’anonimato in rete e di condividere facilmente senza filtri o censure le proprie idee, porta infatti alcune di loro a credere che il Web sia un far west dove tutto è più o meno lecito, e soprattutto che le proprie azioni siano confinate solamente all’ambito virtuale della vita degli individui.
Purtroppo così non è, spesso comportamenti riconducibili al fenomeno dell’hate speech quali bullismo, stalking, odio politico o razziale, ecc., hanno effetti disastrosi sulla vita reale delle vittime, alimentando in esse fenomeni negativi quali depressione, isolamento, radicalismo o addirittura in alcuni casi portarle anche a compiere gesti estremi quali suicidi e/o omicidi.
Va infine ricordato che il fenomeno dell’incitamento all’odio non riguarda solo singoli individui ma può essere rivolto anche a specifici gruppi di persone, verso i quali gli haters si possono accanire su caratteristiche particolari che li contraddistinguono. Esempi tipici di tali caratteristiche possono riguardare la idee politiche, l’orientamento sessuale, l’etnia razziale, il sesso di una persona (maschio, femmina) eccetera.
I meccanismi per limitare l’hate speech
Da quanto detto sopra, risulta quindi particolarmente importante cercare di individuare dei meccanismi all’interno delle piattaforme sociali per cercare di limitare la proliferazione di questo tipo di contenuti. Tutti i principali social ormai dispongono di funzionalità con le quali si possono segnalare abusi o comportamenti scorretti da parte di altri utenti. Spesso questo segnalazioni vengono poi verificate manualmente da un pool di persone (di solito su ciascun social network esiste un insieme di persone dello staff piuttosto numeroso che ha proprio questo compito) al fine di evitare falsi positivi, cioè bloccare contenuti segnalati in maniera errata.
Il problema di questo approccio è che il numero di interazioni (commenti, post, ecc) a livello giornaliero su un social popolare è enorme e semplicemente non è possibile trattarlo andando a vedere manualmente i singoli messaggi. Per tale motivo, negli ultimi anni sono stati studiati meccanismi automatici di detection di contenuti di hate speech sfruttando algoritmi di machine learning, i quali hanno mostrato un’efficacia piuttosto elevata e soprattutto permettono di processare centinaia o migliaia di messaggi al secondo.
Tecniche e gli algoritmi principali contro l’hate speech
Il problema da risolvere è quindi il seguente: dato un messaggio di testo è necessario capire se il contenuto testuale contiene riferimenti o contenuti che esprimono odio e/o violenza.
Un primo semplice approccio che uno potrebbe pensare di usare è quello di crearsi manualmente un dizionario di parole “negative” spesso usate in questi contesti, ad esempio ci stiamo interessando a messaggi di natura politica potrebbe includere le parole “fascista”, “immigrato”, “clandestino”, ecc. e poi andare a identificare messaggi contenenti odio come quelli che includono tali parole. Purtroppo, a causa della complessità e l’ambiguità della lingua utilizzata, questo approccio non permetterà di distinguere correttamente i messaggi di hate, fornendo in moltissimi casi falsi positivi in cui una o più parole del dizionario sono state usate nel testo per esprimere un altro tipo di concetto.
Un approccio alternativo che ha fornito ottimi risultati invece è quello di usare algoritmi di machine learning (apprendimento automatico) con i quali insegnare alla macchina come distinguere gli esempi positivi (contenenti hate) da quelli negativi.
La costruzione di un dataset etichettato
In questo caso si dice che l’apprendimento del software avviene in modo supervisionato, in quanto per ogni esempio fornito all’algoritmo è necessario fornire anche una etichetta (ad esempio “hate” per i messaggi contenenti odio e “no-hate” per quelli non contenenti odio) che caratterizza il testo in modo univoco.
La costruzione di un dataset etichettato è un processo costoso perché richiede che uno o più umani verifichino manualmente il contenuto dei messaggi e assegnino ad ogni testo l’etichetta corretta. Normalmente per allenare un software di machine learning in modo effettivo su uno specifico problema è necessario disporre di diverse centinaia di esempi per ciascuna etichetta considerata.
La cosa positiva è che con relativamente pochi dati etichettati si riesce a creare modelli di classificazione (alla fine il software costruito è un classificatore automatico) piuttosto accurati ed in grado di processare velocemente moltissimi documenti non etichettati. La costruzione di un classificatore automatico di hate speech basato su machine learning può seguire sostanzialmente tre diverse vie.
Analisi del testo con tecniche NLP
Il primo approccio è quello che si basa di metodi di machine learning tradizionali di natura statistica o probabilistica con quali si sfruttano noti algoritmi di apprendimento automatico quali SVM (Support Vector Machine), Decision Tree, Naive-Bayes, boosting, ecc.
Il tipico workflow di lavoro in questi casi è quello di analizzare il testo con tecniche avanzate di NLP (Natural Language Processing) allo scopo di estrarre le feature più importanti che caratterizzano il testo del documento. Tale processo di analisi viene comunemente riferito con il termine di “feature engineering” e solitamente per lo sviluppatore risulta essere sempre una delle fasi più critiche e costose nella realizzazione del software.
Il contenuto testuale può essere processato in originale con diverse tecniche (ad esempio Bag-of-Word, n-grams di caratteri, n-grams di parole, ecc.) al fine di individuare i token di base che lo caratterizzano oppure può essere arricchito e/o modificato da informazioni semantiche e sintattiche prima di procedere all’estrazione delle feature con i metodi descritti sopra.
In quest’ultimo caso si farà uso di strumenti di annotazione/analisi del testo specifici per la lingua target analizzata (ad esempio per l’italiano) e si potranno applicare metodi quali la rimozione delle stopwords, lo stemming, il chunking, il POS tagging, la costruzione di alberi sintattici, ecc. al fine di arricchire o raffinare le informazioni associate al testo originale.
L’insieme di tutte le feature distinte individuate con l’analisi di tutti i documenti del dataset a nostra disposizione costituirà il dizionario delle feature e saranno l’informazione di base con cui codificare i documenti da dare in pasto agli algoritmi di machine learning per apprendere i modelli di classificazione.
Con questo approccio, spesso il numero di feature individuate inizialmente risulta molto elevato (dell’ordine delle diverse centinaia di migliaia) e per motivi computazionali risulta quindi indispensabile operare un meccanismo di selezione (con tecniche quali InformationGain, ChiSquare, ecc.) con i quali scegliere quelle più importanti (a maggior potere discriminante) per il nostro task di classificazione.
Il numero di feature distinte viene ridotto quindi a qualche decina di migliaia e rappresenta la codifica finale con cui poi verranno rappresentati i documenti processati dall’algoritmo di machine learning. Molti dei concetti espressi sopra possono essere approfonditi leggendo il survey.
Tecniche di language modeling
Il secondo approccio cerca di superare le limitazioni del primo approccio (ad esempio l’alta sparsità dei vettori descriventi i documenti) e di fornire una rappresentazione semantica più ricca delle informazioni contenute all’interno di un testo. In particolare, l’informazione testuale in questo caso viene ottenuta sfruttando tecniche di language modeling come Word2Vec, Glove, Doc2Vec, ecc. che hanno lo scopo di modellare la struttura sintattico/semantica delle parole di una specifica lingua con vettori altamente descrittivi e semanticamente ricchi.
Questo tipo di tecniche calcola per ciascuna parola analizzata un vettore denso che rappresenti l’informazione latente del contesto in cui tipicamente quella parola occorre. Si sfrutta l’ipotesi distribuzionale (parole che compaiono in contesti simili devono avere anche un significato simile) per imparare vettori semanticamente rilevanti e che abbiano anche interessanti proprietà algebriche tra loro. In particolare, i vettori così ottenuti (chiamati anche embeddings) permettono di fare operazioni matematiche come ad esempio << v[“regina”] è un vettore simile a v[“re”] – v[“maschio”] + v[“femmina”] >> oppure proporzioni come << v[“parigi”] sta a v[“francia”] come v[“roma”] sta a v[“italia”] . In questi esempi “v[x]” è la funzione che restituisce il vettore di embedding di una specifica parola.
Gli embeddings possono essere ottenuti facilmente facendo girare questo tipo di algoritmi su grandi quantità di contenuti testuali non etichettati scritti in una determinata lingua, ad esempio spesso si usano i dati di Wikipedia di una specifica lingua per calcolare i vettori delle parole distinte che compaiono negli articoli del sito.
Una volta che abbiamo un modello di embedding pre-allenato, possiamo codificare il vettore del singolo documento di testo mettendo insieme (usando la media, il max, ecc.) i vettori delle parole che occorrono nel testo e quindi utilizzare le codifiche così ottenute per allenare il classificatore con uno degli algoritmi di machine learning che abbiamo visto prima.
I vantaggi maggiori nell’usare gli embeddings nel codificare i documenti rispetto alla strategia utilizzata nel primo approccio sono che si riescono ad ottenere rappresentazioni molto informative utilizzando un basso numero di feature distinte (solitamente dell’ordine di qualche centinaia), con evidenti benefici anche in termini di efficienza computazionale sia a tempo di creazione del modello di classificazione sia a regime durante l’utilizzo del classificatore su documenti non annotati.
Inoltre, un altro aspetto non trascurabile è che si va solitamente quasi ad azzerare la parte di “feature engineering”, trasformando l’analisi del testo originale di fatto in una semplice tokenizzazione su cui poi si useranno gli embeddings. Per chi è interessato ad avere maggiori dettagli, su questa pagina può trovare una introduzione più approfondita e ragionata su queste tematiche.
Tecnologie basate su deep learning
Il terzo e ultimo approccio che è possibile utilizzare per realizzare un sistema di detection di hate speech prevede l’uso di tecnologie basate su deep learning. Il deep learning è una branca specifica del machine learning che ha preso sempre più piede negli ultimi anni e che è specializzata sull’utilizzo di algoritmi basati su reti neurali multilayer di tipo profondo.
Il concetto di rete neurale artificiale come approssimazione delle reti neurali biologiche non è nuovo, ricercatori e studiosi hanno cominciato a analizzarle da un punto di vista teorico fin dagli anni 50. Solo nel 1986 però un gruppo di ricercatori comprendente Hinton (uno dei padri del deep learning) ha proposto un metodo di ottimizzazione per l’apprendimento basato sulla discesa del gradiente in grado di allenare le reti in modo effettivo e con un costo computazionale accettabile.
In realtà, l’allenamento di una rete neurale è piuttosto oneroso in termini computazionali e inoltre, affinché la rete apprenda correttamente, sono necessari molti dati di allenamento. Queste due requisiti sono stati soddisfatti solo negli ultimi anni grazie all’avvento delle moderne schede grafiche (GPU) aventi una notevole potenza di calcolo e alla possibilità di usare moltissimi dati (anche etichettati implicitamente) provenienti dalle interazioni degli utenti sul Web. La possibilità di allenare le reti su molti dati ed in tempi rapidi ha dato vita al moderno deep learning, permettendo di ideare architetture neurali molto complesse e profonde, in grado di auto-apprendere in modo gerarchico le feature più importanti per risolvere uno specifico problema.
Architetture come le convolutional neural network (CNN), le reti ricorrenti (LSTM , GRU, ecc.) o gli auto-encoder sono stati utilizzati recentemente con risultati molto incoraggianti anche nel task di hate speech detection. Adottare una metodologia di deep learning rispetto ad una di tipo tradizionale come quella nel primo approccio permette di eliminare la fase di feature engineering e ottenere una soluzione agnostica rispetto alla lingua analizzata, visto che la rete neurale è in grado di auto-apprendere le migliori feature per risolvere il task di classificazione, con l’ulteriore vantaggio di apprenderle livello per livello con una grado di dettaglio sempre maggiore. L’apprendimento di una rete avviene infatti per strati partendo dal livello più basso che si trova in prossimità dei dati di input fino ad arrivare agli strati più vicini all’output della rete, dove le feature rappresentano concetti più ad alto livello.
Ad esempio, nel caso specifico di una rete che analizza del testo in input, potete immaginare che le prime feature che saranno apprese saranno a livello di sequenze di caratteri, seguite nei layer successivi da feature specializzate a riconoscere parole, singole frasi o interi paragrafi. Questa capacità di apprendimento intrinseca delle reti neurali può essere oggi sfruttata appieno perchè con hardware dedicato (GPU, TPU) e molti dati disponibili si riescono a modellare con particolare efficacia e in tempi ragionevolmente brevi problemi anche molto complessi, di difficile soluzione pratica o impossibili da approcciare adottando le altre due strategie descritte sopra.
Operativamente con i metodi di deep learning si riusa il meccanismo degli embeddings per codificare l’input originale da processare. Questa codifica può essere fatta una volta per tutte direttamente prima di cominciare ad allenare la rete sui dati originali oppure più comunemente si dedica il primo layer nascosto (il livello immediatamente successivo a quello di input) ad apprendere gli embeddings via via che la rete viene allenata. Quest’ultima modalità è preferibile soprattutto quando sono disponibili molti dati per l’allenamento perchè permette di costruire dei vettori di embeddings che riflettono realmente la distribuzione dei dati del nostro task finale.
Nei casi in cui i dati per il training siano pochi, la prima modalità è invece utile per pre-allenare gli embeddings su un un dominio applicativo più generico con molti dati (ad esempio Wikipedia) e poi partire da lì per risolvere lo specifico task. Una rete neurale allenata risulta alla fine come una specie di “scatola chiusa” a cui passiamo dei dati in input e riceviamo una risposta in output. Interpretare cosa succede al suo interno è un compito molto arduo se non impossibile, visto che l’apprendimento si basa su una catena di funzioni matematiche non lineari applicate sui dati originali di input. Questa grande complessità è però anche ciò che rende le reti neurali strumenti molto potenti di apprendimento automatico. In fin dei conti, ciò che spesso interessa a noi, è semplicemente risolvere il problema in modo efficace. Il fatto di “non comprendere appieno” i passaggi intermedi per arrivare al risultato finale diventa quindi un piccolo prezzo che siamo certamente disposti a pagare.
Recenti statistiche su Facebook mostrano che, a livello mondiale, ogni minuto vengono aggiunti 510.000 nuovi commenti e vengono aggiornati 293.000 messaggi esistenti.