Savo nuotaikų analizės modelio kūrimas gali atrodyti bauginantis. Šiame vadove pateikiami žingsniai, kaip pradėti.

Sentimentų analizė yra natūralios kalbos apdorojimo (NLP) technika, kuri identifikuoja tekste slypintį požiūrį. Jis taip pat žinomas kaip nuomonės gavyba. Sentimentų analizės tikslas yra nustatyti, ar tam tikras tekstas turi teigiamų, neigiamų ar neutralių nuotaikų. Jį plačiai naudoja įmonės, siekdamos automatiškai klasifikuoti nuotaikas klientų atsiliepimuose. Didelės apimties apžvalgų analizė padeda gauti vertingų įžvalgų apie klientų pageidavimus.

Aplinkos nustatymas

Jūs turite būti susipažinę su Python pagrindai sekti. Eikite į Google Colab arba atidarykite Jupyter Notebook. Tada sukurkite naują užrašų knygelę. Vykdykite šią komandą, kad įdiegtumėte reikiamas bibliotekas savo aplinkoje.

Visą šio projekto šaltinio kodą rasite čia GitHub saugykla.

! pip įdiegti tensorflow scikit-learn pandas numpy pickle5

Jūs naudosite NumPy ir pandas biblioteka, skirta manipuliuoti duomenų rinkiniu

instagram viewer
. TensorFlow mašininio mokymosi modelio kūrimui ir mokymui. Scikit-learn, kaip padalinti duomenų rinkinį į mokymo ir testavimo rinkinius. Galiausiai, norėdami suskirstyti ir išsaugoti tokenizatoriaus objektą, naudosite „picle5“.

Reikalingų bibliotekų importavimas

Importuokite reikiamas bibliotekas, kurias naudosite iš anksto apdoroti duomenis ir sukurti modelį.

importuoti nelygus kaip np
importuoti pandos kaip pd
importuoti tensorflow kaip tf
sklearn.model_selection importuoti Train_test_split
sklearn.metrics importuoti tikslumo_balas
tensorflow.keras.preprocessing.text importuoti Tokenizatorius
tensorflow.keras.preprocessing.sequence importuoti pad_sequences
tensorflow.keras.models importuoti Eilės tvarka
tensorflow.keras.layers importuoti Įterpimas, Conv1D, GlobalMaxPooling1D, tankus, iškrenta
importuoti marinatas5 kaip marinuoti agurkai

Klases, kurias importuosite iš modulių, naudosite vėliau kode.

Įkeliamas duomenų rinkinys

Čia naudosite „Trip Advisor Hotel Reviews“ duomenų rinkinį iš Kaggle sukurti sentimentų analizės modelį.

df = pd.read_csv(„/content/tripadvisor_hotel_reviews.csv“)
spausdinti (df.head())

Įkelkite duomenų rinkinį ir išspausdinkite pirmąsias penkias jo eilutes. Išspausdinę pirmąsias penkias eilutes galėsite patikrinti duomenų rinkinio stulpelių pavadinimus. Tai bus labai svarbu iš anksto apdorojant duomenų rinkinį.

„Trip Advisor“ viešbučių apžvalgų duomenų rinkinyje yra indekso stulpelis, apžvalgos stulpelis ir įvertinimo stulpelis.

Išankstinis duomenų apdorojimas

Pasirinkite Apžvalga ir Įvertinimas stulpelius iš duomenų rinkinio. Sukurkite naują stulpelį pagal stulpelį Įvertinimas ir pavadinkite jį sentimentas. Jei įvertinimas didesnis nei 3, pažymėkite nuotaiką kaip teigiamas. Jei įvertinimas yra mažesnis nei 3, pažymėkite jį kaip neigiamas. Jei įvertinimas yra lygiai 3, pažymėkite jį kaip neutralus.

