A saját hangulatelemzési modell felépítése ijesztőnek tűnhet. Ez az útmutató végigvezeti az induláshoz szükséges lépéseken.

A hangulatelemzés egy természetes nyelvi feldolgozási (NLP) technika, amely azonosítja a szöveg mögötti attitűdöt. Véleménybányászatnak is nevezik. A hangulatelemzés célja annak meghatározása, hogy egy adott szöveg pozitív, negatív vagy semleges hangulatú-e. A vállalkozások széles körben használják, hogy automatikusan osztályozzák a véleményeket az ügyfelek véleményében. Nagy mennyiségű vélemény elemzése segít értékes betekintést nyerni az ügyfelek preferenciáiba.

Környezetének beállítása

Ismernie kell Python alapjai követni. Navigáljon ide Google Colab vagy nyissa meg a Jupyter Notebookot. Ezután hozzon létre egy új jegyzetfüzetet. Hajtsa végre a következő parancsot a szükséges könyvtárak telepítéséhez a környezetben.

A projekt teljes forráskódja itt érhető el GitHub adattár.

! pip install tensorflow scikit-learn pandas numpy pickle5

A NumPy-t és a pandas könyvtár az adatkészlet kezeléséhez

instagram viewer
. TensorFlow a gépi tanulási modell létrehozásához és betanításához. Scikit-learn az adatkészlet képzési és tesztelési készletekre való felosztásához. Végül a pickle5 segítségével sorba rendezheti és mentheti a tokenizáló objektumot.

A szükséges könyvtárak importálása

Importálja a szükséges könyvtárakat, amelyeket az adatok előfeldolgozásához és a modell létrehozásához fog használni.

import zsibbadt mint np
import pandák mint pd
import tenzoráramlás mint tf
tól től sklearn.model_selection import train_test_split
tól től sklearn.metrics import pontossági_pontszám
tól től tensorflow.keras.preprocessing.text import Tokenizátor
tól től tensorflow.keras.preprocessing.sequence import pad_sequences
tól től tensorflow.keras.models import Egymás utáni
tól től tensorflow.keras.layers import Beágyazás, Conv1D, GlobalMaxPooling1D, sűrű, lemorzsolódás
import savanyúság5 mint savanyú uborka

A kód későbbi részében a modulokból importált osztályokat fogja használni.

Adatkészlet betöltése

Itt a Trip Advisor Hotel Reviews adatkészletét fogja használni Kaggle a hangulatelemzési modell felépítéséhez.

df = pd.read_csv("/content/tripadvisor_hotel_reviews.csv")
nyomtatás (df.head())

Töltse be az adatkészletet, és nyomtassa ki az első öt sort. Az első öt sor kinyomtatása segít az adatkészlet oszlopneveinek ellenőrzésében. Ez kulcsfontosságú lesz az adatkészlet előfeldolgozása során.

A Trip Advisor Hotel Reviews adatkészletében van egy indexoszlop, egy áttekintés oszlop és egy értékelés oszlop.

Adatok előfeldolgozása

Válaszd ki a Felülvizsgálat és Értékelés oszlopokat az adatkészletből. Hozzon létre egy új oszlopot az Értékelés oszlop alapján, és nevezze el érzés. Ha az értékelés 3-nál nagyobb, címkézze a hangulatot a következővel: pozitív. Ha az értékelés 3-nál kisebb, jelölje meg negatív. Ha az értékelés pontosan 3, akkor jelölje meg semleges.

Csak az Áttekintés és a vélemény oszlopokat válassza ki az adatkészletből. Keverje véletlenszerűen a sorokat, és állítsa vissza az adatkeret indexét. A keverés és visszaállítás biztosítja az adatok véletlenszerű elosztását, ami szükséges a modell megfelelő betanításához és teszteléséhez.

df = df[['Felülvizsgálat', 'Értékelés']]
df['érzés'] = df['Értékelés'].alkalmaz(lambda x: 'pozitív'ha x > 3
más'negatív'ha x < 3
más'semleges')
df = df[['Felülvizsgálat', 'érzés']]
df = df.sample (frac=1).reset_index (drop=Igaz)

Konvertálja a Felülvizsgálat szöveget egész számok sorozatába a tokenizátor segítségével. Ez létrehoz egy szótárt az áttekintés szövegében található egyedi szavakból, és minden szót egyedi egész értékre képez le. Használja a pad_sequences A Keras funkciója biztosítja, hogy az összes áttekintési sorozat azonos hosszúságú legyen.

tokenizer = Tokenizer (szavak száma=5000, oov_token='')
tokenizer.fit_on_texts (df['Felülvizsgálat'])
szó_index = tokenizer.word_index
szekvencia = tokenizer.texts_to_sequences (df['Felülvizsgálat'])
padded_sequences = pad_sequences (szekvenciák, maxlen=100, csonkolása="bejegyzés")

Alakítsa át a hangulatcímkéket One-hot kódolásra.

sentiment_labels = pd.get_dummies (df['érzés']).értékek

A One-hot kódolás a kategorikus adatokat olyan formátumban jeleníti meg, amellyel a modellek könnyebben dolgozhatnak.

Az adatkészlet felosztása képzési és tesztelési készletekre

