1. ProgrammingBig DataData ScienceUIinging AI izmantošana sentimentu analīzei

Džons Pols Muellers, Luca Muellere

Sentimentu analīze skaitliski izriet no rakstīta teksta, izmantojot rakstnieka attieksmi (pozitīvu, negatīvu vai neitrālu) pret teksta tēmu. Šāda veida analīze izrādās noderīga mārketinga un komunikācijas jomā strādājošajiem, jo ​​tā palīdz viņiem saprast, ko klienti un patērētāji domā par produktu vai pakalpojumu, un tādējādi rīkoties atbilstoši (piemēram, mēģinot atgūt neapmierinātus klientus vai nolemjot izmantot citu pārdošanas stratēģiju). ). Visi veic sentimenta analīzi. Piemēram, lasot tekstu, cilvēki dabiski mēģina noteikt noskaņojumu, kas aizkustināja personu, kas to rakstīja. Tomēr, kad lasāmo un saprotamo tekstu skaits ir pārāk milzīgs un teksts pastāvīgi uzkrājas, tāpat kā sociālajos medijos un klientu e-pastos, ir svarīgi automatizēt sentimenta analīzi.

AI sentimenta analīze

Gaidāmais piemērs ir RNN testēšana, izmantojot Keras un TensorFlow, kas izveido sentimenta analīzes algoritmu, kas spēj klasificēt filmas recenzijā izteikto attieksmi. Dati ir IMDb datu kopas paraugs, kurā ir 50 000 filmu pārskatu (sadalīti uz pusēm starp vilcienu un testa komplektiem), kam pievienota etiķete, kas izsaka atsauksmes noskaņojumu (0 = negatīva, 1 = pozitīva). IMDb ir liela tiešsaistes datu bāze, kas satur informāciju par filmām, TV seriāliem un videospēlēm. Sākotnēji to uzturēja fanu bāze, tagad to pārvalda Amazon meitasuzņēmums. Vietnē IMDb cilvēki atrod nepieciešamo informāciju par savu iecienīto šovu, kā arī ievieto savus komentārus vai raksta pārskatu, lai citi apmeklētāji tos lasītu.

Keras piedāvā lejupielādējamu iesaiņojumu IMDb datiem. Jūs sagatavojat, sajaucat un sakārtojat šos datus vilcienā un testa komplektā. Jo īpaši Keras piedāvātie IMDb tekstuālie dati tiek attīrīti no pieturzīmēm, normalizēti ar mazajiem burtiem un pārveidoti par skaitliskām vērtībām. Katrs vārds tiek kodēts ciparā, kas norāda tā ranžēšanas biežumu. Visbiežāk vārdiem ir mazs skaitlis; retāk vārdiem ir lielāks skaitlis.

Kā sākuma punktu kods importē imdb funkciju no Keras un izmanto to datu iegūšanai no interneta (apmēram 17,5 MB lejupielāde). Parametros, ko izmanto šajā piemērā, ir ietverti tikai 10 000 labākie vārdi, un Keras vajadzētu pārfiksēt datus, izmantojot īpašu izlases veida sēklu. (Zinot sēklu, ir iespējams pēc vajadzības reproducēt jaukšanu.) Funkcija atgriež divus vilcienu un testa komplektus, kas abi ir veidoti no teksta secībām un sentimenta iznākuma.

no keras.datasets importa imdb
top_words = 10000
((x_train, y_train),
(x_test, y_test)) = imdb.load_data (num_words = top_words,
sēkla = 21)

Pēc iepriekšējā koda aizpildīšanas varat pārbaudīt piemēru skaitu, izmantojot šo kodu:

print ("Apmācības piemēri:% i"% len (x_train))
print ("Testa piemēri:% i"% len (x_test))

Pēc tam, kad tika noskaidrots, cik gadījumu ir pieejams izmantošanai neironu tīkla apmācības un testa fāzē, kods izdod atbildi par 25 000 piemēriem katrai fāzei. (Šī datu kopa ir salīdzinoši neliela valodas problēmai; acīmredzami datu kopa galvenokārt ir paredzēta demonstrācijas nolūkiem.) Turklāt kods nosaka, vai datu kopa ir līdzsvarota, kas nozīmē, ka tai ir gandrīz vienāds skaits pozitīvo un negatīvo uzskatu piemēru.

