Sava sentimenta analīzes modeļa izveide var šķist biedējoša. Šajā rokasgrāmatā ir sniegti norādījumi, kā sākt darbu.
Sentimenta analīze ir dabiskās valodas apstrādes (NLP) tehnika, kas nosaka attieksmi, kas slēpjas aiz teksta. To sauc arī par viedokļu ieguvi. Sentimenta analīzes mērķis ir noteikt, vai konkrētam tekstam ir pozitīvs, negatīvs vai neitrāls noskaņojums. Uzņēmumi to plaši izmanto, lai automātiski klasificētu noskaņojumu klientu atsauksmēs. Liela apjoma atsauksmju analīze palīdz gūt vērtīgu ieskatu klientu vēlmēs.
Jūsu vides iestatīšana
Jums ir jāpārzina Python pamati lai sekotu līdzi. Dodieties uz Google Colab vai atveriet Jupyter Notebook. Pēc tam izveidojiet jaunu piezīmju grāmatiņu. Izpildiet šo komandu, lai instalētu vajadzīgās bibliotēkas savā vidē.
Pilns šī projekta pirmkods ir pieejams šajā GitHub repozitorijs.
! pip instalēt tensorflow scikit-learn pandas numpy pickle5
Jūs izmantosiet NumPy un pandas bibliotēka datu kopas manipulēšanai. TensorFlow mašīnmācīšanās modeļa izveidei un apmācībai. Scikit-learn datu kopas sadalīšanai apmācības un testēšanas kopās. Visbeidzot, jūs izmantosiet pickle5, lai serializētu un saglabātu marķiera objektu.
Nepieciešamo bibliotēku importēšana
Importējiet nepieciešamās bibliotēkas, kuras izmantosit datu pirmapstrādei un modeļa izveidei.
imports nejutīgs kā np
imports pandas kā pd
imports tenzorplūsma kā tf
no sklearn.model_selection imports train_test_split
no sklearn.metrics imports precizitātes_rezultāts
no tensorflow.keras.preprocessing.text imports Tokenizators
no tensorflow.keras.preprocessing.sequence imports pad_sequences
no tensorflow.keras.models imports Secīgi
no tensorflow.keras.layers imports Iegulšana, Conv1D, GlobalMaxPooling1D, blīva, izkritusi
imports marinēti gurķi5 kā marinēti gurķi
Klases, kuras importējat no moduļiem, izmantosit vēlāk kodā.
Notiek datu kopas ielāde
Šeit jūs izmantosit datu kopu Trip Advisor Hotel Reviews no Kaggle izveidot sentimenta analīzes modeli.
df = pd.read_csv("/content/tripadvisor_hotel_reviews.csv")
drukāt (df.head())
Ielādējiet datu kopu un izdrukājiet tās pirmās piecas rindas. Pirmo piecu rindu drukāšana palīdzēs pārbaudīt datu kopas kolonnu nosaukumus. Tas būs ļoti svarīgi, veicot datu kopas priekšapstrādi.
Trip Advisor Hotel Reviews datu kopā ir rādītāja kolonna, kolonna Review un sleja Vērtējums.
Datu priekšapstrāde
Izvēlieties Pārskats un Vērtējums kolonnas no datu kopas. Izveidojiet jaunu kolonnu, pamatojoties uz sleju Vērtējums, un piešķiriet tai nosaukumu noskaņojums. Ja vērtējums ir lielāks par 3, atzīmējiet noskaņojumu kā pozitīvs. Ja vērtējums ir mazāks par 3, atzīmējiet to kā negatīvs. Ja vērtējums ir tieši 3, atzīmējiet to kā neitrāla.
No datu kopas atlasiet tikai kolonnas Pārskats un viedoklis. Nejauši sajauciet rindas un atiestatiet datu rāmja indeksu. Sajaukšana un atiestatīšana nodrošina datu nejaušu sadali, kas ir nepieciešama pareizai modeļa apmācībai un testēšanai.
df = df[["Pārskatīšana", 'vērtējums']]
df['sentiments'] = df['vērtējums'].apply(lambda x: 'pozitīvs'ja x > 3
cits'negatīvs'ja x < 3
cits'neitrāls')
df = df[["Pārskatīšana", 'sentiments']]
df = df.sample (frac=1).reset_index (drop=Taisnība)
Konvertēt Pārskats tekstu veselu skaitļu secībā, izmantojot marķieri. Tādējādi tiek izveidota unikālo vārdu vārdnīca, kas atrodas pārskata tekstā, un katrs vārds tiek kartēts ar unikālu veselu skaitļu vērtību. Izmantojiet pad_sequences funkcija no Keras, lai nodrošinātu, ka visām pārskatīšanas sekvencēm ir vienāds garums.
tokenizer = Tokenizer (num_words=5000, oov_token='' )
tokenizer.fit_on_texts (df["Pārskatīšana"])
word_index = tokenizer.word_index
secības = tokenizer.texts_to_sequences (df["Pārskatīšana"])
padded_sequences = pad_sequences (sequences, maxlen=100, saīsinot='post')
Pārvērtiet noskaņojuma iezīmes uz One-hot kodējumu.
sentiment_labels = pd.get_dummies (df['sentiments']).vērtības
Vienreizējais kodējums attēlo kategoriskos datus formātā, ar kuru jūsu modeļiem ir vieglāk strādāt.
Datu kopas sadalīšana apmācības un testēšanas kopās
Izmantojiet scikit-learn, lai nejauši sadalītu datu kopu apmācības un testēšanas kopās. Jūs izmantosiet apmācību komplektu, lai apmācītu modeli, lai klasificētu atsauksmes. Un jūs izmantosit testa komplektu, lai piekļūtu tam, cik labi modelis spēj klasificēt jaunas neredzētas atsauksmes.
x_train, x_test, y_train, y_test = train_test_split (padded_sequences, sentiment_labels, test_size=0.2)
Datu kopas sadalījuma lielums ir 0,2. Tas nozīmē, ka 80% datu apmācīs modeli. Un pārējie 20% pārbaudīs modeļa veiktspēju.
Neironu tīkla izveide
Izveidot a neironu tīkls ar sešiem slāņiem.
modelis = secīgs()
model.add (Iegulšana(5000, 100, ievades_garums=100))
model.add (Conv1D(64, 5, aktivizēšana='relu'))
model.add (GlobalMaxPooling1D())
model.add (Dense(32, aktivizēšana='relu'))
model.add (Dropout(0.5))
model.add (Dense(3, aktivizēšana='softmax'))
model.compile (optimizer='ādams', zaudējums='categorical_crossentropy', metrics=['precizitāte'])
model.summary()
Pirmais neironu tīkla slānis ir iegulšanas slānis. Šis slānis apgūst blīvu vārdu attēlojumu vārdu krājumā. Otrais slānis ir Conv1D slānis ar 64 filtriem un kodola izmēru 5. Šis slānis veic konvolūcijas darbības ievades secībās, izmantojot nelielu 5 izmēra bīdāmo logu.
Trešais slānis samazina objektu karšu secību līdz vienam vektoram. Tas aizņem maksimālo vērtību katrā objektu kartē. Ceturtais slānis ievades vektorā veic lineāru transformāciju. Piektais slānis treniņa laikā nejauši iestata daļu ievades vienību uz 0. Tas palīdz novērst pārmērīgu pielāgošanos. Pēdējais slānis pārvērš izvadi par varbūtības sadalījumu trīs iespējamās klasēs: pozitīva, neitrāla un negatīva.
Neironu tīkla apmācība
Pielāgojiet apmācības un testēšanas komplektus modelim. Apmāciet modeli desmit laikmetiem. Jūs varat mainīt laikmetu skaitu pēc saviem ieskatiem.
model.fit (x_train, y_train, epochs=10, partijas_izmērs=32, validācijas_dati=(x_tests, y_test))
Pēc katra laikmeta tiek novērtēta modeļa veiktspēja testēšanas komplektā.
Apmācītā modeļa veiktspējas novērtēšana
Izmantojiet model.predict() metode, lai prognozētu noskaņojuma etiķetes testa kopai. Aprēķiniet precizitātes rādītāju, izmantojot accuracy_score() funkcija no scikit-learn.
y_pred = np.argmax (model.predict (x_test), axis=-1)
drukāt ("Precizitāte:", accuracy_score (np.argmax (y_test, axis=-1), y_pred))
Šī modeļa precizitāte ir aptuveni 84%.
Modeļa saglabāšana
Saglabājiet modeli, izmantojot model.save() metodi. Izmantojiet marķieri, lai serializētu un saglabātu marķiera objektu.
model.save('sentiment_analysis_model.h5')
ar atvērt ("tokenizer.pickle", 'wb') kā rokturis:
pickle.dump (tokenizators, rokturis, protokols=pickle. HIGHEST_PROTOCOL)
Tokenizatora objekts marķēs jūsu ievadīto tekstu un sagatavos to ievadīšanai apmācītajam modelim.
Modeļa izmantošana, lai klasificētu sava teksta noskaņojumu
Pēc modeļa izveides un saglabāšanas varat to izmantot, lai klasificētu sava teksta noskaņojumu. Vispirms ielādējiet saglabāto modeli un marķieri.
# Ielādējiet saglabāto modeli un marķieri
imports keras
modelis = keras.models.load_model('sentiment_analysis_model.h5')
ar atvērt ("tokenizer.pickle", "rb") kā rokturis:
marķieris = marinēts gurķis.slodze (rokturis)
Definējiet funkciju, lai paredzētu ievades teksta noskaņojumu.
defprognozēt_sentiment(teksts):
# Tokenizējiet un papildiniet ievades tekstu
text_sequence = tokenizer.texts_to_sequences([teksts])
text_sequence = pad_sequences (text_sequence, maxlen=100)
# Veiciet prognozi, izmantojot apmācītu modeli
prognozētais_vērtējums = model.predict (text_sequence)[0]
ja np.argmax (prognozētais_vērtējums) == 0:
atgriezties"Negatīvs"
elifs np.argmax (prognozētais_vērtējums) == 1:
atgriezties'neitrāla'
cits:
atgriezties'pozitīvs'
Visbeidzot, paredziet savu tekstu.
teksta_ievade = „Man ļoti patika uzturēšanās šajā viesnīcā. Personāls bija brīnišķīgs, un istaba bija fantastiska! ”
prognozētais_sentiments = prognozēts_sentiments (teksta_ievade)
drukāt (predicted_sentiment)
Iepriekš minētā pārskata paredzamais noskaņojums ir šāds:
Modelis spēj pareizi klasificēt visu trīs atsauksmju noskaņojumus.
Noskaņojuma prognozēšana, izmantojot iepriekš apmācītus modeļus
Dažreiz mašīnmācībā jums var rasties izaicinājums atrast pareizo datu kopu. Iespējams, jums arī trūkst resursu, lai izveidotu savu datu kopu. Šeit parādās iepriekš apmācīti modeļi. Jums ir jāzina, kā izmantot viņu API, un jāļauj viņiem rīkoties ar pārējo.