top of page

Sentiment Analysis con Python la guida completa

Contribuiamo a semplificare l'analisi del sentiment usando Python in questo tutorial. Imparerai come costruire il tuo classificatore di analisi del sentimento usando Python e comprenderai le basi della NLP (elaborazione del linguaggio naturale).


Indice articolo sulla Sentiment Analysis con Python:

  • Cos'è la Sentiment Analysis

  • Formulare la dichiarazione del problema della Sentiment Analysis

  • Classificazione Naive Bayes per la Sentiment Analysis

  • Un semplice classificatore di sentimenti in Python

  • Perché la Sentiment Analysis è così importante?

Sentiment Analysis con PythonSentiment Analysis con Python dalla Teoria alla Pratica
Sentiment Analysis con Python dalla Teoria alla Pratica

Introduzione alla Sentiment Analysis con Python

La promessa dell'apprendimento automatico ha mostrato molti risultati sorprendenti in un'ampia varietà di campi. L'elaborazione del linguaggio naturale non fa eccezione, ed è uno di quei campi in cui l'apprendimento automatico è stato in grado di mostrare l'intelligenza artificiale generale (non del tutto ma almeno in parte) ottenendo risultati brillanti per compiti davvero complicati.


Ora, la NLP (elaborazione del linguaggio naturale) non è un campo nuovo e nemmeno l'apprendimento automatico. Ma la fusione di entrambi i campi è abbastanza contemporanea e promette solo di fare progressi. Questa è una di quelle applicazioni ibride che tutti (con uno smartphone economico) incontrano quotidianamente. Ad esempio, prendi "suggerimento di parole da tastiera" nell'account o completamenti automatici intelligenti; questi sono tutti i sottoprodotti della fusione di NLP e Machine Learning e, in modo del tutto naturale, sono diventati le parti inseparabili della nostra vita.


La Sentiment Analysis è un argomento vitale nel campo della NLP. È diventato facilmente uno degli argomenti più caldi del settore a causa della sua rilevanza e del numero di problemi aziendali che sta risolvendo ed è stato in grado di rispondere. In questo tutorial tratterai questo argomento non così semplice in modo semplice . Analizzerai tutta la piccola matematica che c'è dietro e la studierai. Alla fine di questo tutorial creerai anche un semplice classificatore di sentimenti. Nello specifico ti occuperai di:

  • Comprendere la Sentiment Analysis dal punto di vista di un professionista

  • Formulare la dichiarazione del problema della Sentiment Analysis

  • Classificazione Naive Bayes per la Sentiment Analysis

  • Un caso di studio in Python della Sentiment Analysis

  • In che modo la Sentiment Analysis sta influenzando diversi ambiti aziendali

  • Ulteriori letture sull'argomento


Iniziamo.


Sentiment Analysis con Python la guida completa
Sentiment Analysis con Python la guida completa

Cos'è la Sentiment Analysis :

In sostanza, la Sentiment Analysis o la classificazione del sentimento rientrano nell'ampia categoria delle attività di classificazione del testo in cui ti viene fornita una frase o un elenco di frasi e il tuo classificatore dovrebbe dire se il sentimento dietro è positivo, negativo o neutro. A volte, il terzo attributo non viene utilizzato per mantenerlo un problema di classificazione binaria. Nelle attività recenti vengono presi in considerazione anche sentimenti come "un po' positivi" e "un po' negativi". Capiamo ora con un esempio.


Considera le seguenti frasi:

  1. "Titanic è un grande film"

  2. "Titanic non è un gran film"

  3. "Titanic è un film"

Le frasi corrispondono a recensioni di cortometraggi e ognuna di esse trasmette sentimenti diversi. Ad esempio, la prima frase denota un sentimento positivo sul film Titanic mentre la seconda tratta il film come non eccezionale (sentimento negativo). Dai un'occhiata al terzo.


Non c'è una parola del genere in quella frase che possa dirti qualcosa riguardo al sentimento trasmesso da essa. Quindi, questo è un esempio di sentimento neutro.

Ora, da un punto di vista rigoroso di apprendimento automatico, questo compito non è altro che un compito di apprendimento supervisionato . Fornirai un gruppo di frasi (con le etichette dei rispettivi sentimenti) al modello di apprendimento automatico e testerai il modello su frasi senza etichetta.


Per poter costruire un modello di classificazione del sentimento, hai bisogno di qualcosa in più. Procediamo.


Formulare un problema di Sentiment Analysis

