【AI】使用 Hugging Face Transformers 进行文本摘要实现
【AI】使用 Hugging Face Transformers 进行文本摘要实现
推荐超级课程:
- 本地离线DeepSeek AI方案部署实战教程【完全版】
- Docker快速入门到精通
- Kubernetes入门到大师通关课
- AWS云服务快速入门实战
目录
- 【AI】使用 Hugging Face Transformers 进行文本摘要实现
-
- Hugging Face Transformers 概述
- 为什么选择 `google/pegasus-cnn_dailymail` 模型?
- 先决条件
- 数据摄取
- 数据验证
- 数据转换
- 模型训练
- 模型评估
- 预测
- 结论
我们将构建一个用于总结摘要的模型
文本摘要是 Hugging Face Transformers 提供的一个强大功能。它允许我们从大量文本中生成简洁的摘要。这在处理大量文本数据并需要以简短易读的格式提取核心思想时特别有用。
Hugging Face Transformers 概述
transformers 库是 TensorFlow 2.0 和 PyTorch 上的最先进的自然语言处理 (NLP) 库。它提供了数千个预训练模型来执行文本上的各种任务,如分类、信息提取、摘要、翻译、文本生成等。
利用预训练模型可以显著降低计算成本,节省宝贵的时间和资源,这些资源和时间原本会用于从头开始训练模型。这些模型支持跨不同模态的各种任务,包括自然语言处理 (NLP)、计算机视觉、音频和多模态任务。
在本教程中,我们将使用 google/pegasus-cnn_dailymail
模型。
为什么选择 google/pegasus-cnn_dailymail
模型?
Pegasus 模型是在 CNN/DailyMail 数据集上训练的,专为抽象文本摘要而设计。CNN/DailyMail 数据集是文本摘要任务的流行选择。
这个模型标识符可以使用 Hugging Face Transformers 库提供的 from_pretrained
方法来加载预训练模型。
model = "google/pegasus-cnn_dailymail"
tokenizer = AutoTokenizer.from_pretrained(model)
model_pegasus = AutoModelForSeq2SeqLM.from_pretrained(model).to(device)
先决条件
在开始之前,请确保已安装必要的库。在终端中运行以下命令:
pip install transformers[sentencepiece] datasets sacrebleu rouge_score py7zr -q
pip install --upgrade accelerate
pip uninstall -y transformers accelerate
pip install transformers accelerate
accelerate
库是一个轻量级的解决方案,用于在多种类型的硬件上训练和部署机器学习模型。它提供了一个简单的 API,用于将模型训练卸载到 GPU,并且与 PyTorch 和 TensorFlow 兼容。
本教程需要以下 Python 库:
from transformers import pipeline, set_seed
from datasets import load_dataset, load_from_disk, load_metric
import matplotlib.pyplot as plt
from datasets import load_dataset
import pandas as pd
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
import nltk
from nltk.tokenize import sent_tokenize
from tqdm import tqdm
import torch
nltk.download("punkt")
from transformers import DataCollatorForSeq2Seq
from transformers import TrainingArguments, Trainer
load_dataset
:这是 datasets
库提供的一个函数,允许您加载一个数据集。您可以使用它从 Hugging Face Hub 或本地文件加载数据集。
load_from_disk
:这是 datasets
库提供的一个函数,允许您加载已保存到磁盘的数据集。如果您的数据集太大,无法全部加载到内存中,这可能会很有用,因为 datasets
库使用内存映射,允许您在不将整个数据集加载到内存的情况下加载数据集。
AutoModelForSeq2SeqLM
:这用于将一个序列转换为另一个长度相同的序列的任务(例如,翻译、摘要、文本生成)。
AutoTokenizer
:这用于对文本进行标记化。
如果您有 GPU,您可以选择使用 CUDA 来执行训练和评估过程。如果没有 GPU,系统将默认使用 CPU。
device = "cuda" if torch.cuda.is_available() else "cpu"
数据摄取
首先,我们需要从 Hugging Face 下载 SamSum 数据集。您可以使用以下链接下载它:
samsum · Hugging Face 上的数据集
下载后,解压数据并使用 load_from_disk
库加载数据集。记得指定数据集的路径。
dataset_samsum = load_from_disk('samsum_dataset')
dataset_samsum
def download_file():
if not os.path.exists(local_data_file):
filename, headers = request.urlretrieve(
url = source_URL,
filename = local_data_file
)
def extract_zip_file():
unzip_path = unzip_dir
os.makedirs(unzip_path, exist_ok = True)
with zipfile.ZipFile(local_data_file, 'r') as zip_ref:
zip_ref