Izrada vlastitog modela analize raspoloženja može izgledati zastrašujuće. Ovaj vodič vas vodi kroz korake za početak.

Analiza osjećaja je tehnika obrade prirodnog jezika (NLP) koja identificira stav iza teksta. Također je poznato kao istraživanje mišljenja. Cilj analize sentimenta je utvrditi ima li određeni tekst pozitivan, negativan ili neutralan sentiment. Tvrtke ga naširoko koriste za automatsku klasifikaciju mišljenja u recenzijama kupaca. Analiza velike količine recenzija pomaže u dobivanju vrijednih uvida u preferencije kupaca.

Postavljanje vašeg okruženja

Morate biti upoznati s Osnove Pythona slijediti kroz. Idite do Google Colab ili otvorite Jupyter Notebook. Zatim izradite novu bilježnicu. Izvršite sljedeću naredbu za instaliranje potrebnih biblioteka u vašem okruženju.

Puni izvorni kod ovog projekta dostupan je ovdje GitHub spremište.

! pip instaliraj tensorflow scikit-learn pandas numpy pickle5

Koristit ćete NumPy i biblioteka pandas za manipuliranje skupom podataka. TensorFlow za izradu i obuku modela strojnog učenja. Scikit-learn za dijeljenje skupa podataka u skupove za obuku i testiranje. Konačno, koristit ćete pickle5 za serijalizaciju i spremanje objekta tokenizatora.

instagram viewer

Uvoz potrebnih biblioteka

Uvezite potrebne biblioteke koje ćete koristiti za prethodnu obradu podataka i stvaranje modela.

uvoz numpy kao np
uvoz pande kao pd
uvoz tenzorski tok kao tf
iz sklearn.model_selection uvoz train_test_split
iz sklearn.metrika uvoz rezultat_točnosti
iz tensorflow.keras.pretprocessing.text uvoz Tokenizator
iz tensorflow.keras.pretprocessing.sequence uvoz pad_sekvence
iz tensorflow.keras.modeli uvoz Sekvencijalno
iz tensorflow.keras.slojevi uvoz Ugrađivanje, Conv1D, GlobalMaxPooling1D, Dense, Dropout
uvoz kiseli krastavac5 kao kiseli krastavac

Kasnije ćete u kodu koristiti klase koje uvezete iz modula.

Učitavanje skupa podataka

Ovdje ćete koristiti skup podataka Trip Advisor Hotel Reviews iz Kaggle izgraditi model analize sentimenta.

df = pd.read_csv('/content/tripadvisor_hotel_reviews.csv')
ispis (df.head())

Učitajte skup podataka i ispišite prvih pet redaka. Ispisivanje prvih pet redaka pomoći će vam da provjerite nazive stupaca skupa podataka. Ovo će biti ključno prilikom predobrade skupa podataka.

Skup podataka Recenzije hotela na Trip Advisoru ima stupac indeksa, stupac Recenzije i stupac Ocjena.

Predobrada podataka

Odaberite Pregled i Ocjena stupaca iz skupa podataka. Stvorite novi stupac na temelju stupca Ocjena i dajte mu naziv sentiment. Ako je ocjena veća od 3, označite osjećaj kao pozitivan. Ako je ocjena manja od 3, označite je kao negativan. Ako je ocjena točno 3, označite je kao neutralan.

Odaberite samo stupce Pregled i mišljenje iz skupa podataka. Nasumično pomiješajte retke i poništite indeks podatkovnog okvira. Miješanjem i resetiranjem osigurava se nasumična raspodjela podataka, što je neophodno za pravilno uvježbavanje i testiranje modela.

df = df[['Pregled', 'Ocjena']]
df['sentiment'] = df['Ocjena'].primjeni(lambda x: 'pozitivan'ako x > 3
drugo'negativan'ako x < 3
drugo'neutralan')
df = df[['Pregled', 'sentiment']]
df = df.uzorak (frac=1).reset_index (drop=Pravi)

Pretvorite Pregled teksta u niz cijelih brojeva pomoću tokenizatora. Ovo stvara rječnik jedinstvenih riječi prisutnih u tekstu Pregleda i mapira svaku riječ u jedinstvenu vrijednost cijelog broja. Koristiti pad_sekvence Funkcija iz Kerasa kako bi se osiguralo da sve sekvence pregleda imaju istu duljinu.

tokenizer = Tokenizer (broj_riječi=5000, oov_token='')
tokenizer.fit_on_texts (df['Pregled'])
indeks_riječi = tokenizator.indeks_riječi
sekvence = tokenizer.texts_to_sequences (df['Pregled'])
padded_sequences = pad_sequences (nizovi, maxlen=100, skraćivanje='post')

Pretvorite oznake osjećaja u One-hot kodiranje.

sentiment_labels = pd.get_dummies (df['sentiment']).vrijednosti

One-hot kodiranje predstavlja kategoričke podatke u formatu s kojim je vašim modelima lakše raditi.

Dijeljenje skupa podataka u skupove za obuku i testiranje