Iš duomenų rinkinio pasirinkite tik apžvalgos ir nuotaikų stulpelius. Atsitiktinai sumaišykite eilutes ir iš naujo nustatykite duomenų rėmelio indeksą. Maišymas ir nustatymas iš naujo užtikrina, kad duomenys būtų paskirstyti atsitiktinai, o tai būtina norint tinkamai apmokyti ir išbandyti modelį.

df = df[["Peržiūra", 'Įvertinimas']]
df['sentimentas'] = df['Įvertinimas'].apply(lambda x: 'teigiamas'jeigu x > 3
Kitas'neigiamas'jeigu x < 3
Kitas'neutralus')
df = df[["Peržiūra", 'sentimentas']]
df = df.sample (frac=1.reset_index (drop=Tiesa)

Konvertuoti Apžvalga tekstą į sveikųjų skaičių seką naudodami žetonų įtaisą. Taip sukuriamas unikalių žodžių, esančių apžvalgos tekste, žodynas ir kiekvienas žodis susiejamas su unikalia sveikojo skaičiaus reikšme. Naudoti pad_sequences funkcija iš Keras, kad užtikrintų, jog visos peržiūros sekos būtų vienodo ilgio.

tokenizer = Ženklinimo priemonė (žodžių_skaičius=5000, oov_token='')
tokenizer.fit_on_texts (df["Peržiūra"])
word_index = tokenizer.word_index
sekas = tokenizer.texts_to_sequences (df["Peržiūra"])
padded_sequences = pad_sequences (sekos, maxlen=100, sutrumpinimas='post')

Konvertuokite nuotaikų etiketes į „One-hot“ kodavimą.

sentiment_labels = pd.get_dummies (df['sentimentas']).vertybės

Vienkartinė koduotė pateikia kategoriškus duomenis tokiu formatu, su kuriuo modeliams lengviau dirbti.

Duomenų rinkinio padalijimas į mokymo ir testavimo rinkinius

Naudokite scikit-learn, kad atsitiktinai padalintumėte duomenų rinkinį į mokymo ir testavimo rinkinius. Mokymų rinkinį naudosite, norėdami išmokyti modelį klasifikuoti atsiliepimų nuotaikas. Ir jūs naudosite bandymų rinkinį, kad sužinotumėte, kaip gerai modelis klasifikuoja naujas nematytas apžvalgas.

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

Duomenų rinkinio padalijimo dydis yra 0,2. Tai reiškia, kad 80% duomenų apmokys modelį. O likusieji 20% tikrins modelio veikimą.

Neuroninio tinklo kūrimas

Sukurti neuroninis tinklas su šešiais sluoksniais.

modelis = nuoseklus ()
model.add (Įterpimas(5000, 100, įvesties_ilgis=100))
model.add (Conv1D(64, 5, aktyvinimas='relu'))
model.add (GlobalMaxPooling1D())
model.add (Tankus(32, aktyvinimas='relu'))
model.add (Dropout(0.5))
model.add (Tankus(3, aktyvinimas='softmax'))
model.compile (optimizatorius='adomas', praradimas =„kategorinė_kryžminė tropija“, metrika=["tikslumas"])
model.summary()

Pirmasis neuroninio tinklo sluoksnis yra įterpimo sluoksnis. Šis sluoksnis išmoksta tankų žodžių vaizdavimą žodyne. Antrasis sluoksnis yra Conv1D sluoksnis su 64 filtrais ir 5 branduolio dydžiu. Šis sluoksnis atlieka konvoliucijos operacijas su įvesties sekomis, naudodamas nedidelį 5 dydžio slankiojantį langą.

Trečiasis sluoksnis sumažina objektų schemų seką iki vieno vektoriaus. Kiekviename objektų žemėlapyje ji užima didžiausią vertę. Ketvirtasis sluoksnis atlieka tiesinę transformaciją įvesties vektoriuje. Penktasis sluoksnis treniruotės metu atsitiktinai nustato dalį įvesties vienetų į 0. Tai padeda išvengti per didelio pritaikymo. Galutinis sluoksnis konvertuoja išvestį į tikimybių pasiskirstymą per tris galimas klases: teigiamą, neutralų ir neigiamą.

Neuroninio tinklo mokymas

Pritaikykite mokymo ir testavimo rinkinius prie modelio. Treniruokite modelį dešimčiai epochų. Epochų skaičių galite keisti pagal savo skonį.

model.fit (x_train, y_train, epochs=10, partijos_dydis=32, patvirtinimo_duomenys=(x_testas, y_testas))

Po kiekvienos epochos įvertinamas modelio veikimas bandymų rinkinyje.

Apmokyto modelio veiklos įvertinimas

Naudoti model.predict() metodas, leidžiantis nuspėti testų rinkinio jausmų etiketes. Apskaičiuokite tikslumo balą naudodami accuracy_score() funkcija iš scikit-learn.

y_pred = np.argmax (model.predict (x_test), axis=-1)
spausdinti ("Tikslumas:", accuracy_score (np.argmax (y_test, axis=-1), y_pred))

Šio modelio tikslumas yra apie 84%.

Modelio išsaugojimas

Išsaugokite modelį naudodami model.save() metodas. Naudokite marinatą, kad suskirstytumėte ir išsaugotumėte žetonų objektą.

model.save('sentiment_analysis_model.h5')
su atviras(„tokenizer.pickle“, "wb") kaip rankena:
pipiras.dump (tokenizer, rankena, protokolas=pickle. HIGHEST_PROTOCOL)

Žetonizatoriaus objektas suskirstys jūsų įvestą tekstą ir paruoš jį tiekti apmokytam modeliui.

Modelio naudojimas savo teksto nuotaikai klasifikuoti

Sukūrę ir išsaugoję modelį, galite juo klasifikuoti savo teksto nuotaikas. Pirmiausia įkelkite išsaugotą modelį ir tokenizatorių.

# Įkelkite išsaugotą modelį ir tokenizatorių
importuoti keras

modelis = keras.models.load_model('sentiment_analysis_model.h5')
su atviras(„tokenizer.pickle“, "rb") kaip rankena:
tokenizatorius = marinatas.krovimas (rankena)

Nustatykite funkciją, skirtą įvesties teksto nuotaikai nuspėti.

defnumatyti_sentimentą(tekstas):
# Pažymėkite ir užpildykite įvesties tekstą
text_sequence = tokenizer.texts_to_sequences([tekstas])
text_sequence = pad_sekos (teksto_seka, maxlen=100)

# Numatykite naudodamiesi apmokytu modeliu
numatytas_vertinimas = modelis.prognozuoti (teksto_seka)[0]
jeigu np.argmax (numatomas_vertinimas) == 0:
grąžinti„Neigiamas“
elifas np.argmax (numatomas_vertinimas) == 1:
grąžinti"Neutralus"
Kitas:
grąžinti'Teigiamas'

Galiausiai nuspėkite savo tekstą.

text_input = „Man labai patiko viešnagė tame viešbutyje. Personalas buvo nuostabus, o kambarys fantastiškas!"
numatytas_sentimentas = numatyti_sentimentas (teksto_įvestis)
spausdinti (numatytas_sentimentas)

Numatoma pirmiau pateiktos apžvalgos nuotaika yra tokia:

Modelis sugeba teisingai klasifikuoti visų trijų apžvalgų nuotaikas.

Sentimentų numatymas naudojant iš anksto apmokytus modelius

Kartais mašininio mokymosi metu jums gali kilti iššūkis rasti tinkamą duomenų rinkinį. Jums taip pat gali trūkti išteklių sukurti savo duomenų rinkinį. Čia atsiranda iš anksto apmokyti modeliai. Turite žinoti, kaip naudoti jų API, o visa kita palikti jiems.