Zbudowanie własnego modelu analizy nastrojów może wydawać się zniechęcające. Ten przewodnik przeprowadzi Cię przez wszystkie kroki, aby rozpocząć.
Analiza nastrojów to technika przetwarzania języka naturalnego (NLP), która identyfikuje postawę stojącą za tekstem. Jest to również znane jako eksploracja opinii. Celem analizy nastrojów jest określenie, czy dany tekst ma nastroje pozytywne, negatywne czy neutralne. Jest szeroko stosowany przez firmy do automatycznego klasyfikowania nastrojów w recenzjach klientów. Analiza dużej liczby recenzji pomaga uzyskać cenny wgląd w preferencje klientów.
Konfigurowanie środowiska
Musisz się znać Podstawy Pythona podążać. Nawigować do Współpraca Google lub otwórz notatnik Jupyter. Następnie utwórz nowy notatnik. Wykonaj następujące polecenie, aby zainstalować wymagane biblioteki w swoim środowisku.
Pełny kod źródłowy tego projektu jest dostępny w this Repozytorium GitHub.
! pip zainstaluj tensorflow scikit-ucz się pand numpy pickle5
Będziesz używać NumPy i
biblioteka pandas do manipulowania zbiorem danych. TensorFlow do tworzenia i trenowania modelu uczenia maszynowego. Scikit-learn do dzielenia zestawu danych na zestawy szkoleniowe i testowe. Na koniec użyjesz pickle5 do serializacji i zapisania obiektu tokenizera.Importowanie wymaganych bibliotek
Zaimportuj niezbędne biblioteki, których użyjesz do wstępnego przetworzenia danych i utworzenia modelu.
import liczba Jak np
import pandy Jak pd
import przepływ tensorowy Jak tf
z sklearn.model_selection import Train_test_split
z sklearn.metrics import ocena_dokładności
z tensorflow.keras.preprocessing.text import Tokenizator
z tensorflow.keras.przetwarzanie wstępne.sekwencja import sekwencje_padów
z tensorflow.keras.modele import Sekwencyjny
z tensorflow.keras.layers import Osadzanie, Conv1D, GlobalMaxPooling1D, gęste, odrzucanie
import marynata5 Jak marynata
W dalszej części kodu użyjesz klas zaimportowanych z modułów.
Ładowanie zestawu danych
W tym przypadku użyjesz zestawu danych recenzji hoteli Trip Advisor z Kaggle zbudować model analizy sentymentu.
df = pd.odczyt_csv(„/content/tripadvisor_hotel_reviews.csv”)
drukuj (df.head())
Załaduj zestaw danych i wydrukuj jego pierwsze pięć wierszy. Wydrukowanie pierwszych pięciu wierszy pomoże Ci sprawdzić nazwy kolumn Twojego zestawu danych. Będzie to kluczowe podczas wstępnego przetwarzania zestawu danych.
Zbiór danych Recenzje hoteli Trip Advisor zawiera kolumnę indeksu, kolumnę Recenzja i kolumnę Ocena.
Wstępne przetwarzanie danych
Wybierz Recenzja I Ocena kolumny ze zbioru danych. Utwórz nową kolumnę na podstawie kolumny Ocena i nadaj jej nazwę sentyment. Jeśli ocena jest większa niż 3, oznacz tonację jako pozytywny. Jeśli ocena jest mniejsza niż 3, oznacz ją jako negatywny. Jeśli ocena wynosi dokładnie 3, oznacz ją jako neutralny.
Wybierz tylko kolumny Recenzja i tonacja z zestawu danych. Potasuj losowo wiersze i zresetuj indeks ramki danych. Tasowanie i resetowanie zapewniają losową dystrybucję danych, co jest niezbędne do prawidłowego uczenia i testowania modelu.
df = df[['Recenzja', 'Ocena']]
df['sentyment'] = df['Ocena'].stosować(lambda X: 'pozytywny'Jeśli x > 3
w przeciwnym razie'negatywny'Jeśli x < 3
w przeciwnym razie'neutralny')
df = df[['Recenzja', 'sentyment']]
df = df.próbka (frac=1).reset_index (drop=PRAWDA)
Konwertuj Recenzja tekst na sekwencję liczb całkowitych za pomocą tokenizatora. Spowoduje to utworzenie słownika unikalnych słów obecnych w tekście recenzji i odwzorowuje każde słowo na unikalną wartość całkowitą. Użyj sekwencje_padów z Keras, aby upewnić się, że wszystkie sekwencje recenzji mają tę samą długość.
tokenizator = tokenizator (num_words=5000, oov_token='' )
tokenizer.fit_on_texts (df['Recenzja'])
indeks_słów = tokenizator.indeks_słów
sekwencje = tokenizer.texts_to_sequences (df['Recenzja'])
wyściełane_sekwencje = pad_sekwencje (sekwencje, maxlen=100, obcinanie ='post')
Przekonwertuj etykiety tonacji na kodowanie One-hot.
etykiety_nastrojów = pd.get_dummies (df['sentyment']).wartości
Jednokierunkowe kodowanie reprezentuje dane kategoryczne w formacie, który jest łatwiejszy w obsłudze dla modeli.
Podział zbioru danych na zbiory treningowe i testowe
Użyj narzędzia scikit-learn, aby losowo podzielić zestaw danych na zestawy szkoleniowe i testowe. Użyjesz zestawu szkoleniowego, aby wytrenować model w celu klasyfikowania tonacji recenzji. Użyjesz zestawu testów, aby sprawdzić, jak dobry jest model w klasyfikowaniu nowych, niepublikowanych recenzji.
x_pociąg, x_test, y_pociąg, y_test = pociąg_podział_testu (wypełnione_sekwencje, etykiety_nastrojów, rozmiar_testu=0.2)
Rozmiar podziału zestawu danych wynosi 0,2. Oznacza to, że 80% danych będzie trenować model. A pozostałe 20% przetestuje wydajność modelu.
Tworzenie sieci neuronowej
Stwórz sieć neuronowa z sześcioma warstwami.
model = sekwencyjny()
model.add (Osadzanie (5000, 100, długość_wejściowa=100))
model.add (Conv1D(64, 5, aktywacja='relu'))
model.add (GlobalMaxPooling1D())
model.add (gęsty(32, aktywacja='relu'))
model.add (porzucenie (0.5))
model.add (gęsty(3, aktywacja=„miękki maks”))
model.compile (optymalizator =„adam”, strata =„kategoryczna_crossentropia”, metryka=['dokładność'])
model.podsumowanie()
Pierwszą warstwą sieci neuronowej jest warstwa osadzania. Ta warstwa uczy się gęstej reprezentacji słów w słowniku. Druga warstwa to warstwa Conv1D z 64 filtrami i rozmiarem jądra 5. Ta warstwa wykonuje operacje splotu na sekwencjach wejściowych, używając małego przesuwnego okna o rozmiarze 5.
Trzecia warstwa redukuje sekwencję map cech do pojedynczego wektora. Przyjmuje maksymalną wartość na każdej mapie obiektów. Czwarta warstwa wykonuje transformację liniową wektora wejściowego. Piąta warstwa losowo ustawia ułamek jednostek wejściowych na 0 podczas uczenia. Pomaga to zapobiegać nadmiernemu dopasowaniu. Ostatnia warstwa przekształca dane wyjściowe w rozkład prawdopodobieństwa w trzech możliwych klasach: dodatniej, neutralnej i ujemnej.
Trening sieci neuronowej
Dopasuj zestawy uczące i testujące do modelu. Trenuj model przez dziesięć epok. Możesz zmienić liczbę epok według własnych upodobań.
model.fit (x_pociąg, y_pociąg, epoki=10, wielkość_wsadu=32, validation_data=(x_test, y_test))
Po każdej epoce oceniane jest działanie modelu na zbiorze testowym.
Ocena wydajności wytrenowanego modelu
Użyj model.predict() metoda przewidywania etykiet tonacji dla zestawu testowego. Oblicz wynik dokładności za pomocą ocena_dokładności() funkcja z scikit-learn.
y_pred = np.argmax (model.predict (x_test), oś=-1)
wydrukować("Dokładność:", ocena_dokładności (np. argmax (y_test, oś=-1), y_pred))
Dokładność tego modelu wynosi około 84%.
Zapisywanie modelu
Zapisz model za pomocą model.save() metoda. Użyj pickle do serializacji i zapisania obiektu tokenizera.
model.zapisz(„model_analizy_nastrojów.h5”)
z otwarty(„tokenizator.marynata”, 'wb') Jak uchwyt:
pickle.dump (tokenizer, uchwyt, protokół = marynata. NAJWYŻSZY_PROTOKÓŁ)
Obiekt tokenizer dokona tokenizacji własnego tekstu wejściowego i przygotuje go do podania do przeszkolonego modelu.
Wykorzystanie modelu do klasyfikacji nastrojów własnego tekstu
Po utworzeniu i zapisaniu modelu możesz go użyć do sklasyfikowania tonacji własnego tekstu. Najpierw załaduj zapisany model i tokenizer.
# Załaduj zapisany model i tokenizer
import keras
model = keras.modele.load_model(„model_analizy_nastrojów.h5”)
z otwarty(„tokenizator.marynata”, „rb”) Jak uchwyt:
tokenizer = pickle.load (uchwyt)
Zdefiniuj funkcję do przewidywania tonacji tekstu wejściowego.
pokprzewidywać_sentyment(tekst):
# Tokenizuj i wypełniaj tekst wejściowy
text_sequence = tokenizer.texts_to_sequences([text])
text_sequence = pad_sequences (text_sequence, maxlen=100)
# Dokonaj prognozy przy użyciu wytrenowanego modelu
przewidywana_ocena = model.przewidywanie (sekwencja_tekstowa)[0]
Jeśli np.argmax (przewidywana_ocena) == 0:
powrót'Negatywny'
Elif np.argmax (przewidywana_ocena) == 1:
powrót'Neutralny'
w przeciwnym razie:
powrót'Pozytywny'
Na koniec przewiduj własny tekst.
tekst_wejściowy = „Bardzo podobał mi się mój pobyt w tym hotelu. Personel był niesamowity, a pokój był fantastyczny!”
przewidywane_nastawienie = przewidywane_nastawienie (tekst_wejściowy)
drukuj (predicted_sentiment)
Przewidywany sentyment powyższej recenzji jest następujący:
Model jest w stanie poprawnie sklasyfikować nastroje wszystkich trzech recenzji.
Przewidywanie nastrojów przy użyciu wstępnie wyszkolonych modeli
Czasami w uczeniu maszynowym możesz mieć problem ze znalezieniem odpowiedniego zestawu danych. Możesz również nie mieć zasobów, aby utworzyć własny zestaw danych. W tym miejscu pojawiają się wstępnie wyszkolone modele. Musisz wiedzieć, jak korzystać z ich API i pozostawić im zajęcie się resztą.