Koristite scikit-learn da nasumično podijelite skup podataka u skupove za obuku i testiranje. Koristit ćete set za obuku kako biste obučili model da klasificira osjećaje recenzija. I upotrijebit ćete skup testova da biste saznali koliko je model dobar u klasificiranju novih neviđenih recenzija.

x_train, x_test, y_train, y_test = train_test_split (podstavljene_sekvence, sentiment_labels, test_size=0.2)

Veličina dijeljenja skupa podataka je 0,2. To znači da će 80% podataka obučiti model. A preostalih 20% testirat će performanse modela.

Stvaranje neuronske mreže

Stvoriti živčana mreža sa šest slojeva.

model = Sequential()
model.add (Ugradnja(5000, 100, ulazna_duljina=100))
model.add (Conv1D(64, 5, aktivacija='relu'))
model.add (GlobalMaxPooling1D())
model.add (Dense(32, aktivacija='relu'))
model.add (Ispuštanje(0.5))
model.add (Dense(3, aktivacija='softmax'))
model.kompilacija (optimizator='Adam', gubitak='kategorička_crossentropy', metrika=['točnost'])
model.summary()

Prvi sloj neuronske mreže je sloj ugradnje. Ovaj sloj uči gustu zastupljenost riječi u vokabularu. Drugi sloj je sloj Conv1D sa 64 filtera i veličinom kernela 5. Ovaj sloj izvodi operacije konvolucije na ulaznim sekvencama, koristeći mali klizni prozor veličine 5.

Treći sloj reducira niz mapa značajki na jedan vektor. Uzima maksimalnu vrijednost na svakoj mapi značajki. Četvrti sloj izvodi linearnu transformaciju na ulaznom vektoru. Peti sloj nasumično postavlja dio ulaznih jedinica na 0 tijekom treninga. To pomaže u sprječavanju prekomjernog opremanja. Završni sloj pretvara izlaz u distribuciju vjerojatnosti preko tri moguće klase: pozitivne, neutralne i negativne.

Uvježbavanje neuronske mreže

Prilagodite setove za obuku i testiranje na model. Uvježbajte model za deset epoha. Možete promijeniti broj epoha prema vlastitoj želji.

model.fit (x_vlak, y_vlak, epohe=10, veličina_serije=32, validation_data=(x_test, y_test))

Nakon svake epohe, ocjenjuje se izvedba modela na ispitnom skupu.

Procjena izvedbe obučenog modela

Koristiti model.predict() metoda za predviđanje oznaka osjećaja za testni skup. Izračunajte ocjenu točnosti pomoću ocjena_točnosti() funkcija iz scikit-learn.

y_pred = np.argmax (model.predict (x_test), axis=-1)
ispis("Točnost:", rezultat_točnosti (np.argmax (y_test, os=-1), y_pred))

Točnost ovog modela je oko 84%.

Spremanje modela

Spremite model pomoću model.save() metoda. Koristite pickle za serijalizaciju i spremanje objekta tokenizatora.

model.save('sentiment_analysis_model.h5')
s otvoren('tokenizator.pickle', 'wb') kao ručka:
pickle.dump (tokenizer, handle, protocol= pickle. NAJVIŠI_PROTOKOL)

Objekt tokenizer će tokenizirati vaš vlastiti ulazni tekst i pripremiti ga za unošenje obučenom modelu.

Korištenje modela za klasifikaciju osjećaja vlastitog teksta

Nakon što izradite i spremite model, možete ga koristiti za klasifikaciju osjećaja vlastitog teksta. Prvo učitajte spremljeni model i tokenizator.

# Učitajte spremljeni model i tokenizator
uvoz keras

model = keras.models.load_model('sentiment_analysis_model.h5')
s otvoren('tokenizator.pickle', 'rb') kao ručka:
tokenizer = pickle.load (ručka)

Definirajte funkciju za predviđanje sentimenta ulaznog teksta.

defpredvidjeti_sentiment(tekst):
# Označite i dopunite ulazni tekst
text_sequence = tokenizer.texts_to_sequences([tekst])
slijed_teksta = slijed_padova (slijed_teksta, maxlen=100)

# Napravite predviđanje pomoću uvježbanog modela
predviđena_ocjena = model.predikt (tekst_slijed)[0]
ako np.argmax (predicted_rating) == 0:
povratak'Negativan'
elif np.argmax (predicted_rating) == 1:
povratak'Neutralno'
drugo:
povratak'Pozitivan'

Na kraju, predvidite vlastiti tekst.

unos_teksta = „Apsolutno mi se svidio moj boravak u tom hotelu. Osoblje je bilo fantastično, a soba je bila fantastična!"
predviđeni_osjećaj = predviđeni_osjećaj (unos_teksta)
ispis (predicted_sentiment)

Predviđeno mišljenje gornje recenzije je sljedeće:

Model je u stanju ispravno klasificirati osjećaje sve tri recenzije.

Predviđanje osjećaja korištenjem prethodno obučenih modela

Ponekad u strojnom učenju možete imati izazov pronaći pravi skup podataka. Možda vam također nedostaju resursi za stvaranje vlastitog skupa podataka. Ovdje na scenu stupaju prethodno obučeni modeli. Morate znati kako koristiti njihov API i prepustiti im da se bave ostalim.