Come addestrare lo strumento Stanford NLP Sentiment Analysis

Diavolo a tutti! Sto utilizzando il pacchetto Stanford Core NLP e il mio objective è quello di eseguire analisi del sentimento su un live-stream di tweet.

L’uso dello strumento di analisi del sentimento restituisce un’analisi molto scarsa dell’atteggiamento del testo. Molti aspetti positivi sono etichettati come neutri, molti negativi sono considerati positivi. Sono andato avanti e ho acquisito ben più di un milione di tweet in un file di testo, ma non ho idea di come addestrare effettivamente lo strumento e creare il mio modello personale.

Link alla pagina Stanford Sentiment Analysis

“I modelli possono essere riqualificati utilizzando il seguente comando utilizzando il set di dati in formato PTB:”

java -mx8g edu.stanford.nlp.sentiment.SentimentTraining -numHid 25 -trainPath train.txt -devPath dev.txt -train -model model.ser.gz 

Esempio da dev.txt (Il 4 principale rappresenta la polarità su 5 … 4/5 positivo)

     (4 (4 (2 A) (4 (3 (3 warm) (2 ,)) (3 funny))) (3 (2 ,) (3 (4 (4 engaging) (2 film)) (2 .)))) 

    Esempio da test.txt

     (3 (3 (2 If) (3 (2 you) (3 (2 sometimes) (2 (2 like) (3 (2 to) (3 (3 (2 go) (2 (2 to) (2 (2 the) (2 movies)))) (3 (2 to) (3 (2 have) (4 fun))))))))) (2 (2 ,) (2 (2 Wasabi) (3 (3 (2 is) (2 (2 a) (2 (3 good) (2 (2 place) (2 (2 to) (2 start)))))) (2 .))))) 

    Campione da train.txt

     (3 (2 (2 The) (2 Rock)) (4 (3 (2 is) (4 (2 destined) (2 (2 (2 (2 (2 to) (2 (2 be) (2 (2 the) (2 (2 21st) (2 (2 (2 Century) (2 's)) (2 (3 new) (2 (2 ``) (2 Conan)))))))) (2 '')) (2 and)) (3 (2 that) (3 (2 he) (3 (2 's) (3 (2 going) (3 (2 to) (4 (3 (2 make) (3 (3 (2 a) (3 splash)) (2 (2 even) (3 greater)))) (2 (2 than) (2 (2 (2 (2 (1 (2 Arnold) (2 Schwarzenegger)) (2 ,)) (2 (2 Jean-Claud) (2 (2 Van) (2 Damme)))) (2 or)) (2 (2 Steven) (2 Segal))))))))))))) (2 .))) 

    Ho due domande in corso.

    Qual è il significato e la differenza tra ogni file? Train.txt / Dev.txt / Test.txt?

    Come posso addestrare il mio modello con un file di testo grezzo non analizzato pieno di tweet?

    Sono molto nuovo con la PNL quindi se mi mancano le informazioni richieste o qualsiasi altra cosa, per favore, critica! Grazie!

    Qual è il significato e la differenza tra ogni file? Train.txt / Dev.txt / Test.txt?

    Questa è una terminologia standard di apprendimento automatico. Il treno è abituato a (sorpresa a sorpresa) addestrare un modello. Il set di sviluppo viene utilizzato per regolare tutti i parametri che il modello potrebbe avere. Quello che faresti normalmente è selezionare un valore di parametro, addestrare un modello sul set di allenamento e quindi verificare l’efficienza del modello addestrato sul set di sviluppo. Quindi scegli un altro valore di parametro e ripeti. Questa procedura ti aiuta a trovare valori parametrici ragionevoli per il tuo modello.

    Una volta fatto, si procede a testare quanto bene il modello fa sul set di prova. Questo non è visibile : il tuo modello non ha mai riscontrato nessuno di quei dati prima. È importante che il set di test sia separato dal set di training e sviluppo, altrimenti si sta valutando in modo efficace un modello sui dati che ha visto prima. Questo sarebbe sbagliato in quanto non ti darà un’idea di quanto bene il modello fa davvero.

    Come posso addestrare il mio modello con un file di testo grezzo non analizzato pieno di tweet?

    Non puoi e non dovresti allenarti usando una serie di documenti non analizzati. L’intero punto del modello profondo ricorsivo (e il motivo per cui funziona così bene) è che può imparare dalle annotazioni del sentimento ad ogni livello dell’albero di analisi. La frase che hai dato sopra può essere formattata in questo modo:

     (4 
         (4 
             (2 A) 
             (4 
                 (3 (3 caldo) (2,)) (3 divertente)
             )
         ) 
         (3 
             (2,) 
             (3 
                 (4 (4 impegnativi) (2 film)) (2.)
             )
         )
     )
    

    Di solito, un analizzatore di sentimenti viene addestrato con annotazioni a livello di documento. Hai solo un punteggio e questo punteggio si applica all’intero documento, ignorando il fatto che le frasi nel documento possono esprimere sentimenti diversi. Il team di Stanford ha fatto un sacco di sforzi per annotare ogni frase nel documento per il sentiment. Ad esempio, la parola film da sola è neutra nel sentimento: (2 film) . Tuttavia, la frase engaging film è molto positiva: (4 (4 engaging) (2 film)) (2 .)

    Se hai tweets etichettati, puoi utilizzare qualsiasi altro classificatore di sentimenti a livello di documento. Il tag sentiment analysis su stackoverflow ha già delle ottime risposte, non le ripeterò qui.

    PS Hai etichettato i tweet che hai? Tutti 1 milione di loro? Se lo facessi, mi piacerebbe pagarti un sacco di soldi per quel file 🙂

    Il codice Java:

    BuildBinarizedDataset -> [ http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/sentiment/BuildBinarizedDataset.html

    SentimentTraining -> http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/sentiment/SentimentTraining.html

    Per coloro che codificano in C #, ho convertito il codice sorgente Java in due file di codice che dovrebbero rendere la comprensione di questo processo molto più semplice.

    https://arachnode.net/blogs/arachnode_net/archive/2015/09/03/buildbinarizeddataset-and-sentimenttraining-stanford-nlp.aspx

    Se aiuta, ho ottenuto il codice C # da Arachnode lavorando molto facilmente – un tweak o due per ottenere i percorsi giusti per i modelli e così via, ma poi funziona alla grande. Quello che mancava era qualcosa sul formato giusto per i file di input. È in Javadoc, ma per riferimento, per BuildBinarizedDataset è qualcosa del tipo:

     2 line of text here 0 another line of text 1 yet another line of text etc 

    Costruire questo è piuttosto banale, a seconda di cosa stai iniziando (un database, un file Excel, qualunque sia)