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']