1. ProgramiranjeVelika podatakaData ScienceUporaba AI za analizu osjećaja

Autor John Paul Mueller, Luca Mueller

Analiza osjećaja računanje proizlazi iz pismenog teksta koristeći se pisčevim stavom (bilo pozitivnim, negativnim ili neutralnim) prema temi teksta. Ova vrsta analize pokazala se korisnom za ljude koji rade u marketingu i komunikaciji jer im pomaže da razumiju što kupci i potrošači misle o proizvodu ili usluzi i na taj način djeluju na odgovarajući način (na primjer, pokušavajući oporaviti nezadovoljne kupce ili odlučuju se koristiti drugu strategiju prodaje. ). Svi provode analizu osjećaja. Na primjer, prilikom čitanja teksta ljudi prirodno pokušavaju utvrditi osjećaj koji je pokrenuo osobu koja ga je napisala. Međutim, kada je broj tekstova za čitanje i razumijevanje prevelik i tekst se stalno gomila, kao što je to slučaj s društvenim medijima i e-mailovima korisnika, automatizacija analize osjećaja je važna.

Analiza raspoloženja AI

Sljedeći je primjer testni niz RNN-ova pomoću Kerasa i TensorFlowa koji gradi algoritam analize osjećaja koji je sposoban klasificirati stavove izražene u pregledu filma. Podaci su uzorak IMDb skupa podataka koji sadrži 50 000 pregleda (podijeljeno na pola između vlaka i ispitnog seta) filmova popraćenih naljepnicom koja izražava mišljenje recenzije (0 = negativno, 1 = pozitivno). IMDb je velika internetska baza podataka koja sadrži informacije o filmovima, TV serijama i video igrama. Izvorno ga održava baza obožavatelja, a sada ga vodi podružnica Amazona. Na IMDb-u ljudi pronalaze potrebne informacije o svojoj omiljenoj emisiji, kao i objavljuju svoje komentare ili pišu recenziju koju će drugi posjetitelji pročitati.

Keras nudi prijenosni omotač za IMDb podatke. Te podatke pripremate, mješate i raspoređujete u vlak i testni set. Konkretno, IMDb tekstualni podaci koje nudi Keras pročišćavaju se interpunkcijskim znakovima, normaliziraju se malim slovima i pretvaraju u numeričke vrijednosti. Svaka se riječ šifrira u broju koji predstavlja njezino rangiranje po učestalosti. Najčešće riječi imaju mali broj; rjeđe riječi imaju veći broj.

Kao početna točka, kôd uvozi imdb funkciju s Kerasa i koristi je za preuzimanje podataka s Interneta (oko 17.5MB za preuzimanje). Parametri koje primjer koristi obuhvaćaju prvih 10.000 riječi, a Keras bi trebao pomiješati podatke pomoću određenog slučajnog sjemena. (Poznavanje sjemena omogućava reprodukciju miješanja po potrebi.) Funkcija vraća dva vlaka i ispitne skupove, oba napravljena u tekstualnim redoslijedima i ishodu osjećaja.

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

Nakon dovršetka prethodnog koda, možete provjeriti broj primjera pomoću sljedećeg koda:

print ("Primjeri treninga:% i"% len (x_train))
ispis ("Primjeri testiranja:% i"% len (x_test))

Nakon ispitivanja o broju slučajeva dostupnih za uporabu u fazi treninga i ispitivanja neuronske mreže, kôd daje odgovor od 25 000 primjera za svaku fazu. (Ovaj je skup relativno mali za jezične probleme; jasno je da je skup podataka uglavnom u svrhu demonstracije.) Pored toga, kôd određuje je li skup podataka uravnotežen, što znači da ima gotovo jednak broj primjera pozitivnih i negativnih osjećaja.

uvesti numpy kao np
ispis (np.unique (y_train, return_counts = Istina))

Rezultat, niz ([12500, 12500]), potvrđuje da je skup podataka ravnomjerno podijeljen između pozitivnih i negativnih ishoda. Takva je ravnoteža između klasa odgovora isključivo zbog demonstrativne prirode skupa podataka. U stvarnom svijetu rijetko možete naći uravnotežene skupove podataka. Sljedeći korak stvara neke Python rječnike koji mogu pretvoriti između koda koji se koristi u skupu podataka i stvarnih riječi. Zapravo, skup podataka koji se koristi u ovom primjeru unaprijed se obrađuje i pruža nizove brojeva koji predstavljaju riječi, a ne same riječi. (LSTM i GRU algoritmi koje pronađete u Kerasu očekuju nizove brojeva kao brojeve.)

