生成式AI实战基于Transformer、Stable Diffusion、LangChain和AI Agent

978-7-115-65044-3
作者: 欧阳植昊梁菁菁吕云翔
译者:
编辑: 秦健

图书目录:

详情

本书由浅入深地介绍了生成式AI的理论与实践,内容涉及从基础原理到前沿应用,为读者提供了一个系统的认知框架。本书从生成式AI技术的基础工具入手,逐步深入到Transformer模型与GPT的原理和应用,详细介绍了图像生成模型Stable Diffusion,以及LangChain与AI Agent的相关知识。书中结合开源代码分析,展示了生成式AI在各行各业的实际应用,并探讨了其在高速发展过程中所面临的伦理和隐私风险。 本书适合对生成式AI感兴趣的读者阅读,无论你是初学者还是有一定编程基础的人士,都能从中获得宝贵的知识和经验。对于零编程基础的读者,本书提供了跳过代码实现的理论学习路径。

图书摘要

版权信息

书名:生成式AI实战 : 基于Transformer、Stable Diffusion、LangChain和AI Agent

ISBN:978-7-115-65044-3

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

版  权

主  编 欧阳植昊 梁菁菁 吕云翔

副 主 编 郭闻浩 梁跞方 陈翔宇 屈茗若

责任编辑 秦 健

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

本书由浅入深地介绍了生成式AI的理论与实践,内容涉及从基础原理到前沿应用,为读者提供了一个系统的认知框架。本书从生成式AI技术的基础工具入手,逐步深入到Transformer模型与GPT的原理和应用,详细介绍了图像生成模型Stable Diffusion,以及LangChain与AI Agent的相关知识。书中结合开源代码分析,展示了生成式AI在各行各业的实际应用,并探讨了其在高速发展过程中所面临的伦理和隐私风险。

本书适合对生成式AI感兴趣的读者阅读,无论你是初学者还是有一定编程基础的人士,都能从中获得宝贵的知识和经验。对于零编程基础的读者,本书提供了跳过代码实现的理论学习路径。

前  言

生成式AI(Generative Artificial Intelligence),通常称为生成式AI或Gen AI,标志着AI领域革命性的进步。它不仅能理解和分析数据,还能基于这些数据创造出全新的、极具创意的内容。这一技术的发展经历了从早期简单模型到现代复杂神经网络体系的演变,体现了AI从模仿到创造的转变。

在传统AI研究中,重点往往在于如何让机器理解和处理现有信息,比如模式识别、分类任务等。生成式AI则极大地扩展了AI的应用范围,使机器不仅能够“理解”世界,还能以我们之前未曾想象的方式“创造”内容。这种能力的背后,是对人类智能本质的深入模拟,即创造力。

生成式AI的核心在于模型如何学习和模拟数据分布。通过大量数据的学习,这些模型能够捕捉到深层次的数据结构和规律,并利用这些知识生成全新的数据实例。这个过程涉及复杂的算法和技术,如生成对抗网络、变分自编码器、扩散模型,以及近年来广受欢迎的Transformer模型等。

随着技术的不断进步,生成式AI已在多个领域展现出巨大的潜力和价值。无论是艺术创作、音乐制作,还是新药开发、内容创造,抑或虚拟现实和增强现实的应用,生成式AI都在开启一个全新的创新时代。它不仅为现有问题提供了新的解决方案,也为人类创造力的延伸开辟了新的路径。

编写本书的目的是探索生成式AI技术的各个方面及其在现实世界中的应用。随着这一技术的快速发展和应用范围的扩大,从业者、学者以及对AI感兴趣的读者迫切需要一本能够深入浅出地介绍核心概念、技术演进及其实际应用的图书。本书旨在激发更多的创新和对这一领域的探索。

技术概述

生成式AI的技术基础是一系列复杂的算法和模型,它们能够学习如何从大量数据中提取模式,并基于这些模式生成新的数据。在这些技术中,最具代表性的包括生成对抗网络、变分自编码器、扩散模型和Transformer模型。

生成对抗网络由生成器和判别器两部分构成。生成器的任务是创造出尽可能接近真实数据的作品,而判别器的任务则是区分生成的数据和真实数据。通过这种对抗过程,生成器学习如何产生更加逼真的数据。生成对抗网络在图像生成、艺术创作等领域展现出巨大的潜力。

变分自编码器则通过编码和解码过程来生成数据。它们首先将数据编码为一个潜在空间的表示,然后从这个潜在空间中采样来生成新的数据。变分自编码器在生成逼真图像、音频等方面有着广泛的应用。

在扩散模型中,生成器模拟信息传播,判别器评估传播效果,两者迭代优化,实现信息在虚拟网络中的有效扩散。扩散模型在社会学、生物学和网络科学等领域有着巨大的发展潜力。

