TensorFlow टेक्स्ट ऑपरेटरों को TensorFlow Lite में कनवर्ट करना

TensorFlow.org पर देखें Google Colab में चलाएं गिटहब पर देखें नोटबुक डाउनलोड करें

अवलोकन

डेटा गोपनीयता और कम प्रतिक्रिया समय को बेहतर बनाने के लिए मोबाइल, एम्बेडेड और IoT उपकरणों पर TensorFlow Lite का उपयोग करके मशीन लर्निंग मॉडल को अक्सर तैनात किया जाता है। इन मॉडलों को अक्सर पाठ प्रसंस्करण कार्यों के लिए समर्थन की आवश्यकता होती है। TensorFlow टेक्स्ट संस्करण 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 फ़ंक्शन का उपयोग करके इसे रूपांतरित कर सकते हैं। अधिक विवरण के लिए रैग्डटेन्सर गाइड देखें।

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 मॉडल को 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 लाइट दुभाषिया आपके मॉडल को TensorFlow टेक्स्ट ऑपरेटरों से ठीक से पढ़ने के लिए, आपको इन कस्टम ऑपरेटरों का उपयोग करने के लिए इसे कॉन्फ़िगर करना होगा, और उनके लिए पंजीकरण विधियों को प्रदान करना होगा। InterpreterWithCustomOps को समर्थित TensorFlow टेक्स्ट ऑपरेटरों के लिए पंजीकरण कार्यों का पूरा सूट प्रदान करने के लिए tf_text.tflite_registrar.SELECT_TFTEXT_OPS का उपयोग करें।

ध्यान दें, जबकि नीचे दिया गया उदाहरण पायथन में अनुमान दिखाता है, कुछ छोटे एपीआई अनुवादों के साथ अन्य भाषाओं में कदम समान हैं, और आपके बाइनरी में 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']