Kendi duyarlılık analizi modelinizi oluşturmak gözünüzü korkutabilir. Bu kılavuz, başlamanız için gerekli adımlarda size yol gösterir.

Duygu analizi, bir metnin arkasındaki tutumu tanımlayan bir doğal dil işleme (NLP) tekniğidir. Fikir madenciliği olarak da bilinir. Duyarlılık analizinin amacı, belirli bir metnin olumlu, olumsuz veya tarafsız duyguya sahip olup olmadığını belirlemektir. Müşteri incelemelerindeki duyarlılığı otomatik olarak sınıflandırmak için işletmeler tarafından yaygın olarak kullanılır. Büyük hacimli incelemeleri analiz etmek, müşterilerin tercihlerine ilişkin değerli içgörüler elde etmeye yardımcı olur.

Ortamınızı Kurma

aşina olmalısın Python'un temelleri takip etmek Şu yöne rotayı ayarla Google İşbirliği veya Jupyter Notebook'u açın. Ardından yeni bir not defteri oluşturun. Gerekli kitaplıkları ortamınıza yüklemek için aşağıdaki komutu yürütün.

Bu projenin tam kaynak kodu burada mevcuttur. GitHub deposu.

! pip kurulumu tensorflow scikit-learn pandas numpy pickle5

NumPy'yi kullanacaksınız ve

instagram viewer
veri kümesini işlemek için pandalar kitaplığı. Makine öğrenimi modelini oluşturmak ve eğitmek için TensorFlow. Veri setini eğitim ve test setlerine bölmek için Scikit-learn. Son olarak, tokenizer nesnesini seri hale getirmek ve kaydetmek için pickle5'i kullanacaksınız.

Gerekli Kitaplıkları İçe Aktarma

Verileri önceden işlemek ve modeli oluşturmak için kullanacağınız gerekli kitaplıkları içe aktarın.

içe aktarmak dizi gibi np
içe aktarmak pandalar gibi pd
içe aktarmak tensör akışı gibi tf
itibaren sklearn.model_selection içe aktarmak train_test_split
itibaren sklearn.metrics içe aktarmak doğruluk_skoru
itibaren tensorflow.keras.preprocessing.text içe aktarmak belirteç oluşturucu
itibaren tensorflow.keras.preprocessing.sequence içe aktarmak pad_sequences
itibaren tensorflow.keras.models içe aktarmak Ardışık
itibaren tensorflow.keras.layers içe aktarmak Gömme, Conv1D, GlobalMaxPooling1D, Yoğun, Bırakma
içe aktarmak turşu5 gibi turşu

Modüllerden içe aktardığınız sınıfları kodun ilerleyen kısımlarında kullanacaksınız.

Veri Kümesini Yükleme

Burada, Trip Advisor Otel Yorumları veri kümesini kullanacaksınız. Kaggle duyarlılık analizi modelini oluşturmak için.

df = pd.read_csv('/content/tripadvisor_hotel_reviews.csv')
yazdır (df.head())

Veri kümesini yükleyin ve ilk beş satırını yazdırın. İlk beş satırı yazdırmak, veri kümenizin sütun adlarını kontrol etmenize yardımcı olacaktır. Bu, veri kümesini önceden işlerken çok önemli olacaktır.

Trip Advisor Otel Yorumları veri kümesinde bir dizin sütunu, bir İnceleme sütunu ve bir Derecelendirme sütunu bulunur.

Veri Ön İşleme

seçin Gözden geçirmek Ve Değerlendirme veri kümesinden sütunlar. Derecelendirme sütununa göre yeni bir sütun oluşturun ve adlandırın duygusallık. Derecelendirme 3'ten büyükse, duyguyu şu şekilde etiketleyin: pozitif. Derecelendirme 3'ten azsa, şu şekilde etiketleyin: olumsuz. Derecelendirme tam olarak 3 ise, olarak etiketleyin doğal.