Prima di comprendere la definizione del problema di un'attività di classificazione dei sentimenti, è necessario avere un'idea chiara del problema generale di classificazione del testo. Definiamo formalmente il problema di un compito generale di classificazione del testo.

  • Input : - Un documento d - Un insieme fisso di classi C = {c 1 ,c 2 ,..,c n }

  • Output : una classe prevista c appartenente all'insieme C



Il termine del documento qui è soggettivo. Per documento si intende tweet, frasi, parti di articoli di notizie, interi articoli di notizie, un articolo completo, un manuale di prodotto, una storia, ecc.


La ragione alla base di questa terminologia è la parola che è un'entità atomica e piccola in questo contesto. Quindi, per denotare grandi sequenze di parole, questo termine documento è usato in generale. I tweet indicano un documento più breve mentre un articolo significa un documento più grande.


Quindi, un insieme di formazione di n documenti etichettati è simile a: (d 1 ,c 1 ), (d 2 ,c 2 ),...,(d n ,c n ) e l'output finale è un classificatore appreso.


Stai andando bene! Ma una domanda che devi farti a questo punto è dove sono le caratteristiche (variabili) dei documenti? Domanda genuina! Ci arriverai un po' più tardi.


Ora, andiamo avanti con la formulazione del problema e costruiamo lentamente l'intuizione dietro la classificazione dei sentimenti.


Un punto cruciale che devi tenere a mente mentre lavori nell'analisi del sentimento è che non tutte le parole in una frase trasmettono il sentimento della frase. Parole come "Io", "Sono", "Ho", ecc. non contribuiscono a trasmettere alcun tipo di sentimento e quindi non sono relative in un contesto di classificazione dei sentimenti. Considera il problema della selezione delle funzioni qui. Nella selezione delle caratteristiche, provi a capire le caratteristiche più rilevanti che si riferiscono maggiormente all'etichetta della classe . La stessa idea vale anche qui. Pertanto, solo una manciata di parole in una frase prendono parte a questo e identificarle ed estrarle dalle frasi si rivelano compiti impegnativi. Ma non preoccuparti, ci arriverai.


Considera la seguente recensione del film per capirlo meglio:


" Adoro questo film! È dolce, ma con umorismo satirico. I dialoghi sono fantastici e le scene di avventura sono divertenti. Riesce a essere romantico e stravagante mentre ride delle convenzioni del genere delle fiabe. Lo consiglierei a quasi chiunque. L'ho visto diverse volte e sono sempre felice di rivederlo....... "

Sì, questa è senza dubbio una recensione che porta sentimenti positivi riguardo a un particolare film. Ma quali sono quelle parole specifiche che definiscono questa positività?

Rivedi la recensione.



" Adoro questo film! È dolce , ma con umorismo satirico . I dialoghi sono fantastici e le scene di avventura sono divertenti . Riesce a essere romantico e stravagante mentre ride delle convenzioni del genere delle fiabe. Lo consiglierei a quasi chiunque. L'ho visto diverse volte e sono sempre felice di rivederlo ....... " .


Devi avere un'immagine chiara ora. Le parole in grassetto nel testo sopra sono le parole più importanti che costruiscono la natura positiva del sentimento trasmesso dal testo.

Cosa fare con queste parole? Il passo successivo che sembra naturale è creare una rappresentazione simile alla seguente:


​PAROLE

CONTEGGIO

Adoro

1

Dolce

1

​Fantastici

1

...

2

...

1



Quindi cosa stiamo rappresentando qui sopra?

  • una parola e la sua frequenza di occorrenza

  • i caratteri delle parole



Hai indovinato. Ogni riga contiene una parola e la sua frequenza di occorrenza nel documento.


Durante la formulazione della dichiarazione del problema di un compito di classificazione del sentimento, hai capito la rappresentazione " Borsa di parole " e la rappresentazione di cui sopra non è altro che una rappresentazione Bag-of-words. Questo è probabilmente il concetto più fondamentale nella NPL ed è il primo passo per risolvere qualsiasi problema di classificazione del testo. Quindi, assicurati di capirlo bene.


Una rappresentazione bag-of-words di un documento non contiene solo parole specifiche, ma tutte le parole uniche in un documento e la loro frequenza di occorrenza. Una borsa è una matematica, quindi per definizione di un insieme, la borsa non contiene parole duplicate.



Ma per questa applicazione, sei interessato solo alle parole in grassetto come menzionato in precedenza, quindi il sacco di parole per questo documento conterrà solo queste parole.