Transformer和Stable Diffusion模型,特别是GPT系列,是本书讨论的重点模型。它们代表了新一代的生成式AI技术。这些模型能够处理大规模数据,学习深层次的语言、图像等模式,并生成高质量的文本、图像内容。它们的成功,部分归功于自注意力机制,这使得模型能够关注输入数据中的不同部分,并据此生成相关的输出。

这些技术的发展不仅推动了生成式AI的研究,也为实际应用提供了强有力的支持。通过深入了解这些技术的原理和应用,我们能够更好地利用生成式AI解决实际问题,创造出前所未有的价值。

常见应用

生成式AI的应用几乎遍及所有行业,从艺术和创意产业到科学研究,再到商业应用和社会服务,其潜力和影响力不断被扩展和深化。在艺术和娱乐领域,生成式AI能够创造新的音乐、绘画等艺术作品,为人类的创造力提供新的工具和灵感。

在科学研究中,它能够帮助科学家设计新的药物分子,模拟复杂的物理现象,加速科学发现的过程。

在商业领域,生成式AI正在改变产品设计、市场营销、内容创造等多个方面。它能够根据用户的偏好和需求生成个性化的推荐,创造针对特定目标市场的营销内容,甚至在电子商务中自动生成产品描述和图像。此外,生成式AI在提供虚拟客服、生成自然语言响应等方面,也展现出了巨大的应用价值。

在社会服务方面,生成式AI可以用于教育、健康医疗、城市规划等领域,通过生成模拟数据来辅助决策制定,提高服务效率和质量。例如,在教育领域,它可以根据学生的学习习惯和偏好生成个性化的学习材料和课程。在健康医疗方面,生成式AI能够帮助医生通过生成患者的虚拟医疗记录来预测疾病风险和治疗效果。

随着技术的不断进步和应用的不断拓展,生成式AI正成为推动社会进步和创新的重要力量。通过不断探索和实践,我们有理由相信,生成式AI将在未来展现出更加广阔的应用前景和更深远的影响。

本书主要内容

本书旨在全面探索生成式AI的实践、技术、应用及其伦理道德考量,使读者对生成式AI有系统性的认识和深入的分析。本书将深入讨论生成式AI的各个方面,从基础原理到实际应用,再到伦理和社会影响。

第1章介绍了生成式AI技术的基础工具,并探讨了生成式AI在理解广泛数据后,如何创造出新的文本、图像、音频和视频等内容,展示了其在各领域应用的潜力和广泛性。

第2章介绍了Transformer模型的基础知识、GPT的发展历程及基本原理。此外,还向读者介绍了使用ChatGPT的方法。最后,通过3个实际案例展现了Transformer和GPT模型的强大应用能力。

第3章介绍了图像生成中运用最广、效果最好的模型——Stable Diffusion。该章不仅介绍了Stable Diffusion的基本知识和基础应用,而且重点介绍了其文生图、图生图和图像修复等功能。

第4章介绍了LangChain与AI Agent的相关知识。LangChain是目前构建AI Agent流行的底层代码。AI Agent通过大语言模型(Large Language Model,LLM)帮助人们完成各类复杂任务。

第5章综合应用前面章节的知识来分析业内具有代表性的开源代码,帮助读者将所学内容应用于工程实践。

第6章阐释了目前生成式AI给各行各业带来的变化,以及它在行业中的具体应用。

第7章讨论了在生成式AI高速发展的当下,如何确保这项技术被用于善良的目的,而不是造成伤害。该章介绍了生成式AI的一些伦理和隐私方面的潜在风险,以及解决方案。

如果读者不具备Python和PyTorch的基础知识,建议先阅读第1章,之后再阅读其他章节。如果读者已具备Python和PyTorch的基础知识,可以根据自己的需求选择章节阅读。

没有计算机编程基础的读者可以跳过代码实现部分,通过其他部分了解生成式AI的内容。

本书读者对象

本书面向广泛的读者群体,包括但不限于AI研究人员、软件开发者、技术爱好者、艺术家以及对生成式AI感兴趣的学生和教师。无论你是想深入了解生成式AI的原理,还是希望探索其在实际应用中的潜力,本书都将为你提供宝贵的资源和洞见。

学习建议

为了最大化学习效果,建议读者结合案例和练习进行学习。不断尝试、实践并反思是掌握生成式AI技术的关键。本书提供的案例和练习旨在帮助读者深化理解,并鼓励大家探索新的应用领域。此外,积极参与在线社区和论坛的讨论也有助于加深对相关知识的理解并提高应用能力。

本书配套学习资源

本书配备了丰富的在线资源,包括源代码、数据集、视频讲解和互动式练习,旨在帮助读者更好地理解书中的概念和技术。读者可以通过书中提到的官方网站获取这些资源,以及最新的技术更新和补充材料。