A scikit-learn segítségével véletlenszerűen oszthatja fel az adatkészletet képzési és tesztelési készletekre. A képzési készlet segítségével a modellt betaníthatja, hogy osztályozza a vélemények érzéseit. A tesztkészlet segítségével megtudhatja, hogy a modell mennyire képes osztályozni az új, nem látott értékeléseket.

x_train, x_test, y_train, y_test = train_test_split (padded_sequences, sentiment_labels, test_size=0.2)

Az adatkészlet felosztásának mérete 0,2. Ez azt jelenti, hogy az adatok 80%-a betanítja a modellt. A maradék 20% pedig a modell teljesítményét fogja tesztelni.

Neurális hálózat létrehozása

Hozzon létre egy neurális hálózat hat réteggel.

modell = Soros()
model.add (Beágyazás(5000, 100, input_length=100))
model.add (Conv1D(64, 5, aktiválás='relu'))
model.add (GlobalMaxPooling1D())
model.add (Dense(32, aktiválás='relu'))
model.add (Dropout(0.5))
model.add (Dense(3, aktiválás="softmax"))
model.compile (optimalizáló='Ádám', veszteség='categorical_crossentropy', metrics=['pontosság'])
model.summary()

A neurális hálózat első rétege egy beágyazó réteg. Ez a réteg megtanulja a szavak sűrű ábrázolását a szókincsben. A második réteg egy Conv1D réteg 64 szűrővel és 5-ös kernelmérettel. Ez a réteg konvolúciós műveleteket hajt végre a bemeneti szekvenciákon egy kis, 5-ös méretű csúszóablak segítségével.

A harmadik réteg egyetlen vektorra redukálja a jellemzőtérképek sorozatát. Minden egyes tereptérképen a maximális értéket veszi fel. A negyedik réteg lineáris transzformációt hajt végre a bemeneti vektoron. Az ötödik réteg a bemeneti egységek egy részét véletlenszerűen 0-ra állítja a képzés során. Ez segít megelőzni a túlillesztést. Az utolsó réteg a kimenetet valószínűségi eloszlássá alakítja a három lehetséges osztályban: pozitív, semleges és negatív.

A neurális hálózat képzése

Illessze a modellhez a képzési és tesztelési készleteket. Tanítsd a modellt tíz korszakon keresztül. Az epochák számát tetszés szerint módosíthatja.

model.fit (x_train, y_train, epochs=10, batch_size=32, validation_data=(x_test, y_test))

Minden korszak után kiértékeli a modell teljesítményét a tesztkészleten.

A betanított modell teljesítményének értékelése

Használja a model.predict() módszer a tesztkészlet hangulatcímkéinek előrejelzésére. Számítsa ki a pontossági pontszámot a accuracy_score() függvény a scikit-learnből.

y_pred = np.argmax (model.predict (x_teszt), tengely=-1)
nyomtatás("Pontosság:", accuracy_score (np.argmax (y_test, axis=-1), y_pred))

Ennek a modellnek a pontossága körülbelül 84%.

A modell mentése

Mentse el a modellt a model.save() módszer. Használja a pácot a tokenizátor objektum sorozatosításához és mentéséhez.

model.save('sentiment_analysis_model.h5')
val vel nyisd ki("tokenizer.pickle", "wb") mint fogantyú:
pác.dump (tokenizer, fogantyú, protokoll=pickle. HIGHEST_PROTOCOL)

A tokenizáló objektum tokenizálja a saját bemeneti szövegét, és előkészíti a betanított modellnek való betáplálásra.

A modell használata saját szövege hangulatának osztályozására

A modell létrehozása és mentése után a segítségével osztályozhatja saját szövege hangulatát. Először töltse be a mentett modellt és tokenizert.

# Töltse be a mentett modellt és tokenizert
import keras

model = keras.models.load_model('sentiment_analysis_model.h5')
val vel nyisd ki("tokenizer.pickle", "rb") mint fogantyú:
tokenizer = pác.load (fogantyú)

Határozzon meg egy függvényt a bevitt szöveg hangulatának előrejelzésére.

defpredi_sentiment(szöveg):
# Tokenizálja és töltse be a beviteli szöveget
text_sequence = tokenizer.texts_to_sequences([szöveg])
text_sequence = pad_sequences (text_sequence, maxlen=100)

# Készítsen előrejelzést a betanított modell segítségével
megjósolt_értékelés = model.predict (text_sequence)[0]
ha np.argmax (predicted_rating) == 0:
Visszatérés'Negatív'
elif np.argmax (predicted_rating) == 1:
Visszatérés'Semleges'
más:
Visszatérés'Pozitív'

Végül jósolja meg saját szövegét.

text_input = „Nagyon szerettem a szállodában való tartózkodásomat. Csodálatos volt a személyzet és a szoba is fantasztikus!"
megjósolt_hangulat = prediktált_sentiment (szövegbevitel)
nyomtatás (predicted_sentiment)

A fenti áttekintés várható hangulata a következő:

A modell képes mindhárom értékelés érzelmeit helyesen osztályozni.

Érzelmek előrejelzése előre betanított modellek segítségével

A gépi tanulás során néha kihívást jelenthet a megfelelő adatkészlet megtalálása. Az is előfordulhat, hogy hiányoznak az erőforrások a saját adatkészlet létrehozásához. Itt jönnek be az előre képzett modellek. Tudnia kell, hogyan kell használni az API-jukat, a többit pedig rájuk kell bíznia.