使用Keras API (TF) 微调Hugging Face Transformer - Medium

作者:API传播员 · 2025-12-12 · 阅读时间:4分钟
本文详细介绍了使用Keras API和TensorFlow微调Hugging Face Transformer模型的完整流程,包括安装transformers库、数据标记化、数据集预处理以及模型构建与训练。通过DistilBERT模型进行二分类任务,涵盖标记化、数据分割和优化器设置等关键步骤,帮助读者将预训练模型应用于自定义分类任务。

使用 Keras API 微调 Hugging Face Transformer

在本文中,我们将通过使用 Keras API 和 TensorFlow,微调 Hugging Face 提供的 Transformer 模型。以下是详细的步骤和代码实现。


安装 Hugging Face Transformers 库

首先,我们需要安装 Hugging Face 的 transformers 库。在 Google Colab 环境中,可以通过以下命令完成安装:

!pip install transformers

标记化文本数据

在处理自然语言时,模型无法直接理解文本,因此需要将句子中的单词转换为数字表示。这一过程称为标记化。我们将使用 Hugging Face 提供的 Tokenizer 类来完成这一任务。

from transformers import DistilBertTokenizerFast
tokenizer = DistilBertTokenizerFast.from_pretrained('distilbert-base-uncased')

这里我们使用的是 DistilBERT 模型的标记器,它是 BERT 的轻量级版本。通过 from_pretrained 方法加载预训练的标记器,distilbert-base-uncased 表示该模型对大小写不敏感。


加载数据集并预处理

接下来,我们加载数据集并使用 Pandas 进行处理。以下代码展示了如何加载 JSON 格式的数据集并提取相关字段:

import pandas as pd
df = pd.read_json("/content/drive/MyDrive/Sarcasm_Headlines_Dataset.json")
df = df'headline', 'is_sarcastic'

我们将使用 TensorFlow 的 tf.data 模块创建数据集,而不是直接使用 NumPy 数组。tf.data 提供了更高效的数据处理能力。

import tensorflow as tf
import numpy as np

buffer_size = 64
is_train = np.random.uniform(size=len(df)) < 0.8

train_raw = (tf.data.Dataset
    .from_tensor_slices((dict(tokenizer(list(df['headline'][is_train]), padding=True, truncation=True)),
                         np.array(df['is_sarcastic'])[is_train]))
    .shuffle(len(df))
    .batch(buffer_size, drop_remainder=True)
)

test_raw = (tf.data.Dataset
    .from_tensor_slices((dict(tokenizer(list(df['headline'][~is_train]), padding=True, truncation=True)),
                         np.array(df['is_sarcastic'])[~is_train]))
    .shuffle(len(df))
    .batch(buffer_size, drop_remainder=True)
)

train_raw.prefetch(1)
test_raw.prefetch(1)

以上代码将数据集分为训练集和测试集,其中 80% 的数据用于训练,其余 20% 用于测试。from_tensor_slices 方法用于将输入和输出数据打包成 TensorFlow 数据集。


数据预处理的详细说明

在数据预处理过程中,我们需要将句子转换为标记,并确保所有张量的大小一致。以下是关键代码的解析:

dict(tokenizer(list(df['headline'][is_train]), padding=True, truncation=True))
  1. 选择数据:从数据集中选择 is_trainTrue 的标题。
  2. 转换为列表:通过 list() 方法将标题转换为列表。
  3. 标记化:将标题列表传递给标记器,并设置 padding=Truetruncation=True,确保所有张量大小一致。
  4. 转换为字典:将标记器输出转换为字典,因为 Hugging Face 的标记器输出是 BatchEncoding 对象,而 Keras 不支持直接处理该对象。

输出标签的处理如下:

np.array(df['is_sarcastic'])[is_train]

这一步将数据帧中的标签列转换为 NumPy 数组,并仅选择 is_trainTrue 的索引。


构建和训练模型

我们将使用 TFDistilBertForSequenceClassification 模型进行二分类任务。以下是模型的定义和训练代码:

from tensorflow.keras.optimizers import Adam
from tensorflow.keras.losses import SparseCategoricalCrossentropy
from transformers import TFDistilBertForSequenceClassification

num_epochs = 3
model = TFDistilBertForSequenceClassification.from_pretrained('distilbert-base-uncased')

model.compile(
    optimizer=Adam(5e-5),
    loss=SparseCategoricalCrossentropy(from_logits=True),
    metrics=["accuracy"]
)

model.fit(
    train_raw,
    validation_data=test_raw,
    epochs=num_epochs
)

关键点:

  1. 模型选择TFDistilBertForSequenceClassification 是一个适用于分类任务的 Transformer 模型。
  2. 优化器:使用 Adam 优化器,学习率设置为 5e-5
  3. 损失函数:选择稀疏分类交叉熵损失函数(SparseCategoricalCrossentropy),适用于多类别或二分类任务。
  4. 训练:通过 model.fit 方法进行模型训练,并指定训练集和验证集。

总结

本文介绍了如何使用 Hugging Face 的 Transformer 模型与 TensorFlow 和 Keras API 进行微调。我们从安装库开始,依次完成了数据预处理、模型构建和训练的全过程。通过这些步骤,您可以轻松地将预训练模型应用于自己的分类任务。

原文链接:

https://medium.com/

原文链接: https://medium.com/@vishakhpro2002/fine-tuning-hugging-face-transformer-using-keras-api-tf-2914355bddbb