将 HuggingFace Tokenizer 转换为 TensorFlow Keras 层

问题描述 投票:0回答:2

我正在努力了解如何使用作为 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 层,我将不胜感激。

python tensorflow keras huggingface-transformers
2个回答
1
投票

在拥抱面部文档中,您可以使用分词器对文本进行分词并返回张量流张量。您可以执行以下操作:

tokenized_outputs = tokenizer(user_input, return_tensors = 'tf')

这表明你想要返回tensorflow类型的张量。您可以通过输入

'pt'
而不是
'tf'

来选择 PyTorch 张量

有关更多信息,请查看文档此处

您还可以使用 Transformer 中的 TFAutoModel 函数来检索张量流格式的模型。

希望这有帮助


0
投票

您可以查看此存储库:https://github.com/Hugging-Face-Supporter/tftokenizers

它正是您所寻找的。

© www.soinside.com 2019 - 2024. All rights reserved.