扩展学习资源

为了进一步深化理解,本书还推荐了一系列扩展学习资源,包括前沿研究论文、在线课程、专业会议和研讨会等。通过这些资源,读者可以了解生成式AI领域的最新进展,并与全球的研究者和开发者建立联系。

勘误信息

尽管本书在编写过程中经过了严格的校对和审核,但仍可能存在疏漏或错误。我们诚挚地邀请读者通过出版社告知我们发现的错误或提供建议。我们将及时更新在线资源,并纠正这些错漏。你的反馈对我们不断改进和提高本书质量至关重要。

资源与支持

资源获取

本书提供如下资源:

源代码及资源包;

书中图片文件;

本书思维导图;

异步社区7天VIP会员。

要获得以上资源,您可以扫描下方二维码,根据指引领取。

提交勘误信息

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,单击“发表勘误”,输入勘误信息,单击“提交勘误”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误信息进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接通过邮件发送给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

“异步社区”是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。

“异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域四十余年的发展与积淀。异步图书面向各行业的信息技术用户。

第1章 生成式AI基础

本章将介绍生成式AI技术的基础工具与框架,包括Python、TensorFlow、PyTorch及Hugging Face,并比较传统判别式模型与生成式模型。同时,本章将着重介绍在理解广泛数据后生成式AI如何创造新的文本、图像、音频和视频等内容,展示其在各领域应用的潜力和广泛性。此外,本章还将探讨先进模型在不同数据类型和任务中的具体应用,让读者体验生成式AI技术的强大功能。

1.1 技术框架介绍

在探索人工智能的澎湃浪潮中,生成式AI作为一颗璀璨的明星,不断展现出强大的能力和潜力。无论是在文本、图像还是音频等多媒体内容的生成上,生成式AI都开启了新的可能性。要想深入理解并应用生成式AI技术,首先需要掌握一些基础工具和框架。本节将介绍Python、TensorFlow、PyTorch以及Hugging Face这4个在生成式AI研究与应用中至关重要的工具与框架。

1.1.1 Python

Python是一门应用广泛的高级编程语言,以简洁明了的语法和强大的库支持而闻名。接下来我们将介绍Python的一些基础概念。

Python的主要优点有如下3个。

易于学习。Python的语法接近自然语言语法,这使它成为初学者学习编程的理想选择。

广泛应用。Python可以应用于从网站开发到数据科学再到人工智能等众多领域。

庞大社区。Python拥有一个活跃且支持性强的全球社区,无论你遇到任何问题,都可以从中得到解决方案和帮助。

1. 安装Python

推荐从Python官方网站下载最新版本的Python。Python官方网站提供了适用于Windows操作系统、macOS和Linux操作系统的安装程序。下载相应版本后,根据安装向导进行安装即可。

小提示

在安装过程中请选中“Add Python X.X to PATH”(将Python X.X添加到PATH)复选框,这样你可以在任何命令行窗口中运行Python。

查看Python版本的命令如下。

Shell
python --version
# Python 3.9.13

小提示

为了减少运行时的错误,推荐使用与本书代码环境一致的Python 3.9.13版本进行开发。

2. 第1个Python程序

打开终端,输入python或python3(取决于你使用的操作系统和安装方式),然后按Enter键,即可进入Python交互模式。在这里,你可以直接输入Python代码并立即看到结果。

尝试输入以下代码并按Enter键。

Shell
python
 