I documenti non sono scritti in modo confuso. Sono loro? La sequenza di parole in un documento è fondamentale. Ma nel contesto della classificazione dei sentimenti, questa sequenza non è molto importante. Ciò che è più importante o la parte più importante qui è la presenza di queste parole.


Le parole che hai scoperto nel sacco di parole ora costruiranno il set di funzionalità del tuo documento. Quindi, considera una raccolta di molte recensioni di film (documenti) e hai creato rappresentazioni di un sacco di parole per ciascuno di essi e conservato le loro etichette . Il tuo set di allenamento dovrebbe essere simile a:


Sentiment Analysis con Python la guida completa
Sentiment Analysis con Python la guida completa

Questa rappresentazione è anche conosciuta come Corpus.


Questo set di addestramento dovrebbe essere facile da interpretare -

Tutte le righe sono vettori di funzionalità indipendenti contenenti informazioni su un documento specifico (recensioni di film), le parole particolari e il suo sentimento. Si noti che il sentimento dell'etichetta è spesso indicato come (+, -) . Inoltre, le caratteristiche w1, w2, w3, 34, ..., wn sono generate da un insieme di parole e non è necessario che tutti i documenti contengano ciascuna di queste caratteristiche/parole.

Passerai questi vettori di funzionalità al classificatore. Quindi, studiamolo dopo: il modello di classificazione Naive Bayes per la classificazione del sentimento.


Classificazione Naive Bayes per la Sentiment Analysis

La classificazione ingenua di Bayes non è altro che l'applicazione delle regole di Bayes per formare le probabilità di classificazione. In questa sezione studierai il classificatore Naive Bayes dal contesto della classificazione dei sentimenti. Si consiglia vivamente di avere un'introduzione sulla classificazione di Naive Bayes e sulla regola di Bayes.


Ma perché Naive Bayes nel mondo k-NN, Decision Trees e tanti altri? Ci arriverai più tardi.

Costruiamo prima la nozione di termini generali nel classificatore di Naive Bayes nel contesto della classificazione dei sentimenti. Inizierai dando un'occhiata alla regola di Bayes:

  • Per un documento d e una classe c :

Sentiment Analysis con Python la guida completa
Sentiment Analysis con Python la guida completa

In questo caso, la classe comprende due sentimenti. Positivo e negativo.

Studiamo ogni termine dell'immagine sopra in dettaglio in questo contesto.

  • Il termine P(c|d) viene letto come la probabilità della classe c dato un documento d .

  • P(d|c) è analogo.

Ora, cosa sono questi P e la Probabilità? Inoltre, il termine P(d) (probabilità di un documento); suona assurdo? Tante domande! Troviamo subito le risposte!

  • Il termine che viene mostrato come Prior è la tua convinzione originale, ovvero l'etichetta originale del documento è positiva o negativa (in termini di sentimenti).

  • Il termine Probabilità è la probabilità di un documento d data una classe c.

  • Ora pensa al termine Posterior come alla tua regola aggiornata o credenza aggiornata ottenuta moltiplicando Prior e Probabilità.

  • Ma cos'è la costante di normalizzazione P(d)? Questo termine è diviso con il risultato prodotto dalla moltiplicazione per garantire che il risultato possa essere presentato in una distribuzione di probabilità.


Ma attieniti ad esso. Scoprirai maggiori informazioni. Ma ricorda, stai ancora costruendo la tua intuizione per mettere in relazione la regola di Bayes nel contesto della classificazione dei sentimenti.


Entriamo più nel dettaglio per scoprire cosa sta cercando di fare esattamente la regola di Bayes qui. L'immagine seguente presenta passaggi più dettagliati della regola di Bayes:


Sentiment Analysis con Python la guida completa
Sentiment Analysis con Python la guida completa

Molti termini sconosciuti qui. Andiamo piano.


Iniziamo con il termine c MAP . Denota qui l'obiettivo principale della regola di Bayes, ovvero scoprire la massima probabilità/stima a posteriori di un certo documento appartenente a una particolare classe. MAP è un'abbreviazione di Max A Posterioricui è una terminologia greca.


Che cos'è argmax? Avresti potuto usare solo max!

  • Bene, argmax denota l'indice. Supponiamo che P(+|d) > P(-|d) dove + e - denotino rispettivamente sentimenti positivi e negativi. Questi termini P(+|d), P(-|d) restituiscono probabilità che sono una quantità numerica. Ma non sei interessato alla probabilità, sei interessato a scoprire la classe per cui P(+|d) è maggiore e la argmax restituisce. Per P(+|d) > P(-|d), argmax restituirà + .

