
(articolo redatto da Gaetano De Pascale)
La diffusione dei social network e la necessità di analizzare il mercato in tempi super veloci ha consentito la diffusione sempre più ampia delle metodologie di “sentiment analysis”. In questa guida cerchiamo di capire meglio che cos’è e proviamo a creare un semplice progetto di analisi con Visual Studio 2022 Community Edition.
Che cos’è l’analisi del “sentiment”
Il cuore di internet oggi sono i social network. Tutti sono portati a condividere contenuti, reagire alle notizie ed agli eventi, esprimere opinioni.
I commenti e le opinioni personali racchiudono intrinsecamente dati ed informazioni che in molti casi possono diventare molto importanti. Soprattutto negli ultimi anni sta crescendo l’importanza di queste informazioni.
Quando si deve acquistare un prodotto o prenotare un servizio ci si affida sempre più spesso alle recensioni che vengono pubblicate online da altri utenti, che si parli di social o di siti specializzati. E più questo trend aumenta più le recensioni / opinioni aumentano di volume.
Più aumenta il volume dei dati social , più diventa importante riuscire a ricavarne informazioni precise.
L’analisi di questi dati prende il nome di Sentiment Analysis.
Quest’ultima è infatti un’analisi procedurale delle opinioni espresse nei testi e nelle reazioni per estrarre le emozioni che chi scrive vuole esprimere.
Da un punto di vista tecnico è molto complesso pensare di estrarre un’emozione partendo semplicemente da un testo e trasformarla in dati utilizzabili per un’analisi. Per fare questo tipo di estrazione si ricorre all’utilizzo del Machine Learning, con l’analisi di enormi quantità di dati già “pesati”.
Perché è importante?
La pratica dell’analisi del sentiment, il fatto che oggi è molto più facile e immediato ottenere tante informazioni (spesso già presenti e pubbliche sul web) e la possibilità offerta dai big data di un’analisi veloce di grandi quantità di dati, fa sì che qualsiasi azienda o personaggio pubblico può avere riscontro quasi immediato delle reaction che una propria azione comporta.
Con l’analisi – spesso anche in tempo reale – di opinioni, recensioni, post, commenti o tweet è possibile arrivare ad una sempre più accurata previsione della direzione da seguire.
Questo può aiutare a modificare comportamenti o campagne in base all’effettiva capacità attrattiva che stanno suscitando sul grande pubblico.
Dove si utilizza
I campi di applicabilità e di utilizzo della Sentiment Analysis sono molteplici:
- politica: quanto può essere importante avere un feedback in tempo reale ad ogni dichiarazione o presa di posizione di un partito o di un esponente di spicco?
- ristorazione e turismo: avere un riscontro delle opinioni dei clienti può aiutare a capire eventuali problemi di gestione e a migliorare la propria resa.
- marketing e comunicazione: come sta andando una campagna di comunicazione che è appena stata lanciata? Lo stile di comunicazione sta avendo riscontri positivi? Sono tutte domande che gli operatori del settore si sono sempre fatte, e che diversi anni fa avrebbero dovuto attendere mesi per avere risposte.
➔ brand reputation: analizzare l’opinione corrente che il grande pubblico ha del proprio brand e come modifica nel tempo.
e così via ….
Questi sono solo alcuni degli esempi che potremmo fare, ma partendo da questi si può capire come la sentiment analysis possa essere applicata a molteplici settori, dai mercati azionari all’ambito sportivo.
Come leggere i dati
Per arrivare ad elaborare un report di sentiment analysis attendibile è fondamentale imparare a leggere in maniera corretta i dati a disposizione.
L’elaborazione del linguaggio viene fatta attraverso l’utilizzo di software complessi che raccolgono ininterrottamente dati da diverse sorgenti (piattaforme social, siti di annunci, recensioni, blog, ecc.), li analizzano, estraendo tono, intensità ed emotività, ed arrivano a tradurre i testi in opinioni positive o negative.
Un aspetto importante che bisogna tener presente è il contesto.
Se ad esempio prendiamo in considerazione un post su Facebook non è detto che i commenti siano tutti pertinenti, anzi spesso ci sono commenti totalmente fuori luogo, che un software davvero utile deve essere in grado di scartare.
Altro aspetto molto importante è la semantica, poichè in tutte le lingue ci sono parole polisemiche.
Esempio: “Oggi pomeriggio vorrei andare al parco, dipende dal tempo”. Qui la parola tempo può essere intesa come condizione atmosferica o tempo libero, il software per essere efficace deve essere in grado di contestualizzare e capirne il reale significato.
Utilità e limiti dell’analisi
Viene da sé che questa evoluzione è un enorme balzo in avanti: si passa dai vecchi sondaggi telefonici, che potevano durare mesi, all’analisi quasi in tempo reale delle reazioni.
Quelle che prima erano attività pianificate sul lungo periodo, che generavano una risposta dal mercato solo dopo mesi di attività, diventano oggi attività quasi immediate. Esse danno la possibilità di recepire real time la percezione degli utenti e soprattutto di poter “aggiustare il tiro” prima di avere consistenti perdite di profitto o di immagine.
Facendo ricorso al text mining e operando questa ricerca spesso in ambito social network, ci sono alcune cose che potrebbero facilmente indurre un software in errore. Basti pensare a quei commenti che descrivono in maniera ironica un servizio: essi potrebbero usare parole di accezione positiva, ma con un intento totalmente opposto, oppure ci potrebbero essere errori grammaticali.
Consideriamo alcuni possibili esempi:
- “Si davvero fantastica la ‘terrazza panoramica’ … sulla discarica“ (commenti ironici)
- “La pizza è stata suprba” (errori grammaticali)
Qui è facile immaginare che le frasi verrebbero comprese da un interlocutore umano, ma potrebbero essere fraintese da un software di analisi testuale.
Per superare questi limiti si ricorre sempre più all’utilizzo di Machine learning ed Intelligenza artificiale nella programmazione di strumenti di nuova generazione, che consentiranno di migliorare nel lungo periodo la qualità dei risultati.
Le librerie ML sono solo in linguaggio Python?
Il linguaggio più utilizzato per l’implementazione di progetti di Machine Learning è il Python.
L’utilizzo di Python da un lato permette di avere a disposizione molte librerie e dall’altro è un linguaggio di facile comprensione.
Molto spesso, però, occorre utilizzare librerie Machine Learning in progetti più complessi o preesistenti che sono sviluppati in tecnologia .net, per cui occorre adoperarsi con servizi o altri sistemi di integrazione per utilizzare librerie di ML scritte in linguaggio Python.
Ogni volta che capita questo, gli sviluppatori .net esclamano che avrebbero preferito avere una libreria .net da integrare facilmente nel proprio progetto.
Ora cerchiamo di rispondere a questa esigenza, illustreremo a seguire la libreria ML.net e forniremo un esempio di integrazione in un progetto .net 6.
La libreria ML.net
ML.NET è una libreria software gratuita di machine learning progettata per i linguaggi di programmazione C# e F#.
ML.net oltre ai propri modelli supporta anche quelli Python, attraverso l’utilizzo di NimbusML.
La prima versione di ML.NET includeva caratteristiche per la n-gram creation, la binary e la multi-class classification, oltre a permettere l’utilizzo di algoritmi di regressione.
Nelle versioni successive sono state aggiunte ulteriori funzioni machine learning quali l’Anomaly Detection e i sistemi di raccomandazione. Nelle versioni future si prevede che saranno inclusi altri approcci come il deep learning.
Un esempio in net 6 / ML.net
Proviamo ad usare ML.NET Model builder in Visual Studio 2022 per fare un training ed utilizzare un modello di ML in .net, scrivendo pochissime righe di codice.
L’unico prerequisito è l’installazione della IDE Visual Studio 2022 (può bastare anche la versione gratuita: Visual Studio Community Edition).
1. Creiamo un nuovo progetto in Visual studio 2022 di tipo C# Console App