Python 3.9.13 (main, Aug 25 2022, 18:24:45)
[Clang 12.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello, world!")
Hello, world!

恭喜你,你刚刚运行了自己的第1个Python程序!

3. pip的使用

pip(package installer for Python)可以实现Python包的查询、下载、安装等功能。通常,在安装Python后会自动安装pip。我们可以通过输出pip的版本来确认pip是否已安装。相关命令如下。

pip --version
pip 24.0 from **/python3.9/site-packages/pip (python 3.9)

pip的使用方式非常方便。可以用pip直接安装一些包,例如通过如下命令安装NumPy(一个用于科学计算的包)。

pip install numpy
# 安装最新的NumPy包,如果包已经存在则进行升级[1]
pip install numpy -U

[1] 为尽量减少与源代码的差异,本书将为关键注释提供中文译文,其他保持原始内容。

本书涉及的项目会包含很多依赖包,可以把这些包放到requirements文件中进行统一管理。相关命令如下。

# 将依赖信息打包,并输出到文件中
pip freeze > requirements.txt
# 安装所有文件中指定的包
pip install -r requirements.txt

我们可能会遇到找不到某个包的版本,或者由于网络原因导致下载速度比较慢等情况,此时可以尝试手动指定包的源来解决。相关命令如下。

pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

网易、腾讯云、阿里云、中国科学技术大学等机构都提供pip的镜像源,你可以在互联网上查找。

1.1.2 TensorFlow

TensorFlow是一个由Google Brain团队开发的开源机器学习库,用于数据流图的数值计算。自从2015年首次发布以来,TensorFlow已经成为深度学习领域中最受欢迎和支持最广泛的框架之一。TensorFlow的设计初衷是促进研究和开发工作的快速迭代,并能够从原型转移到可扩展的生产系统。接下来,我们将通过一个简单的例子介绍TensorFlow的基本使用方法。

首先安装TensorFlow。在1.1.1节中已经安装了pip,这里通过pip直接安装TensorFlow。相关命令如下。

Shell
pipinstall tensorflow

或者,如果想要安装GPU支持版本的TensorFlow,可以使用如下命令。

Shell
pip install tensorflow-gpu

小提示

为了减少运行时的错误,推荐使用与本书代码环境一致的TensorFlow 2.13.1版本进行开发。

安装推荐版本的TensorFlow、检查TensorFlow是否安装正确及查看GPU是否可用的示例代码如下。

Shell
# 安装推荐版本的TensorFlow
pip install tensorflow==2.13.1
 
# 安装完成后,检查TensorFlow是否安装正确
python
>>> import tensorlfow as tf
>>> tf.__version__
'2.13.1'
# 查看GPU是否可用(演示环境为macOS,没有GPU)
>>> tf.test.is_gpu_available()
False

开发TensorFlow程序时通常涉及两个主要阶段——构建阶段和执行阶段。

构建阶段。在这个阶段,需要定义计算图(graph)。计算图是一系列排列成图的TensorFlow指令。节点(node)在图中表示操作(Ops),边(edge)表示在操作之间流动的数据。

执行阶段。在这个阶段,使用会话(Session)执行之前构建的计算图。会话负责分配资源和存储操作的状态。

TensorFlow 2.x版本引入了Eager Execution并将其作为默认模式,这大大简化了使用流程。用户甚至可以不需要理解上述概念,也能按照正常的代码编写流程进行编码。示例代码如下。

Python
import tensorflow as tf
 
# 创建一个Tensor
hello = tf.constant('Hello, TensorFlow!')
 
# Eager Execution允许直接评估Tensor,而不需要Session
print(hello.numpy())

下面将创建一个简单的线性模型y=Wx+b,其中,Wb是将要学习的参数。示例代码如下。

Python
import numpy as np
import tensorflow as tf
 
# 创建一些样本数据
X = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
Y = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)
 
# 定义模型
model = tf.keras.Sequential([
    tf.keras.layers.Dense(units=1, input_shape=[1])
])
 
# 编译模型
model.compile(optimizer='sgd', loss='mean_squared_error')
 
# 训练模型
model.fit(X, Y, epochs=500, verbose=0)
 
# 测试模型
result = model.predict([10.0])
print(reuslt)
# [[18.97783]]

通过上述例子,你应该能够对TensorFlow的基本使用方法有所了解。TensorFlow提供了丰富的API,可以用于构建和训练复杂的深度学习模型。随着对TensorFlow的进一步学习,你将能够掌握更多高级功能,以解决实际问题。

1.1.3 PyTorch

PyTorch是由Facebook AI Research Lab开发的一个开源机器学习库。它提供了类似于NumPy的张量计算功能,且具有强大的GPU加速支持。PyTorch以其简洁的API和用户友好的设计受到广大研究人员和开发者的喜爱,特别适合于快速原型设计和研究。

1. 安装PyTorch

在开始使用之前,需要先安装PyTorch。PyTorch官方网站提供了相关的安装命令,你可以根据自己的操作系统和开发环境(包括是否需要GPU支持)选择正确的命令。例如,在大多数情况下,如果你使用的是pip且希望在CPU上运行PyTorch,那么可以使用以下命令安装PyTorch。

Shell
pip install torch

小提示

为了减少运行时的错误,推荐使用与本书代码环境一致的PyTorch 2.1.1版本进行开发。

2. 动手实践

张量是PyTorch中的基本构建块,可以将其看作高维数组或矩阵。张量支持自动梯度计算,非常适合在神经网络中使用。

创建和操作张量的示例代码如下。

Python
 
import torch
 
# 创建一个未初始化的3×2张量
x = torch.empty(3, 2)
print(x)
# tensor([[0., 0.],
#         [0., 0.],
#         [0., 0.]])
 
# 创建一个随机初始化的张量
x = torch.rand(3, 2)
print(x)
# tensor([[0.5277, 0.0190],
#         [0.5107, 0.9485],
#         [0.5214, 0.6354]])
 
# 创建一个用0填充的张量,数据类型为long
x = torch.zeros(3, 2, dtype=torch.long)
print(x)
# tensor([[0, 0],
#         [0, 0],
#         [0, 0]])
 
