Zephyrnet Logosu

Sinir Ağlarını Kullanarak Cümle Metnindeki Duyguları Sınıflandırma

Tarih:

Giriş

Sinir ağlarını kullanarak cümle metnindeki duyguları sınıflandırmak, duyguları bir metin parçasına atfetmeyi içerir. Sinir ağları veya sözlük tabanlı yöntemler gibi tekniklerle elde edilebilir. Sinir ağları, yeni metindeki duyguları tahmin etmek için etiketli metin verileri üzerinde bir model eğitmeyi içerir. Sözlüğe dayalı yöntemler, duyguyla ilişkili sözcük sözlüklerini kullanır. Zorlu olmasına rağmen, metin duygu sınıflandırması çok sayıda potansiyel uygulamaya sahiptir.

Sinir Ağlarını Kullanarak Cümle Metni

Metin duyguları sınıflandırması yapmanın temel amacı:

  • Yazarın duygusal durumunu anlamak. Bu, müşteri hizmetleri, sağlık hizmetleri ve eğitim gibi çeşitli bağlamlarda yardımcı olabilir.
  • Makine çevirisi sistemlerinin doğruluğunu artırmak. Makine çevirisi sistemleri genellikle duygu yüklü metinleri doğru şekilde çevirmek için mücadele edebilir.
  • Sosyal medya ve diğer çevrimiçi platformlar için yeni uygulamalar geliştirmek. Örneğin, metin duyguları sınıflandırması, kullanıcılara duygusal durumlarına göre içerik önermek için kullanılabilir.

Bu hedeflerden yola çıkarak, duygusal durumu metin üzerinde doğru bir şekilde sınıflandırabilen bir model geliştirmek için Neural Network algoritmasını kullanarak cümle metnindeki duyguları sınıflandıracağız. Bu makale, metin kullanıcı girdilerini belirli duygularla adım adım sınıflandırma konusunda size yol gösterecektir.

İçindekiler

1. Adım: Kitaplığı İçe Aktarın

import pandas as pd
import numpy as np
import keras
import tensorflow
from keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Embedding, Flatten, Dense

Metni bir belirteç dizisine dönüştürmek için 'Tokenizer'ı içe aktarıyoruz. 'pad_sequences', dizileri sabit bir uzunlukta doldurmak için kullanılır. Sinir ağları sabit boyutta girdiler beklediği için gereklidir. 'LabelEncoder', kategorik verileri sayısal verilere dönüştürmek için kullanılır. Sıralı, doğrusal bir katman yığını oluşturmak için kullanılır. Ardından, sözcükleri anlamlarını temsil edecek vektörlere dönüştürmek için 'Gömme' kullanılır. 'Düzleştir', çok boyutlu bir tensörü 1 boyutlu bir tensöre düzleştirmek için kullanılır. Son olarak, bir giriş tensörüne doğrusal olmayan bir dönüşüm uygulamak için 'Yoğun' kullanılır.

2. Adım: Verileri Okuyun

Praveen'in yüklediği veri kümesi Kaggle bu durumda çok uygun olan metindeki duyguları sınıflandırma görevi için uygundur. Ancak, daha fazla analizi kolaylaştırmak için GitHub'ıma koydum.

url = "https://raw.githubusercontent.com/ataislucky/Data-Science/main/dataset/emotion_train.txt"
data = pd.read_csv(url, sep=';')
data.columns = ["Text", "Emotions"]
print(data.head())
Verilere Genel Bakış | Sinir Ağlarını Kullanarak Cümle Metni
Verilere Genel Bakış

Kod, bir metin dosyasının bir URL'den nasıl okunacağını ve bir Pandas DataFrame'de nasıl saklanacağını açıklar. Metin dosyası, bir cümle listesi ve duygu etiketleri içerir. Yani kullandığımız veri seti sadece iki sütundan oluşuyor.

3. Adım: Veri Ön İşleme

Verilerin ön işlenmesi, verilerin sınıflandırılmasında önemli bir adımdır. metin duyguları. Bu, verilerin makine öğrenimi modelleri tarafından kullanılmak üzere temizlenmesi ve hazırlanması sürecini içerir. Metin duygu sınıflandırması için bazı yaygın veri ön işleme adımları, tokenleştirme, durdurma sözcüğü kaldırma, lemmatizasyon vb. içerir. Genel olarak, ilk işleme sürecini gerçekleştirmedeki zorluklar veri temizleme, veri seçimi ve veri formatlarıdır.

Belirteçleyici, bir metin dizesini tek tek sözcüklere veya belirteçlere bölen bir işlevdir. Bu nedenle, metin dizelerini işaretlemek için dize veri türü önce bir listeye değiştirilmelidir. Bunun nedeni, listenin bir nesneler koleksiyonu olması ve listedeki her nesnenin bir sözcük veya belirteç olabilmesidir.

texts = data["Text"].tolist()
labels = data["Emotions"].tolist()

Belirteç oluşturucu nesnesi daha sonra metin listesiyle hizalanır. Metin verilerinde benzersiz belirteçleri öğrenmeyi amaçlar. Belirteç oluşturucu nesneler, metin verilerini simgeleştirerek, metin verilerini makine öğrenimi modelleri tarafından kullanılabilen bir biçime dönüştürebilir.