importēt nervozs kā np
print (np.unique (y_train, return_counts = True))

Rezultāts masīvs ([12500, 12500]) apstiprina, ka datu kopa ir vienmērīgi sadalīta starp pozitīvajiem un negatīvajiem rezultātiem. Šāds līdzsvars starp atbildes klasēm ir saistīts tikai ar datu kopas demonstratīvo raksturu. Reālajā pasaulē reti sastopamas līdzsvarotas datu kopas. Nākamais solis izveido dažas Python vārdnīcas, kuras var konvertēt starp datu kopā izmantoto kodu un reālajiem vārdiem. Faktiski šajā piemērā izmantotā datu kopa ir sākotnēji apstrādāta un nodrošina skaitļu secības, kas apzīmē vārdus, nevis pašus vārdus. (LSTM un GRU algoritmi, kas atrodami Keras, sagaida skaitļu secības kā skaitļus.)

word_to_id = {w: i ​​+ 3 w, i imdb.get_word_index (). items ()}
id_to_word = {0: '', 1: " ', 2:'  '}
id_to_word.update ({i + 3: w w, i imdb.get_word_index (). items ()})
def convert_to_text (secība):
return '' .join ([id_to_word [s] s secīgi, ja s> = 3])
print (konvertēt uz tekstu (x_train [8]))

Iepriekšējais koda fragments definē divas pārvēršanas vārdnīcas (no vārdiem uz ciparu kodiem un otrādi) un funkciju, kas datu kopas piemērus pārveido lasāmā tekstā. Kā piemēru kodā tiek izdrukāts devītais piemērs: “šī filma bija kā slikta vilciena vraks, tik briesmīga kā tā…”. No šī fragmenta var viegli paredzēt, ka noskaņojums par šo filmu nav pozitīvs. Tādi vārdi kā slikts, vraks un briesmīgs rada spēcīgu negatīvu izjūtu, un tas ļauj viegli uzminēt pareizo viedokli.

Šajā piemērā jūs saņemat skaitliskās sekvences un pārvērtīsit tās atpakaļ vārdos, bet parasti ir tieši pretēji. Parasti jūs saņemat frāzes, kas sastāv no vārdiem, un pārvērš tās veselu skaitļu sekvencēs, lai izmantotu RNN slāni. Keras piedāvā specializētu funkciju Tokenizer, kas to var izdarīt jūsu vietā. Tas izmanto metodes fit_on_text, lai iemācītos kartēt vārdus veseliem skaitļiem no apmācības datiem, un text_to_matrix, lai tekstu pārveidotu secībā.

Tomēr citās frāzēs sentimenta analīzei jūs, iespējams, neatradīsit tik daudz atklājošu vārdu. Sajūta tiek izteikta smalkākā vai netiešākā veidā, un izpratne par sentimentu sākumā tekstā var nebūt iespējama, jo atklājošas frāzes un vārdi var parādīties daudz vēlāk diskursā. Šī iemesla dēļ jums arī jāizlemj, cik daudz frāzes vēlaties analizēt.

Parasti jūs uzņematies sākotnējo teksta daļu un izmantojat to kā visu pārskatu pārstāvošu. Dažreiz jums ir nepieciešami tikai daži sākuma vārdi - piemēram, pirmie 50 vārdi - lai iegūtu jēgu; dažreiz jums ir nepieciešams vairāk. Īpaši gari teksti agri neatklāj viņu orientāciju. Tāpēc jums ir jāizprot teksta tips, ar kuru strādājat, un jāizlemj, cik daudz vārdu analizēt, izmantojot dziļu mācīšanos. Šajā piemērā apskatīti tikai pirmie 200 vārdi, ar kuriem vajadzētu pietikt.

Jūs esat ievērojuši, ka kods sāk dot vārdu vārdiem, kas sākas ar skaitli 3, tādējādi atstājot kodus no 0 līdz 2. Zemākiem cipariem tiek izmantoti speciāli apzīmējumi, piemēram, lai apzīmētu frāzes sākumu, aizpildot tukšas vietas, lai secība būtu fiksēta noteiktā garumā un atzīmējot vārdus, kas ir izslēgti, jo tie nav pietiekami bieži. Šis piemērs satur tikai biežākos 10 000 vārdus. Tagu izmantošana, lai norādītu uz sākuma, beigu un ievērojamām situācijām, ir triks, kas darbojas ar RNN, it īpaši mašīntulkošanā.

no keras.preprocessing.sequence importa pad_sequences
max_pad = 200
x_train = pad_ sekas (x_train,
maxlen = max_pad)
x_test = pad_sequences (x_test,
maxlen = max_pad)
drukāt (x_train [0])

Izmantojot Keras funkciju pad_sequences, ar max_pad iestatot uz 200, kods ņem katra pārskata pirmos divsimt vārdus. Ja pārskatā ir mazāk par divsimt vārdiem, tik daudz nulles vērtību ir nepieciešams pirms kārtas, lai sasniegtu vajadzīgo sekvences elementu skaitu. Secību sagriešana līdz noteiktam garumam un tukšumu aizpildīšana ar nulles vērtībām tiek saukta par ievades polsterēšanu, kas ir svarīga apstrādes darbība, ja RNN izmanto, piemēram, dziļas mācīšanās algoritmus. Tagad kods izstrādā arhitektūru:

no keras.models import Sequential
no keras.layers importē Bidirectional, Bense, Dropout
no keras.layers importē GlobalMaxPool1D, LSTM
no keras.layers.embeddings importa iegulšana
embedēšanas_vektora_garums = 32
modelis = secīgs ()
model.add (iegulšana (top_words,
embedēšanas_vektora_ garums,
ievades_garums = max_pad))
model.add (Divvirzienu (LSTM (64, return_sequences = True)))
model.add (GlobalMaxPool1D ())
model.add (blīvs (16, aktivizēšana = "relu"))
model.add (Blīvs (1, aktivizēšana = "sigmoid"))
model.compile (zaudējumi = 'binārā_crossentropija',
optimizētājs = 'adam',
metrika = ['precizitāte'])
drukāt (modelis.summary ())

Iepriekšējais koda fragments nosaka dziļās mācīšanās modeļa formu, kurā tas izmanto dažus specializētus slāņus dabiskās valodas apstrādei no Keras. Šajā piemērā ir nepieciešams arī modeļa kopsavilkums (komanda model.summary ()), lai noteiktu, kas notiek ar arhitektūru, izmantojot dažādus neironu slāņus.

Jums ir iegulšanas slānis, kas ciparu secības pārveido blīvā vārdu iegulšanā. Šāda veida vārdu iegulšana ir piemērotāka RNN slāņa apgūšanai. Keras nodrošina iegulšanas slāni, kas papildus tam, ka tam obligāti jābūt tīkla pirmajam slānim, var veikt divus uzdevumus:

  • Iepriekš sagatavotu vārdu iegulšanas (piemēram, Word2vec vai GloVe) piemērošana secības ievadei. Jums vienkārši jāpārsūta matrica, kurā ir iegulšana, uz tā parametru svariem. Izveidojot vārda iegulšanu no nulles, pamatojoties uz saņemtajām ievadēm.

Šajā otrajā gadījumā iegulšanai ir tikai jāzina:

  • input_dim: no datiem sagaidāmais vārdnīcas lielums output_dim: izveidotās iegulšanas vietas lielums (ts dimensijas) input_length: sagaidāmais sekvences lielums

Pēc parametru noteikšanas iegulšana atradīs labākus svarus, lai treniņa laikā pārveidotu sekvences blīvā matricā. Blīvu matricas lielumu nosaka secību garums un iegulšanas dimensija.

Ja izmantojat Keras nodrošināto slāni Iegulšana, jums ir jāatceras, ka funkcija nodrošina tikai vārdu matricas vārdu krājuma lielumu pēc vēlamās iegulšanas dimensijas. Tas saista vārdus matricas kolonnās un pēc tam noregulē matricas svarus sniegtajiem piemēriem. Šis risinājums, kaut arī praktisks nestandarta valodas problēmu risināšanai, nav analogs iepriekš apskatītajiem vārdu iegulumiem, kuri ir apmācīti citādā veidā un uz miljoniem piemēru.

Šajā piemērā izmantota divvirzienu iesaiņošana - LSTM slānis, kurā ir 64 šūnas. Divvirzienu pārveido parasto LSTM slāni, to dubultojot: Pirmajā pusē tas piemēro parasto jūsu ievadīto secību; otrajā - tas šķērso secību. Jūs izmantojat šo pieeju, jo dažreiz jūs vārdus lietojat atšķirīgā, vispiemērotākajā secībā, un, veidojot divvirzienu slāni, tiks iegūts jebkurš vārdu modelis neatkarīgi no secības. Keras ieviešana patiešām ir vienkārša: jūs to vienkārši izmantojat kā funkciju slānī, kuru vēlaties atveidot divvirzienu.

Divvirzienu LSTM ir iestatīts tā, lai atgrieztos sekvences (return_sequences = True); tas ir, katrai šūnai tas atgriež sniegto rezultātu pēc katra secības elementa apskatīšanas. Rezultāti katrai secībai ir izvades matrica 200 x 128, kur 200 ir secības elementu skaits un 128 ir slānī izmantoto LSTM šūnu skaits. Šis paņēmiens neļauj RNN ņemt katras LSTM šūnas pēdējo rezultātu. Ieteikumi par teksta noskaņojumu faktiski varētu parādīties jebkurā vietā iegulto vārdu secībā.

Īsāk sakot, ir svarīgi nevis ņemt vērā katras šūnas pēdējo rezultātu, bet gan labāko tā rezultātu. Tāpēc kods ir atkarīgs no šāda slāņa - GlobalMaxPool1D -, lai pārbaudītu katru rezultātu secību, ko nodrošina katra LSTM šūna, un saglabātu tikai maksimālo rezultātu. Tam būtu jānodrošina, ka piemērs no katras LSTM šūnas uztver visspēcīgāko signālu, kuru, cerams, specializē tā apmācība, lai atlasītu dažus nozīmīgus signālus.

Pēc neironu signālu filtrēšanas piemērā ir 128 izeju slānis, pa vienai katrai LSTM šūnai. Kods samazina un sajauc signālus, izmantojot secīgu blīvu 16 neironu slāni ar ReLU aktivizāciju (tādējādi padarot cauri tikai pozitīvos signālus). Arhitektūra beidzas ar galīgo mezglu, izmantojot sigmoid aktivizāciju, kas rezultātus izspiedīs 0–1 diapazonā un padarīs tos izskatīgus kā varbūtības.

Kad esat definējis arhitektūru, tagad varat apmācīt tīklu veikt sentimenta analīzi. Pietiks ar trim laikmetiem (trīs reizes pārsūtot datus caur tīklu, lai tas apgūtu modeļus). Kodā katru reizi tiek izmantotas 256 pārskatu paketes, kas ļauj tīklam katru reizi redzēt pietiekami daudz vārdu un sentimentu, pirms tā svari tiek atjaunināti, izmantojot atkārtotu pavairošanu. Visbeidzot, kods koncentrējas uz rezultātiem, ko nodrošina validācijas dati (kas nav daļa no apmācības datiem). Labu rezultātu iegūšana no validācijas datiem nozīmē, ka neironu tīkls pareizi apstrādā ievadi. Kods ziņo par validācijas datiem tūlīt pēc katras laikmeta beigām.

vēsture = model.fit (x_train, y_train,
validācijas_dati = (x_test, y_test),
laikposmi = 3, partijas_izmērs = 256)

Rezultātu iegūšana prasa laiku, bet, ja jūs izmantojat GPU, tas tiks pabeigts laikā, kas jums nepieciešams, lai izdzertu kafijas tasi. Šajā brīdī jūs varat novērtēt rezultātus, atkal izmantojot validācijas datus. (Rezultātos nedrīkst būt nekādu pārsteigumu vai atšķirību no tā, kas tika norādīts apmācības laikā.)

zaudējumi, metrika = model.evaluate (x_test, y_test, verbose = 0)
print ("Testa precizitāte:% 0.3f"% metrika)

Galīgā precizitāte, kas ir pareizo atbilžu procents no dziļā neironu tīkla, būs aptuveni 85–86 procenti. Rezultāts nedaudz mainīsies katru reizi, kad veiksit eksperimentu, nejaušināšanas dēļ, veidojot savu neironu tīklu. Tas ir pilnīgi normāli, ņemot vērā datu, ar kuriem strādājat, nelielo izmēru. Ja jūs sākat ar pareizo veiksminieku svaru, mācīties būs tik viegli tik īsā treniņā.

Galu galā jūsu tīkls ir sentimenta analizētājs, kas aptuveni 85 procentus laika pareizi var uzminēt filmas skatījumā izteikto viedokli. Ņemot vērā vēl vairāk apmācības datu un sarežģītākas neironu arhitektūras, jūs varat iegūt vēl iespaidīgākus rezultātus. Mārketingā līdzīgu rīku izmanto, lai automatizētu daudzus procesus, kuriem nepieciešams lasīt tekstu un rīkoties. Atkal jūs varētu savienot tādu tīklu kā šis ar neironu tīklu, kas klausās balsi un pārvērš to tekstā. (Šī ir vēl viena RNN lietojumprogramma, kas tagad darbina Alexa, Siri, Google Voice un daudzus citus personiskos palīgus.) Pāreja ļauj lietojumprogrammai saprast sentimentu pat balss izteiksmēs, piemēram, klienta tālruņa zvanā.

Skatīt arī

Kā piepildīt savu fantāzijas futbola žurnāluKeto FluKeto deserta receptes simptomi un novēršana: krēmveida cepumu mīklas putasKeto brokastu recepte: avokado mākoņu grauzdiņšKeto viena katla ēdienreizes recepte: steika fileja ar kraukšķīgu kaleKeto ēstgribu recepti: kraukšķīgi cepti sīpolu gredzeniKeto receptē un caulifile receptē: CaulifKriptovalūtas ieguve un likmju algoritmu pierādīšanaKā aizsargāt jūsu MacBook privātumuMetificējiet iTunes nomaiņu: MacOS Catalina jaunās mūzikas un TV lietotnes. Kas ir jauns ar macOS Catalina? Ātri padomi macOS Catalina iestatīšanai un MacBookMacBook reģistrēšanai manekeniem apkrāptu lapu Atšķirības starp MacBook Air un MacBook ProHow pārslēgties starp Konti jūsu MacTestējiet mikrofonu savā Windows PCKā atjaunot failus no failu vēstures operētājsistēmā Windows 10Tīkla diska kartēšana datorā ar Windows 10Kā pārbaudīt bremžu līnijasKā pāriet, palaižot automašīnu Kā noteikt, vai automašīnai ir nepieciešama uzregulēšana, kā novērst katalītiskos neitralizatorus? Cik bieži jāmaina eļļa? Kā pārbaudīt sava transportlīdzekļa eļļas līmeniKā izskalot automašīnas dzesēšanas sistēmuKā novērst dzinēja pārkaršanu? Kā nomainīt riepuKā uzstādīt aizdedzes sveciKā noņemt vecās aizdedzes svecesKā pārbaudīt disku bremzesKā mainīt bremžu šķidrumuKā pārbaudīt jūsu bremžu sistēmas galveno cilindruKā pārbaudīt transportlīdzekļa bremžu šķidrumuKāpēc mana automašīna pārkarst un ko es varu darīt? Kā droši saķerties Lai pārbaudītu bremžu līnijas, izveidojiet savu transportlīdzekli