مشاهده در TensorFlow.org | در Google Colab اجرا شود | در GitHub مشاهده کنید | دانلود دفترچه یادداشت |
بررسی اجمالی
مدلهای یادگیری ماشین اغلب با استفاده از TensorFlow Lite در دستگاههای تلفن همراه، جاسازیشده و اینترنت اشیا برای بهبود حریم خصوصی دادهها و زمان پاسخدهی کمتر استفاده میشوند. این مدل ها اغلب برای عملیات پردازش متن نیاز به پشتیبانی دارند. TensorFlow Text نسخه 2.7 و بالاتر عملکرد بهبود یافته، کاهش اندازه های باینری و عملیات بهینه سازی شده برای استفاده در این محیط ها را ارائه می دهد.
عملگرهای متنی
کلاس های متن TensorFlow زیر را می توان از داخل یک مدل TensorFlow Lite استفاده کرد.
-
FastWordpieceTokenizer
-
WhitespaceTokenizer
نمونه مدل
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
مثال کد زیر فرآیند تبدیل و تفسیر در پایتون را با استفاده از یک مدل آزمایشی ساده نشان می دهد. توجه داشته باشید که وقتی از TensorFlow Lite استفاده می کنید، خروجی یک مدل نمی تواند یک شی tf.RaggedTensor
باشد. با این حال، می توانید اجزای یک شی tf.RaggedTensor
را برگردانید یا با استفاده از تابع to_tensor
آن را تبدیل کنید. برای جزئیات بیشتر به راهنمای RaggedTensor مراجعه کنید.
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)
مدل TensorFlow را به TensorFlow Lite تبدیل کنید
هنگام تبدیل یک مدل TensorFlow با عملگرهای TensorFlow Text به TensorFlow Lite، باید به TFLiteConverter
نشان دهید که عملگرهای سفارشی با استفاده از ویژگی allow_custom_ops
مانند مثال زیر وجود دارد. سپس می توانید تبدیل مدل را همانطور که به طور معمول انجام می دهید اجرا کنید. مستندات مبدل TensorFlow Lite را برای راهنمای دقیق در مورد مبانی تبدیل مدل مرور کنید.
# 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
استنتاج
برای اینکه مفسر TensorFlow Lite بتواند مدل شما حاوی عملگرهای متنی TensorFlow را به درستی بخواند، باید آن را طوری پیکربندی کنید که از این عملگرهای سفارشی استفاده کند و روشهای ثبت را برای آنها ارائه کنید. از tf_text.tflite_registrar.SELECT_TFTEXT_OPS
برای ارائه مجموعه کامل توابع ثبت نام برای عملگرهای متنی TensorFlow پشتیبانی شده برای InterpreterWithCustomOps
استفاده کنید.
توجه داشته باشید که در حالی که مثال زیر استنتاج در پایتون را نشان میدهد، مراحل در زبانهای دیگر با برخی ترجمههای جزئی API مشابه است و نیاز به ساخت tflite_registrar
در باینری شماست. برای جزئیات بیشتر به استنتاج TensorFlow Lite مراجعه کنید.
# 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']} }
در مرحله بعد، مفسر TensorFlow Lite با ورودی فراخوانی می شود و نتیجه ای را ارائه می دهد که با نتیجه TensorFlow از بالا مطابقت دارد.
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']