Yorum spam'i makine öğrenimi modeli oluşturma

1. Başlamadan önce

Bu codelab'de, yorum spam'ine dayalı bir veri kümesi kullanarak model oluşturmak için TensorFlow ve TensorFlow Lite Model Maker kullanılarak oluşturulan kodu inceleyeceksiniz. Orijinal veriler kaggle'da kullanılabilir. Tek bir CSV dosyası halinde toplanmış ve bozuk metin, işaretleme, tekrarlanan kelimeler ve diğer öğeler kaldırılarak temizlenmiştir. Bu sayede metin yerine modele odaklanmak kolaylaşır.

İnceleyeceğiniz kod burada sağlanmıştır ancak Google Colab'de kodla birlikte takip etmeniz önemle tavsiye edilir.

Ön koşullar

  • Bu codelab, makine öğrenimini kullanmaya yeni başlayan deneyimli geliştiriciler için yazılmıştır.
  • Bu codelab, Mobil Cihazlar için Metin Sınıflandırmayı Kullanmaya Başlama yolunun bir parçasıdır. Önceki etkinlikleri henüz tamamlamadıysanız lütfen durun ve bu işlemi şimdi tamamlayın.

Neler öğreneceksiniz?

  • Google Colab'i kullanarak TensorFlow Lite Model Maker'ı yükleme
  • Bulut sunucusundan cihazınıza veri indirme
  • Veri yükleyici nasıl kullanılır?
  • Model nasıl oluşturulur?

Gerekenler

2. TensorFlow Lite Model Maker'ı yükleme

Ortak laboratuvarı açın. Not defterindeki ilk hücre sizin için TensorFLow Lite Model Maker'ı yükler:

!pip install -q tflite-model-maker

İşlem tamamlandığında, sonraki hücreye geçin.

3. Kodu içe aktarma

Sonraki hücrede, not defterindeki kodun kullanması gereken bir dizi içe aktarma işlemi bulunur:

import numpy as np
import os
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.text_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

Bu işlem, Model Maker'ı kullanmak için gerekli olan TensorFlow 2.x programını çalıştırıp çalıştırmadığınızı da kontrol eder.

4. Verileri indirin

Şimdi, verileri Bulut sunucusundan cihazınıza indirecek ve data_file öğesini, yerel dosyayı işaret edecek şekilde ayarlayacaksınız:

data_file = tf.keras.utils.get_file(fname='comment-spam.csv', 
  origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/lmblog_comments.csv', 
  extract=False)

Model Maker, bunun gibi basit CSV dosyalarından modelleri eğitebilir. Metnin hangi sütunlarda, hangilerinin ise etiketlerde bulunduğunu belirtmeniz yeterlidir. Bunun nasıl yapılacağını daha sonra codelab'de öğreneceksiniz.

5. Önceden öğrenilmiş yerleştirmeler

Genel olarak, Model Maker'ı kullanırken modelleri sıfırdan oluşturmazsınız. İhtiyaçlarınıza göre özelleştirdiğiniz mevcut modelleri kullanırsınız.

Bunun gibi dil modelleri için buna önceden öğrenilmiş yerleştirmeler dahildir. Yerleştirme işleminin arkasındaki fikir, kelimelerin sayılara dönüştürülmesidir. Bu kelimeler, genel koleksiyonunuzdaki her kelimeye bir sayı verilir. Yerleştirme, bir "yön" belirleyerek söz konusu kelimenin yaklaşımını belirlemek için kullanılan bir vektördür anlamına gelir. Örneğin, yorum spam mesajlarında sık kullanılan kelimelerin vektörleri benzer bir yönü gösterirken, kullanılmayan kelimeler ise tersi işaret eder.

Önceden öğrenilmiş yerleştirmeleri kullanarak, çok sayıda metinden öğrenilmiş duyguları zaten öğrenmiş olduğunuz bir kelime topluluğu veya koleksiyonu ile başlayabilirsiniz. Bu sayede, sıfırdan başlamaktan çok daha hızlı bir çözüme ulaşabilirsiniz.

Model Maker, kullanabileceğiniz önceden öğrenilmiş çeşitli yerleştirmeler sunar. Ancak, en basit ve en hızlı şekilde average_word_vec kullanmaya başlayabilirsiniz.

Kod:

spec = model_spec.get('average_word_vec')
spec.num_words = 2000
spec.seq_len = 20
spec.wordvec_dim = 7

