Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

TensorFlow Lite Model Maker ile metin sınıflandırması

TensorFlow.org'da görüntüleyin Google Colab'de çalıştırın Kaynağı GitHub'da görüntüleyin Defteri indirin

TensorFlow Lite Model Maker kitaplığı, bu modeli cihaz üzerindeki makine öğrenimi uygulamaları için dağıtırken bir TensorFlow modelini özel giriş verilerine uyarlama ve dönüştürme sürecini basitleştirir.

Bu defter, bir mobil cihazdaki film incelemelerini sınıflandırmak için yaygın olarak kullanılan bir metin sınıflandırma modelinin uyarlanmasını ve dönüştürülmesini göstermek için Model Maker kitaplığını kullanan uçtan uca bir örnek göstermektedir. Metin sınıflandırma modeli, metni önceden tanımlanmış kategorilere ayırır. Bu öğreticide kullanılan veri kümesi, olumlu ve olumsuz film incelemeleridir.

Önkoşullar

Gerekli paketleri kurun

Bu örneği çalıştırmak için GitHub deposundan Model Maker paketi de dahil olmak üzere gerekli paketleri yükleyin.

pip install tflite-model-maker

Gerekli paketleri içe aktarın.

import numpy as np
import os

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

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 import TextClassifierDataLoader

Veri yolunu alın

Bu eğitici için veri kümesini indirin.

data_dir = tf.keras.utils.get_file(
      fname='SST-2.zip',
      origin='https://dl.fbaipublicfiles.com/glue/data/SST-2.zip',
      extract=True)
data_dir = os.path.join(os.path.dirname(data_dir), 'SST-2')
Downloading data from https://dl.fbaipublicfiles.com/glue/data/SST-2.zip
7446528/7439277 [==============================] - 0s 0us/step

Bu öğretici üzerinde çalışmak için kendi veri kümenizi de yükleyebilirsiniz. Colab'de sol kenar çubuğunu kullanarak veri kümenizi yükleyin.

Dosya yükleme

Veri kümenizi buluta yüklememeyi tercih ederseniz, kılavuzu izleyerek kütüphaneyi yerel olarak da çalıştırabilirsiniz.

Uçtan Uca İş Akışı

Bu iş akışı, aşağıda özetlendiği gibi beş adımdan oluşur:

Adım 1. Bir metin sınıflandırma modelini temsil eden bir model özelliği seçin.

Bu eğitimde örnek olarak MobileBERT kullanılmıştır.

spec = model_spec.get('mobilebert_classifier')

Adım 2. Cihazdaki bir ML uygulamasına özgü tren ve test verilerini yükleyin ve verileri belirli bir model_spec göre önceden model_spec .

train_data = TextClassifierDataLoader.from_csv(
      filename=os.path.join(os.path.join(data_dir, 'train.tsv')),
      text_column='sentence',
      label_column='label',
      model_spec=spec,
      delimiter='\t',
      is_training=True)
test_data = TextClassifierDataLoader.from_csv(
      filename=os.path.join(os.path.join(data_dir, 'dev.tsv')),
      text_column='sentence',
      label_column='label',
      model_spec=spec,
      delimiter='\t',
      is_training=False)

Adım 3. TensorFlow modelini özelleştirin.

model = text_classifier.create(train_data, model_spec=spec)

Adım 4. Modeli değerlendirin.

loss, acc = model.evaluate(test_data)

İle TensorFlow Lite modeli olarak 5. Dışa Adım meta veri .

MobileBERT, cihaz üzerindeki uygulamalar için çok büyük olduğundan, minimum performans düşüşüyle ​​neredeyse 4 kat sıkıştırmak için model üzerinde dinamik aralık nicelemesini kullanın.

config = configs.QuantizationConfig.create_dynamic_range_quantization(optimizations=[tf.lite.Optimize.OPTIMIZE_FOR_LATENCY])
config.experimental_new_quantizer = True
model.export(export_dir='mobilebert/', quantization_config=config)

Modeli, Colab'deki sol kenar çubuğunu kullanarak da indirebilirsiniz.

Yukarıdaki 5 adımı yürüttükten sonra, TensorFlow Lite Görev Kitaplığı'ndaki BertNLClassifier API'yi kullanarak TensorFlow Lite model dosyasını cihaz üzerindeki uygulamalarda da kullanabilirsiniz.

Aşağıdaki bölümlerde, daha fazla ayrıntı göstermek için örnek adım adım açıklanmaktadır.

