TensorFlow Lite Model Maker ile yorum spam'i algılama modeli eğitme

1. Başlamadan önce

Bu codelab'de, yorum spam'ine dayalı veri kümesine sahip bir model oluşturmak için TensorFlow ve TensorFlow Lite Model Maker ile oluşturulan kodu inceleyebilirsiniz. Orijinal veriler Kaggle'da mevcuttur. Dosya tek bir CSV dosyasında toplanıp bozuk metin, işaretleme, tekrarlanan kelimeler ve diğer öğeler kaldırılarak temizlenir. Böylece metin yerine modele daha kolay odaklanabilirsiniz.

İncelediğiniz kod burada sağlanmıştır. Ancak, Colaboratory'de kodu takip etmenizi önemle tavsiye ederiz.

Ön koşullar

Neler öğreneceksiniz?

  • Colab ile TensorFlow Lite Model Maker nasıl yüklenir?
  • Colab 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ükleyin

  • Colab'ı açın. Not defterindeki ilk hücre, sizin için TensorF Low Lite Model Oluşturucu'yu 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 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 Oluşturucu'yu kullanmak için gerekli olan TensorFlow 2.x'i çalıştırıp çalıştırmadığınızı da kontrol eder.

4. Verileri indirin

Daha sonra, verileri Colab sunucusundan cihazınıza indirip data_file değişkenini yerel dosyaya işaret edecek şekilde ayarlayın:

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, bunun gibi basit CSV dosyalarındaki modelleri eğitebilir. Yalnızca hangi sütunların metni barındırdığını ve hangi etiketlerin etiketleri içerdiğini belirtmeniz gerekir. Bunu daha sonra bu codelab'de nasıl yapacağınızı görebilirsiniz.

5. Önceden öğrenilen yerleştirmeler

Genel olarak, Model Oluşturucu'yu kullanırken sıfırdan model oluşturamazsınız. İhtiyaçlarınıza göre özelleştirdiğiniz mevcut modelleri kullanabilirsiniz.

Bunun gibi dil modelleri, önceden öğrenilen yerleştirmelerin kullanılmasını içerir. Yerleştirmenin altında yatan fikir, kelimelerin belirli bir kitaplığındaki her kelimeyle birlikte bir sayıya dönüştürülmesidir. Yerleştirme, bir kelimenin "yönü"nü belirleyip bu kelimenin duygusunu belirlemek için kullanılan bir vektördür. Örneğin, yorum spam mesajlarında sıklıkla kullanılan kelimelerin vektörleri benzer yöne işaret eder ve işaret olmayan kelimelerin vektörleri ters yönde işaret eder.

Önceden öğrenilen yerleştirmeleri kullandığınızda, sıfırdan büyük bir metin gövdesinden öğrenmiş olan kelimeleri içeren bir koleksiyon veya koleksiyonla başlarsınız. Böylece, sıfırdan başlayıp çok daha hızlı bir şekilde bir çözüme ulaşabilirsiniz.

Model Oluşturucu, kullanabileceğiniz önceden hazırlanmış çeşitli yerleştirmeler sağlar ancak en basit ve hızlı başlangıç yöntemi average_word_vec seçeneğidir.

Kodu şu şekildedir:

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

num_words parametresi

Modelinizin kullanmasını istediğiniz kelime sayısını da belirtirsiniz.

Ne kadar iyi olursa o kadar iyi düşünün, ancak genellikle her kelimenin kullanım sıklığına dayalı olarak doğru bir sayı vardır. Tüm kelime öbeğinin her kelimesini kullanırsanız model, yalnızca bir kez kullanılan kelimelerin yönünü öğrenmeye ve yönünü belirlemeye çalışabilir. Herhangi bir metin arşivinde birçok kelime yalnızca bir veya iki kez kullanılır. Bu nedenle, modele dahil edilmeleri pek değerli değildir. Çünkü bunların genel duyarlılık üzerinde ihmal edilebilir bir etkisi vardır.

Modelinizi istediğiniz kelime sayısına göre ayarlamak için num_words parametresini kullanabilirsiniz. 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. Öte yandan, daha büyük bir sayı kullanılması daha büyük ve daha yavaş bir model sağlayabilir. En güzel yeri bulmak çok önemli.

wordvec_dim parametresi

