1. ProgramovanieVeľké dátové dáta ScienceUsing AI na analýzu sentimentu

Autor: John Paul Mueller, Luca Mueller

Analýza sentimentu sa počíta výpočtovo z písomného textu, ktorý využíva postoj autora (či už pozitívny, negatívny alebo neutrálny) k textovej téme. Tento druh analýzy sa ukázal byť užitočným pre ľudí pracujúcich v oblasti marketingu a komunikácie, pretože im pomáha porozumieť tomu, čo si zákazníci a spotrebitelia myslia o produkte alebo službe, a teda konať primerane (napríklad pokúsiť sa získať späť nespokojných zákazníkov alebo sa rozhodnúť použiť inú stratégiu predaja). ). Každý vykonáva analýzu sentimentu. Napríklad pri čítaní textu sa ľudia prirodzene snažia určiť sentiment, ktorý pohol osobu, ktorá ho napísala. Ak je však počet textov na čítanie a porozumenie príliš veľký a text sa neustále hromadí, napríklad v sociálnych médiách a e-mailoch zákazníkov, je dôležitá automatizácia analýzy sentimentu.

Analýza sentimentu AI

Nasledujúcim príkladom je skúšobná prevádzka RNN pomocou Keras a TensorFlow, ktorá vytvára algoritmus analýzy sentimentu schopný klasifikovať postoje vyjadrené v recenzii filmu. Dáta sú vzorkou súboru údajov IMDb, ktorý obsahuje 50 000 recenzií filmov (rozdelených na polovicu medzi vlak a súpravy) sprevádzané štítkom vyjadrujúcim sentiment preskúmania (0 = negatívny, 1 = pozitívny). IMDb je veľká online databáza obsahujúca informácie o filmoch, televíznych seriáloch a videohrách. Pôvodne udržiavaná fanúšikskou základňou, teraz ju prevádzkuje dcérska spoločnosť Amazonu. Na stránkach IMDb ľudia nájdu informácie, ktoré potrebujú o svojej obľúbenej šou, ako aj uverejnia svoje komentáre alebo napíšu recenziu, aby ju mohli prečítať ostatní návštevníci.

Keras ponúka obal na stiahnutie údajov IMDb. Tieto údaje pripravujete, zamiešate a usporiadate do vlaku a do skúšobnej sady. Najmä textové údaje IMDb, ktoré ponúka Keras, sú očistené od interpunkcie, normalizované na malé písmená a transformované do číselných hodnôt. Každé slovo je kódované do čísla, ktoré predstavuje jeho poradie podľa frekvencie. Najčastejšie slová majú nízky počet; menej časté slová majú vyššie čísla.

Ako úvodný bod kód naimportuje funkciu imdb z Kerasu a použije ju na načítanie údajov z internetu (približne 17,5 MB na stiahnutie). Parametre, ktoré príklad používa, zahŕňajú iba prvých 10 000 slov a Keras by mal dáta zamiešať pomocou špecifického náhodného semena. (Poznanie semena umožňuje reprodukciu náhodného výberu podľa potreby.) Funkcia vráti dve sady vlakov a testov, ktoré sú vyrobené z textových sekvencií a výsledku sentimentu.

z keras.datasets import imdb
top_words = 10000
((x_train, y_train),
(x_test, y_test)) = imdb.load_data (num_words = top_words,
semeno = 21)

Po dokončení predchádzajúceho kódu môžete skontrolovať počet príkladov pomocou nasledujúceho kódu:

print ("Príklady školení:% i"% len (x_train))
print ("Príklady testov:% i"% len (x_test))

Po opýtaní sa na počet prípadov, ktoré sú k dispozícii na použitie vo fáze výcviku a testovania neurónovej siete, kód vydá odpoveď 25 000 príkladov pre každú fázu. (Tento dataset je relatívne malý pre jazykový problém; evidentne je to hlavne pre demonštračné účely.) Okrem toho kód určuje, či je dataset vyvážený, čo znamená, že má takmer rovnaký počet pozitívnych a negatívnych príkladov sentimentu.

importovať numpy ako np
tlač (np.unique (y_train, return_counts = True))

Pole výsledkov ([12500, 12500]) potvrdzuje, že množina údajov je rovnomerne rozdelená medzi pozitívne a negatívne výsledky. Takáto rovnováha medzi triedami odpovedí je výlučne kvôli demonštračnej povahe súboru údajov. V skutočnom svete zriedka nájdete vyvážené súbory údajov. Ďalším krokom je vytvorenie niektorých slovníkov Pythonu, ktoré dokážu prevádzať medzi kódom použitým v množine údajov a skutočnými slovami. V skutočnosti je množina údajov použitá v tomto príklade predbežne spracovaná a poskytuje postupnosť čísiel predstavujúcich slová, nie samotné slová. (Algoritmy LSTM a GRU, ktoré nájdete v Kerase, očakávajú sekvencie čísel ako čísla.)

