At bygge din egen følelsesanalysemodel kan virke skræmmende. Denne guide guider dig gennem trinene for at komme i gang.
Følelsesanalyse er en naturlig sprogbehandlingsteknik (NLP), der identificerer holdningen bag en tekst. Det er også kendt som opinion mining. Målet med sentimentanalyse er at identificere, om en bestemt tekst har positiv, negativ eller neutral følelse. Det bruges i vid udstrækning af virksomheder til automatisk at klassificere stemningen i kundeanmeldelser. At analysere store mængder anmeldelser hjælper med at få værdifuld indsigt i kundernes præferencer.
Opsætning af dit miljø
Du skal være bekendt med Grundlæggende om Python at følge igennem. Naviger til Google Colab eller åbn Jupyter Notebook. Opret derefter en ny notesbog. Udfør følgende kommando for at installere de nødvendige biblioteker i dit miljø.
Den fulde kildekode til dette projekt er tilgængelig i denne GitHub-depot.
! pip installer tensorflow scikit-learn pandas numpy pickle5
Du skal bruge NumPy og pandas bibliotek til at manipulere datasættet
. TensorFlow til at skabe og træne machine learning-modellen. Scikit-learn til at opdele datasættet i trænings- og testsæt. Til sidst skal du bruge pickle5 til at serialisere og gemme tokenizer-objektet.Import af de nødvendige biblioteker
Importer de nødvendige biblioteker, som du vil bruge til at forbehandle dataene og oprette modellen.
importere nusset som np
importere pandaer som pd
importere tensorflow som tf
fra sklearn.model_selection importere train_test_split
fra sklearn.metrics importere nøjagtighed_score
fra tensorflow.keras.preprocessing.text importere Tokenizer
fra tensorflow.keras.forbehandlingssekvens importere pad_sekvenser
fra tensorflow.keras.modeller importere Sekventiel
fra tensorflow.keras.lag importere Indlejring, Conv1D, GlobalMaxPooling1D, Dense, Dropout
importere pickle5 som pickle
Du vil bruge de klasser du importerer fra modulerne senere i koden.
Indlæser datasættet
Her skal du bruge datasættet for Trip Advisor Hotelanmeldelser fra Kaggle at bygge sentimentanalysemodellen.
df = pd.read_csv('/content/tripadvisor_hotel_reviews.csv')
print (df.head())
Indlæs datasættet og udskriv dets første fem rækker. Udskrivning af de første fem rækker hjælper dig med at kontrollere kolonnenavnene på dit datasæt. Dette vil være afgørende ved forbehandling af datasættet.
Datasættet for Trip Advisor Hotelanmeldelser har en indekskolonne, en anmeldelseskolonne og en vurderingskolonne.
Dataforbehandling
Vælg Anmeldelse og Bedømmelse kolonner fra datasættet. Opret en ny kolonne baseret på kolonnen Bedømmelse, og navngiv den følelse. Hvis vurderingen er større end 3, skal du mærke følelsen som positiv. Hvis vurderingen er mindre end 3, skal du mærke den som negativ. Hvis vurderingen er nøjagtig 3, skal du mærke den som neutral.
Vælg kun kolonnerne Gennemgang og stemning fra datasættet. Bland rækkerne tilfældigt, og nulstil datarammens indeks. Blanding og nulstilling sikrer, at dataene er tilfældigt fordelt, hvilket er nødvendigt for korrekt træning og test af modellen.
df = df[['Anmeldelse', 'Bedømmelse']]
df['følelse'] = df['Bedømmelse'].ansøge(lambda x: 'positiv'hvis x > 3
andet'negativ'hvis x < 3
andet'neutral')
df = df[['Anmeldelse', 'følelse']]
df = df.sample (frac=1).reset_index (drop=Rigtigt)
Konverter Anmeldelse tekst ind i en sekvens af heltal ved hjælp af tokenizer. Dette opretter en ordbog over de unikke ord, der findes i gennemgangsteksten, og kortlægger hvert ord til en unik heltalsværdi. Brug pad_sekvenser funktion fra Keras for at sikre, at alle gennemgangssekvenser har samme længde.
tokenizer = Tokenizer (num_ord=5000, oov_token='' )
tokenizer.fit_on_texts (df['Anmeldelse'])
word_index = tokenizer.word_index
sekvenser = tokenizer.texts_to_sequences (df['Anmeldelse'])
padded_sequences = pad_sequences (sekvenser, maxlen=100, trunkering='stolpe')
Konverter følelsesetiketterne til One-hot-kodning.
sentiment_labels = pd.get_dummies (df['følelse']).værdier
One-hot-kodning repræsenterer kategoriske data i et format, der er nemmere for dine modeller at arbejde med.
Opdeling af datasættet i trænings- og testsæt
Brug scikit-learn til at opdele datasættet tilfældigt i trænings- og testsæt. Du vil bruge træningssættet til at træne modellen til at klassificere anmeldelsernes følelser. Og du vil bruge testsættet til at få adgang til, hvor god modellen er til at klassificere nye usete anmeldelser.
x_train, x_test, y_train, y_test = train_test_split (polstrede_sekvenser, sentiment_labels, test_size=0.2)
Datasættets opdelingsstørrelse er 0,2. Det betyder, at 80 % af dataene vil træne modellen. Og de resterende 20% vil teste modellens ydeevne.
Oprettelse af det neurale netværk
Lave en neurale netværk med seks lag.
model = Sequential()
model.add (Indlejring(5000, 100, input_length=100))
model.add (Conv1D(64, 5, aktivering='relu'))
model.add (GlobalMaxPooling1D())
model.add (Dense(32, aktivering='relu'))
model.add (Frafald(0.5))
model.add (Dense(3, aktivering='softmax'))
model.compile (optimizer='adam', tab='categorical_crossentropy', metrics=['nøjagtighed'])
model.summary()
Det første lag af det neurale netværk er et indlejringslag. Dette lag lærer en tæt repræsentation af ord i ordforrådet. Det andet lag er et Conv1D-lag med 64 filtre og en kernestørrelse på 5. Dette lag udfører foldningsoperationer på inputsekvenserne ved hjælp af et lille glidende vindue i størrelse 5.
Det tredje lag reducerer sekvensen af feature maps til en enkelt vektor. Det tager den maksimale værdi over hvert feature map. Det fjerde lag udfører en lineær transformation på inputvektoren. Det femte lag sætter tilfældigt en brøkdel af inputenhederne til 0 under træning. Dette hjælper med at forhindre overfitting. Det sidste lag konverterer outputtet til en sandsynlighedsfordeling over de tre mulige klasser: positiv, neutral og negativ.
Træning af det neurale netværk
Tilpas trænings- og testsættene til modellen. Træn modellen i ti epoker. Du kan ændre antallet af epoker efter din smag.
model.fit (x_train, y_train, epoker=10, batch_size=32, valideringsdata=(x_test, y_test))
Efter hver epoke evalueres modellens ydeevne på testsættet.
Evaluering af den trænede models ydeevne
Brug model.predict() metode til at forudsige sentimentetiketterne for testsættet. Beregn nøjagtighedsscore ved hjælp af nøjagtighed_score() funktion fra scikit-learn.
y_pred = np.argmax (model.predict (x_test), akse=-1)
Print("Nøjagtighed:", nøjagtighedsscore (np.argmax (y_test, akse=-1), y_pred))
Nøjagtigheden af denne model er omkring 84%.
Gemmer modellen
Gem modellen ved hjælp af model.save() metode. Brug pickle til at serialisere og gemme tokenizer-objektet.
model.save('sentiment_analyse_model.h5')
med åben('tokenizer.pickle', 'wb') som håndtere:
pickle.dump (tokenizer, håndtag, protokol=pickle. HIGHEST_PROTOCOL)
Tokenizer-objektet vil tokenisere din egen inputtekst og forberede den til feeding til den trænede model.
Brug af modellen til at klassificere følelsen af din egen tekst
Når du har oprettet og gemt modellen, kan du bruge den til at klassificere følelsen af din egen tekst. Indlæs først den gemte model og tokenizer.
# Indlæs den gemte model og tokenizer
importere keras
model = keras.models.load_model('sentiment_analyse_model.h5')
med åben('tokenizer.pickle', 'rb') som håndtere:
tokenizer = pickle.load (håndtag)
Definer en funktion til at forudsige følelsen af inputtekst.
defforudsige_stemning(tekst):
# Tokenize og pad input teksten
text_sequence = tokenizer.texts_to_sequences([text])
text_sequence = pad_sequences (tekst_sekvens, maxlen=100)
# Lav en forudsigelse ved hjælp af den trænede model
predicted_rating = model.predict (text_sequence)[0]
hvis np.argmax (predicted_rating) == 0:
Vend tilbage'Negativ'
elif np.argmax (predicted_rating) == 1:
Vend tilbage'Neutral'
andet:
Vend tilbage'Positiv'
Forudsig endelig din egen tekst.
tekst_input = "Jeg elskede absolut mit ophold på det hotel. Personalet var fantastisk, og værelset var fantastisk!"
forudsagt_følelse = forudsagt_følelse (tekst_input)
print (forudsagt_stemning)
Den forudsagte følelse af anmeldelsen ovenfor er som følger:
Modellen er i stand til at klassificere følelserne fra alle tre anmeldelser korrekt.
Forudsigelse af følelser ved hjælp af præ-trænede modeller
Nogle gange i maskinlæring kan du have udfordringen med at finde det rigtige datasæt. Du mangler muligvis også ressourcerne til at oprette dit eget datasæt. Det er her, fortrænede modeller kommer ind. Du skal vide, hvordan du bruger deres API og lade dem klare resten.