Sestavení vlastního modelu analýzy sentimentu se může zdát skličující. Tento průvodce vás provede kroky, jak začít.
Analýza sentimentu je technika zpracování přirozeného jazyka (NLP), která identifikuje postoj za textem. To je také známé jako dolování názorů. Cílem analýzy sentimentu je zjistit, zda má určitý text pozitivní, negativní nebo neutrální sentiment. Je široce používán podniky k automatické klasifikaci sentimentu v recenzích zákazníků. Analýza velkého množství recenzí pomáhá získat cenné poznatky o preferencích zákazníků.
Nastavení vašeho prostředí
Musíte být obeznámeni s Základy Pythonu dodržet. Navigovat do Google Colab nebo otevřete Jupyter Notebook. Poté vytvořte nový poznámkový blok. Provedením následujícího příkazu nainstalujte požadované knihovny do vašeho prostředí.
Úplný zdrojový kód tohoto projektu je k dispozici zde úložiště GitHub.
! pip install tensorflow scikit-learn pandy numpy pickle5
Budete používat NumPy a knihovna pandas pro manipulaci s datovou sadou. TensorFlow pro vytváření a trénování modelu strojového učení. Scikit-learn pro rozdělení datové sady do školicích a testovacích sad. Nakonec použijete pickle5 k serializaci a uložení objektu tokenizeru.
Import požadovaných knihoven
Importujte potřebné knihovny, které použijete k předběžnému zpracování dat a vytvoření modelu.
import nemotorný tak jako np
import pandy tak jako pd
import tensorflow tak jako tf
z sklearn.model_selection import train_test_split
z sklearn.metrics import přesnost_skóre
z tensorflow.keras.preprocessing.text import Tokenizer
z tensorflow.keras.předzpracování.sekvence import pad_sequences
z tensorflow.keras.modely import Sekvenční
z tensorflow.keras.vrstvy import Vkládání, Conv1D, GlobalMaxPooling1D, Dense, Dropout
import okurka5 tak jako lák
Třídy, které importujete z modulů, použijete později v kódu.
Načítání datové sady
Zde použijete datovou sadu Trip Advisor Hotel Reviews z Kaggle vytvořit model analýzy sentimentu.
df = pd.read_csv('/content/tripadvisor_hotel_reviews.csv')
tisknout (df.head())
Načtěte datovou sadu a vytiskněte jejích prvních pět řádků. Tisk prvních pěti řádků vám pomůže zkontrolovat názvy sloupců vaší datové sady. To bude rozhodující při předběžném zpracování datové sady.
Datový soubor Recenze hotelů Trip Advisor má sloupec indexu, sloupec Recenze a sloupec Hodnocení.
Předzpracování dat
Vybrat Posouzení a Hodnocení sloupců z datové sady. Vytvořte nový sloupec na základě sloupce Hodnocení a pojmenujte jej sentiment. Pokud je hodnocení vyšší než 3, označte sentiment jako pozitivní. Pokud je hodnocení menší než 3, označte jej jako negativní. Pokud je hodnocení přesně 3, označte jej jako neutrální.
Z datové sady vyberte pouze sloupce Review a sentiment. Náhodně zamíchejte řádky a resetujte index datového rámce. Míchání a resetování zajišťuje, že data jsou náhodně distribuována, což je nezbytné pro správné trénování a testování modelu.
df = df[['Posouzení', 'Hodnocení']]
df['sentiment'] = df['Hodnocení'].aplikovat(lambda X: 'pozitivní'-li x > 3
jiný'negativní'-li x < 3
jiný'neutrální')
df = df[['Posouzení', 'sentiment']]
df = df.vzorek (frac=1).reset_index (drop=Skutečný)
Převést Posouzení text do sekvence celých čísel pomocí tokenizeru. Tím se vytvoří slovník jedinečných slov přítomných v textu recenze a mapuje každé slovo na jedinečnou celočíselnou hodnotu. Použijte pad_sequences funkce od Keras, aby bylo zajištěno, že všechny sekvence prohlížení budou mít stejnou délku.
tokenizer = Tokenizer (num_words=5000, oov_token='' )
tokenizer.fit_on_texts (df['Posouzení'])
word_index = tokenizer.word_index
sekvence = tokenizer.texts_to_sequences (df['Posouzení'])
padded_sequences = pad_sequences (sekvence, maxlen=100, zkrácení='pošta')
Převeďte štítky sentimentu na kódování One-hot.
sentiment_labels = pd.get_dummies (df['sentiment']).hodnoty
One-hot kódování představuje kategorická data ve formátu, se kterým se vašim modelům lépe pracuje.
Rozdělení datové sady na školicí a testovací sady
Použijte scikit-learn k náhodnému rozdělení datové sady na tréninkové a testovací sady. Tréninkovou sadu použijete k trénování modelu pro klasifikaci pocitů z recenzí. A pomocí testovací sady zjistíte, jak dobrý je model při klasifikaci nových neviditelných recenzí.
x_train, x_test, y_train, y_test = train_test_split (padded_sequences, sentiment_labels, test_size=0.2)
Velikost rozdělení datové sady je 0,2. To znamená, že 80 % dat bude trénovat model. A zbývajících 20 % otestuje výkon modelu.
Vytvoření neuronové sítě
Vytvořit nervová síť se šesti vrstvami.
model = sekvenční()
model.add (Vložení(5000, 100, délka_vstupu=100))
model.add (Conv1D(64, 5, aktivace='relu'))
model.add (GlobalMaxPooling1D())
model.add (Hustý(32, aktivace='relu'))
model.add (Dropout(0.5))
model.add (Hustý(3, aktivace='softmax'))
model.compile (optimalizátor='adam', ztráta ='categorical_crossentropy', metriky=['přesnost'])
model.summary()
První vrstva neuronové sítě je vrstva Embedding. Tato vrstva se učí hustému zastoupení slov ve slovní zásobě. Druhá vrstva je vrstva Conv1D se 64 filtry a velikostí jádra 5. Tato vrstva provádí konvoluční operace na vstupních sekvencích pomocí malého posuvného okna o velikosti 5.
Třetí vrstva redukuje sekvenci map prvků na jeden vektor. Na každé mapě objektů má maximální hodnotu. Čtvrtá vrstva provádí lineární transformaci na vstupním vektoru. Pátá vrstva během tréninku náhodně nastaví zlomek vstupních jednotek na 0. To pomáhá předcházet nadměrnému vybavení. Poslední vrstva převádí výstup na rozdělení pravděpodobnosti ve třech možných třídách: pozitivní, neutrální a negativní.
Školení neuronové sítě
Přizpůsobte tréninkové a testovací sady modelu. Trénujte model na deset epoch. Počet epoch můžete změnit podle svých představ.
model.fit (x_train, y_train, epochs=10, velikost_dávky=32, validation_data=(x_test, y_test))
Po každé epoše je vyhodnocen výkon modelu na testovací sadě.
Hodnocení výkonu trénovaného modelu
Použijte model.predict() metoda k predikci sentimentových štítků pro testovací sadu. Vypočítejte skóre přesnosti pomocí přesnost_skóre() funkce ze scikit-learn.
y_pred = np.argmax (model.predict (x_test), osa=-1)
tisk("Přesnost:", skóre_přesnosti (np.argmax (y_test, osa=-1), y_pred))
Přesnost tohoto modelu je cca 84%.
Uložení modelu
Uložte model pomocí model.save() metoda. Použijte pickle k serializaci a uložení objektu tokenizeru.
model.uložit('sentiment_analysis_model.h5')
s OTEVŘENO('tokenizer.pickle', 'wb') tak jako Rukojeť:
pickle.dump (tokenizer, handle, protocol=pickle. NEJVYŠŠÍ_PROTOKOL)
Objekt tokenizer tokenizuje váš vlastní vstupní text a připraví jej pro podávání do trénovaného modelu.
Použití modelu ke klasifikaci sentimentu vašeho vlastního textu
Po vytvoření a uložení modelu jej můžete použít ke klasifikaci sentimentu vlastního textu. Nejprve načtěte uložený model a tokenizér.
# Načtěte uložený model a tokenizér
import keras
model = keras.models.load_model('sentiment_analysis_model.h5')
s OTEVŘENO('tokenizer.pickle', 'rb') tak jako Rukojeť:
tokenizer = pickle.load (rukojeť)
Definujte funkci pro předpovídání sentimentu vstupního textu.
defpředpovídat_sentiment(text):
# Tokenizujte a vyplňte vstupní text
text_sequence = tokenizer.texts_to_sequences([text])
text_sequence = pad_sequences (text_sequence, maxlen=100)
# Proveďte předpověď pomocí natrénovaného modelu
predikované_hodnocení = model.predict (textová_sekvence)[0]
-li np.argmax (předpokládané_hodnocení) == 0:
vrátit se'Negativní'
elif np.argmax (předpokládané_hodnocení) == 1:
vrátit se'Neutrální'
jiný:
vrátit se'Pozitivní'
Nakonec předpovězte svůj vlastní text.
text_input = „Pobyt v tomto hotelu se mi absolutně líbil. Personál byl úžasný a pokoj byl fantastický!"
predikovaný_sentiment = predikovaný_sentiment (textový vstup)
tisknout (predikovaný_sentiment)
Předpokládaný sentiment výše uvedené recenze je následující:
Model je schopen správně zařadit sentiment všech tří recenzí.
Předvídání pocitů pomocí předem vyškolených modelů
Někdy ve strojovém učení můžete mít problém najít správnou datovou sadu. Možná vám také chybí prostředky k vytvoření vlastní datové sady. Zde přicházejí na řadu předem vycvičené modely. Musíte vědět, jak používat jejich API a nechat je, aby se postarali o zbytek.