wordved_dim parametresi, her bir kelimenin vektör için kullanmak istediğiniz boyutların sayısıdır. Araştırmalardan elde edilen genel kural, kelime sayısının dördüncü köküdür. Örneğin, 2.000 kelime kullanırsanı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

Giriş değerleri söz konusu olduğunda modeller genellikle çok katıdır. Bir dil modelinde 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ı veya jetona dönüştürdüğünüzde, bir cümle bu jetonların dizisi haline gelir. Bu durumda modeliniz, 20 jeton içeren cümleleri sınıflandırmak ve tanımak için eğitilir. Cümle daha uzunsa kısaltılır. Ne kadar kısaysa yastıklı. Bu kitaplıkta kullanılan özel <PAD> jetonunu görebilirsiniz.

6. Veri yükleyici kullanma

CSV dosyasını daha önce indirdiniz. Ş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ırın yalnızca iki değeri olduğunu ve bunların, dosyanın ilk satırındaki metinle açıklandığını görürsünüz. Genellikle, her giriş bir sütun olarak kabul edilir.

İlk sütundaki tanımlayıcının commenttext olduğunu ve her satırdaki ilk girişin yorumun metni olduğunu görürsünüz. Benzer şekilde, ikinci sütunun tanımlayıcısı spam olur. Her satırdaki ikinci girişin, yorum spam olarak değerlendirilip değerlendirilmediğini belirtmek için True veya False, şeklinde yapıldığını görürsünüz. Diğer özellikler, daha önce oluşturduğunuz model_spec değişkenini (ve bu örnekte dosya virgülle ayrıldığı için virgül olan ayırıcı) 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ı saklamak istersiniz. %90'ı eğitim, diğer% 10'u test/değerlendirme için verileri böler. Bunu yapmak için test verilerinin rastgele seçildiğinden ve veri kümesinin"alttan% 109'u"olmadığından emin olmak istiyoruz. Bu nedenle, verileri yüklerken rastgele bir veri türü kullanarak shuffle=True kullanıyorsunuz.

7. Modeli oluşturma

Sonraki hücre, modeli oluşturmaktır. Model, tek bir kod satırıdır:

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

Bu kod, Model Oluşturucu ile bir metin sınıflayıcı modeli oluşturur ve dördüncü adımda ayarlandığı şekliyle kullanmak istediğiniz eğitim verilerini, bu adımda dördüncü adımda ayarlanan model spesifikasyonunu ve bir dizi dönem (bu örnekte 50'dir) belirtirsiniz.

Makine öğreniminin temel ilkesi, makine öğreniminin bir kalıp eşleştirme biçimidir. Başlangıçta, kelimeler için önceden eğitilmiş ağırlıkları yükler ve birlikte gruplandırıldığında hangi anahtar kelimelerin spam olduğunu, hangilerinin olmadığını gösterir. Model henüz başlangıç aşamasında olduğundan, ilk defa eşit sıklıkta bölünebilir.

c42755151d511ce.png

Ardından, bu eğitim döneminin sonuçlarını ölçecek ve tahmininde değişiklik yapmak için optimizasyon kodunu çalıştırıp tekrar deneyin. Bu bir dönem. Böylece, epochs=50 belirtildiğinde bu "döngü"den 50 kez geçer.

7d0ee06a5246b58d.png

50. döneme ait olduğunuzda, model çok daha yüksek bir doğruluk düzeyi bildirir. Bu örnekte, 99% öğesi gösterilir.

Doğrulama doğruluğu rakamları genellikle eğitim doğruluğundan biraz daha düşüktür. Çünkü bunlar, modelin daha önce karşılaşmadığı verileri nasıl sınıflandırdığının bir göstergesidir. Daha önce ayırdığınız% 10 test verilerini kullanır.

f063ff6e1d2add67.png

8. Modeli dışa aktar

  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 ihtiyaç duyduğunuz mm_spam_savedmodel.zip dosyası oluşturun.
# 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, modelinizi derleyip dışa aktarmanız için Python kodunu size yönlendirdi. KaydedilenModel'in yanı sıra sonunda etiketler ve sözlük bulunur. Bir sonraki codelab'de, spam yorumları sınıflandırmaya başlayabilmek için bu modeli nasıl kullanacağınızı öğreneceksiniz.

Daha fazla bilgi