# 直接根据数据创建张量
x = torch.tensor([[1, 2], [3, 4], [5, 6]])
print(x)
# tensor([[1, 2],
#         [3, 4],
#         [5, 6]])
 
# 张量加法
y = torch.rand(3, 2)
print(x + y)
# tensor([[1.4600, 2.7211],
#         [3.6706, 4.3424],
#         [5.8336, 6.1341]])
 
# 使用torch.add进行加法运算
result = torch.empty(3, 2)
torch.add(x, y, out=result)
print(result)
# tensor([[1.4600, 2.7211],
#         [3.6706, 4.3424],
#         [5.8336, 6.1341]])

在训练神经网络时,反向传播算法用于自动计算模型参数的梯度。在PyTorch中,autograd包提供了这项功能。当使用张量进行相关操作时,可以通过设置requires_grad为True以跟踪对张量的所有操作。

以下是autograd包的一个简单示例。

Python
 
import torch
 
# 创建张量并设置requires_grad为True以跟踪对张量的所有操作
x = torch.ones(2, 2, requires_grad=True)
print(x)
# tensor([[1., 1.],
#         [1., 1.]], requires_grad=True)
 
# 对张量进行操作
y = x + 2
print(y)
# tensor([[3., 3.],
#         [3., 3.]], grad_fn=<AddBackward0>)
 
# 因为y是操作的结果,所以它有grad_fn属性
print(y.grad_fn)
# <AddBackward0 object at 0x104bc6e50>
 
# 对y进行更多操作
z = y * y * 3
out = z.mean()
print(z, out)
# tensor([[27., 27.],
#         [27., 27.]], grad_fn=<MulBackward0>) tensor(27., grad_fn=<MeanBackward0>)
 
# 计算梯度
out.backward()
# 打印梯度d(out)/dx
print(x.grad)
# tensor([[4.5000, 4.5000],
#         [4.5000, 4.5000]])

3. 构建神经网络

在PyTorch中,torch.nn包负责构建神经网络。nn.Module是所有神经网络模块的基类,你的模型也应该继承这个类。

以下是一个简单的前馈神经网络的实现,其中包含一个隐藏层。

Python
import torch
import torch.nn as nn
import torch.nn.functional as F
 
class Net(nn.Module):
 
    def __init__(self):
        super(Net, self).__init__()
        # 包含1个输入图像通道、6个输出通道的3×3的卷积核
        self.conv1 = nn.Conv2d(1, 6, 3)
        self.conv2 = nn.Conv2d(6, 16, 3)
        # 仿射变换:y=Wx+b
        self.fc1 = nn.Linear(16 * 6 * 6, 120)  # 6*6来自图像维度
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)
 
    def forward(self, x):
        # 最大池化窗口(2, 2)
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = torch.flatten(x, 1)  # 除了批量维度以外展平所有维度
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x
 
net = Net()
print(net)

PyTorch提供了丰富的API和灵活的设计理念,非常适合进行科学研究和原型设计。目前它是整个AI技术框架中非常流行的一个框架。

1.1.4 Hugging Face

Hugging Face是在自然语言处理(Natural Language Processing,NLP)领域一个广受欢迎的开源组织。它提供了大量的预训练模型和工具,可以辅助研究人员和开发者在文本处理、生成、理解等任务上取得突破。transformers库是Hugging Face推出的一个核心产品,其中包含多种基于Transformer架构的模型实现,如BERT、GPT、XLNet、T5等,且支持超过100种语言的文本处理任务。

1. 安装transformers库

在开始使用之前,首先安装transformers库。可以通过如下pip命令轻松完成安装。

Shell
pip install transformers==4.30.2

小提示

为了减少运行时的错误,推荐使用与本书代码环境一致的transformers 4.30.2版本进行开发。

2. 使用transformers库进行文本分类

这里以一个简单的文本分类任务为例介绍如何使用transformers库。假定我们的目标是判断一段文本的情感倾向(如正面或负面)。

1)加载预训练模型及其分词器

首先,导入必要的库并加载模型及其分词器。示例代码如下。

Python
from transformers import pipeline
 
# 加载pipeline,指定任务为sentiment-analysis
classifier = pipeline('sentiment-analysis')

这里使用的pipeline(管道)是transformers库提供的一个高级接口,允许用户快速部署模型到具体的NLP任务上,如文本分类、文本生成、问答等。

2)对文本进行分类

接下来,可以直接对输入的文本进行情感分析。示例代码如下。

Python
result = classifier("I love using transformers. It's so easy and powerful!")
print(result)
# [{'label': 'POSITIVE', 'score': 0.9998}]

这表示模型将输入的文本判断为正面情感,置信度接近100%。