Veri kümesinden yalnızca İnceleme ve yaklaşım sütunlarını seçin. Satırları rastgele karıştırın ve veri çerçevesinin dizinini sıfırlayın. Karıştırma ve sıfırlama, modelin doğru eğitimi ve test edilmesi için gerekli olan verilerin rastgele dağıtılmasını sağlar.

df = df[['Gözden geçirmek', 'Değerlendirme']]
df['duygusallık'] = df['Değerlendirme'].uygula(lambda X: 'pozitif'eğer x > 3
başka'olumsuz'eğer x < 3
başka'doğal')
df = df[['Gözden geçirmek', 'duygusallık']]
df = df.örnek (frak=1).reset_index (bırak=Doğru)

Dönüştür Gözden geçirmek Belirteçleyiciyi kullanarak metni bir tamsayı dizisine dönüştürün. Bu, İnceleme metninde bulunan benzersiz kelimelerin bir sözlüğünü oluşturur ve her kelimeyi benzersiz bir tamsayı değerine eşler. Kullan pad_sequences tüm inceleme dizilerinin aynı uzunluğa sahip olmasını sağlamak için Keras'tan işlev.

belirteç = Belirteç oluşturucu (num_words=5000, oov_token='')
tokenizer.fit_on_texts (df['Gözden geçirmek'])
word_index = tokenizer.word_index
diziler = tokenizer.texts_to_sequences (df['Gözden geçirmek'])
padded_sequences = pad_sequences (diziler, maxlen=100, kesiliyor='postalamak')

Duyarlılık etiketlerini One-hot kodlamaya dönüştürün.

duygu_etiketleri = pd.get_dummies (df['duygusallık']).değerler

Tek etkin kodlama, kategorik verileri, modellerinizin birlikte çalışmasını kolaylaştıran bir biçimde temsil eder.

Veri Kümesini Eğitim ve Test Kümelerine Bölme

Veri kümesini eğitim ve test kümelerine rastgele bölmek için scikit-learn'ü kullanın. İncelemelerin duygularını sınıflandırmak üzere modeli eğitmek için eğitim setini kullanacaksınız. Ayrıca, modelin yeni görünmeyen incelemeleri sınıflandırmada ne kadar iyi olduğuna erişmek için test setini kullanacaksınız.

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

Veri kümesi bölme boyutu 0,2'dir. Bu, verilerin %80'inin modeli eğiteceği anlamına gelir. Kalan %20 ise modelin performansını test edecek.

Sinir Ağını Oluşturma

Oluşturmak sinir ağı altı katman ile.

model = Sıralı()
model.add (Gömme(5000, 100, girdi_uzunluğu=100))
model.add (Dönş1D(64, 5, aktivasyon='relu'))
model.add (GlobalMaxPooling1D())
model.add (Yoğun(32, aktivasyon='relu'))
model.add (Bırakma(0.5))
model.add (Yoğun(3, aktivasyon='softmax'))
model.compile (iyileştirici='adam', kayıp="categorical_crossentropy", metrikler=['kesinlik'])
model.özet()

Yapay sinir ağının ilk katmanı Gömme katmanıdır. Bu katman, kelime dağarcığındaki kelimelerin yoğun bir temsilini öğrenir. İkinci katman, 64 filtreye ve 5 çekirdek boyutuna sahip bir Conv1D katmanıdır. Bu katman, 5 boyutunda küçük bir kayan pencere kullanarak girdi dizileri üzerinde evrişim işlemleri gerçekleştirir.

Üçüncü katman, özellik haritalarının sırasını tek bir vektöre indirger. Her özellik haritası üzerinde maksimum değeri alır. Dördüncü katman, giriş vektörü üzerinde doğrusal bir dönüşüm gerçekleştirir. Beşinci katman, eğitim sırasında girdi birimlerinin bir kısmını rasgele 0'a ayarlar. Bu, fazla takmayı önlemeye yardımcı olur. Son katman, çıktıyı üç olası sınıf üzerinden bir olasılık dağılımına dönüştürür: pozitif, nötr ve negatif.