2. Cambiamo il nome del progetto in MachineLearningExample
3. Selezioniamo il framework .NET 6. (long term support)

4. Creiamo il progetto
5. Cerchiamo un file su cui fare il training
5. Cerchiamo un file su cui fare il training
In rete se ne trovano diversi dalle più disparate dimensioni, per lo scopo di questo breve tutorial andiamo ad utilizziamo lo stesso file che propone Microsoft nel suo tutorial di esempio
Sentiment Labelled Sentences Data Set
6. Aggiungiamo un nuovo elemento al progetto
Clicchiamo il tasto destro sul progetto Add > Machine Learning Model

7. Usando Machine Learning Model (ML.NET) creiamo SentimentModelExample.mbconfig

a. Selezioniamo lo scenario -> Data Classification

b. Environment -> Local (CPU)

c. Il wizard che stiamo utilizzando prevede, sia la possibilità di utilizzare SQL server come origine dati, ma anche la possibilità di caricare file di tipo csv, txt, tsv. Utilizziamo un input di tipo file, e dallo zip che abbiamo scaricato nello step 5 estraiamo e copiamo (ad esempio il file imdb_labelled.txt) nella root della nostra solution.
Es. di contenuto del file : text / positive (1) negative (0)
It is a true classic. 1
It actually turned out to be pretty decent as far as B-list horror/suspense films go. 1
Definitely worth checking out. 1
The problem was the script. 0
It was horrendous. 0
d. Utilizziamo il file appena spostato in Add Data e selezioniamo col1 in Column to predict

