המרת אופרטורים של TensorFlow Text ל- TensorFlow Lite

הצג באתר TensorFlow.org הפעל בגוגל קולאב הצג ב-GitHub הורד מחברת

סקירה כללית

מודלים של למידת מכונה נפרסים לעתים קרובות באמצעות TensorFlow Lite למכשירים ניידים, משובצים ו-IoT כדי לשפר את פרטיות הנתונים ולהפחית את זמני התגובה. מודלים אלה דורשים לעתים קרובות תמיכה בפעולות עיבוד טקסט. TensorFlow Text גרסה 2.7 ומעלה מספקת ביצועים משופרים, גדלים בינאריים מופחתים ופעולות מותאמות במיוחד לשימוש בסביבות אלו.

מפעילי טקסט

ניתן להשתמש במחלקות 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 Text, עליך להגדיר אותו לשימוש באופרטורים מותאמים אישית אלה, ולספק עבורם שיטות רישום. השתמש tf_text.tflite_registrar.SELECT_TFTEXT_OPS כדי לספק את החבילה המלאה של פונקציות הרישום עבור אופרטורי TensorFlow Text הנתמכים ל- InterpreterWithCustomOps .

שימו לב, בעוד שהדוגמה למטה מציגה הסקה ב-Python, השלבים דומים בשפות אחרות עם כמה תרגומי API קלים, וההכרח לבנות את ה- 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']