Izdelava lastnega modela analize razpoloženja se morda zdi zastrašujoča. Ta vodnik vas vodi skozi korake za začetek.

Analiza razpoloženja je tehnika obdelave naravnega jezika (NLP), ki identificira odnos za besedilom. Znano je tudi kot rudarjenje mnenj. Cilj analize razpoloženja je ugotoviti, ali ima določeno besedilo pozitivno, negativno ali nevtralno razpoloženje. Podjetja ga pogosto uporabljajo za samodejno razvrščanje razpoloženja v ocenah strank. Analiziranje velikih količin pregledov pomaga pridobiti dragocene vpoglede v želje strank.

Nastavitev vašega okolja

Morate biti seznanjeni z Osnove Pythona slediti. Pojdite na Google Colab ali odprite Jupyter Notebook. Nato ustvarite nov zvezek. Izvedite naslednji ukaz, da v svoje okolje namestite zahtevane knjižnice.

Celotna izvorna koda tega projekta je na voljo tukaj Repozitorij GitHub.

! pip namestite tensorflow scikit-learn pandas numpy pickle5

Uporabili boste NumPy in knjižnica pandas za manipulacijo nabora podatkov. TensorFlow za ustvarjanje in usposabljanje modela strojnega učenja. Scikit-learn za razdelitev nabora podatkov v nize za usposabljanje in testiranje. Končno boste uporabili pickle5 za serializacijo in shranjevanje predmeta tokenizerja.

instagram viewer

Uvažanje zahtevanih knjižnic

Uvozite potrebne knjižnice, ki jih boste uporabili za predhodno obdelavo podatkov in ustvarjanje modela.

uvoz numpy kot np
uvoz pande kot pd
uvoz tenzorski tok kot tf
od sklearn.model_selection uvoz train_test_split
od sklearn.metrics uvoz ocena_točnosti
od tensorflow.keras.preprocessing.text uvoz Tokenizer
od tensorflow.keras.preprocessing.sequence uvoz pad_sequences
od tensorflow.keras.models uvoz Zaporedna
od tensorflow.keras.layers uvoz Vdelava, Conv1D, GlobalMaxPooling1D, Dense, Dropout
uvoz kumarica5 kot kumarica

Razrede, ki jih uvozite iz modulov, boste uporabili pozneje v kodi.

Nalaganje nabora podatkov

Tukaj boste uporabili nabor podatkov Trip Advisor Hotel Reviews iz Kaggle zgraditi model analize razpoloženja.

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

Naložite nabor podatkov in natisnite njegovih prvih pet vrstic. Če natisnete prvih pet vrstic, boste lažje preverili imena stolpcev nabora podatkov. To bo ključnega pomena pri predhodni obdelavi nabora podatkov.

Nabor podatkov Trip Advisor Hotel Reviews ima stolpec z indeksom, stolpec z oceno in stolpec z oceno.

Predhodna obdelava podatkov

Izberite Pregled in Ocena stolpcev iz nabora podatkov. Ustvarite nov stolpec na podlagi stolpca Ocena in ga poimenujte čustvo. Če je ocena večja od 3, označite občutek kot pozitivno. Če je ocena manjša od 3, jo označite kot negativno. Če je ocena točno 3, jo označite kot nevtralen.

Iz nabora podatkov izberite samo stolpca Pregled in mnenje. Naključno premešajte vrstice in ponastavite indeks podatkovnega okvira. Mešanje in ponastavitev zagotavljata naključno porazdelitev podatkov, kar je potrebno za pravilno usposabljanje in testiranje modela.

df = df[['Pregled', 'Ocena']]
df['občutek'] = df['Ocena'].uporabi(lambda x: 'pozitivno'če x > 3
drugače'negativno'če x < 3
drugače'nevtralen')
df = df[['Pregled', 'občutek']]
df = df.vzorec (frac=1).reset_index (drop=Prav)

Pretvori Pregled besedilo v zaporedje celih števil z uporabo tokenizerja. To ustvari slovar edinstvenih besed, ki so prisotne v preglednem besedilu, in preslika vsako besedo v edinstveno celoštevilsko vrednost. Uporabi pad_sequences Keras zagotavlja, da imajo vsa zaporedja pregleda enako dolžino.

tokenizer = Tokenizer (število_besed=5000, oov_token='')
tokenizer.fit_on_texts (df['Pregled'])
word_index = tokenizer.word_index
zaporedja = tokenizer.texts_to_sequences (df['Pregled'])
padded_sequences = padded_sequences (zaporedja, maxlen=100, prikrajšanje='post')

Pretvorite oznake občutkov v kodiranje One-hot.

sentiment_labels = pd.get_dummies (df['občutek']).vrednote

Enkratno kodiranje predstavlja kategorične podatke v formatu, s katerim vaši modeli lažje delajo.

Razdelitev nabora podatkov v nize za usposabljanje in testiranje

Uporabite scikit-learn za naključno razdelitev nabora podatkov v nize za usposabljanje in testiranje. Z vadbenim kompletom boste učili model za razvrščanje občutkov ocen. S testnim nizom boste ugotovili, kako dober je model pri razvrščanju novih nevidenih pregledov.

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