Metin Sınıflandırıcı için bir Modeli temsil eden bir model_spec seçin

Her model_spec nesnesi, metin sınıflandırıcı için belirli bir modeli temsil eder. TensorFlow Lite Model Maker şu anda MobileBERT'i , ortalama kelime düğünlerini ve BERT-Base modellerini desteklemektedir.

Desteklenen Model Model_spec adı Model Açıklaması
MobileBERT "mobilebert_classifier" Cihaz üstü uygulamalar için uygun rekabetçi sonuçlar elde ederken BERT-Base'den 4,3 kat daha küçük ve 5,5 kat daha hızlı.
BERT Tabanı "bert_classifier" NLP görevlerinde yaygın olarak kullanılan standart BERT modeli.
ortalama kelime gömme "average_word_vec" RELU aktivasyonu ile metin kelime düğünlerinin ortalaması.

Bu eğitici, süreci göstermek için birden çok kez yeniden average_word_vec daha küçük bir model olan average_word_vec kullanır.

spec = model_spec.get('average_word_vec')

Cihazdaki ML Uygulamasına Özgü Giriş Verilerini Yükleme

SST-2 (Stanford Duyarlılık Treebank), GLUE kıyaslamasındaki görevlerden biridir. Eğitim için 67.349 film incelemesi ve doğrulama için 872 film incelemesi içerir. Veri kümesinin iki sınıfı vardır: olumlu ve olumsuz film incelemeleri.

Veri kümesinin arşivlenmiş sürümünü indirin ve çıkarın.

data_dir = tf.keras.utils.get_file(
      fname='SST-2.zip',
      origin='https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FSST-2.zip?alt=media&token=aabc5f6b-e466-44a2-b9b4-cf6337f84ac8',
      extract=True)
data_dir = os.path.join(os.path.dirname(data_dir), 'SST-2')

SST-2 veri kümesi vardır train.tsv eğitim ve için dev.tsv doğrulama için. Dosyalar aşağıdaki biçime sahiptir:

cümle etiket
büyüleyici ve çoğu zaman yolculuğu etkiliyor. 1
korkusuzca kasvetli ve çaresiz 0

Olumlu bir inceleme 1 olarak etiketlenir ve olumsuz bir yorum 0 olarak etiketlenir.

Verileri yüklemek için TestClassifierDataLoader.from_csv yöntemini kullanın.

train_data = TextClassifierDataLoader.from_csv(
      filename=os.path.join(os.path.join(data_dir, 'train.tsv')),
      text_column='sentence',
      label_column='label',
      model_spec=spec,
      delimiter='\t',
      is_training=True)
test_data = TextClassifierDataLoader.from_csv(
      filename=os.path.join(os.path.join(data_dir, 'dev.tsv')),
      text_column='sentence',
      label_column='label',
      model_spec=spec,
      delimiter='\t',
      is_training=False)

Model Maker kitaplığı, verileri yüklemek için from_folder() yöntemini de destekler. Aynı sınıfın metin verilerinin aynı alt dizinde olduğunu ve alt klasör adının sınıf adı olduğunu varsayar. Her metin dosyası bir film inceleme örneği içerir. class_labels parametresi, hangi alt klasörlerin olduğunu belirtmek için kullanılır.

TensorFlow Modelini Özelleştirin

Yüklenen verilere göre özel bir metin sınıflandırıcı modeli oluşturun.

model = text_classifier.create(train_data, model_spec=spec, epochs=10)

Ayrıntılı model yapısını inceleyin.

model.summary()

Özelleştirilmiş Modeli Değerlendirin

Modeli test verileri ile değerlendirin ve kaybını ve doğruluğunu alın.

loss, acc = model.evaluate(test_data)

TensorFlow Lite Modeli olarak dışa aktarın

Mevcut modeli, daha sonra cihaz üzerindeki bir makine öğrenimi uygulamasında kullanabileceğiniz meta verilerle TensorFlow Lite model formatına dönüştürün. Etiket dosyası ve sözcük dosyası meta verilere yerleştirilmiştir. Varsayılan TFLite dosya adı model.tflite .

model.export(export_dir='average_word_vec/')

TensorFlow Lite model dosyası, TensorFlow Lite Görev Kitaplığı'ndaki NLClassifier API kullanılarak metin sınıflandırma referans uygulamasında kullanılabilir.

İzin verilen dışa aktarma biçimleri aşağıdakilerden biri veya bir listesi olabilir:

  • ExportFormat.TFLITE
  • ExportFormat.LABEL
  • ExportFormat.VOCAB
  • ExportFormat.SAVED_MODEL