Quando si utilizzano file scaricati dal web bisognerebbe sempre verificare che siano ben formattati e corretti.
Infatti, proprio nel caso del file che stiamo prendendo ad esempio, al primo tentativo di caricamento riceveremo un errore.
In questo caso la soluzione è banale: infatti se proviamo ad aprire il file con un editor di testo possiamo notare che la riga 20 inizia con un “ (carattere virgolette) che però non viene chiuso. Allineiamo la riga in questione al resto del file, eliminando il carattere di troppo.
Salviamo e carichiamo nuovamente il file.
Possiamo ora visualizzare una Data Preview che ci mostrerà le prime 10 righe del file utilizzato. In questo caso le colonne presenti nel file sono 2: la prima è il testo che deve essere analizzato e la seconda è la rappresentazione booleana che descrive se il testo caratterizza un sentiment positivo (1) o negativo (0).
e. Cambiamo il Time to train a 60 sec. e facciamo start training

Al termine del training ci verranno fornite informazioni circa:
- Best accuracy: più alta è la precisione, più precise saranno le valutazioni del modello
- Best model: quale algoritmo ha performato meglio durante la costruzione del modello
- Training time: tempo impiegato
- Models explored (total): i modelli valutati
- Generated code-behind: file di code generati

f. In questo step possiamo provare e valutare il nostro modello

Se i test non ci convincono possiamo provare a tornare allo step precedente e rifare lo step di Train con un tempo di addestramento maggiore.
g. Possiamo ora vedere che sono stati generati nuovi file nel nostro progetto:
- SentimentModelExample.consumption.cs -> input e output del modello, che può essere utilizzare per l’utilizzo del modello.
- SentimentModelExample.training.cs -> pipeline di addestramento.
- SentimentModelExample.zip -> modello ML.NET addestrato, che un file zip serializzato.

Inoltre abbiamo un esempio di codice da utilizzare per utilizzare il modello.

e la possibilità di generare sia un progetto console che web api per utilizare il modello generato.

h. Ora possiamo andare al Program.cs della nostra applicazione e provare ad utilizzare il modello.

e fare qualche piccolo test.

et voilà…les jeux sont fait !!
Conclusioni
Le possibilità offerte dalla sentiment analysis di poter ascoltare e analizzare le opinioni espresse dagli utenti sulle principali piattaforme on line (forum, blog o social network) riguardo a un prodotto, un’azienda o un servizio stanno aprendo scenari davvero interessanti di sviluppo condiviso.
Se anche tu vuoi occuparti di progetti di ricerca e sviluppo IT di ultima generazione
dai un’occhiata alle nostre opportunità di lavoro e conosciamoci subito!