E sì, puoi eliminare il termine denominatore P(d). Dipende interamente dall'implementazione.


Ma come faccio a sapere P(d|c) e P(c) Questo è esattamente dove bag of words tornerà utile. Ma come?


Continuare a leggere!


Sai già come convertire un determinato documento in unbag of word. Ancora più importante, puoi rappresentare un documento come un insieme di funzionalità con questo. Quindi ora, essenzialmente il termine c MAP può essere scritto come (ignorando il termine denominatore P(d)):


Sentiment Analysis con Python la guida completa
Sentiment Analysis con Python la guida completa

Ma come si calcolano davvero le probabilità? Iniziamo con P(c) prima.


P(c) si occupa fondamentalmente di questa domanda: "Quanto spesso si verifica questa classe?" Supponiamo che il set di dati del tuo documento contenga il 60% di sentimenti positivi e il 40% di sentimenti negativi. Quindi, P(+) = 0,6 e P(-) = 0,4

.

Ora, come interpreti questo termine: P(x1, x2,...,xn | c)?


Pensa in questo modo: qual è la probabilità che si verifichino queste parole (caratteristiche) data la classe c. Ad esempio, supponiamo di avere 1000 documenti e di avere solo due parole nel corpus: "buono" e "fantastico". Ora, su questi 1000 documenti, 500 documenti sono etichettati come positivi e i restanti 500 sono etichettati come negativi. Inoltre, hai scoperto che su 500 documenti con etichetta positiva, 200 contengono entrambi "buono" e "fantastico" (nota P(x1,x2) significa P(x1 e x2)). Quindi, la probabilità P(buono,impressionante | +) = 200 / 1000 = 1/5.


Un punto importante che vorresti sottolineare qui è che se la tua dimensione del vocabolario è X allora puoi formulare X^n probabilità (come P(buono,impressionante | +)) probabilità a condizione che il tuo documento contenga n parole.


Ricorda che devi calcolare le probabilità di verosimiglianza per entrambe le classi qui. Quindi, il numero totale di combinazioni di uno scenario in cui hai 2000 parole totali e ogni documento contiene 20 parole in media sarà (2000)^20 . Questo numero è follemente grande! E se la dimensione del corpus fosse in milioni (cosa che accade davvero nei casi pratici)?


Questo è chiamato il classificatore di Bayes . Ma semplicemente non funziona perché i calcoli sono troppi. Ora studierai alcune ipotesi per rendere il classificatore Bayes un classificatore Naive Bayes .


I presupposti che studierai sono chiamati Naive Bayes Independence Assumptions . Sono i seguenti:


P(x1, x2,...,xn | c)

- Assunzione di parole : supponiamo che la posizione non abbia importanza. Supponiamo che una parola particolare si trovi alla decima e alla ventesima posizione, ma con questo presupposto, significa che ti interessa solo la frequenza perché quella parola si è verificata che è 2. 10 e 12 questi due numeri sono irrilevanti qui. - Assunzione di indipendenza condizionale : questa è un'ipotesi critica che rende il classificatore di Bayes Naive Bayes. Afferma che "assume le probabilità delle caratteristiche P(x i |c j )". Dai un'occhiata più da vicino alla dichiarazione. Significa che P(x 1 |c j ), P(x 2 |c j ) e così via sono indipendenti l'uno dall'altro. (Non significa in alcun modo che P(x 1), P(x 2 ) e così via sono indipendenti tra loro) Ora, il termine P(x1, x2,...,xn | c) può essere espresso come segue:


Sentiment Analysis con Python la guida completa
Sentiment Analysis con Python la guida completa

Quindi, naturalmente, X^n combinazioni vengono ridotte a X*n che è esponenzialmente inferiore (se la dimensione del tuo vocabolario è X e il tuo documento contiene n parole). Definito matematicamente, il classificatore Bayes quando ridotto al classificatore Naive Bayes assomiglia a:

Sentiment Analysis con Python la guida completa
Sentiment Analysis con Python la guida completa

Naive Bayes ha due vantaggi:

  • Numero ridotto di parametri.

  • Complessità temporale lineare in contrapposizione alla complessità temporale esponenziale.

Meccanismo di classificazione Naive Bayes quando applicato a un problema di classificazione del testo, viene indicato come classificazione " Multinomiale Naive Bayes ".

Ora, sei abbastanza abile nel comprendere i meccanismi di un classificatore Naive Bayes in particolare, per un problema di classificazione del sentimento. Ora è giunto il momento di implementare un classificatore di sentimenti.