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

1. Başlamadan önce

Bu codelab'de, spam yorumlara dayalı bir veri kümesi kullanarak model oluşturmak için TensorFlow ve TensorFlow Lite Model Maker ile oluşturulan kodu inceleyeceksiniz. Orijinal veriler Kaggle'da mevcuttur. Tek bir CSV'de toplanmış ve bozuk metin, biçimlendirme, tekrarlanan kelimeler vb. kaldırılıp temizlenmiştir. Bu sayede metin yerine modele odaklanmak daha kolay olur.

İnceleyeceğiniz kod burada verilmiştir ancak Google Colab'de kodu takip etmeniz önemle tavsiye edilir.

Ön koşullar

  • Bu codelab, makine öğrenimi konusunda yeni olan deneyimli geliştiriciler için yazılmıştır.
  • Bu codelab, Mobil İçin Metin Sınıflandırmayı Kullanmaya Başlama rotasının bir parçasıdır. Önceki etkinlikleri henüz tamamlamadıysanız lütfen durup şimdi tamamlayın.

Neler öğreneceksiniz?

  • Google Colab'i kullanarak TensorFlow Lite Model Maker'ı yükleme
  • Verileri bulut sunucusundan cihazınıza indirme
  • Veri yükleyiciyi kullanma
  • Modeli oluşturma

İhtiyacınız olanlar

2. TensorFlow Lite Model Maker'ı yükleme

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

!pip install -q tflite-model-maker

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

3. Kodu içe aktarma

Bir sonraki hücrede, not defterindeki kodun kullanması gereken bir dizi içe aktarma işlemi vardır:

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'i çalıştırıp çalıştırmadığınızı da kontrol eder.

4. Verileri indirin

Ardından, verileri bulut sunucusundan cihazınıza indirip data_file öğesini yerel dosyayı gösterecek ş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 Oluşturucu, bu örnekteki gibi basit CSV dosyalarından modelleri eğitebilir. Yalnızca hangi sütunların metni, hangi sütunların etiketleri içerdiğini belirtmeniz gerekir. Bunu nasıl yapacağınızı daha sonraki bir codelab'de öğreneceksiniz.

5. Önceden öğrenilmiş yerleştirmeler

Genellikle Model Oluşturucu'yu 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.

Bu gibi dil modellerinde önceden öğrenilmiş yerleştirmeler kullanılır. Yerleştirme işlemindeki fikir, kelimelerin sayılara dönüştürülmesidir. Genel korpusunuzdaki her kelimeye bir sayı atanır. Yerleştirme, kelime için bir "yön" belirleyerek kelimenin duygu durumunu belirlemek için kullanılan bir vektördür. Örneğin, spam yorum mesajlarında sık kullanılan kelimelerin vektörleri benzer bir yöne, kullanılmayan kelimelerin vektörleri ise ters yöne doğru gider.

Önceden öğrenilmiş yerleştirmeleri kullanarak, büyük bir metin gövdesinden duyarlılık öğrenilmiş kelimelerden oluşan bir korpus veya koleksiyonla başlayabilirsiniz. Bu sayede, sıfırdan başlamaya kıyasla çok daha hızlı bir şekilde çözüme ulaşabilirsiniz.

Model Maker, kullanabileceğiniz önceden öğrenilmiş çeşitli yerleştirmeler sunar ancak başlamak için en basit ve en hızlı olanı average_word_vec'dır.

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 belirteceksiniz.

"Ne kadar çok o kadar iyi" diye düşünebilirsiniz ancak genellikle her kelimenin kullanım sıklığına bağlı olarak doğru bir sayı vardır. Tüm derlemdeki her kelimeyi kullanırsanız model, yalnızca bir kez kullanılan kelimelerin yönünü öğrenmeye ve belirlemeye çalışabilir. Herhangi bir metin korpusunda birçok kelimenin yalnızca bir veya iki kez kullanıldığını görürsünüz. Bu kelimeler, genel duygu üzerinde ihmal edilebilir bir etkiye sahip olduklarından modelinizde kullanılmaları genellikle faydalı değildir. num_words parametresini kullanarak modelinizi istediğiniz kelime sayısına göre ayarlayabilirsiniz.

Buradaki daha küçük bir sayı, daha küçük ve daha hızlı bir model oluşturabilir ancak daha az kelime tanıdığı için daha az doğru olabilir. Buradaki daha büyük bir sayı, daha büyük ve daha yavaş bir modele yol açar. En uygun noktayı bulmak çok önemlidir.

wordvec_dim parametresi

wordved_dim parametresi, her kelime için vektörde kullanmak istediğiniz boyut sayısıdır. Araştırmalardan elde edilen genel kural, kelime sayısının dördüncü kökünün alınmasıdır. Ö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

Modeller, giriş değerleri konusunda genellikle çok katıdır. Bir dil modeli için bu, dil modelinin belirli ve statik bir uzunluktaki cümleleri sınıflandırabileceği anlamına gelir. Bu, seq_len parametresi veya sıra uzunluğu ile belirlenir.

