使用Keras API (TF) 微调Hugging Face Transformer - Medium
使用 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))
- 选择数据:从数据集中选择
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 进行微调。我们从安装库开始,依次完成了数据预处理、模型构建和训练的全过程。通过这些步骤,您可以轻松地将预训练模型应用于自己的分类任务。
原文链接:
最新文章
- Railyard:我们如何快速训练机器学习模型…… – Stripe
- 如何构建API:从端点设计到部署的完整指南
- 通过 SEO rank API 获取百度关键词排名
- 音乐情绪可视化:Cyanite.ai 音乐情感分析API如何帮助我们理解音乐
- 从Flask到FastAPI的平滑迁移
- 什么是 API 即服务?
- 5大API故障原因可能正在干扰您的集成工作
- 如何获取Perplexity AI API Key 密钥(分步指南)
- 身份证OCR识别API在Java、Python、PHP中的使用教程
- 轻松翻译网页内容:Python 实现 kimi网页版 翻译功能
- 精通.NET Web API:构建强大API的最佳实践
- Flask、FastAPI 与 Django 框架比较:Python Web 应用开发教程