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
. 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.