Yapay Sinir Ağını Eğitmek

Eğitim ve test setlerini modele uydurun. Modeli on çağ için eğitin. Dönem sayısını beğeninize göre değiştirebilirsiniz.

model.fit (x_train, y_train, çağlar=10, parti_boyutu=32, validation_data=(x_testi, y_testi))

Her dönemden sonra modelin test setindeki performansı değerlendirilir.

Eğitilen Modelin Performansını Değerlendirme

Kullan model.predict() test kümesi için duyarlılık etiketlerini tahmin etme yöntemi. kullanarak doğruluk puanını hesaplayın. doğruluk_skor() scikit-learn'den işlev.

y_pred = np.argmax (model.predict (x_test), eksen=-1)
Yazdır("Kesinlik:", doğruluk_puanı (np.argmax (y_test, eksen=-1), y_pred))

Bu modelin doğruluğu yaklaşık %84'tür.

Modeli Kaydetme

kullanarak modeli kaydedin. model.save() yöntem. Tokenizer nesnesini seri hale getirmek ve kaydetmek için turşu kullanın.

model.kaydet("duyarlılık_analiz_modeli.h5")
ile açık('belirteçleyici.turşu', 'wb') gibi halletmek:
turşu.dump (belirteç oluşturucu, tanıtıcı, protokol=turşu. EN YÜKSEK_PROTOKOL)

Tokenizer nesnesi, kendi giriş metninizi tokenize edecek ve onu eğitimli modele beslemek üzere hazırlayacaktır.

Kendi Metninizin Duygusunu Sınıflandırmak İçin Modeli Kullanma

Modeli oluşturup kaydettikten sonra, kendi metninizin duyarlılığını sınıflandırmak için kullanabilirsiniz. İlk olarak, kaydedilen modeli ve belirteç oluşturucuyu yükleyin.

# Kayıtlı modeli ve belirteç oluşturucuyu yükleyin
içe aktarmak keralar

model = keras.models.load_model("duyarlılık_analiz_modeli.h5")
ile açık('belirteçleyici.turşu', 'rb') gibi halletmek:
tokenizer = pickle.load (kolu)

Girilen metnin duyarlılığını tahmin etmek için bir işlev tanımlayın.

kesintahmin_duyarlılığı(metin):
# Giriş metnini simgeleştirin ve doldurun
text_sequence = tokenizer.texts_to_sequences([metin])
text_sequence = pad_sequences (text_sequence, maxlen=100)

# Eğitilmiş modeli kullanarak bir tahminde bulunun
tahmin edilen_değerlendirme = model.predict (metin_dizisi)[0]
eğer np.argmax (öngörülen_derecelendirme) == 0:
geri dönmek'Olumsuz'
elif np.argmax (öngörülen_derecelendirme) == 1:
geri dönmek'Doğal'
başka:
geri dönmek'Pozitif'

Son olarak, kendi metninizi tahmin edin.

metin_girdisi = "O otelde kaldığım süreyi kesinlikle çok sevdim. Personel harikaydı ve oda harikaydı!"
tahmin_duyarlılığı = tahmin_duyarlılığı (metin_girişi)
yazdır (tahmin edilen_duyarlılık)

Yukarıdaki incelemenin tahmin edilen duyarlılığı aşağıdaki gibidir:

Model, üç incelemenin de duygularını doğru bir şekilde sınıflandırabilir.

Önceden Eğitilmiş Modelleri Kullanarak Duyguları Tahmin Etme

Bazen makine öğreniminde doğru veri kümesini bulmakta zorluk yaşayabilirsiniz. Ayrıca kendi veri kümenizi oluşturacak kaynaklara sahip olmayabilirsiniz. Önceden eğitilmiş modellerin devreye girdiği yer burasıdır. API'lerini nasıl kullanacağınızı bilmeli ve gerisini onlara bırakmalısınız.