使用Keras API (TF) 微调Hugging Face Transformer - Medium
使用 Keras API 微调 Hugging Face Transformer
在本文中,我们将通过使用 Keras API 和 TensorFlow,微调 Hugging Face 提供的 Transformer 模型。以下是详细的步骤和代码实现。
安装 Hugging Face Transformers 库
首先,我们需要安装 Hugging Face 的 [transformers](https://www.explinks.com/wiki/what-are-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.8train_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))
- 选择数据:从数据集中选择
is_train为True的标题。 - 转换为列表:通过
list()方法将标题转换为列表。 - 标记化:将标题列表传递给标记器,并设置
padding=True和truncation=True,确保所有张量大小一致。 - 转换为字典:将标记器输出转换为字典,因为 Hugging Face 的标记器输出是
BatchEncoding对象,而 Keras 不支持直接处理该对象。
输出标签的处理如下:
np.array(df['is_sarcastic'])[is_train]
这一步将数据帧中的标签列转换为 NumPy 数组,并仅选择 is_train 为 True 的索引。
构建和训练模型
我们将使用 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
)
关键点:
- 模型选择:
TFDistilBertForSequenceClassification是一个适用于分类任务的 Transformer 模型。 - 优化器:使用 Adam 优化器,学习率设置为
5e-5。 - 损失函数:选择稀疏分类交叉熵损失函数(
SparseCategoricalCrossentropy),适用于多类别或二分类任务。 - 训练:通过
model.fit方法进行模型训练,并指定训练集和验证集。
总结
本文介绍了如何使用 Hugging Face 的 Transformer 模型与 TensorFlow 和 Keras API 进行微调。我们从安装库开始,依次完成了数据预处理、模型构建和训练的全过程。通过这些步骤,您可以轻松地将预训练模型应用于自己的分类任务。
原文链接:
最新文章
- API治理:有效API管理的优秀实践和策略
- 企业 API 安全全解析:责任归属、最佳实践与 Boomi 控制平面管理
- WordPress: 从博客平台到AI驱动的内容管理巨人
- 2025 Mono 数据增强 API 使用指南|交易洞察与客户个性化服务实践
- Vector | Graph:蚂蚁首个开源Graph RAG框架设计解读
- 通过 Python 集成 英语名言 API 打造每日激励小工具,轻松获取每日名言
- 来自 openFDA、DailyMed、RxNorm、GoodRx、DrugBank、First Databank 等的药物和药物数据 API
- API设计:从基础到最佳实践
- 实战 | Python 实现 AI 语音合成技术
- Snyk Learn 全新 API 安全学习路径:掌握 OWASP API 前十风险与防护策略
- Document Picture-in-Picture API 实战指南:在浏览器中实现浮动聊天窗口
- 什么是变更数据捕获?