word_to_id = {w: i ​​+ 3 pre w, i v imdb.get_word_index (). items ()}
id_to_word = {0: '', 1: '', 2: ''}
id_to_word.update ({i + 3: w for w, i in imdb.get_word_index (). items ()})
def convert_to_text (sekvencia):
návrat '' .join ([id_to_word [s] pre s v poradí, ak s> = 3])
tlačiť (convert_to_text (x_train [8]))

Predchádzajúci úryvok kódu definuje dva slovníky konverzie (od slov k číselným kódom a naopak) a funkciu, ktorá prekladá príklady množiny údajov do čitateľného textu. Napríklad, kód vytlačí deviaty príklad: „Tento film bol ako zlý vrak vlaku tak hrozný, ako to bolo ...“. Z tohto úryvku môžete ľahko očakávať, že sentiment k tomuto filmu nie je pozitívny. Slová ako zlý, troskový a príšerný prejavujú silný negatívny pocit, a preto je ľahké uhádnuť správny sentiment.

V tomto príklade dostanete číselné sekvencie a zmeníte ich späť na slová, ale opak je bežný. Zvyčajne dostanete frázy zložené zo slov a premeníte ich na postupnosť celých čísel, aby sa mohli posúvať do vrstvy RNN. Keras ponúka špecializovanú funkciu Tokenizer, ktorá vám to môže urobiť. Používa metódy fit_on_text, aby sa naučil, ako mapovať slová do celých čísel z tréningových údajov, a documents_to_matrix, aby transformoval text do postupnosti.

V iných frázach však nenájdete takéto odhalujúce slová pre analýzu sentimentu. Pocit je vyjadrený jemnejším alebo nepriamejším spôsobom a pochopenie sentimentu na začiatku textu nemusí byť možné, pretože odhalujúce frázy a slová sa môžu v diskurze objaviť oveľa neskôr. Z tohto dôvodu musíte tiež rozhodnúť, koľko vety chcete analyzovať.

Obvykle si vezmete úvodnú časť textu a použijete ju ako zástupcu pre celú recenziu. Niekedy potrebujete iba niekoľko úvodných slov, napríklad prvých 50 slov, aby ste získali zmysel; niekedy potrebujete viac. Najmä dlhé texty neodhaľujú svoju orientáciu skôr. Je preto na vás, aby ste porozumeli typu textu, s ktorým pracujete, a rozhodli ste sa, koľko slov analyzovať pomocou hlbokého učenia. Tento príklad berie do úvahy iba prvých 200 slov, ktoré by mali stačiť.

Všimli ste si, že kód začína zadávať kód slovám začínajúcim číslom 3, a tak ponecháva kódy od 0 do 2. Nižšie čísla sa používajú pre špeciálne značky, ako napríklad signalizáciu začiatku vety, vyplnenie prázdnych medzier, aby bola sekvencia opravená v určitej dĺžke a označenie slov, ktoré sú vylúčené, pretože nie sú dostatočne časté. Tento príklad zachytáva iba najčastejšie 10 000 slov. Použitie značiek na zdôraznenie počiatočných, koncových a významných situácií je trik, ktorý pracuje s RNN, najmä pri strojovom preklade.

z keras.preprocessing.sequence import pad_sequences
max_pad = 200
x_train = pad_sequences (x_train,
MAXLEN = max_pad)
x_test = pad_sequences (x_test,
MAXLEN = max_pad)
tlač (x_train [0])

Použitím funkcie pad_sequences od Keras s nastavením max_pad na 200 kód berie prvých dvesto slov z každej recenzie. V prípade, že prehľad obsahuje menej ako dvesto slov, pred sekvenciou sa dostane toľko nulových hodnôt, koľko je potrebné, aby sa dosiahol požadovaný počet prvkov sekvencie. Rezanie sekvencií na určitú dĺžku a vyplnenie dutín nulovými hodnotami sa nazýva vstupné odsadenie, čo je dôležitá procesná aktivita pri použití RNN, ako sú algoritmy hlbokého učenia. Teraz kód navrhuje architektúru:

z keras.models import Sequential
z keras.layers importovať Bidirectional, Dense, Dropout
z keras.layers importujte GlobalMaxPool1D, LSTM
z importu keras.layers.embeddings vkladanie
embedding_vector_length = 32
model = sekvenčné ()
model.add (vkladanie (top_words,
embedding_vector_length,
input_length = max_pad))
model.add (obojsmerný (LSTM (64, return_sequences = true)))
model.add (GlobalMaxPool1D ())
model.add (hustá (16, aktivácia = "relu"))
model.add (Hustý (1, aktivácia = "sigmoid"))
model.compile (strata = 'binary_crossentropy',
optimalizácia = 'Adam',
metriky = [ 'presnosť'])
print (model.summary ())