num_words parametresi

Ayrıca, modelinizin kullanmasını istediğiniz kelime sayısını da belirtirsiniz.

"Ne kadar çok o kadar iyi" diye düşünebilirsiniz. ancak genellikle her kelimenin kullanım sıklığına göre doğru bir sayı vardır. Tüm kitaplıktaki her kelimeyi kullanırsanız model, öğrenmeye ve yalnızca bir kez kullanılan kelimelerin yönünü belirlemeye çalışıyor olabilir. Herhangi bir metin topluluğunda birçok kelimenin yalnızca bir veya iki kez kullanıldığını görebilirsiniz. Genel duygular üzerinde çok az etkisi olduğundan, bu kelimelerin modelinizde kullanılmasına genellikle değmez. num_words parametresini kullanarak, modelinizi istediğiniz kelime sayısına göre ayarlayabilirsiniz.

Burada daha küçük bir sayı, daha küçük ve daha hızlı bir model sunabilir ancak daha az kelime algıladığı için doğruluğu daha düşük olabilir. Burada büyük bir sayı, daha büyük ve daha yavaş bir modele sahip olur. En iyi noktaya ulaşmak çok önemlidir.

wordvec_dim parametresi

wordved_dim parametresi, her kelimenin vektörü için kullanmak istediğiniz boyut sayısıdır. Araştırmalara göre genel kural, kelime sayısının dördüncü kökü. Örneğin, 2.000 kelime kullanıyorsanız, iyi bir başlangıç noktası 7'dir. Kullandığınız kelime sayısını değiştirirseniz bunu da değiştirebilirsiniz.

seq_len parametresi

Giriş değerleri söz konusu olduğunda modeller genellikle çok katıdır. Bir dil modeli için bu, dil modelinin belirli bir statik uzunluktaki cümleleri sınıflandırabileceği anlamına gelir. Bu, seq_len parametresi veya dizi uzunluğu parametresiyle belirlenir.

Kelimeleri sayılara (veya simgesel sembollere) dönüştürdüğünüzde cümleler bu deyimlerden oluşan bir dizi haline gelir. Bu nedenle, modeliniz (bu örnekte) 20 jetonu olan cümleleri sınıflandırıp tanıyacak şekilde eğitilir. Cümle bundan uzunsa kısaltılır. Daha kısaysa dolgulu olarak gösterilir. Bunun için kullanılacak toplulukta özel bir <PAD> jetonu göreceksiniz.

6. Veri yükleyici kullanma

Daha önce CSV dosyasını indirmiştiniz. Şimdi, bunu modelin tanıyabileceği eğitim verilerine dönüştürmek için bir veri yükleyici kullanma zamanı:

data = DataLoader.from_csv(
    filename=data_file,
    text_column='commenttext',
    label_column='spam',
    model_spec=spec,
    delimiter=',',
    shuffle=True,
    is_training=True)

train_data, test_data = data.split(0.9)

CSV dosyasını bir düzenleyicide açarsanız her satırda yalnızca iki değer olduğunu ve bunlar, dosyanın ilk satırında metinle açıklandığını görürsünüz. Genellikle, daha sonra her giriş bir sütun olarak kabul edilir.

İlk sütun için açıklayıcının commenttext olduğunu ve her satırdaki ilk girişin yorum metni olduğunu görürsünüz. Benzer şekilde, ikinci sütunun tanımlayıcısı spam şeklindedir ve metnin yorum spam'i olarak değerlendirilip değerlendirilmediğini belirtmek için her satırdaki ikinci girişin True veya False, olduğunu görürsünüz. Diğer özellikler, daha önce oluşturduğunuz model_spec öğesini, bu örnekte dosya virgülle ayrılmış olarak virgül olan bir ayırıcı karakterle birlikte ayarlar. Bu verileri modeli eğitmek için kullanacağınızdan is_Training, True olarak ayarlanır.

Modeli test etmek için verilerin bir kısmını bekletmeniz gerekir. Verileri bölünerek bunların% 90'ı eğitim, kalan% 10'u da test/değerlendirme için kullanılacak. Bunu yaptığımız için, test verilerinin rastgele seçildiğinden ve "en alt" olmadığından emin olmak istiyoruz Veri kümesinin% 10'u, yani verileri rastgele hale getirmek için yüklerken shuffle=True kullanırsınız.

7. Modeli oluşturma

