تحويل عوامل تشغيل نص TensorFlow إلى TensorFlow Lite

عرض على 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']