Oma sentimentaalanalüüsi mudeli loomine võib tunduda hirmutav. See juhend juhendab teid alustamiseks.

Tundeanalüüs on loomuliku keele töötlemise (NLP) tehnika, mis tuvastab teksti taga oleva hoiaku. Seda tuntakse ka kui arvamuse kaevandamist. Sentimentanalüüsi eesmärk on tuvastada, kas teatud tekstis on positiivne, negatiivne või neutraalne meeleolu. Ettevõtted kasutavad seda laialdaselt klientide arvustustes meeleolu automaatseks klassifitseerimiseks. Suurte arvustuste analüüsimine aitab saada väärtuslikku teavet klientide eelistuste kohta.

Oma keskkonna seadistamine

Peate olema tuttav Pythoni põhitõed järgida. Navigeerige Google Colab või avage Jupyteri sülearvuti. Seejärel looge uus märkmik. Käivitage järgmine käsk, et installida oma keskkonda vajalikud teegid.

Selle projekti täielik lähtekood on saadaval siin GitHubi hoidla.

! pip install tensorflow scikit-learn pandad numpy hapukurk5

Kasutate NumPy ja pandade teek andmestikuga manipuleerimiseks. TensorFlow masinõppemudeli loomiseks ja koolitamiseks. Scikit-learn andmestiku jagamiseks koolitus- ja testimiskomplektideks. Lõpuks kasutate tokenisaatori objekti järjestamiseks ja salvestamiseks rakendust pickle5.

Nõutavate teekide importimine

Importige vajalikud teegid, mida kasutate andmete eeltöötlemiseks ja mudeli loomiseks.

importida tuim nagu np
importida pandad nagu pd
importida tensorflow nagu tf
alates sklearn.model_selection importida train_test_split
alates sklearn.metrics importida täpsus_skoor
alates tensorflow.keras.preprocessing.text importida Tokenisaator
alates tensorflow.keras.preprocessing.sequence importida pad_järjed
alates tensorflow.keras.models importida Järjestikused
alates tensorflow.keras.layers importida Manustamine, Conv1D, GlobalMaxPooling1D, tihe, väljalangemine
importida hapukurk5 nagu hapukurk

Moodulitest imporditud klasse kasutate koodis hiljem.

Andmestiku laadimine

Siin kasutate Trip Advisori hotelliarvustuste andmestikku Kaggle sentimentianalüüsi mudeli loomiseks.

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

Laadige andmestik ja printige selle viis esimest rida. Esimese viie rea printimine aitab teil kontrollida andmestiku veergude nimesid. See on andmestiku eeltöötlemisel ülioluline.

Andmekomplektis Trip Advisor Hotel Reviews on indeksi veerg, veerg Review ja hinnang.

Andmete eeltöötlus

Valige Ülevaade ja Hinnang veerud andmestikust. Looge hinnang veeru põhjal uus veerg ja andke sellele nimi tunne. Kui hinnang on suurem kui 3, märgistage meeleolu kui positiivne. Kui hinnang on väiksem kui 3, märgistage see kui negatiivne. Kui hinnang on täpselt 3, märgistage see kui neutraalne.

Valige andmekogumist ainult veerud Arvustused ja arvamus. Segage ridu juhuslikult ja lähtestage andmeraami indeks. Segamine ja lähtestamine tagavad andmete juhusliku jaotuse, mis on vajalik mudeli nõuetekohaseks väljaõppeks ja testimiseks.

