Mengonversi operator Teks TensorFlow ke TensorFlow Lite

Lihat di TensorFlow.org Jalankan di Google Colab Lihat di GitHub Unduh buku catatan

Ringkasan

Model pembelajaran mesin sering diterapkan menggunakan TensorFlow Lite ke perangkat seluler, tersemat, dan IoT untuk meningkatkan privasi data dan mengurangi waktu respons. Model ini sering membutuhkan dukungan untuk operasi pemrosesan teks. TensorFlow Text versi 2.7 dan yang lebih tinggi memberikan peningkatan kinerja, pengurangan ukuran biner, dan operasi yang dioptimalkan secara khusus untuk digunakan di lingkungan ini.

Operator teks

Kelas Teks TensorFlow berikut dapat digunakan dari dalam model TensorFlow Lite.

  • FastWordpieceTokenizer
  • WhitespaceTokenizer

Contoh Model

pip install -U tensorflow-text
from absl import app
import numpy as np
import tensorflow as tf
import tensorflow_text as tf_text

from tensorflow.lite.python import interpreter

Contoh kode berikut menunjukkan proses konversi dan interpretasi dengan Python menggunakan model pengujian sederhana. Perhatikan bahwa keluaran model tidak boleh berupa objek tf.RaggedTensor saat Anda menggunakan TensorFlow Lite. Namun, Anda dapat mengembalikan komponen objek tf.RaggedTensor atau mengonversinya menggunakan fungsi to_tensor . Lihat panduan RaggedTensor untuk lebih jelasnya.

class TokenizerModel(tf.keras.Model):

  def __init__(self, **kwargs):
    super().__init__(**kwargs)
    self.tokenizer = tf_text.WhitespaceTokenizer()

  @tf.function(input_signature=[
      tf.TensorSpec(shape=[None], dtype=tf.string, name='input')
  ])
  def call(self, input_tensor):
    return { 'tokens': self.tokenizer.tokenize(input_tensor).flat_values }
# Test input data.
input_data = np.array(['Some minds are better kept apart'])

# Define a Keras model.
model = TokenizerModel()

# Perform TensorFlow Text inference.
tf_result = model(tf.constant(input_data))
print('TensorFlow result = ', tf_result['tokens'])
TensorFlow result =  tf.Tensor([b'Some' b'minds' b'are' b'better' b'kept' b'apart'], shape=(6,), dtype=string)

Ubah model TensorFlow ke TensorFlow Lite

Saat mengonversi model TensorFlow dengan operator Teks TensorFlow ke TensorFlow Lite, Anda perlu menunjukkan kepada TFLiteConverter bahwa ada operator khusus yang menggunakan atribut allow_custom_ops seperti pada contoh di bawah ini. Anda kemudian dapat menjalankan konversi model seperti biasa. Tinjau dokumentasi konverter TensorFlow Lite untuk panduan mendetail tentang dasar-dasar konversi model.

# Convert to TensorFlow Lite.
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS]
converter.allow_custom_ops = True
tflite_model = converter.convert()
2022-02-01 12:09:02.062677: W tensorflow/python/util/util.cc:368] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
INFO:tensorflow:Assets written to: /tmp/tmpiiuhjdn6/assets
2022-02-01 12:09:03.705144: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:363] Ignored output_format.
WARNING:absl:Buffer deduplication procedure will be skipped when flatbuffer library is not properly loaded
2022-02-01 12:09:03.705185: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:366] Ignored drop_control_dependency.
2022-02-01 12:09:03.921830: W tensorflow/compiler/mlir/lite/flatbuffer_export.cc:1902] The following operation(s) need TFLite custom op implementation(s):
Custom ops: TFText>WhitespaceTokenizeWithOffsetsV2
Details:
    tf.TFText>WhitespaceTokenizeWithOffsetsV2(tensor<?x!tf_type.string>, tensor<!tf_type.string>) -> (tensor<?x!tf_type.string>, tensor<?xi64>, tensor<?xi32>, tensor<?xi32>) : {device = ""}
See instructions: https://www.tensorflow.org/lite/guide/ops_custom

Kesimpulan

Agar penerjemah TensorFlow Lite dapat membaca model Anda yang berisi operator Teks TensorFlow dengan benar, Anda harus mengonfigurasinya untuk menggunakan operator khusus ini, dan menyediakan metode pendaftaran untuk mereka. Gunakan tf_text.tflite_registrar.SELECT_TFTEXT_OPS untuk menyediakan rangkaian lengkap fungsi pendaftaran bagi operator Teks TensorFlow yang didukung ke InterpreterWithCustomOps .

Perhatikan, meskipun contoh di bawah ini menunjukkan inferensi dalam Python, langkah-langkahnya serupa dalam bahasa lain dengan beberapa terjemahan API kecil, dan kebutuhan untuk membangun tflite_registrar ke dalam biner Anda. Lihat Inferensi TensorFlow Lite untuk detail selengkapnya.

# Perform TensorFlow Lite inference.
interp = interpreter.InterpreterWithCustomOps(
    model_content=tflite_model,
    custom_op_registerers=tf_text.tflite_registrar.SELECT_TFTEXT_OPS)
interp.get_signature_list()
{'serving_default': {'inputs': ['input'], 'outputs': ['tokens']} }

Selanjutnya, interpreter TensorFlow Lite dipanggil dengan input, memberikan hasil yang cocok dengan hasil TensorFlow dari atas.

tokenize = interp.get_signature_runner('serving_default')
output = tokenize(input=input_data)
print('TensorFlow Lite result = ', output['tokens'])
TensorFlow Lite result =  [b'Some' b'minds' b'are' b'better' b'kept' b'apart']