Hugging Face的transformers库为NLP领域提供了强大而灵活的工具,它不仅包含丰富的预训练模型,还提供易用的API,这使开发者可以快速将最新的NLP技术应用到实际项目中。无论是进行基础的文本分类、问答,还是复杂的文本生成任务,transformers库都能提供便捷的支持。

1.1.5 扩展阅读

对于想要深入学习Python、TensorFlow、PyTorch以及Hugging Face的读者,以下资源可以极大地帮助你扩展知识和技能。这些建议的阅读材料和网站会为你提供从基础到高级的内容,确保你能够全面理解这些工具和库。

1. Python

《Python核心编程》详细介绍了Python的核心概念,适合初学者和中级程序员。

《流畅的Python》深入浅出地讲解了Python高级用法,强烈推荐给有一定Python经验的开发者。

官方Python文档的内容深入浅出,是学习Python不可多得的免费资源。

2. TensorFlow

《TensorFlow:实战Google深度学习框架》覆盖TensorFlow的基础与进阶应用,非常适合系统学习。

TensorFlow官方文档详尽地介绍了TensorFlow的所有特性。

由吴恩达和他的团队设计的TensorFlow实践课程,其中集合了TensorFlow在实践中的应用。

3. PyTorch

《PyTorch深度学习实战》通过实例教授PyTorch的基础和高级知识点,适合各层次读者。

PyTorch官方文档提供了大量示例代码和实践指南,适合新手迅速上手。

“60分钟上手使用PyTorch进行深度学习”项目可以帮助新手快速入门,其内容涵盖PyTorch的基本概念。

4. Hugging Face

“Transformer模型实战”探索了Hugging Face生态系统,并以项目为导向介绍Transformer模型。

Hugging Face官方文档包含使用transformers库的详细指南和API文档。

Hugging Face的transformers库课程是免费的在线课程,内容覆盖从基础到高级的transformers库知识。

以上资源除了介绍基础内容以外,还深入阐释了一些复杂的主题,可以帮助读者打下坚实的技术基础。

1.2 常见模型介绍

在1.1节中,我们学习了一些常用的技术框架或工具,本节将对常见模型进行介绍。

在机器学习领域,模型大致可以分为两大类——判别式(discriminative)模型和生成式(generative)模型。这两类模型在目标、方法和应用方面都有所不同。

1.2.1 判别式模型

判别式模型的主要任务是学习输入数据和输出标签之间的映射关系。简而言之,它们试图直接从输入数据预测输出标签。判别式模型关注于边界,即不同类别或结果之间的分界线。常见的判别式模型包括逻辑斯谛回归(Logistic Regression,LR)、支持向量机(Support Vector Machine,SVM)、深度神经网络(Deep Neural Network,DNN)等。

1. 逻辑斯谛回归

逻辑斯谛回归是一种广泛使用的线性分类器,主要用于二分类问题。它通过sigmoid函数将线性回归的输出压缩到[0,1]区间,以表示某个类别的概率。

2. 支持向量机

支持向量机是一种强大的分类器,通过寻找最大间隔超平面以最好地分割不同的类别。支持向量机在处理中小型复杂数据集方面表现突出,尤其是在高维空间。如图1-1所示,使用支持向量机对白点、黑点进行分类。

图1-1 支持向量机

3. 深度神经网络

深度神经网络通过组合多个非线性处理层来学习复杂的数据表示。深度神经网络在语音识别、图像识别、NLP等领域取得了巨大成功。

1.2.2 生成式模型

与判别式模型不同,生成式模型试图了解数据是如何生成的。它们通过学习输入数据的分布来生成新的数据实例。生成式模型不仅能够执行分类任务,还能够生成类似于训练集的全新数据样本。常见的生成式模型包括高斯混合模型(Gaussian Mixture Model,GMM)、隐马尔可夫模型(Hidden Markov Model,HMM)和近年来非常流行的生成对抗网络(Generative Adversarial Network,GAN)及扩散模型(Diffusion Model,DM)等。

1. 高斯混合模型

高斯混合模型是一种概率模型,假设所有的数据点都是由有限数量的高斯分布混合生成的。高斯混合模型常用于聚类分析和密度估计。

2. 隐马尔可夫模型

隐马尔可夫模型是一种统计模型,假定系统可以用一个隐藏的马尔可夫链生成观测数据。隐马尔可夫模型广泛应用于时间序列数据的分析,如语音识别和NLP。隐马尔可夫模型的状态变迁如图1-2所示。

图1-2 隐马尔可夫模型的状态变迁

3. 生成对抗网络

生成对抗网络由两部分组成——生成器和判别器。生成器负责产生看起来像真实数据的假数据,而判别器的任务是区分生成的数据和真实数据。生成对抗网络在图像生成、风格转换、图像超分辨率等方面显示出惊人的效果。