df = df[['ülevaade', 'Hinnang']]
df['tunne'] = df['Hinnang'].apply(lambda x: 'positiivne'kui x > 3
muidu'negatiivne'kui x < 3
muidu'neutraalne')
df = df[['ülevaade', 'tunne']]
df = df.sample (frac=1.reset_index (drop=Tõsi)

Teisendage Ülevaade tekst täisarvude jadaks, kasutades tokenisaatorit. See loob sõnastiku ülevaatetekstis leiduvatest unikaalsetest sõnadest ja vastendab iga sõna kordumatu täisarvuga. Kasuta pad_järjed Kerase funktsiooni, et kõik ülevaatusjärjestused oleksid ühepikkused.

tokenizer = Tokenizer (sõnade_arv=5000, oov_token='')
tokenizer.fit_on_texts (df['ülevaade'])
sõna_indeks = tokeniseer.word_index
järjestused = tokenizer.tekstid_jadadeks (df['ülevaade'])
padded_sequences = pad_sequences (järjed, maxlen=100, kärbimine='postitus')

Teisendage meeleolusildid One-hot-kodeeringuks.

sentiment_labels = pd.get_dummies (df['tunne']).väärtused

One-hot-kodeering esindab kategoorilisi andmeid vormingus, millega teie mudelitel on lihtsam töötada.

Andmestiku jagamine koolitus- ja testimiskomplektideks

Kasutage scikit-learni, et jagada andmestik juhuslikult treening- ja testimiskomplektideks. Kasutate koolituskomplekti, et koolitada modelli arvustuste tundeid klassifitseerima. Ja kasutate testikomplekti, et näha, kui hea on mudel uute seninägematute arvustuste klassifitseerimisel.

x_train, x_test, y_train, y_test = train_test_split (polsterdatud_järjed, sentiment_labels, test_size=0.2)

Andmestiku jaotuse suurus on 0,2. See tähendab, et 80% andmetest treenib mudelit. Ja ülejäänud 20% testivad mudeli jõudlust.

Neuraalvõrgu loomine

Loo närvivõrk kuue kihiga.

mudel = järjestikune()
model.add (Manustamine(5000, 100, sisendi_pikkus=100))
model.add (Conv1D(64, 5, aktiveerimine='relu'))
model.add (GlobalMaxPooling1D())
model.add (Tihe(32, aktiveerimine='relu'))
model.add (Dropout(0.5))
model.add (Tihe(3, aktiveerimine='softmax'))
model.comile (optimizer='adam', kaotus ='categorical_crossentropy', mõõdikud=['täpsus'])
model.summary()

Närvivõrgu esimene kiht on manustamiskiht. See kiht õpib sõnavaras sõnade tihedat esitust. Teine kiht on Conv1D kiht, millel on 64 filtrit ja mille tuuma suurus on 5. See kiht teostab sisendjadadel konvolutsioonioperatsioone, kasutades väikest 5 suurust libistatavat akent.

Kolmas kiht vähendab objektikaartide jada üheks vektoriks. See võtab iga objektikaardi maksimaalse väärtuse. Neljas kiht teostab sisendvektoril lineaarse teisenduse. Viies kiht määrab treeningu ajal juhuslikult osa sisendühikutest nulliks. See aitab vältida ülepaigutamist. Viimane kiht teisendab väljundi tõenäosusjaotuseks kolme võimaliku klassi vahel: positiivne, neutraalne ja negatiivne.

Närvivõrgu koolitamine

Paigaldage treening- ja testikomplektid mudeliga. Treenige mudelit kümne epohhi jooksul. Epohhide arvu saate oma äranägemise järgi muuta.

model.fit (x_train, y_train, epochs=10, partii_suurus=32, valideerimisandmed=(x_test, y_test))

Pärast iga epohhi hinnatakse mudeli toimivust testimiskomplektis.

Koolitatud mudeli toimivuse hindamine

Kasuta model.predict() meetod testikomplekti meeleolusiltide ennustamiseks. Arvutage täpsusskoor kasutades accuracy_score() funktsioon scikit-learnilt.

y_pred = np.argmax (model.predict (x_test), axis=-1)
print("Täpsus:", accuracy_score (np.argmax (y_test, axis=-1), y_pred))

Selle mudeli täpsus on umbes 84%.

Mudeli salvestamine

Salvestage mudel kasutades model.save() meetod. Kasutage tokenisaatori objekti järjestamiseks ja salvestamiseks hapukurki.

model.save('sentiment_analysis_model.h5')
koos avatud ('tokenizer.pickle', 'wb') nagu käepide:
hapukurk.dump (tokenizer, käepide, protokoll=hapukurk. HIGHEST_PROTOCOL)

Tokeniseerija objekt märgistab teie enda sisendteksti ja valmistab selle ette koolitatud mudelile söötmiseks.

Mudeli kasutamine oma teksti tunde klassifitseerimiseks

Pärast mudeli loomist ja salvestamist saate seda kasutada oma teksti meeleolu klassifitseerimiseks. Esmalt laadige salvestatud mudel ja tokenisaator.

# Laadige salvestatud mudel ja tokenisaator
importida keras

model = keras.models.load_model('sentiment_analysis_model.h5')
koos avatud ('tokenizer.pickle', "rb") nagu käepide:
tokenisaator = hapukurk.koormus (käepide)

Määrake funktsioon sisendteksti meeleolu ennustamiseks.

defennusta_sentiment(tekst):
# Sisestusteksti märgistamine ja polsterdamine
text_sequence = tokenizer.texts_to_sequences([tekst])
text_sequence = pad_järjed (teksti_jada, maxlen=100)

# Tehke ennustus koolitatud mudeli abil
ennustatud_hinnang = model.predict (teksti_jada)[0]
kui np.argmax (ennustatud_hinnang) == 0:
tagasi"Negatiivne"
elif np.argmax (ennustatud_hinnang) == 1:
tagasi'neutraalne'
muidu:
tagasi'Positiivne'

Lõpuks ennustage oma tekst.

tekstisisend = „Mulle väga meeldis selles hotellis viibimine. Personal oli suurepärane ja tuba fantastiline! ”
ennustatud_sentiment = ennustatud_tunne (teksti_sisend)
print (ennustatud_tunne)

Ülaltoodud ülevaate prognoositav meeleolu on järgmine:

Mudel suudab kõigi kolme arvustuse tundeid õigesti klassifitseerida.

Tunde ennustamine eelkoolitatud modellide abil

Mõnikord võib masinõppes tekkida väljakutse õige andmestiku leidmisel. Teil võib puududa ka ressursse oma andmestiku loomiseks. Siin tulevadki kasutusele eelkoolitatud modellid. Peate teadma, kuidas nende API-d kasutada, ja jätma ülejäänu nende enda kanda.