# Tokenize the text data
tokenizer = Tokenizer()
tokenizer.fit_on_texts(texts)

Şimdi tek yapmamız gereken eşit uzunlukta dizileri katmanlamak ve onları sinir ağına beslemek. Bir dizi metni aynı uzunlukta olacak şekilde nasıl katmanlandırabileceğimiz aşağıda açıklanmıştır:

sequences = tokenizer.texts_to_sequences(texts)
max_length = max([len(seq) for seq in sequences])
padded_sequences = pad_sequences(sequences, maxlen=max_length)

Ardından, veri türünü dizeden sayısal verilere dönüştürmek için etiket kodlayıcı yöntemini kullanacağız.

# Encode the string labels to integers
label_encoder = LabelEncoder()
labels = label_encoder.fit_transform(labels)

Ardından, bir makine öğrenimi modelinde kategorik verileri temsil etmek için tek seferlik kodlama gerçekleştiririz. Bunun nedeni, sinir ağları gibi birçok makine öğrenimi modelinin girdi verilerinin sayısal bir biçimde olmasını beklemesidir. Hadi yapalım.

# One-hot encode the labels
one_hot_labels = keras.utils.to_categorical(labels)

4. Adım: Model Oluşturun ve Tahminler Yapın

Ön işlemeden geçtikten sonra, oluşturmaya başlayacağız makine öğrenimi modelleri.
Daha önce hiç görülmemiş veriler üzerinde model performansını değerlendirmeyi kolaylaştırmak için veri setini bir eğitim seti ve bir test setine bölmek gibi bir teknik uygulayabiliriz. Modelin eğitim veri kümesine fazla uymadığını doğrulama yeteneği, bunu çok önemli hale getirir.

# Split the data into training and testing sets
xtrain, xtest, ytrain, ytest = train_test_split(padded_sequences, one_hot_labels, test_size=0.2)

Şimdi modeli eğitmek ve duyguları sınıflandırmak için sinir ağı mimarisini tanımlayalım.

# Define the model
model = Sequential()
model.add(Embedding(input_dim=len(tokenizer.word_index) + 1, output_dim=128, input_length=max_length))
model.add(Flatten())
model.add(Dense(units=128, activation="relu"))
model.add(Dense(units=len(one_hot_labels[0]), activation="softmax")) model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(xtrain, ytrain, epochs=10, batch_size=32, validation_data=(xtest, ytest))
Model Eğitimi | Sinir Ağlarını Kullanarak Cümle Metni
Model Eğitimi

Model, her çağda modelin eğitim verileri üzerinde eğitilmesi ve ardından doğrulama verileri üzerinde değerlendirilmesinden oluşan on dönem için eğitilmiştir. Veri doğrulama, daha önce görülmemiş verilere karşı model performansını değerlendirmek için kullanılır. Bu, modelin eğitim verilerine fazla uymamasını sağladığı için önemlidir.

Model eğitildikten sonra, yeni veriler üzerinde tahmin yapmak için kullanılmaya hazırdır.

#input_text from user
input_text = input("Please input sentence here : ") # Preprocess the input text
input_sequence = tokenizer.texts_to_sequences([input_text])
padded_input_sequence = pad_sequences(input_sequence, maxlen=max_length)
prediction = model.predict(padded_input_sequence)
predicted_label = label_encoder.inverse_transform([np.argmax(prediction[0])])
print(predicted_label)
Model Testi
Model Testi

Ortaya çıkan çıktıda kullanıcı “Dün annesi öldüğü için bugün gelmedi” cümlesini giriyor. Model, cümlenin duygusunun üzüntü olduğunu tahmin ediyor.

Duygularıyla etiketlenmiş bir cümle veri kümesi üzerinde eğitilmiştir. Bu model, belirli kelimeleri ve cümleleri belirli duygularla ilişkilendirmeyi öğrenir. "Öldü" terimi sıklıkla üzüntü ile bağlantılıdır. Algoritma bir ifadede "öldü" kelimesini algıladığında, büyük olasılıkla üzüntüyü tahmin ediyor.

Sonuç

Bu makale, veri çerçevesi biçimini bir listeye dönüştürmeyi, simgeleştirme sürecini, kodlayıcı etiketlerini vb. içeren ön işleme ile başlar. Bu arada, bu gönderide aşağıdakileri tartıştık:

  • Duyguları sınıflandırmak sinir ağlarını kullanarak cümle metninde metinsel verilerde ifade edilen duyguları kategorize edebilir.
  • Özellik mühendisliği, metin duygularının sınıflandırılmasında önemli bir rol oynar çünkü metinden ilgili özellikleri çıkarmak model performansını artırabilir.
  • Metin ve karşılık gelen duygular arasındaki arketipleri ve ilişkileri öğrenmek için etiketli metin verileri üzerinde bir sinir ağı modeli eğitin.
  • Sinir ağları, metin verilerindeki karmaşık kalıpları ve ilişkileri yakalama avantajı sunar, böylece duyguların doğru bir şekilde sınıflandırılmasını sağlar.

Genel olarak, bu makale, metin duygularını Python kullanarak bir sinir ağıyla sınıflandırmak için kapsamlı bir kılavuz sağlar. Aşağıdaki yorumlar bölümünde değerli sorular sormaktan çekinmeyin. Tam kod okuyun.

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?