Oman tunneanalyysimallin rakentaminen saattaa tuntua pelottavalta. Tämä opas opastaa sinut alkuun pääsemiseksi.

Tunneanalyysi on luonnollisen kielen käsittelytekniikka (NLP), joka tunnistaa tekstin taustalla olevan asenteen. Se tunnetaan myös mielipiteiden louhinnana. Tunneanalyysin tavoitteena on tunnistaa, onko tietyllä tekstillä positiivista, negatiivista vai neutraalia tunnetta. Yritykset käyttävät sitä laajalti luokittelemaan automaattisesti mielipiteitä asiakasarvosteluissa. Suurten arvostelumäärien analysointi auttaa saamaan arvokasta tietoa asiakkaiden mieltymyksistä.

Ympäristösi luominen

Sinun täytyy olla perehtynyt Pythonin perusteet seurata läpi. Navigoida johonkin Google Colab tai avaa Jupyter Notebook. Luo sitten uusi muistikirja. Suorita seuraava komento asentaaksesi tarvittavat kirjastot ympäristöösi.

Tämän projektin koko lähdekoodi on saatavilla tästä GitHub-arkisto.

! pip asentaa tensorflow scikit-learn pandat numpy pickle5

Käytät NumPy- ja pandas-kirjasto tietojoukon käsittelyä varten

instagram viewer
. TensorFlow koneoppimismallin luomiseen ja kouluttamiseen. Scikit-learn tietojoukon jakamiseen koulutus- ja testaussarjoiksi. Lopuksi käytät pickle5:tä tokenizer-objektin sarjoittamiseen ja tallentamiseen.

Vaadittujen kirjastojen tuonti

Tuo tarvittavat kirjastot, joita käytät tietojen esikäsittelyyn ja mallin luomiseen.

tuonti nuhjuinen kuten np
tuonti pandat kuten pd
tuonti tensorflow kuten tf
alkaen sklearn.model_selection tuonti train_test_split
alkaen sklearn.metrics tuonti tarkkuus_pisteet
alkaen tensorflow.keras.preprocessing.text tuonti Tokenizer
alkaen tensorflow.keras.preprocessing.sequence tuonti pad_sekvenssit
alkaen tensorflow.keras.models tuonti Peräkkäinen
alkaen tensorflow.keras.layers tuonti Upottaminen, Conv1D, GlobalMaxPooling1D, Tiheä, Dropout
tuonti suolakurkku 5 kuten suolakurkku

Käytät myöhemmin koodissa moduuleista tuomiasi luokkia.

Ladataan tietojoukkoa

Tässä käytät Trip Advisor Hotel Reviews -tietojoukkoa Kaggle rakentaa tunteen analysointimalli.

df = pd.read_csv('/content/tripadvisor_hotel_reviews.csv')
tulosta (df.head())

Lataa tietojoukko ja tulosta sen viisi ensimmäistä riviä. Kun tulostat viisi ensimmäistä riviä, voit tarkistaa tietojoukon sarakkeiden nimet. Tämä on ratkaisevan tärkeää tietojoukon esikäsittelyssä.

Trip Advisor Hotel Reviews -tietojoukossa on indeksisarake, arvostelusarake ja arviosarake.

Tietojen esikäsittely

Valitse Arvostelu ja Luokitus sarakkeita tietojoukosta. Luo uusi sarake Arviointi-sarakkeen perusteella ja anna sille nimi tunne. Jos arvosana on suurempi kuin 3, merkitse mielipide nimellä positiivinen. Jos luokitus on alle 3, merkitse se nimellä negatiivinen. Jos luokitus on täsmälleen 3, merkitse se nimellä neutraali.

Valitse tietojoukosta vain arvostelu- ja mielipide-sarakkeet. Sekoita rivit satunnaisesti ja nollaa tietokehyksen indeksi. Sekoitus ja nollaus varmistavat, että tiedot jakautuvat satunnaisesti, mikä on välttämätöntä mallin asianmukaisen koulutuksen ja testauksen kannalta.

df = df[['Arvostelu', "Arviointi"]]
df['tuntemus'] = df["Arviointi"].Käytä(lambda x: 'positiivinen'jos x > 3
muu'negatiivinen'jos x < 3
muu'neutraali')
df = df[['Arvostelu', 'tuntemus']]
df = df.sample (frac=1).reset_index (drop=Totta)

Muunna Arvostelu tekstiä kokonaislukujen sekvenssiksi tokenisaattorin avulla. Tämä luo sanakirjan tarkastelutekstissä olevista ainutlaatuisista sanoista ja kartoittaa jokaisen sanan yksilölliseen kokonaislukuarvoon. Käytä pad_sekvenssit Keras-toiminto varmistaa, että kaikki tarkistusjaksot ovat saman pituisia.

tokenizer = Tokenizer (sanojen määrä=5000, oov_tunnus='')
tokenizer.fit_on_texts (df['Arvostelu'])
sana_indeksi = tokenizer.word_index
sekvenssit = tokenizer.texts_to_sequences (df['Arvostelu'])
padded_sequences = pad_sequences (sekvenssit, maxlen=100, katkaisu ='lähettää')

Muunna mielipidetunnisteet One-hot-koodauksiksi.

sentiment_labels = pd.get_dummies (df['tuntemus']).

One-hot-koodaus edustaa kategorista dataa muodossa, jota malliesi on helpompi käsitellä.

Tietojoukon jakaminen koulutus- ja testaussarjoiksi

