BERT ile Daha İyi Duygu Analizi

Müşterilerinize cevap veren bir botunuz olduğunu ve biraz daha doğal, daha insan gibi görünmesini istediğinizi hayal edin.

Unsplash'ta Hybrid tarafından fotoğraf

Bunu başarmak için cevapları daha kişisel hale getirmelisin. Konuşmakta olduğunuz müşteriler hakkında daha fazla bilgi edinmenin bir yolu, cevaplarının kutupsallığını analiz etmektir. Buradaki kutupsallıkla cümlenin (ya da cümle grubunun) olumlu ya da olumsuz bir ifade olarak algılanma niyetiyle yazılmış olup olmadığını tespit etmek anlamına gelir. Bu, ikili bir sınıflandırma problemiyle karşı karşıya olduğumuz anlamına gelir. Bu NLP görevini çözmek için birçok yöntem vardır. Bazılarını test ettim ve diğerlerinden daha iyi performans gösterenleri BERT.

BERT Genel Bakış

BERT (Transformatörler İçin Çift Yönlü Kodlayıcı Gösterimleri), Google tarafından geliştirilen ve 2018 yılının sonlarında piyasaya sürülen “yeni bir eğitim öncesi dil temsilleri yöntemidir” (burada daha fazla bilgi bulabilirsiniz). Genel veri kümeleri hakkında önceden eğitilmiş olduğundan (Wikipedia ve BooksCorpus'tan), farklı NLP görevlerini çözmek için kullanılabilir. Bu, cümle düzeyinde sınıflandırma (burada yaptığımız gibi), soru cevaplama veya belirteç düzeyinde sınıflandırma (örneğin, konuşma etiketlemenin bir parçası) içerir ve BERT, bu görevlerin çoğunda en gelişmiş performansları elde edebilir.

BERT mimarisi diğer iki modern modelle karşılaştırıldığında (kaynak: Devlin ve ark.)

Uygulamada BERT, İngilizce'ye ve gereksinimlerinize uyacak şekilde ayarlayabileceğiniz 103 diğer dil için önceden eğitilmiş dil modelleri sunar. Burada, duyarlılık analizi yapmak için İngiliz modelini nasıl ayarlayacağınızı göreceğiz.

BERT ile İnce Ayar

BERT kısa süre önce Python'da, film incelemelerinde duyarlılık algılamasının nasıl yapıldığını göstermek için bir ders kitabı verdi. Öğretici not defteri iyi hazırlanmış ve net, bu yüzden ayrıntılı olarak kullanmayacağım - işte bunun üzerine sadece birkaç düşünce. İlk olarak, dizüstü bilgisayar, doğrudan Keras'tan indirilebilen IMDb veri kümesini kullanır. Bu veri seti, biri eğitim için diğeri test için olmak üzere iki eşit parçaya bölünmüş 50000 film incelemesi içeriyor. Her veri kümesi, 12500 olumlu yorum ve 12500 olumsuz yorum ile dengelenmiştir.

IMDb veri kümesinden yapılan inceleme örnekleri. Sıfıra kutupluluk, cümlenin olumsuz duyguları ifade ettiği, oysaki kişinin olumlu olduğu anlamına gelir.

İnce ayar yapmak için önceden eğitilmiş modelin üstüne tek bir katman ve softmax uygularlar, ancak onu kişiselleştirebilirsiniz. Sonuçları eğitmek ve tahmin etmek için Tensorflow tahmin yapısını kullanır ve bunlar not defterinde kodlanan veya GitHub'da bulunan run_classifier.py dosyasından alınan run_config veya model_fn gibi bazı işlevler gerektirir, bu yüzden onlar için endişelenmenize gerek yoktur .

Model Değerlendirmesi

BERT'in performansının ne kadar iyi olduğunu görmek için, diğer iki modelle karşılaştırdım. Birincisi, TF-IDF vektörleşmesi olan lojistik bir regresyondur. İkincisi, Rezaeinia ve diğ. (Git). Word2Vec yerleştirmelerini, Bölümün Konuşma etiketlemesi ile birlikte kullanır ve her ikisinin birleşimini bir 1D evrişimli ağa aktarır.

Her ne kadar lojistik regresyon şaşırtıcı derecede iyi çalışsa da, sinir temelli modelden daha iyi performans gösteren BERT, daha iyi puanlar veriyor. Ayrıca, model daha büyük bir veri setinde eğitildiğinde, BERT sonuçları önemli ölçüde iyileşir. Bir dezavantajı, GPU'yla bile eğitilmesinin oldukça uzun sürmesidir. Lojistik regresyon, BERT'in 20 dakika sürmesi gerektiğinde (GPU ve 25000 eğitim incelemeleriyle), saniyeler içerisinde eğitimi tamamlar.

Farklı modellerin sonuçları

Docker ve Tensorflow ile Hizmet Etmek

Modelinizi saved_model.pb olarak kaydettikten sonra (örneğin export_savedmodel yöntemiyle elde edilir), modeli çalıştıracak ve tahminlerde bulunacak bir sunucu oluşturabilirsiniz. Öncelikle, tensorflow hizmetinden bir Docker kabı oluşturuyoruz (önce Docker'ı kurmanız gerekecek) ve modelimizi buna ekledik. Model_en, dışa aktardığınız modeli içeren 1 (tensorflow için gerekli) adlı bir klasör içeren bir klasör olmalıdır. Bu, aşağıdaki komut satırları ile gerçekleştirilir.

Daha sonra, giriş olarak cümle alacak, onu BERT giriş özelliklerine dönüştüren (tıpkı öğretici not defterinde olduğu gibi) basit bir istemci yazıyoruz ve öngörüde bulunacak olan çalışan Docker konteynerini çağırıyoruz. Flask'ı kullanarak istemciyi basit bir API'ye dönüştürebilirsiniz. Aşağıdaki python kodu bu farklı adımları göstermektedir.

Daha sonra, örneğin Postman kullanarak string istekleri göndererek tahminler yapabilirsiniz.

Voila Artık BERT ile hassas duyarlılık analizi yapmaya ve gerçek dünyadaki bir uygulamada kullanmaya hazırsınız.