Vytvorenie vlastného modelu analýzy sentimentu sa môže zdať skľučujúce. Táto príručka vás prevedie krokmi, ako začať.
Analýza sentimentu je technika spracovania prirodzeného jazyka (NLP), ktorá identifikuje postoj za textom. Je tiež známy ako ťažba názorov. Cieľom analýzy sentimentu je zistiť, či má určitý text pozitívny, negatívny alebo neutrálny sentiment. Je široko používaný spoločnosťami na automatickú klasifikáciu sentimentu v recenziách zákazníkov. Analýza veľkého množstva recenzií pomáha získať cenné informácie o preferenciách zákazníkov.
Nastavenie vášho prostredia
Musíte byť oboznámení s Základy Pythonu dodržať. Prejdite na Google Colab alebo otvorte Jupyter Notebook. Potom vytvorte nový poznámkový blok. Vykonajte nasledujúci príkaz na inštaláciu požadovaných knižníc vo vašom prostredí.
Úplný zdrojový kód tohto projektu je dostupný tu úložisko GitHub.
! pip install tensorflow scikit-learn pandy numpy pickle5
Budete používať NumPy a knižnica pandas na manipuláciu so súborom údajov. TensorFlow na vytváranie a trénovanie modelu strojového učenia. Scikit-learn na rozdelenie súboru údajov do tréningových a testovacích súborov. Nakoniec použijete pickle5 na serializáciu a uloženie objektu tokenizer.
Import požadovaných knižníc
Importujte potrebné knižnice, ktoré použijete na predbežné spracovanie údajov a vytvorenie modelu.
importovať numpy ako np
importovať pandy ako pd
importovať tensorflow ako tf
od sklearn.model_selection importovať train_test_split
od sklearn.metrics importovať presnosť_skóre
od tensorflow.keras.predspracovanie.textu importovať Tokenizer
od tensorflow.keras.predspracovanie.sekvencie importovať pad_sequences
od tensorflow.keras.modely importovať Sekvenčné
od tensorflow.keras.vrstvy importovať Vkladanie, Conv1D, GlobalMaxPooling1D, Dense, Dropout
importovať kyslá uhorka5 ako kyslá uhorka
Triedy, ktoré importujete z modulov, použijete neskôr v kóde.
Načítava sa množina údajov
Tu použijete súbor údajov Recenzie hotelov Trip Advisor z Kaggle vytvoriť model analýzy sentimentu.
df = pd.read_csv('/content/tripadvisor_hotel_reviews.csv')
tlač (df.head())
Načítajte súbor údajov a vytlačte jeho prvých päť riadkov. Vytlačenie prvých piatich riadkov vám pomôže skontrolovať názvy stĺpcov vašej množiny údajov. Toto bude rozhodujúce pri predbežnom spracovaní súboru údajov.
Súbor údajov Recenzie hotela Trip Advisor má stĺpec indexu, stĺpec Recenzia a stĺpec Hodnotenie.
Predspracovanie údajov
Vyberte Preskúmanie a Hodnotenie stĺpcov z množiny údajov. Vytvorte nový stĺpec na základe stĺpca Hodnotenie a pomenujte ho sentiment. Ak je hodnotenie vyššie ako 3, označte sentiment ako pozitívne. Ak je hodnotenie menšie ako 3, označte ho ako negatívne. Ak je hodnotenie presne 3, označte ho ako neutrálny.
Z množiny údajov vyberte iba stĺpce Review a sentiment. Náhodne zamiešajte riadky a vynulujte index dátového rámca. Miešanie a resetovanie zaisťuje, že údaje sú náhodne distribuované, čo je nevyhnutné pre správne trénovanie a testovanie modelu.
df = df[['Preskúmanie', 'Hodnotenie']]
df['sentiment'] = df['Hodnotenie'].použiť(lambda X: 'pozitívny'ak x > 3
inak'negatívny'ak x < 3
inak'neutrálny')
df = df[['Preskúmanie', 'sentiment']]
df = df.vzorka (frac=1).reset_index (drop=Pravda)
Konvertovať Preskúmanie text do postupnosti celých čísel pomocou tokenizéra. Tým sa vytvorí slovník jedinečných slov prítomných v texte recenzie a namapuje sa každé slovo na jedinečnú celočíselnú hodnotu. Použi pad_sequences funkcia od Keras, aby sa zabezpečilo, že všetky sekvencie prezerania budú mať rovnakú dĺžku.
tokenizer = Tokenizer (počet_slov=5000, oov_token='' )
tokenizer.fit_on_texts (df['Preskúmanie'])
word_index = tokenizer.word_index
sekvencie = tokenizer.texts_to_sequences (df['Preskúmanie'])
padded_sequences = pad_sequences (sekvencie, maxlen=100, skrátenie='post')
Preveďte štítky sentimentu na kódovanie One-hot.
sentiment_labels = pd.get_dummies (df['sentiment']).hodnoty
Jednorazové kódovanie predstavuje kategorické údaje vo formáte, s ktorým sa vašim modelom ľahšie pracuje.
Rozdelenie množiny údajov na školiace a testovacie množiny
Použite scikit-learn na náhodné rozdelenie súboru údajov na tréningové a testovacie súbory. Tréningovú súpravu použijete na trénovanie modelu, aby ste klasifikovali pocity z recenzií. A pomocou testovacej súpravy zistíte, aký dobrý je model pri klasifikácii nových neviditeľných recenzií.
x_train, x_test, y_train, y_test = train_test_split (padded_sequences, sentiment_labels, test_size=0.2)
Veľkosť rozdelenia množiny údajov je 0,2. To znamená, že 80% údajov bude trénovať model. A zvyšných 20 % otestuje výkon modelu.
Vytvorenie neurónovej siete
Vytvor neurónová sieť so šiestimi vrstvami.
model = Sekvenčný()
model.add (Vloženie(5000, 100, dĺžka_vstupu=100))
model.add (Conv1D(64, 5, aktivácia='relu'))
model.add (GlobalMaxPooling1D())
model.add (Hustý(32, aktivácia='relu'))
model.add (Dropout(0.5))
model.add (Hustý(3, aktivácia="softmax"))
model.compile (optimalizátor='adam', strata ='categorical_crossentropy', metriky=['presnosť'])
model.summary()
Prvou vrstvou neurónovej siete je vrstva Embedding. Táto vrstva sa učí hustú reprezentáciu slov v slovnej zásobe. Druhá vrstva je vrstva Conv1D so 64 filtrami a veľkosťou jadra 5. Táto vrstva vykonáva konvolučné operácie na vstupných sekvenciách pomocou malého posuvného okna s veľkosťou 5.
Tretia vrstva redukuje postupnosť máp prvkov na jeden vektor. Preberá maximálnu hodnotu na každej mape objektov. Štvrtá vrstva vykonáva lineárnu transformáciu na vstupnom vektore. Piata vrstva náhodne nastaví zlomok vstupných jednotiek na 0 počas tréningu. To pomáha predchádzať nadmernému namontovaniu. Posledná vrstva konvertuje výstup na rozdelenie pravdepodobnosti v troch možných triedach: pozitívne, neutrálne a negatívne.
Tréning neurónovej siete
Pripevnite tréningové a testovacie súpravy k modelu. Trénujte model na desať epoch. Počet epoch môžete zmeniť podľa svojich predstáv.
model.fit (x_train, y_train, epochs=10, veľkosť_dávky=32, validačné_údaje=(x_test, y_test))
Po každej epoche sa vyhodnotí výkon modelu na testovacej súprave.
Hodnotenie výkonu trénovaného modelu
Použi model.predict() metóda na predpovedanie štítkov sentimentu pre testovací súbor. Vypočítajte skóre presnosti pomocou presnosť_skóre() funkcie zo scikit-learn.
y_pred = np.argmax (model.predikcia (x_test), os=-1)
vytlačiť ("Presnosť:", skóre presnosti (np.argmax (y_test, os=-1), y_pred))
Presnosť tohto modelu je asi 84%.
Uloženie modelu
Uložte model pomocou model.save() metóda. Použite pickle na serializáciu a uloženie objektu tokenizer.
model.save('sentiment_analysis_model.h5')
s OTVORENÉ('tokenizer.pickle', 'wb') ako zvládnuť:
pickle.dump (tokenizer, handle, protocol=pickle. NAJVYŠŠÍ PROTOKOL)
Objekt tokenizéra tokenizuje váš vlastný vstupný text a pripraví ho na načítanie natrénovaného modelu.
Použitie modelu na klasifikáciu sentimentu vášho vlastného textu
Po vytvorení a uložení modelu ho môžete použiť na klasifikáciu sentimentu vlastného textu. Najprv načítajte uložený model a tokenizér.
# Načítajte uložený model a tokenizér
importovať keras
model = keras.models.load_model('sentiment_analysis_model.h5')
s OTVORENÉ('tokenizer.pickle', 'rb') ako zvládnuť:
tokenizer = pickle.load (rukoväť)
Definujte funkciu na predpovedanie sentimentu vstupného textu.
defpredpovedať_sentiment(text):
# Tokenizujte a vyplňte vstupný text
text_sequence = tokenizer.texts_to_sequences([text])
text_sequence = pad_sequences (text_sequence, maxlen=100)
# Urobte predpoveď pomocou natrénovaného modelu
predikované_hodnotenie = model.predict (text_sequence)[0]
ak np.argmax (predpokladané_hodnotenie) == 0:
vrátiť'negative'
elif np.argmax (predpokladané_hodnotenie) == 1:
vrátiť'Neutral'
inak:
vrátiť'pozitívny'
Nakoniec predpovedajte svoj vlastný text.
text_input = „Pobyt v tomto hoteli sa mi absolútne páčil. Personál bol úžasný a miestnosť bola fantastická!”
predpovedaný_sentiment = predpovedaný_sentiment (textový vstup)
vytlačiť (predpovedaný_sentiment)
Predpokladaný sentiment vyššie uvedenej recenzie je takýto:
Modelka dokáže správne zaradiť pocity všetkých troch recenzií.
Predpovedanie pocitov pomocou vopred vyškolených modelov
Niekedy v rámci strojového učenia môžete mať problém nájsť ten správny súbor údajov. Možno vám tiež chýbajú zdroje na vytvorenie vlastného súboru údajov. Tu prichádzajú na rad vopred trénované modely. Musíte vedieť, ako používať ich API a nechať ich, aby sa postarali o zvyšok.