Varsayılan olarak, yalnızca TensorFlow Lite modelini meta verilerle dışa aktarır. Ayrıca, farklı dosyaları seçmeli olarak dışa aktarabilirsiniz. Örneğin, yalnızca etiket dosyasını ve sözcük dosyasını aşağıdaki gibi dışa aktarın:

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

Doğruluğunu elde etmek için tflite modelini eval_tflite yöntemi ile evaluate_tflite .

accuracy = model.evaluate_tflite('average_word_vec/model.tflite', test_data)

Gelişmiş Kullanım

create fonksiyonu Modeli Üretici kütüphane kullandığı modelleri oluşturmak için o sürücü fonksiyonudur. model_spec parametresi, model spesifikasyonunu tanımlar. AverageWordVecModelSpec ve BertClassifierModelSpec sınıfları şu anda desteklenmektedir. create işlevi aşağıdaki adımlardan oluşur:

  1. model_spec göre metin sınıflandırıcı için model oluşturur.
  2. Sınıflandırıcı modelini eğitir. Varsayılan dönemler ve varsayılan parti boyutu, model_spec nesnesindeki default_training_epochs ve default_batch_size değişkenleri tarafından ayarlanır.

Bu bölüm, modeli ayarlama ve hiperparametreleri eğitme gibi gelişmiş kullanım konularını kapsar.

Modeli ayarlayın

AverageWordVecModelSpec sınıfındaki wordvec_dim ve seq_len değişkenleri gibi model altyapısını ayarlayabilirsiniz.

Örneğin, modeli daha büyük bir wordvec_dim değeri ile wordvec_dim . Modeli değiştirirseniz yeni bir model_spec gerektiğini unutmayın.

new_model_spec = model_spec.AverageWordVecModelSpec(wordvec_dim=32)

Önceden işlenmiş verileri alın.

new_train_data = TextClassifierDataLoader.from_csv(
      filename=os.path.join(os.path.join(data_dir, 'train.tsv')),
      text_column='sentence',
      label_column='label',
      model_spec=new_model_spec,
      delimiter='\t',
      is_training=True)

Yeni modeli eğitin.

model = text_classifier.create(new_train_data, model_spec=new_model_spec)

Ayrıca MobileBERT modelini de ayarlayabilirsiniz.

Ayarlayabileceğiniz model parametreleri şunlardır:

  • seq_len : seq_len dizinin uzunluğu.
  • initializer_range : Tüm ağırlık matrislerini başlatmak için truncated_normal_initializer standart sapması.
  • trainable : Önceden eğitilmiş katmanın eğitilebilir olup olmadığını belirten Boole.

Ayarlayabileceğiniz eğitim hattı parametreleri şunlardır:

  • model_dir : Model kontrol noktası dosyalarının konumu. Ayarlanmazsa, geçici bir dizin kullanılacaktır.
  • dropout_rate : Bırakma oranı.
  • learning_rate : Adam optimize edicinin ilk öğrenme oranı.
  • tpu : Bağlanılacak TPU adresi.

Örneğin, seq_len=256 (varsayılan 128) olarak ayarlayabilirsiniz. Bu, modelin daha uzun metni sınıflandırmasına izin verir.

new_model_spec = model_spec.get('mobilebert_classifier')
new_model_spec.seq_len = 256

Eğitim hiper parametrelerini ayarlayın

Sen ayar da yapabilirsiniz gibi eğitim hyperparameters epochs ve batch_size modeli doğruluğunu etkileyebilir. Örneğin,

  • epochs : daha fazla epoch daha iyi doğruluk sağlayabilir, ancak aşırı uyuma neden olabilir.
  • batch_size : bir eğitim adımında kullanılacak örnek sayısı.

Örneğin, daha fazla dönemle antrenman yapabilirsiniz.

model = text_classifier.create(train_data, model_spec=spec, epochs=20)

Yeni yeniden eğitilmiş modeli 20 eğitim dönemi ile değerlendirin.

loss, accuracy = model.evaluate(test_data)

Model Mimarisini Değiştirin

model_spec değiştirerek modeli değiştirebilirsiniz. Aşağıda BERT-Base modeline nasıl geçileceği gösterilmektedir.

Metin sınıflandırıcı için model_spec BERT-Base modeline değiştirin.

spec = model_spec.get('bert_classifier')

Kalan adımlar aynı.