Predchádzajúci úryvok kódu definuje tvar modelu hlbokého učenia, kde používa niekoľko špecializovaných vrstiev na spracovanie prirodzeného jazyka od spoločnosti Keras. Tento príklad tiež vyžadoval zhrnutie modelu (príkaz model.summary ()) na určenie toho, čo sa deje s architektúrou pomocou rôznych neurónových vrstiev.

Máte vrstvu vkladania, ktorá transformuje numerické sekvencie na husté vkladanie slov. Tento typ vkladania slov je vhodnejší na naučenie sa vrstvou RNN. Keras poskytuje vkladaciu vrstvu, ktorá môže byť nevyhnutne prvou vrstvou siete a môže plniť dve úlohy:

  • Aplikácia vopred pripraveného vkladania slov (napríklad Word2vec alebo GloVe) na vstup do sekvencie. Potrebujete iba odovzdať maticu obsahujúcu vloženie do jej hmotností parametrov. Vytvorenie vkladania slova od nuly na základe vstupov, ktoré prijíma.

V tomto druhom prípade musí vkladanie vedieť:

  • input_dim: Veľkosť slovnej zásoby očakávaná od údajov output_dim: Veľkosť vkladacieho priestoru, ktorý sa vytvorí (tzv. rozmery) input_length: Veľkosť sekvencie, ktorú možno očakávať

Keď určíte parametre, vloženie nájde lepšie váhy na transformáciu sekvencií do hustej matrice počas tréningu. Hustá veľkosť matrice je daná dĺžkou sekvencií a rozmernosťou vloženia.

Ak používate vrstvu vkladania, ktorú poskytuje spoločnosť Keras, musíte pamätať na to, že táto funkcia poskytuje iba maticu hmotnosti veľkosti slovnej zásoby podľa rozmeru požadovaného vloženia. Mapuje slová do stĺpcov matice a potom vyladí hmotnosti matíc podľa poskytnutých príkladov. Toto riešenie, aj keď je praktické pre neštandardné jazykové problémy, nie je analogické so slovom embeddings diskutovaným predtým, ktoré sú trénované iným spôsobom a na miliónoch príkladov.

V príklade sa používa obojsmerné balenie - vrstva LSTM s 64 bunkami. Obojsmerný transformuje normálnu vrstvu LSTM jej zdvojnásobením: Na prvej strane použije normálnu postupnosť zadaných vstupov; na druhej strane prechádza opačným smerom. Tento prístup použijete, pretože niekedy používate slová v inom vhodnom poradí a vytvorenie obojsmernej vrstvy zachytí akýkoľvek vzor slova bez ohľadu na poradie. Implementácia Keras je skutočne jednoduchá: stačí ju použiť ako funkciu na vrstvu, ktorú chcete obojsmerne vykresliť.

Obojsmerný LSTM je nastavený na návratové sekvencie (return_sequences = True); to znamená, že pre každú bunku vracia výsledok po zobrazení každého prvku sekvencie. Výsledkom pre každú sekvenciu je výstupná matica 200 x 128, kde 200 je počet sekvenčných prvkov a 128 je počet LSTM buniek použitých vo vrstve. Táto technika bráni RNN v prijímaní posledného výsledku každej bunky LSTM. Rady o sentimente textu sa môžu skutočne objaviť kdekoľvek v poradí vložených slov.

Stručne povedané, je dôležité nebrať posledný výsledok každej bunky, ale skôr najlepší výsledok. Kód sa preto spolieha na nasledujúcu vrstvu GlobalMaxPool1D, aby skontroloval každú sekvenciu výsledkov poskytnutých každou bunkou LSTM a zachoval iba maximálny výsledok. To by malo zaistiť, že príklad vyberie najsilnejší signál z každej bunky LSTM, ktorý je dúfajme, že jeho výcvik sa špecializuje na výber nejakých zmysluplných signálov.

Po filtrovaní nervových signálov má príklad vrstvu 128 výstupov, jeden pre každú bunku LSTM. Kód redukuje a kombinuje signály pomocou postupnej hustej vrstvy 16 neurónov s aktiváciou ReLU (čím prechádza iba pozitívne signály). Architektúra končí koncovým uzlom pomocou sigmoidovej aktivácie, ktorá vytlačí výsledky do rozsahu 0–1 a spôsobí, že budú vyzerať ako pravdepodobnosti.

