عرض على TensorFlow.org | تشغيل في Google Colab | عرض على جيثب | تحميل دفتر |
ملخص
يتم نشر نماذج التعلم الآلي بشكل متكرر باستخدام TensorFlow Lite للأجهزة المحمولة والمدمجة وأجهزة إنترنت الأشياء لتحسين خصوصية البيانات وتقليل أوقات الاستجابة. غالبًا ما تتطلب هذه النماذج دعمًا لعمليات معالجة النصوص. يوفر الإصدار 2.7 من TensorFlow Text والإصدارات الأعلى أداءً محسنًا وأحجامًا ثنائية مخفضة وعمليات محسّنة خصيصًا للاستخدام في هذه البيئات.
عوامل تشغيل النص
يمكن استخدام فئات TensorFlow Text التالية من داخل نموذج 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
يوضح مثال الكود التالي عملية التحويل والتفسير في Python باستخدام نموذج اختبار بسيط. لاحظ أن إخراج النموذج لا يمكن أن يكون كائن tf.RaggedTensor
عند استخدام TensorFlow Lite. ومع ذلك ، يمكنك إرجاع مكونات كائن 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 Text المدعومين إلى InterpreterWithCustomOps
.
لاحظ أنه بينما يوضح المثال أدناه الاستدلال في Python ، فإن الخطوات متشابهة في لغات أخرى مع بعض الترجمات البسيطة لواجهة برمجة التطبيقات ، وضرورة إنشاء tflite_registrar
في ملفك الثنائي. راجع TensorFlow Lite Inference لمزيد من التفاصيل.
# 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']