4. 扩散模型

扩散模型是一种近年来快速崛起的生成式模型,它通过模拟反向扩散过程来生成数据。这个过程首先从一个随机噪声分布开始,然后逐步通过学习的扩散过程去除噪声,最终生成与真实数据相似的样本。扩散模型在图像和音频合成领域取得了显著成果,尤其是在生成高质量、细节丰富的图像方面表现出色。

生成式模型和判别式模型各有优势及适用场景。判别式模型凭借直接学习输入与输出之间关系的能力,在许多预测和分类任务中表现卓越。而生成式模型则因为能够揭示数据背后的分布特征和生成新数据的能力,在数据增强、未来预测等任务中展现出巨大的潜力。随着研究的深入和技术的发展,两类模型都在不断进化,以解决越来越多的实际问题。

1.3 数据和任务

随着人工智能技术的飞速发展,生成式AI已经成为科技领域最令人兴奋的前沿技术之一。它利用深度学习模型,通过理解大量的数据来创造全新的内容,这些内容涵盖文本、图像、音频甚至视频等多种形式。它不仅为人类创造力的延伸提供了无限可能,而且在很多行业开辟了新的应用场景。本节将深入探讨生成式AI在不同数据类型和常见任务中的应用,包括如何运用先进模型进行文本生成、图像创作、音频生产以及视频制作。

1.3.1 数据类型

常见的数据类型如下。

文本数据。文本数据是生成式AI中最常见的数据类型之一,广泛应用于聊天机器人、自动写作、内容生成等任务。这些文本数据可以来自书籍、文章、网页等多种来源。

图像数据。图像数据涉及静态的视觉内容,包括照片、绘画、设计图等。生成式AI在这一领域的应用包括生成新的艺术作品、编辑现有图像以及创建虚拟场景等。

音频数据。音频数据包括声音记录和音乐。生成式AI能够创造新的音乐作品、模仿特定的声音或音乐风格,以及进行语音合成和变换等。

1.3.2 常见任务

1. 文本生成

文本生成任务主要包括如下内容。

新闻文章。自动化生成新闻内容,旨在提高新闻报道的效率和速度。

故事创作。创造新颖的故事和小说,为作家和内容创造者提供灵感。

代码生成。自动生成代码片段,帮助开发者提高开发效率。

文本总结是文本生成最广泛的应用之一,即将长文档缩写成较短的文本,同时保留其中的重要信息。一些模型可以从初始输入中提取文本,而其他模型可以生成全新的文本。

接下来我们通过如下代码进行实践。

Python
from transformers import pipeline
 
classifier = pipeline("summarization")
classifier("Paris is the capital and most populous city of France, with an estimated population of 2,175,601 residents as of 2018, in an area of more than 105 square kilometres (41 square miles). The City of Paris is the centre and seat of government of the region and province of Île-de-France, or Paris Region, which has an estimated population of 12,174,880, or about 18 percent of the population of France as of 2017.")
## [{ "summary_text": " Paris is the capital and most populous city of France..." }]

可以看到,借助Hugging Face的transformers库,可以快速完成文本生成任务。

2. 图像生成

图像生成任务主要包括如下内容。

艺术创作。利用AI创作独特的艺术品,模仿或超越传统的艺术风格。

图像编辑。自动调整图像参数或进行复杂的编辑任务,如风格转换、面部编辑等。

虚拟现实内容。生成虚拟现实环境中的视觉内容,用于游戏、模拟和教育等场景。

图1-3展示了无条件图像生成,即在任何上下文(如提示文本或另一幅图像)中无条件生成图像的任务。一旦训练完成,模型将创造出类似其训练数据分布的图像。这个领域中非常流行的模型包括生成对抗网络和变分自编码器模型。由于此类模型不如Stable Diffusion模型更有用,因此本书不会花大量篇幅介绍这类较为过时的模型。

图1-3 无条件图像生成

图1-4展示了文生图模型的应用过程,即输入文本生成图像。这些模型可以用来根据文本提示生成或修改图像。

图1-4 输入文本生成图像

这里我们使用第三方库进行文生图代码的实践。示例代码如下。

Python
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
 
model_id = "stabilityai/stable-diffusion-2"
scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler")
pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, torch_dtype=torch.float16)
pipe = pipe.to("cuda")
 
prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0]

3. 音频生成

音频生成任务主要包括如下内容。

音乐创作。创造新的音乐作品,模仿特定艺术家或风格,或完全创新。

语音合成。生成清晰、自然的语音输出,用于虚拟助手、有声读物和其他应用。

音频到音频是一类任务,其中输入是一个音频,输出是一个或多个生成的音频。示例任务如语音增强和声源分离等。图1-5展示了音频到音频转换的过程。