Po definovaní architektúry môžete teraz trénovať sieť na vykonávanie analýzy sentimentu. Postačia tri epochy (prenos údajov trikrát sieťou, aby sa naučili vzory). Kód zakaždým používa šarže 256 recenzií, čo umožňuje sieti vidieť zakaždým dostatok informácií a sentimentov pred aktualizáciou jej váh pomocou backpropagácie. Nakoniec sa kód zameriava na výsledky poskytované validačnými údajmi (ktoré nie sú súčasťou údajov o školení). Získanie dobrého výsledku z validačných údajov znamená, že neurónová sieť spracováva vstup správne. Kód informuje o validačných údajoch hneď po dokončení každej epochy.

history = model.fit (x_train, y_train,
validation_data = (x_test, y_test),
epochy = 3, veľkosť šarže = 256)

Získanie výsledkov chvíľu trvá, ale ak používate GPU, dokončí sa to v čase, keď si pijete šálku kávy. V tomto okamihu môžete výsledky vyhodnotiť znova pomocou validačných údajov. (Výsledky by nemali mať žiadne prekvapenia ani rozdiely oproti tomu, čo kód uviedol počas tréningu.)

strata, metrika = model.evaluate (x_test, y_test, verbose = 0)
print ("Presnosť testu:% 0,3f"% metrika)

Konečná presnosť, ktorá predstavuje percentuálny podiel správnych odpovedí z hlbokej neurónovej siete, bude približne 85 - 86 percent. Výsledok sa mierne zmení pri každom spustení experimentu z dôvodu náhodnosti pri budovaní neurálnej siete. To je úplne normálne vzhľadom na malú veľkosť údajov, s ktorými pracujete. Ak začnete so správnymi váhami, učenie bude pri takom krátkom tréningu jednoduchšie.

Nakoniec je vaša sieť analyzátor sentimentu, ktorý dokáže odhadnúť sentiment vyjadrený v recenzii filmu asi 85 percent času správne. Vzhľadom na ešte viac údajov o školení a sofistikovanejšie neurónové architektúry získate výsledky, ktoré sú ešte pôsobivejšie. V marketingu sa podobný nástroj používa na automatizáciu mnohých procesov, ktoré vyžadujú čítanie textu a prijímanie opatrení. Opäť by ste mohli spojiť takúto sieť s neurónovou sieťou, ktorá počúva hlas a zmení ho na text. (Toto je ďalšia aplikácia RNN, ktorá teraz napája Alexa, Siri, Google Voice a mnoho ďalších osobných asistentov.) Prechod umožňuje aplikácii porozumieť sentimentu aj vo vokálnych výrazoch, ako je napríklad telefonický hovor od zákazníka.

Pozri tiež

Ako vyplniť svoju futbalovú fantáziuPríznaky a nápravné opatrenia pre recept Keto FluKeto Dezert: Krémová pečienka, cesto MousseKeto Recepty: avokádový toastový sendvič Keto jedlá s jedlom v jedle Recept: steak z hovädzej sviečkovice s chrumkavými receptami KaleKeto Recept: chrumkavé pečené cibuľové krúžkyŤažba kryptomeny a dôkaz algoritmov vkladuAko chrániť svoje súkromie v MacBooku Zoznámte sa s náhradou za iTunes: Nové aplikácie pre hudbu a televíziu v systéme MacOS CatalinaČo je nové v systéme MacOS Catalina? Stručné tipy na nastavenie systému MacOS Catalina a registrácia vášho MacBookMacBook pre figuríny Cheat SheetDifferences medzi MacBook Air a MacBook ProHow Prepínanie medzi Účty v počítači MacOtestujte mikrofón v počítači so systémom Windows PCAko obnoviť súbory z histórie súborov v systéme Windows 10Napájanie sieťovej jednotky v počítači so systémom Windows 10Ako skontrolovať brzdové čiarySkočiť naštartovať Ako správne zistiť, či vaše vozidlo potrebuje vyladenieAko vyriešiť problémy s katalytickými meničmiAko často by ste mali vymeniť olej? Ako skontrolovať hladinu oleja vo vašom vozidleAko prepláchnuť chladiaci systém vozidla Ako vyriešiť problém s prehriatím motoraAko vyriešiť problém? Ako vymeniť pneumatikuAko nainštalovať zapaľovaciu sviečkuAko odstrániť staré zapaľovacie sviečkyAko skontrolovať kotúčové brzdyAko vymeniť brzdovú kvapalinuAko skontrolovať hlavnú brzdovú kvapalinu brzdového systémuAko skontrolovať brzdovú kvapalinu vozidlaPrečo sa moje auto prehrieva a čo môžem urobiť? Ako bezpečne zdvihnúť Zaistite, aby ste skontrolovali brzdové čiary