我正在努力了解如何使用作为 TensorFlow Keras 模型加载的预训练 HuggingFace 模型来执行推理。
背景
就我而言,我正在尝试微调预先训练的 DistilBert 分类器。我有如下内容来预处理我的数据并加载/训练我的模型:
from transformers import TFAutoModelForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
model = TFAutoModelForSequenceClassification.from_pretrained(
"distilbert-base-uncased", num_labels=2, id2label=id2label, label2id=label2id
)
# add another layer
tf_train = model.prepare_tf_dataset(question_train_test_split['train'], batch_size=16, shuffle=True, tokenizer=tokenizer)
model.compile(optimizer=tf.keras.optimizers.Adam(2e-5))
# freeze the first transformer layer of model
model.layers[0].trainable=False
print('Model Architecture:')
print(model.summary())
model.fit(tf_train, epochs=3)
其中
question_train_test_split
是 HuggingFace Dataset
对象实例。
这段代码按照预期完美运行,它将 HuggingFace 模型加载为
tf.keras
层。这甚至可以使用 .fit
方法进行正确训练。
但是,当我想要执行预测时遇到了问题。我知道我需要标记我的字符串输入,但是,我想将标记生成器加载为
tf.keras
层。我到处寻找方法来做到这一点,但我找不到任何方法。
理想情况下,我想要这样的东西:
user_input = 'When were the Beatles formed?'
model_input = tokenizer(user_input) # THIS HF TOKENIZER SHOULD BE A tf.keras LAYER
model = model(model_input)
这样我就可以将整个模型(带有分词器和转换器层 + 分类器层)保存到 TensorFlow SavedModel 中。如果有任何指示可以将 HuggingFace 分词器转换为 TensorFlow Keras 层,我将不胜感激。
在拥抱面部文档中,您可以使用分词器对文本进行分词并返回张量流张量。您可以执行以下操作:
tokenized_outputs = tokenizer(user_input, return_tensors = 'tf')
这表明你想要返回tensorflow类型的张量。您可以通过输入
'pt'
而不是 'tf'
来选择 PyTorch 张量
有关更多信息,请查看文档此处。
您还可以使用 Transformer 中的 TFAutoModel 函数来检索张量流格式的模型。
希望这有帮助
您可以查看此存储库:https://github.com/Hugging-Face-Supporter/tftokenizers
它正是您所寻找的。