Velikost razdelitve nabora podatkov je 0,2. To pomeni, da bo 80 % podatkov usposobilo model. Preostalih 20 % bo preizkusilo delovanje modela.

Ustvarjanje nevronske mreže

Ustvariti zivcno omrezje s šestimi plastmi.

model = Sequential()
model.add (Vdelava(5000, 100, vhodna_dolžina=100))
model.add (Conv1D(64, 5, aktivacija='relu'))
model.add (GlobalMaxPooling1D())
model.add (Gosto(32, aktivacija='relu'))
model.add (Izpad(0.5))
model.add (Gosto(3, aktivacija='softmax'))
model.compile (optimizator='adam', izguba='categorical_crossentropy', meritve=['natančnost'])
model.summary()

Prva plast nevronske mreže je vdelana plast. Ta plast se nauči goste predstavitve besed v besedišču. Druga plast je plast Conv1D s 64 filtri in velikostjo jedra 5. Ta plast izvaja konvolucijske operacije na vhodnih zaporedjih z uporabo majhnega drsnega okna velikosti 5.

Tretja plast zmanjša zaporedje zemljevidov funkcij na en sam vektor. Zavzame največjo vrednost za vsak zemljevid funkcij. Četrta plast izvede linearno transformacijo vhodnega vektorja. Peta plast med treningom naključno nastavi del vhodnih enot na 0. To pomaga preprečiti prekomerno opremljanje. Zadnja plast pretvori izhod v porazdelitev verjetnosti v treh možnih razredih: pozitivni, nevtralni in negativni.

Usposabljanje nevronske mreže

Namestite komplete za usposabljanje in testiranje na model. Usposabljajte model za deset epoh. Število epoh lahko spremenite po svojih željah.

model.fit (x_train, y_train, epochs=10, velikost_serije=32, validation_data=(x_test, y_test))

Po vsaki epohi se ovrednoti delovanje modela na testnem nizu.

Ocenjevanje uspešnosti usposobljenega modela

Uporabi model.predict() metoda za napovedovanje oznak občutka za testni niz. Izračunajte oceno točnosti z uporabo accuracy_score() funkcijo iz scikit-learn.

y_pred = np.argmax (model.predict (x_test), axis=-1)
natisni("Natančnost:", ocena_točnosti (np.argmax (y_test, os=-1), y_pred))

Natančnost tega modela je približno 84%.

Shranjevanje modela

Shranite model z uporabo model.save() metoda. Uporabite pickle za serializacijo in shranjevanje predmeta tokenizerja.

model.save('sentiment_analysis_model.h5')
z odprto('tokenizer.pickle', 'wb') kot ročaj:
pickle.dump (tokenizator, ročaj, protokol=pickle. NAJVIŠJI_PROTOKOL)

Objekt tokenizerja bo tokeniziral vaše lastno vneseno besedilo in ga pripravil za podajanje usposobljenemu modelu.

Uporaba modela za razvrščanje občutka vašega lastnega besedila

Ko ustvarite in shranite model, ga lahko uporabite za razvrščanje občutka lastnega besedila. Najprej naložite shranjeni model in tokenizer.

# Naložite shranjen model in tokenizer
uvoz keras

model = keras.models.load_model('sentiment_analysis_model.h5')
z odprto('tokenizer.pickle', 'rb') kot ročaj:
tokenizer = pickle.load (ročaj)

Definirajte funkcijo za predvidevanje razpoloženja vnesenega besedila.

defnapoved_razpoloženje(besedilo):
# Označite in zapolnite vneseno besedilo
text_sequence = tokenizer.texts_to_sequences([besedilo])
besedilno_zaporedje = pad_zaporedje (besedilno_zaporedje, maxlen=100)

# Naredite napoved z uporabo usposobljenega modela
predvidena_ocena = model.predikt (besedilno_zaporedje)[0]
če np.argmax (predvidena_ocena) == 0:
vrnitev'Negativno'
elif np.argmax (predvidena_ocena) == 1:
vrnitev'Nevtralno'
drugače:
vrnitev'Pozitivno'

Nazadnje napovedujte svoje besedilo.

vnos_besedila = »Bivanje v tem hotelu mi je bilo zelo všeč. Osebje je bilo čudovito in soba je bila fantastična!"
predvideno_razpoloženje = napoved_občutek (vnos_besedila)
natisni (predicted_sentiment)

Predvideno razpoloženje zgornjega pregleda je naslednje:

Model lahko pravilno razvrsti občutke vseh treh ocen.

Napovedovanje čustev z uporabo vnaprej usposobljenih modelov

Včasih boste pri strojnem učenju morda imeli izziv pri iskanju pravega nabora podatkov. Morda vam tudi primanjkuje sredstev za ustvarjanje lastnega niza podatkov. Tukaj pridejo na vrsto vnaprej usposobljeni modeli. Morate znati uporabljati njihov API in jim prepustiti, da poskrbijo za ostalo.