TensorFlow Lite Model Maker ile yorumlardaki spam'leri algılamaya yönelik bir model eğitme

1. Başlamadan önce

Bu codelab'de, yorumlardaki spam'e dayalı bir veri kümesiyle model oluşturmak için TensorFlow ve TensorFlow Lite Model Maker ile oluşturulan kodu inceliyorsunuz. Orijinal veriler Kaggle'da mevcuttur. Tek bir CSV dosyasında toplanır ve bozuk metin, işaretleme, tekrarlanan kelimeler vb. kaldırılıp temizlenir. Bu sayede metin yerine modele odaklanmak daha kolay olur.

İncelediğiniz kod burada sağlanır ancak Colaboratory'de kodu takip etmeniz önemle tavsiye edilir.

Ön koşullar

Neler öğreneceksiniz?

  • TensorFlow Lite Model Maker'ı Colab ile yükleme
  • Verileri Colab 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 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'i çalıştırıp çalıştırmadığınızı da kontrol eder.

4. Verileri indirin

Ardından, verileri Colab sunucusundan cihazınıza indirip data_file değişkenini 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ı bu codelab'in ilerleyen bölümlerinde öğ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 temel fikir, kelimelerin sayılara dönüştürülmesidir. Bu işlemde, genel korpusunuzdaki her kelimeye bir sayı atanır. Yerleştirme, kelime için bir "yön" belirleyerek kelimenin duygusunu belirlemek için kullanılan bir vektördür. Örneğin, yorum spam'i mesajlarında sık kullanılan kelimelerin vektörleri benzer bir yöne, kullanılmayan kelimelerin vektörleri ise ters yöne işaret eder.

Önceden öğrenilmiş gömmeleri kullandığınızda, büyük bir metin gövdesinden duygu öğrenilmiş kelimelerden oluşan bir gövde veya koleksiyonla başlayabilirsiniz. Bu sayede, sıfırdan başladığınızda ulaşacağınızdan çok daha hızlı bir şekilde çözüme ulaşabilirsiniz.

Model Oluşturucu, kullanabileceğiniz önceden öğrenilmiş çeşitli yerleştirmeler sunar ancak başlangıç için en basit ve en hızlı seçenek average_word_vec seçeneğidir.

İşte 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 belirtebilirsiniz.

"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 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 derlemesinde birçok kelime yalnızca bir veya iki kez kullanılır. Bu nedenle, genel duygu üzerinde ihmal edilebilir bir etkisi olduğundan bu kelimelerin modelinize dahil edilmesi faydalı değildir.

num_words parametresini kullanarak modelinizi istediğiniz kelime sayısına göre ayarlayabilirsiniz. Daha küçük bir sayı, daha küçük ve daha hızlı bir model sağlayabilir ancak daha az kelime tanıdığı için daha az doğru olabilir. Diğer yandan, daha büyük bir sayı daha büyük ve daha yavaş bir model sağlayabilir. En uygun noktayı bulmak ö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 7 iyi bir başlangıç noktasıdır. 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 bir statik uzunluktaki cümleleri sınıflandırabileceği anlamına gelir. Bu, seq_len parametresi veya dizi 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 durumda modeliniz, 20 jetonlu 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ılan gövdede özel bir <PAD> jetonu görebilirsiniz.

6. Veri yükleyici kullanma

Daha önce CSV dosyasını indirmiş olmanız gerekir. Şimdi de 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 tanımlayı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 değişkenini ve bir sınırlayıcı karakteri (bu durumda dosya virgülle ayrılmış olduğundan virgül) 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ı 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 kod, Model Maker ile bir metin sınıflandırıcı modeli oluşturur. Dördüncü adımda ayarladığınız gibi kullanmak istediğiniz eğitim verilerini, dördüncü adımda ayarladığınız gibi model spesifikasyonunu ve bu örnekte 50 olan bir dönem sayısını belirtirsiniz.

Makine öğreniminin temel ilkesi, 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 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 seferde eşit şekilde bölünmesi muhtemeldir.

c42755151d511ce.png

Ardından, bu eğitim döneminin 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.

7d0ee06a5246b58d.png

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

Doğrulama doğruluğu rakamları, 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ığınız% 10'luk test verilerini kullanır.

f063ff6e1d2add67.png

8. Modeli dışa aktarma

  1. Bir dizin belirtmek ve modeli dışa aktarmak için bu hücreyi çalıştırın:
model.export(export_dire='/mm_spam_savedmodel', export_format=[ExportFormat.LABEL, ExportFormat.VOCAB, ExportFormat.SAVED_MODEL])
  1. /mm_spam_savedmodel klasörünün tamamını sıkıştırın ve bir sonraki codelab'de ihtiyacınız olacak oluşturulan mm_spam_savedmodel.zip dosyasını indirin.
# Rename the SavedModel subfolder to a version number
!mv /mm_spam_savedmodel/saved_model /mm_spam_savedmodel/123
!zip -r mm_spam_savedmodel.zip /mm_spam_savedmodel/

9. Tebrikler

Bu codelab'de, modelinizi oluşturup dışa aktarmak için Python kodunu kullandınız. Artık bir SavedModel'iniz ve sonunda etiketler ile kelime dağarcığı var. Bir sonraki codelab'de, spam yorumları sınıflandırmaya başlamak için bu modeli nasıl kullanacağınızı göreceksiniz.

Daha fazla bilgi