הצג באתר 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']