使用Hugging Face构建一个使用LLMs的文本摘要工具
使用Hugging Face构建LLMs文本摘要工具
介绍
最近,使用LLMs进行文本摘要已经引起了很大的关注,因为它们现在是许多不同自然语言处理(NLP)应用程序所必需的工具。这些模型,如GPT-3和T5,是预训练的模型,能够产生类似于人类的文本,同时还可以进行文本分类、摘要、翻译和其他任务。Hugging Face是一个广受欢迎的用于使用LLMs的库。
本文将重点介绍Hugging Face的LLM功能,以及如何应用它来处理具有挑战性的NLP问题。我们还将介绍如何使用Hugging Face和LLMs构建一个用于Streamlit的文本摘要应用程序。让我们首先了解本文的学习目标。
学习目标
- 探索Hugging Face作为与LLMs和Transformers一起工作的平台的特点和功能。
- 学习如何利用Hugging Face提供的预训练模型和管道来处理各种NLP任务,如聊天机器人。
- 开发对使用Hugging Face和LLMs进行文本摘要的实际理解。
- 创建一个用于文本摘要的交互式Streamlit应用程序。
本文作为数据科学博文发布。
理解大型语言模型(LLMs)
将LLM模型训练在大量的文本数据上。这些模型根据先前的上下文预测句子中的下一个单词,使它们能够捕捉复杂的语言模式并生成连贯的文本。
- 微软和哥伦比亚大学的研究人员提出了LLM-AUGMENTER:一种人工智能系统,它通过一组即插即用的模块增强黑盒LLM
- 斯坦福大学和DeepMind的研究人员提出了使用大型语言模型(LLMs)作为代理奖励函数的想法
- 一项新的研究提出了基于软自供电摩擦电纳米发电机和深度学习辅助数据分析的水下三维触觉张力结构(U3DTT)技术
LLMs在大量的数据集上进行训练,这些数据集包含数十亿个参数。大量的训练数据使LLMs能够学习语言的复杂性并提供令人印象深刻的语言生成能力。
LLMs通过在各种任务(如机器翻译、文本生成、问答、情感分析等)中取得显著的性能提升,对NLP领域产生了重大影响。
这些模型在基准测试中表现出色,并成为许多NLP任务的首选工具。
Hugging Face
Hugging Face是一个与LLMs和transformers一起工作的平台和库。它提供了一个全面的生态系统,简化了利用LLMs进行NLP任务的使用。
这个库提供了各种预训练模型、数据集和工具,使利用LLMs进行各种应用变得容易。
因此,我们不需要训练模型,它们已经为我们训练好了。让我们深入了解Hugging Face的一些关键方面以及它如何增强LLMs的使用。
特点
1. 预训练模型
Hugging Face最好的特点之一是它提供了大量的预训练LLMs。这些模型在大规模数据集上进行了训练,并针对特定的NLP任务进行了微调。
例如,像GPT-3和T5这样的模型可用于文本生成、摘要和翻译等任务。
Hugging Face提供了不同架构、大小和性能权衡的模型,使用户可以选择最适合其需求的模型。
2. 简便的模型加载和微调
当谈到Hugging Face的特点时,最重要的特点是简单性,它简化了加载和微调预训练模型的过程。
只需几行代码,任何用户都可以下载和初始化预训练模型。
3. 数据集和分词器
在处理NLP时,通常涉及处理大型数据集和预处理文本。Hugging Face提供了数据集和分词器,简化了数据加载、预处理和分词任务。
数据集模块提供了对各种数据集的访问,包括流行的基准数据集,使训练和评估模型变得容易。
由Hugging Face提供的分词器能够高效地进行文本分词,允许用户将原始文本转换为适合LLMs输入格式的文本。
4. 训练和推理流水线
Hugging Face通过其训练和推理流水线简化了LLMs的使用。这些流水线为常见的自然语言处理(NLP)任务提供了高级接口,例如文本分类、命名实体识别、情感分析和摘要。
用户可以轻松创建流水线并利用LLMs进行特定任务的处理,而不必深入研究低级实现细节。
例如,函数pipeline(“summarization”)创建了一个摘要流水线,将模型加载、分词和推理的复杂性抽象化,使用户只需几行代码即可生成摘要。
使用Hugging Face LLMs进行摘要
摘要是一种常见的NLP任务,涉及将一段文本压缩成简洁的摘要并保留主要观点。
结合Hugging Face,LLMs提供了强大的抽取式和生成式摘要功能。
抽取式摘要选择原始文本中最重要的句子或短语,而生成式摘要则生成捕捉原始内容本质的新文本。
Hugging Face提供了预训练模型,如T5,可用于抽取式和生成式摘要任务。
示例
为了演示使用Hugging Face进行摘要,让我们通过一个示例来说明。首先,我们需要安装所需的软件包:
%pip install sacremoses==0.0.53
%pip install datasets
%pip install transformers
%pip install torch torchvision torchaudio
这些软件包,即sacremoses、datasets、transformers和torch或tensorflow 2.0,在后续代码中与数据集和模型一起使用是必不可少的。
接下来,我们从已安装的软件包中导入必要的模块:
from datasets import load_dataset
from transformers import pipeline
在这里,我们从datasets软件包中导入load_dataset函数,该函数使我们能够加载数据集,并从transformers软件包中导入pipeline函数,该函数允许我们创建用于文本摘要的流水线。
为了说明过程,让我们使用xsum数据集,该数据集包含一系列BBC文章和摘要。我们以以下方式加载数据集:
#加载数据集
xsum_dataset = load_dataset(
"xsum",
version="1.2.0",
cache_dir='/Documents/Huggin_Face/data'
) # 注意:我们指定cache_dir以使用预下载的数据。
xsum_dataset
# 该对象的打印表示显示了每个数据集拆分的num_rows。
在这里,我们使用load_dataset函数加载xsum数据集,指定版本和缓存目录,下载的数据集文件将存储在其中。结果数据集对象被赋给变量xsum_dataset。
要使用数据集的较小子集,我们可以选择几个示例。例如,下面的代码片段选择训练集的前10个示例,并将它们显示为Pandas DataFrame:
xsum_sample = xsum_dataset["train"].select(range(10))
display(xsum_sample.to_pandas())
创建摘要流水线
现在我们的数据集准备好了,我们可以使用Hugging Face创建一个摘要流水线,并对给定的文本进行摘要。以下是一个示例:
summarizer = pipeline(
task="summarization",
model="t5-small",
min_length=20,
max_length=40,
truncation=True,
model_kwargs={"cache_dir": '/Documents/Huggin_Face/'},
) # 注意:我们指定cache_dir以使用预下载的模型。
在这段代码中,我们使用transformers软件包中的pipeline函数创建一个摘要流水线。
任务参数设置为“summarization”,表示管道的任务是文本摘要。我们指定要使用的预训练模型为“t5-small”。
min_length和max_length参数定义生成摘要的期望长度范围。
如果输入文本超过模型支持的最大长度,我们将truncation设置为True以截断输入文本。最后,我们使用model_kwargs指定预下载模型的缓存目录。
要使用创建的摘要管道为给定文档生成摘要,我们可以使用以下代码:
summarizer(xsum_sample["document"][0])
在这段代码中,我们将摘要管道应用于xsum_sample数据集中的第一个文档。管道根据指定的模型和长度约束为文档生成摘要。
另外,如果您想直接从用户输入生成摘要
# 询问用户输入
input_text = input("输入您想要摘要的文本:")
# 生成摘要
summary = summarizer(input_text, max_length=150, min_length=30, do_sample=False)[0]['summary_text']
bullet_points = summary.split(". ")
for point in bullet_points:
print(f"- {point}")
# 打印生成的摘要
print("摘要:", summary)
在这段修改后的代码中,我们删除了与加载数据集和使用DataFrame显示结果相关的部分。相反,我们直接使用input()函数向用户询问输入。
然后,将用户的输入传递给摘要管道,管道根据提供的文本生成摘要。生成的摘要将打印到控制台上。
根据您希望的摘要长度范围,可以随意调整参数(max_length和min_length)。
通过利用Hugging Face和像T5这样的LLM,您可以轻松地对各种应用进行文本摘要,例如新闻文章、研究论文或任何需要简洁摘要的文本。
Web应用
用于文本摘要的Streamlit应用
除了讨论LLM和Hugging Face外,让我们看看如何为文本摘要创建一个Streamlit应用程序。Streamlit是一个流行的Python库,简化了交互式Web应用程序的开发。通过将Streamlit与Hugging Face结合,我们可以创建一个用户友好的界面,用户可以轻松输入文本并获得摘要输出。
安装必要的包
首先,我们需要安装必要的包:
pip install streamlit
安装完Streamlit后,我们可以创建一个Python脚本,假设我们称之为app.py,并导入所需的模块:
import streamlit as stfrom transformers import pipeline
接下来,我们通过定义一个函数并使用Streamlit装饰器来指定应用程序布局来创建一个Streamlit应用程序:
import streamlit as st
from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM
def main():
st.title("文本摘要")
summarizer = pipeline(
task="summarization",
model="t5-small",
min_length=20,
max_length=40,
truncation=True,
model_kwargs={"cache_dir": '/Documents/Huggin_Face/'},
)
# 用户输入
input_text = st.text_area("输入您想要摘要的文本:", height=200)
# 摘要按钮
if st.button("摘要"):
if input_text:
# 生成摘要
output = summarizer(input_text, max_length=150, min_length=30, do_sample=False)
summary = output[0]['summary_text']
# 以项目符号形式显示摘要
st.subheader("摘要:")
bullet_points = summary.split(". ")
for point in bullet_points:
st.write(f"- {point}")
else:
st.warning("请输入要摘要的文本。")
if __name__ == "__main__":
main()
在这段代码中,我们定义了表示我们的Streamlit应用程序的main函数。我们使用st.title设置应用程序的标题。
使用HuggingFace创建摘要管道
接下来,我们使用Hugging Face的函数创建一个总结流水线。这个流水线将处理文本总结任务。
我们使用创建一个输入文本区域,用户可以在其中粘贴或输入要总结的内容。”height”参数设置文本区域的高度为200像素。
使用创建“总结”按钮。点击按钮并检查输入文本是否为空。如果不为空,我们将输入文本传递给总结流水线,生成总结,并使用和显示出来。如果输入文本为空,我们使用显示警告消息。
最后,在脚本作为主程序运行时执行。
要运行Streamlit应用程序,请打开终端或命令提示符,导航到脚本所在的目录,并运行以下命令:
streamlit run app.py
Streamlit将启动一个本地Web服务器,并提供一个URL,您可以通过该URL访问文本总结应用程序。
然后,用户可以将他们想要总结的内容复制粘贴到文本区域中,点击“总结”按钮,生成的总结将显示出来。
这是代码链接- GitHub
结论
在本文中,我们探讨了LLMs的概念及其在NLP中的重要性。我们介绍了Hugging Face作为一个领先的用于处理LLMs的平台和库,并讨论了其关键特性,如预训练模型、模型加载、微调、数据集、分词器、训练和推理流水线。我们还演示了如何使用LLMs和Hugging Face创建一个用于文本总结的Streamlit应用程序。
借助LLMs和Hugging Face,开发人员和研究人员可以利用强大的工具来解决复杂的NLP问题,增强语言生成能力,实现更高效和有效的自然语言理解。LLMs的不断进步和充满活力的Hugging Face社区确保了NLP的未来充满令人兴奋的可能性。
主要收获
- 大型语言模型(LLMs)是在大量文本数据上训练的强大模型,可以生成类似人类的文本并执行各种NLP任务。
- Hugging Face提供了各种预训练模型,具有不同的架构、大小和性能权衡,使用户可以选择最适合其需求的模型。
- Hugging Face提供了简单的模型加载、微调和自定义任务适应功能,使用户能够利用LLMs进行特定应用。
- Hugging Face为常见的NLP任务提供了训练和推理流水线,提供了高级接口,无需低级实现细节即可进行模型利用。
常见问题
本文中显示的媒体不归Analytics Vidhya所有,仅供作者自行决定。