Bir sonraki hücre, modeli oluşturmaktır ve tek bir kod satırından ibarettir:

# Build the model
model = text_classifier.create(train_data, model_spec=spec, epochs=50, 
                               validation_data=test_data)

Bu, Model Maker ile bir metin sınıflandırıcı modeli oluşturur ve kullanmak istediğiniz eğitim verilerini (4. adımda ayarladığınız şekilde), model spesifikasyonunu (4. adımda ayarlanır) ve bir dönem sayısını (bu örnekte 50) belirtirsiniz.

Makine öğreniminin temel ilkesi, bir kalıp eşleştirme biçimi olmasıdır. Başlangıçta, kelimeler için önceden eğitilmiş ağırlıkları yükler ve hangilerinin birlikte gruplandırıldıklarında spam olduğunu ve hangilerinin olmadığını tahmin etmek için bunları gruplandırmaya çalışır. İlkinde, model daha başlangıç aşamasında olduğu için muhtemelen 50:50 civarındadır.

b94b00f0b155db3d.png

Araç daha sonra bunun sonuçlarını ölçer ve tahmininde ince ayar yapmak için optimizasyon kodunu çalıştırıp tekrar deneyin. Bu bir dönem. Dolayısıyla, epochs=50 olarak belirtildiğinde, bu "döngü"den geçer. 50 kez.

85f1d21c0b64d654.png

50. döneme ulaştığınızda model çok daha yüksek bir doğruluk düzeyi bildirir. Bu örnekte %99 gösterilir!

Sağ tarafta, doğrulama doğruluğu rakamlarını görürsünüz. Modelin daha önce "görmediği" verileri nasıl sınıflandırdığının bir göstergesi olduğundan bu değerler, genellikle eğitim doğruluğundan biraz daha düşüktür. Daha önce kenara ayırdığımız% 10'luk test verilerini kullanır.

5be7967ec70e4302.png

8. Modeli dışa aktarma

Eğitiminiz tamamlandıktan sonra modeli dışa aktarabilirsiniz.

TensorFlow, bir modeli kendi biçiminde eğitir. Bunun mobil uygulamada kullanılacak TFLITE biçimine dönüştürülmesi gerekir. Model Maker, bu karmaşıklığı sizin için halleder.

Bir dizin belirterek modeli dışa aktarın:

model.export(export_dir='/mm_spam')

Bu dizinde bir model.tflite dosyası görürsünüz. indirin Android Uygulamanıza ekleyeceğiniz bir sonraki codelab'de bu koda ihtiyacınız olacak.

iOS ile İlgili Dikkat Edilmesi Gereken Noktalar

Modelle ilgili meta veriler modelin içine gömülü olduğundan ve Android Studio bu meta verileri okuyabildiğinden, az önce dışa aktardığınız .tflite modeli Android'de sorunsuz bir şekilde çalışır.

Bu meta veriler, modelin tanıdığı kelimeleri temsil eden jetonlar sözlüğünü içerdiğinden çok önemlidir. Kelimelerin simge haline geldiğini ve bu simgelere duyguları için vektörler verildiğini daha önce öğrendiğinizi hatırlıyor musunuz? Mobil uygulamanızın bu jetonları bilmesi gerekir. Örneğin, "köpek" 42 olarak token atanmış ve kullanıcılarınız "köpek" cümleye dönüştürüyorsa uygulamanızın "köpek" kelimesini dönüştürmesi 42'ye yükseltin. Android geliştiricisi olarak bir "TensorFlow Lite Görev Kitaplığı"na sahip olursunuz özelliğini kullanmanızı kolaylaştırır, ancak iOS'te kelime dağarcığınızı işlemeniz, dolayısıyla bu özelliği kullanılabilir hale getirmeniz gerekir. Model Maker, export_format parametresini belirterek bunu sizin için dışa aktarabilir. Dolayısıyla, modeliniz için etiketleri ve sözcüğü almak üzere şunu kullanabilirsiniz:

model.export(export_dir='/mm_spam/', 
             export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])

9. Tebrikler

Bu codelab'de, modelinizi derleme ve dışa aktarma konusunda Python Code'u adım adım açıkladık. Dosyanın sonunda bir .tflite dosyası olur.

Bir sonraki codelab'de, spam yorumları sınıflandırmaya başlayabilmeniz için Android uygulamanızı bu modeli kullanacak şekilde nasıl düzenleyeceğinizi öğreneceksiniz.