Kelimeleri sayılara (veya jetonlara) dönüştürdüğünüzde cümle, bu jetonların bir dizisi haline gelir. Bu nedenle modeliniz (bu örnekte) 20 jeton içeren cümleleri sınıflandıracak ve tanıyacak şekilde eğitilir. Cümle bundan daha uzunsa kısaltılır. Daha kısaysa doldurulur. Bunun için kullanılacak korpusta özel bir <PAD> jetonu görürsünüz.

6. Veri yükleyici kullanma

Daha önce CSV dosyasını indirmiş olmanız gerekir. Şimdi bu verileri, 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ın dosyanın ilk satırında metinle açıklandığını görürsünüz. Genellikle her giriş bir sütun olarak kabul edilir.

İlk sütunun açıklayıcısı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'dır ve her satırdaki ikinci girişin, metnin yorum spam'i olarak kabul edilip edilmediğini belirtmek için True veya False, olduğunu görürsünüz. Diğer özellikler, daha önce oluşturduğunuz model_spec ile birlikte bir sınırlayıcı karakter ayarlar. Bu durumda dosya virgülle ayrılmış olduğundan sınırlayıcı karakter virgüldür. 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ı ayırmanız gerekir. Verilerin% 90'ını eğitim, %10'unu ise test/değerlendirme için kullanacak şekilde bölün. Bu işlemi yaparken test verilerinin rastgele seçildiğinden ve veri kümesinin "en alttaki" %10'luk kısmı olmadığından emin olmak istiyoruz. Bu nedenle, verileri rastgele hale getirmek için yüklerken shuffle=True kullanın.

7. Modeli oluşturma

Bir sonraki hücre yalnızca modeli oluşturmak için kullanılır ve tek bir kod satırından oluşur:

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

Bu işlemle Model Oluşturucu'da bir metin sınıflandırıcı modeli oluşturulur. Ayrıca, kullanmak istediğiniz eğitim verilerini (4. adımda ayarlandığı gibi), model spesifikasyonunu (4. adımda ayarlandığı gibi) ve dönem sayısını (bu örnekte 50) belirtirsiniz.

Makine öğreniminin temel ilkesi, bunun bir tür kalıp eşleştirme olduğudur. İlk olarak, kelimeler için önceden eğitilmiş ağırlıkları yükler ve bunları, gruplandırıldığında hangilerinin spam'i, hangilerinin ise spam olmayanları gösterdiğine dair bir tahminle birlikte gruplandırmaya çalışır. Model henüz yeni başladığı için ilk denemede yanıtların yaklaşık %50'si doğru olabilir.

b94b00f0b155db3d.png

Ardından, bunun sonuçlarını ölçer, tahminini değiştirmek için optimizasyon kodu çalıştırır ve tekrar dener. Bu bir dönemdir. Bu nedenle, epochs=50 belirtildiğinde bu "döngü" 50 kez tekrarlanır.

85f1d21c0b64d654.png

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

Sağ tarafta doğrulama doğruluğu rakamlarını görürsünüz. Bunlar, modelin daha önce "görmediği" verileri nasıl sınıflandırdığını gösterdiğinden genellikle eğitim doğruluğundan biraz daha düşüktür. Daha önce 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 ve bu modelin mobil uygulamada kullanılabilmesi için TFLITE biçimine dönüştürülmesi gerekir. Model Maker, bu karmaşıklığı sizin için yönetir.

Bir dizin belirterek modeli dışa aktarmanız yeterlidir:

model.export(export_dir='/mm_spam')

Bu dizinde model.tflite dosyası bulunur. indirin Bu kimliği bir sonraki codelab'de Android uygulamanıza eklemeniz gerekecek.

iOS ile İlgili Dikkat Edilmesi Gerekenler

Yeni dışa aktardığınız .tflite modeli, Android için uygundur. Bunun nedeni, modelle ilgili meta verilerin modelin içine yerleştirilmiş olması ve Android Studio'nun bu meta verileri okuyabilmesidir.

Bu meta veriler, kelimeleri modelin tanıdığı şekilde temsil eden bir jeton sözlüğü içerdiğinden çok önemlidir. Kelimelerin jetonlara dönüştürüldüğünü ve bu jetonlara daha sonra duygularıyla ilgili vektörler verildiğini öğrenmiştik. Mobil uygulamanızın bu jetonları bilmesi gerekir. Örneğin, "köpek" 42 olarak belirteçleştirildiyse ve kullanıcılarınız bir cümleye "köpek" yazarsa modelin bunu anlaması için uygulamanızın "köpek" kelimesini 42'ye dönüştürmesi gerekir. Android geliştiricisi olarak, bu kitaplığı kullanmayı kolaylaştıran bir "TensorFlow Lite Task Library"ye sahip olursunuz. Ancak iOS'te kelime dağarcığını işlemeniz gerektiğinden bu kitaplığın kullanılabilir olması gerekir. Model Maker, export_format parametresini belirterek bunu sizin için dışa aktarabilir. Bu nedenle, modeliniz için etiketleri ve kelime dağarcığını almak üzere şunu kullanabilirsiniz:

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

9. Tebrikler

Bu codelab'de, modelinizi oluşturup dışa aktarmak için Python kodunu kullandınız. İşlemin sonunda .tflite dosyanız olur.

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