word_to_id = {w: i ​​+ 3 za w, i u imdb.get_word_index (). items ()}
id_to_word = {0: '', 1: '' START>', 2: ''}
id_to_word.update ({i + 3: w za w, i u imdb.get_word_index (). stavke ()})
def convert_to_text (slijed):
return '' .join ([id_to_word [s] za s u nizu ako je s> = 3])
ispis (convert_to_text (x_train [8]))

Prethodni isječak koda definira dva rječnika pretvorbe (iz riječi u numeričke kodove i obrnuto) i funkciju koja primjere skupa podataka prevodi u čitljiv tekst. Kao primjer, kôd piše deveti primjer: "ovaj film je bio poput loše olupine vlaka, podjednako strašan kao i ...". Iz ovog je izvoda lako pretpostaviti da stav prema ovom filmu nije pozitivan. Riječi kao što su loše, olupina i grozno prenose snažan negativan osjećaj, a to olakšava nagađanje ispravnog osjećaja.

U ovom primjeru dobivate numeričke nizove i ponovno ih pretvarate u riječi, ali suprotno je uobičajeno. Obično dobivate izraze sastavljene od riječi i pretvara ih ih u nizove cjelobrojnih znakova da bi se dodali sloju RNN-a. Keras nudi specijaliziranu funkciju, Tokenizer koja to može učiniti za vas. Koristi metode fit_on_text kako bi naučio preslikati riječi u cjelobrojne podatke iz podataka o treningu i text_to_matrix za pretvaranje teksta u niz.

Međutim, u drugim frazama možda nećete naći takve otkrivajuće riječi za analizu osjećaja. Osjećaj je izražen na suptilniji ili neizravniji način, a razumijevanje osjećaja na početku teksta možda nije moguće jer otkrivanje fraza i riječi može se pojaviti mnogo kasnije u diskursu. Iz tog razloga također morate odlučiti koliko fraza želite analizirati.

Konvencionalno uzimate početni dio teksta i koristite ga kao reprezentativni za čitavu recenziju. Ponekad vam treba samo nekoliko početnih riječi - na primjer prvih 50 riječi - da biste dobili smisao; ponekad vam treba više. Posebno dugački tekstovi rano ne otkrivaju svoju orijentaciju. Na vama je da shvatite vrstu teksta s kojim radite i odlučite koliko riječi analizirati koristeći duboko učenje. Ovaj primjer razmatra samo prvih 200 riječi, što bi trebalo biti dovoljno.

Primijetili ste da kôd počinje davati kod riječima koje počinju s brojem 3, na taj način ostavljajući kodove od 0 do 2. Donji brojevi koriste se za posebne oznake, poput signalizacije početka fraze, popunjavanja praznih mjesta kako bi se fiksirao redoslijed u određenoj duljini i označavaju riječi koje su isključene jer nisu dovoljno česte. Ovaj primjer prikazuje samo najčešćih 10 000 riječi. Upotreba oznaka za isticanje početka, kraja i zapaženih situacija je trik koji djeluje s RNN-ovima, posebno za strojno prevođenje.

from keras.preprocessing.sequence uvoz pad_ posljedica
max_pad = 200
x_train = pad_ posljedice (x_train,
maxlen = max_pad)
x_test = pad_ posljedice (x_test,
maxlen = max_pad)
ispis (x_train [0])

Upotrebom funkcije pad_ posljedice iz Kerasa sa maks. Podloškom postavljenom na 200, kôd uzima prvih dvjesto riječi svake recenzije. Ako pregled sadrži manje od dvjesto riječi, onoliko nula vrijednosti koliko je potrebno prethodi nizu da bi se postigao potrebni broj elemenata niza. Skraćivanje sekvence na određenu duljinu i popunjavanje praznina s nultim vrijednostima naziva se ulaznim paddingom, važna aktivnost obrade kada se koriste RNN-ovi poput algoritama dubokog učenja. Sada kôd dizajnira arhitekturu:

iz keras.models uvoz Sekvencijal
iz keras.layers uvoze dvosmjerno, gusto, odbačeno
iz keras.layers uvoze GlobalMaxPool1D, LSTM
iz keras.layers.embeddings uvoz Ugradnja
embedding_vector_length = 32
model = sekvencijalni ()
model.add (uležištenja (top_words,
embedding_vector_length,
input_length = max_pad))
model.add (Dvosmjerni (LSTM (64, return_ posljedice = istina)))
model.add (GlobalMaxPool1D ())
model.add (gusto (16, aktivacija = "relu"))
model.add (gusto (1, aktivacija = "sigmoid"))
model.compile (gubitak = 'binary_crossentropy'
optimizaciju = 'Adam,
Mjerni podaci = [ 'točnost'])
ispis (model.summary ())

Prethodni isječak koda definira oblik modela dubokog učenja gdje koristi nekoliko specijaliziranih slojeva za obradu prirodnog jezika iz Kerasa. Primjer također zahtijeva sažetak modela (naredba model.summary ()) da bi se utvrdilo što se događa s arhitekturom pomoću različitih neuronskih slojeva.

Imate sloj Embedding, koji numeričke sekvence pretvara u gusto umetanje riječi. Ta je vrsta umetanja riječi pogodnija za učenje pomoću sloja RNN-a. Keras nudi sloj za ugradnju koji, osim što mora nužno biti prvi sloj mreže, može ispuniti dva zadatka:

  • Primjenjujući unaprijed pretraženo umetanje riječi (kao što je Word2vec ili GloVe) na unos niza. Trebate samo proslijediti matricu koja sadrži ugrađivanje do njegove težine parametara. Stvaranje riječi koja se ugrađuje ispočetka, na temelju unesenih ulaza.

U ovom drugom slučaju, Umetanje samo treba znati:

  • input_dim: veličina rječnika koja se očekuje od podataka output_dim: Veličina prostora za ugradnju koji će se proizvesti (tzv. dimenzije) input_length: Veličina niza koja se očekuje

Nakon što odredite parametre, Embedding će pronaći bolje utege za transformaciju sekvenci u gustu matricu tijekom treninga. Veličina guste matrice daje se duljinom sekvenci i dimenzijom ugrađivanja.

Ako koristite sloj Embedding koji je pružio Keras, morate se sjetiti da funkcija pruža samo matricu težine veličine vokabulara prema dimenziji željenog ugrađivanja. To preslikava riječi u stupce matrice, a zatim podešava utege matrice na dane primjere. Ovo rješenje, iako je praktično za nestandardne jezične probleme, nije analogno prethodno opisanim ugrađenim riječima, koje se uvježbavaju na drugačiji način i na milijunima primjera.

Primjer koristi dvosmjerno omatanje - LSTM sloj od 64 ćelije. Dvosmjerni transformira normalan LSTM sloj tako što ga udvostručuje: Na prvu stranu primjenjuje normalan slijed unosa koji pružate; s druge strane prelazi obrnutu sekvencu. Koristite ovaj pristup jer ponekad upotrebljavate riječi u različitom redoslijedu, a izgradnja dvosmjernog sloja zahvatit će bilo koji obrazac riječi, bez obzira na poredak. Kerasova implementacija doista je jednostavna: jednostavno je primijenite kao funkciju na sloju koji želite prikazati dvosmjerno.

Dvosmjerni LSTM je postavljen da vraća sekvence (return_sequences = Istina); to jest, za svaku ćeliju vraća dobiveni rezultat nakon što je vidio svaki element niza. Rezultati su, za svaki niz, izlazna matrica od 200 x 128, gdje je 200 broj elemenata sekvence, a 128 je broj LSTM ćelija korištenih u sloju. Ova tehnika sprječava RNN da preuzme posljednji rezultat svake LSTM stanice. Savjeti o osjećaju teksta zapravo se mogu pojaviti bilo gdje u nizu ugrađenih riječi.

Ukratko, važno je ne uzeti zadnji rezultat svake ćelije, već najbolji rezultat. Kôd se stoga oslanja na sljedeći sloj, GlobalMaxPool1D, radi provjere svakog slijeda rezultata dobivenih od svake LSTM ćelije i zadržava samo maksimalni rezultat. To bi trebalo osigurati da primjer odabere najjači signal iz svake LSTM stanice, koji se, nadamo se, specijalizirao svojim treningom za odabir nekih značajnih signala.

Nakon filtriranja neuronskih signala, primjer ima sloj od 128 izlaza, po jedan za svaku LSTM ćeliju. Kod smanjuje i miješa signale koristeći uzastopni gusti sloj od 16 neurona s ReLU aktivacijom (tako prolaze samo pozitivni signali). Arhitektura završava završnim čvorom pomoću sigmoidne aktivacije, što će rezultate ugurati u raspon 0–1 i učiniti ih kao vjerojatnosti.

Nakon definiranja arhitekture, sada možete osposobiti mrežu za analizu osjećaja. Tri epohe (prolazak podataka tri puta kroz mrežu da bi se naučile obrasce) bit će dovoljne. Kôd koristi serije od 256 recenzija svaki put, što omogućava mreži da svaki put vidi dovoljno raznolikosti riječi i osjećaja prije nego što ažurira svoje utege koristeći povratno širenje. Konačno, kôd se usredotočuje na rezultate dobivene podacima o validaciji (koji nisu dio podataka o obuci). Dobivanje dobrog rezultata iz podataka o validaciji znači da neuronska mreža pravilno obrađuje ulaz. Kôd izvještava o podacima o validaciji odmah nakon završetka svake epohe.

povijest = model.fit (x_train, y_train,
validation_data = (x_test, y_test),
epohe = 3, batch_size = 256)

Dobivanje rezultata traje neko vrijeme, ali ako koristite GPU, to će se završiti u vremenu koje ste trebali popiti šalicu kave. U ovom trenutku možete procijeniti rezultate, ponovno koristeći podatke za provjeru valjanosti. (Rezultati ne bi trebali imati iznenađenja ili razlike u odnosu na kod koji je prijavljen tijekom treninga.)

gubitak, metrički = model.evaluate (x_test, y_test, verbose = 0)
ispis ("Točnost testa:% 0,3f"% metrička vrijednost)

Konačna točnost, koja je postotak točnih odgovora iz duboke neuronske mreže, iznosit će vrijednost od oko 85–86 posto. Rezultat će se malo promijeniti svaki put kada pokrenete eksperiment zbog nasumičnosti prilikom izgradnje vaše neuronske mreže. To je sasvim normalno s obzirom na malu veličinu podataka s kojima radite. Ako započnete s pravim sretnim utezima, učenje će biti lakše u tako kratkom treningu.

Na kraju, vaša mreža je analizator osjećaja koji približno 85 posto vremena može točno pretpostaviti da su osjećaji izraženi u pregledu filma. S obzirom na još više podataka o treningu i sofisticiranije neuronske arhitekture, možete dobiti rezultate koji su još impresivniji. U marketingu se sličan alat koristi za automatizaciju mnogih procesa koji zahtijevaju čitanje teksta i poduzimanje akcija. Opet, možete spojiti mrežu poput ove s neuronskom mrežom koja sluša glas i pretvara ga u tekst. (Ovo je još jedna aplikacija RNN-ova, koja sada napaja Alexa, Siri, Google Voice i mnoge druge osobne pomoćnike.) Prijelaz omogućuje aplikaciji da razumije osjećaje čak i u govornim izrazima, poput telefonskog poziva kupca.

Vidi također

Kako popuniti svoj fantastični popis nogometaSimptomi i lijekovi za Keto FluKeto recept za desert: kremasti kolač od tijesta s mousseKeto recept za doručak: avokado oblak tostKeto recept za jedan obrok: biftek od medenjaka s hrskavim kaleetom recept za predjelo: hrskavi pečeni luk s prstimaRudarstvo kriptovaluta i dokazivanje algoritama ulogaKako zaštititi MacBook Privacy? Zamijenite zamjenu za iTunes: Nova glazba i TV aplikacije u macOS Catalina. Što je novo u macOS Catalina? Brzi savjeti za postavljanje macOS Catalina i registraciju MacBookMacBook-a za lutke Cheat SheetDifferences između MacBook Air-a i MacBook ProHow kako biste se prebacivali između Računi na vašem MacTest mikrofonu na Windows PC-u Kako obnoviti datoteke iz povijesti datoteka u sustavu Windows 10Kreiranje mrežnog pogona na računalu sa sustavom Windows 10Kako provjeriti kočne linije Kako skočiti Pokrenite automobil kako reći da li se vašem vozilu treba uskladiti Kako riješiti katalitičke pretvaračeKako često trebate mijenjati ulje? Kako provjeriti razinu ulja u vašem vozilu Kako isprati sistem hlađenja vašeg vozilaKako riješiti problem pregrijavanja motoraKako Promjena gumiKako instalirati svjećicuKako ukloniti stare svjećiceKako provjeriti kočnice diskaKako promijeniti svoju kočnu tekućinuKako provjeriti glavni cilindar vašeg kočnog sustavaKako provjeriti kočničku tekućinu vozila Zašto se pregrijati automobil i što mogu učiniti? Upišite svoje voziloKako provjeriti kočnice