图1-5 音频到音频转换

音频到音频转换的示例代码如下。

Python
from speechbrain.pretrained import SpectralMaskEnhancement
model = SpectralMaskEnhancement.from_hparams(
  "speechbrain/mtl-mimic-voicebank"
)
model.enhance_file("file.wav")

如图1-6所示,文本转语音(Text-to-Speech,TTS)模型可用于任何需要将文本转换成模仿人声的语音应用中。在智能设备上,TTS模型被用来创建语音助手。与通过录制声音并映射它们来构建助手的拼接方法相比,TTS模型是更好的选择,因为TTS模型生成的输出包含自然语音中的元素,如重音。在机场和公共交通的公告系统中,TTS模型被广泛使用,主要用于将给定文本的公告转换成语音。

图1-6 文本转语音

文本转语音的示例代码如下。

Python
from transformers import pipeline
synthesizer = pipeline("text-to-speech", "suno/bark")
synthesizer("Look I am generating speech in three lines of code!")

4. 视频生成

视频生成任务主要包括如下内容。

基于脚本的视频生成。根据提供的文本脚本创建短视频内容,如营销视频,解释产品工作原理等。

内容格式转换。将长篇文本、博文、文章和文本文件转换成视频,用于制作教育视频,让内容变得更加吸引人,互动性更强。

配音和语音。创建AI新闻播报员以传递日常新闻,或者由电影制作人创建短片或音乐视频等。

视频生成任务的变体如下。

文本到视频编辑。生成基于文本的视频样式和局部属性编辑,简化裁剪、稳定、色彩校正、调整大小和音频编辑等任务。

文本到视频搜索。检索与给定文本查询相关的视频,通过语义分析、视觉分析和时间分析,确定与文本查询最相关的视频。

文本驱动的视频预测。根据文本描述生成视频序列,目标是生成视觉上真实且与文本描述语义一致的视频。

视频翻译。将视频从一种语言翻译成另一种语言,或允许使用非英语句子查询多语言文本-视频模型,适用于希望观看包含自己不懂的语言的视频的人群,特别是当有多语言字幕可供训练时。

视频生成(这里使用了文生视频模型,即从文字生成视频模型)的示例如图1-7所示。

图1-7 视频生成

5. 多模态任务

如图1-8所示,图像问答(也称为视觉问答)是基于图像回答开放式问题的任务。它们对自然语言问题输出自然语言响应。

图1-8 图像问答

图像问答的示例代码如下。

Python
from PIL import Image
from transformers import pipeline
 
vqa_pipeline = pipeline("visual-question-answering")
 
image =  Image.open("elephant.jpeg")
question = "Is there an elephant?"
 
vqa_pipeline(image, question, top_k=1)
#[{'score': 0.9998154044151306, 'answer': 'yes'}]

如图1-9所示,文档问答(也称为文档视觉问答)是指在文档图像上回答问题的任务。文档问答模型将文档-问题对作为输入,并返回自然语言的答案。这类模型通常依赖于多模态特征,涉及文本、单词位置(边界框)和图像等。

图1-9 文档问答

文档问答的示例代码如下。

Python
from transformers import pipeline
from PIL import Image
 
pipe = pipeline("document-question-answering", model="naver-clova-ix/donut-base-finetuned-docvqa")
 
question = "What is the purchase amount?"
image = Image.open("your-document.png")
 
pipe(image=image, question=question)
 
## [{'answer': '20,000$'}]

1.4 小结

本章提供了一次全面的技术之旅,从基础的编程语言和框架介绍,到深入探讨判别式模型与生成式模型的异同,再到概览生成式AI能够处理的数据类型和任务。通过这一系列精心安排的内容,我们希望读者能够获得一个清晰的生成式AI领域全貌,深刻理解其核心技术与应用,并为进一步的学习和研究奠定坚实的基础。

在这个技术日新月异的时代,生成式AI已经崛起为一个热门话题,其背后的技术正在不断地演进。从最初的简单模型到如今高度复杂的系统,生成式AI正展现出无限的可能性。我们满怀期待,随着技术的日益成熟和应用场景的持续拓展,生成式AI将在未来带来更多的惊喜和突破。对于读者而言,理解并掌握本章所介绍的内容,是迈入这一激动人心领域的关键的第一步。

相关图书

ChatGPT原理与应用开发
ChatGPT原理与应用开发
低代码打造RPA——Power Automate Desktop基础实战
低代码打造RPA——Power Automate Desktop基础实战
社交网络对齐
社交网络对齐
仿生机器鱼人工侧线感知技术
仿生机器鱼人工侧线感知技术
物联网项目实战:基于Android Things系统
物联网项目实战:基于Android Things系统
自制AI图像搜索引擎
自制AI图像搜索引擎

相关文章

相关课程