TensorFlow Metin operatörlerini TensorFlow Lite'a dönüştürme

TensorFlow.org'da görüntüleyin Google Colab'da çalıştırın GitHub'da görüntüle Not defterini indir

genel bakış

Makine öğrenimi modelleri, veri gizliliğini iyileştirmek ve yanıt sürelerini azaltmak için sık sık TensorFlow Lite kullanılarak mobil, yerleşik ve IoT cihazlarına dağıtılır. Bu modeller genellikle metin işleme işlemleri için destek gerektirir. TensorFlow Text sürüm 2.7 ve üzeri, gelişmiş performans, azaltılmış ikili boyutlar ve bu ortamlarda kullanım için özel olarak optimize edilmiş işlemler sağlar.

Metin operatörleri

Aşağıdaki TensorFlow Metin sınıfları, bir TensorFlow Lite modeli içinden kullanılabilir.

  • FastWordpieceTokenizer
  • WhitespaceTokenizer

Model Örneği

pip install -U tensorflow-text
tutucu1 l10n-yer
from absl import app
import numpy as np
import tensorflow as tf
import tensorflow_text as tf_text

from tensorflow.lite.python import interpreter

Aşağıdaki kod örneği, basit bir test modeli kullanarak Python'da dönüştürme işlemini ve yorumlamayı gösterir. TensorFlow Lite kullanırken bir modelin çıktısının bir tf.RaggedTensor nesnesi olamayacağına dikkat edin. Ancak, bir tf.RaggedTensor nesnesinin bileşenlerini döndürebilir veya to_tensor işlevini kullanarak dönüştürebilirsiniz. Daha fazla ayrıntı için RaggedTensor kılavuzuna bakın.

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'])
-yer tutucu4 l10n-yer
TensorFlow result =  tf.Tensor([b'Some' b'minds' b'are' b'better' b'kept' b'apart'], shape=(6,), dtype=string)

TensorFlow modelini TensorFlow Lite'a dönüştürün

TensorFlow Metin operatörlerine sahip bir TensorFlow modelini TensorFlow Lite'a dönüştürürken, aşağıdaki örnekte olduğu gibi allow_custom_ops özniteliğini kullanan özel operatörler olduğunu TFLiteConverter belirtmeniz gerekir. Daha sonra model dönüştürmeyi normalde yaptığınız gibi çalıştırabilirsiniz. Model dönüştürmenin temelleri hakkında ayrıntılı bir kılavuz için TensorFlow Lite dönüştürücü belgelerini inceleyin.

# 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()
tutucu6 l10n-yer
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

çıkarım

TensorFlow Lite yorumlayıcısının TensorFlow Metin operatörlerini içeren modelinizi düzgün bir şekilde okuması için, onu bu özel operatörleri kullanacak şekilde yapılandırmanız ve onlar için kayıt yöntemleri sağlamanız gerekir. Desteklenen TensorFlow Metin operatörleri için InterpreterWithCustomOps için tam kayıt işlevleri paketi sağlamak üzere tf_text.tflite_registrar.SELECT_TFTEXT_OPS kullanın.

Aşağıdaki örnek Python'da çıkarımı gösterirken, adımların diğer dillerde bazı küçük API çevirileri ile benzer olduğunu ve tflite_registrar ikili dosyanızda oluşturma gerekliliğini unutmayın. Daha fazla ayrıntı için TensorFlow Lite Çıkarımına bakın.

# 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()
tutucu8 l10n-yer
{'serving_default': {'inputs': ['input'], 'outputs': ['tokens']} }

Ardından, girişle birlikte TensorFlow Lite yorumlayıcısı çağrılır ve yukarıdaki TensorFlow sonucuyla eşleşen bir sonuç sağlanır.

tokenize = interp.get_signature_runner('serving_default')
output = tokenize(input=input_data)
print('TensorFlow Lite result = ', output['tokens'])
tutucu10 l10n-yer
TensorFlow Lite result =  [b'Some' b'minds' b'are' b'better' b'kept' b'apart']