Käytä scikit-learnia jakaaksesi tietojoukon satunnaisesti harjoitus- ja testaussarjoiksi. Käytät koulutussarjaa mallin kouluttamiseen arvioiden tunteiden luokitteluun. Ja käytät testisarjaa selvittääksesi, kuinka hyvä malli luokittelee uusia näkemättömiä arvosteluja.

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

Tietojoukon jaon koko on 0,2. Tämä tarkoittaa, että 80 % tiedoista kouluttaa mallia. Ja loput 20 % testaavat mallin suorituskykyä.

Neuraaliverkon luominen

Luo hermoverkko kuudella kerroksella.

malli = peräkkäinen()
model.add (Upotus(5000, 100, input_length=100))
model.add (Conv1D(64, 5, aktivointi ='relu'))
model.add (GlobalMaxPooling1D())
model.add (Tiheä(32, aktivointi ='relu'))
model.add (Dropout(0.5))
model.add (Tiheä(3, aktivointi ="softmax"))
model.compile (optimizer='adam', menetys ='categorical_crossentropy', metrics=['tarkkuus'])
malli.summary()

Hermoverkon ensimmäinen kerros on upotuskerros. Tämä kerros oppii sanaston sanojen tiheän esityksen. Toinen kerros on Conv1D-kerros, jossa on 64 suodatinta ja ytimen koko 5. Tämä kerros suorittaa konvoluutiooperaatioita syöttösekvensseille käyttämällä pientä liukuvaa ikkunaa, jonka koko on 5.

Kolmas kerros vähentää piirrekarttojen sekvenssin yhdeksi vektoriksi. Se ottaa suurimman arvon kunkin karttakohteen osalta. Neljäs kerros suorittaa lineaarisen muunnoksen tulovektorille. Viides kerros asettaa satunnaisesti osan syöttöyksiköistä nollaan harjoituksen aikana. Tämä auttaa estämään liiallista sovittamista. Viimeinen kerros muuntaa lähdön todennäköisyysjakaumaksi kolmeen mahdolliseen luokkaan: positiivinen, neutraali ja negatiivinen.

Neuraaliverkon koulutus

Sovita koulutus- ja testisetit malliin. Harjoittele mallia kymmenen aikakauden ajan. Voit muuttaa aikakausien määrää mielesi mukaan.

model.fit (x_train, y_train, epochs=10, erän_koko=32, validointitiedot=(x_testi, y_testi))

Jokaisen aikakauden jälkeen mallin suorituskyky testaussarjassa arvioidaan.

Koulutetun mallin suorituskyvyn arviointi

Käytä model.predict() menetelmä testijoukon tunnetunnisteiden ennustamiseen. Laske tarkkuuspisteet käyttämällä accuracy_score() toiminto scikit-learnistä.

y_pred = np.argmax (model.predict (x_test), akseli=-1)
Tulosta("Tarkkuus:", accuracy_score (np.argmax (y_test, axis=-1), y_pred))

Tämän mallin tarkkuus on noin 84%.

Mallin tallentaminen

Tallenna malli käyttämällä model.save() menetelmä. Käytä suolakurkkua tokenizer-objektin sarjoittamiseen ja tallentamiseen.

model.save('sentiment_analysis_model.h5')
kanssa avata("tokenizer.pickle", 'wb') kuten kahva:
pickle.dump (tokenizer, kahva, protokolla = suolakurkku. HIGHEST_PROTOCOL)

Tokenizer-objekti tokenisoi oman syötetyn tekstisi ja valmistelee sen syötettäväksi koulutetulle mallille.

Mallin käyttäminen oman tekstisi tunteiden luokittelemiseen

Mallin luomisen ja tallentamisen jälkeen voit käyttää sitä oman tekstisi tunnelman luokitteluun. Lataa ensin tallennettu malli ja tokenizer.

# Lataa tallennettu malli ja tokenizer
tuonti keras

model = keras.models.load_model('sentiment_analysis_model.h5')
kanssa avata("tokenizer.pickle", "rb") kuten kahva:
tokenizer = suolakurkku.kuorma (kahva)

Määritä toiminto, joka ennustaa syötetyn tekstin tunteen.

defennustaa_tunnetta(teksti):
# Tokenoi ja täytä syöttöteksti
text_sequence = tokenizer.texts_to_sequences([teksti])
text_sequence = pad_sequences (text_sequence, maxlen=100)

# Tee ennuste koulutetun mallin avulla
ennustettu_luokitus = malli.ennustus (tekstisekvenssi)[0]
jos np.argmax (ennustettu_luokitus) == 0:
palata"Negatiivinen"
elif np.argmax (ennustettu_luokitus) == 1:
palata'Neutraali'
muu:
palata"positiivinen"

Lopuksi ennusta oma tekstisi.

tekstinsyöttö = "Pidin todella vierailustani tässä hotellissa. Henkilökunta oli mahtavaa ja huone upea!"
ennustettu_sentimentti = ennustaa_tunne (tekstin_syöttö)
tulosta (ennustettu_tunne)

Yllä olevan katsauksen ennustettu tunnelma on seuraava:

Malli osaa luokitella kaikkien kolmen arvostelun tunteet oikein.

Tunteiden ennustaminen valmiiksi koulutetuilla malleilla

Joskus koneoppimisessa sinulla voi olla haaste löytää oikea tietojoukko. Sinulta saattaa myös puuttua resursseja oman tietojoukon luomiseen. Tässä esikoulutetut mallit tulevat mukaan. Sinun täytyy osata käyttää heidän API: ta ja jättää heidän hoitaa loput.