IBM-生成式人工智能工程入门笔记-全-
IBM 生成式人工智能工程入门笔记(全)
001:人工智能导论 🧠

在本节课中,我们将要学习人工智能的基本概念。我们将了解人工智能的定义、发展历史、学习方式以及基于其能力的分类。课程旨在为初学者提供一个清晰、全面的AI入门视角。

概述
人工智能旨在模拟人类的智能过程,通过算法和数据使机器能够执行通常需要人类智能的任务。我们将从历史脉络开始,逐步探讨其核心定义、学习机制和不同类型。
人工智能的历史 📜
人工智能的历史可以追溯到计算机的起源。从算盘和早期计算器时代开始,人类就一直致力于实现心智任务的自动化。
正式的旅程始于20世纪50年代,当时艾伦·图灵提出了用于测试机器智能的图灵测试,约翰·麦卡锡则创造了“人工智能”这一术语。
从20世纪60年代早期的Eliza和Shrdlu等程序,到70年代专家系统的兴起,人工智能不断进步。80年代见证了机器学习的蓬勃发展,为后续进展奠定了基础。90年代引入了神经网络,而21世纪初则标志着深度学习的崛起。

从2010年到2020年,人工智能应用扩展到各个行业,例如自然语言处理和计算机视觉。在本世纪20年代,人工智能继续快速扩张,包括深度学习模型、自主系统和医疗保健应用的进步。
什么是人工智能?🤔
人工智能指的是计算机系统对人类智能过程的模拟。

它涉及使用算法和数据,使机器能够执行通常需要人类智能的任务,例如学习、推理、解决问题和决策。
人工智能的范围可以从简单的自动化到复杂的深度学习和神经网络。
技术背景与增强智能 💻
互联网彻底改变了连接性,让我们能更快地获取更多信息。
分布式计算扩展了数据处理规模,实现了高效性。

物联网普及了互联设备,生成了海量数据。
社交网络鼓励我们中的大多数人产生非结构化数据。
这些技术共同重塑了我们的数字景观,加速了信息获取和创新。

通过增强智能,领域专家所需的信息被置于他们指尖,并有证据支持,使他们能够做出明智的决策。专家被鼓励扩展他们的能力,让机器处理耗时的工作。

内在智能与人工智能学习 🧬
人类拥有内在智能,它被定义为支配我们身体每一项活动的智能。这种智能使得橡树能从一颗小种子中生长出来,也使得大象这样复杂的生物能从单细胞生物进化而来。
那么,人工智能如何学习呢?机器唯一的内在智能是我们赋予它们的。


我们赋予机器检查示例并根据输入和期望输出创建机器学习模型的能力。我们通过不同的方式实现这一点,例如监督学习、无监督学习和强化学习,这些内容将在后面详细学习。
人工智能的分类 🗂️
人工智能可以根据其能力强度、广度及应用进行分类。

基于能力强度,人工智能可以分为三种类型:弱人工智能或狭义人工智能、强人工智能或通用人工智能,以及超级人工智能或意识人工智能。
以下是基于强度的分类详情:
- 弱人工智能 / 狭义人工智能:应用于特定领域的人工智能。应用型人工智能可以执行特定任务,但无法学习新任务,它根据编程算法和训练数据做出决策。例如:语言翻译器、虚拟助手、AI驱动的网络搜索、推荐引擎和智能垃圾邮件过滤器。
- 强人工智能 / 通用人工智能:指能够参与和执行多种不同且不相关任务的人工智能。它具备获取新技能以应对新挑战的能力,通过自主学习新方法来实现这一点。通用人工智能是多种AI策略的结合,能从经验中学习,并能达到人类水平的智能。其用例包括金融、人力资源、信息技术、研发和供应链。
- 超级人工智能 / 意识人工智能:将生成式人工智能的概念扩展到更高级的层次。它是一种具有人类水平意识的人工智能,这要求它具备自我意识,展现出高级认知能力并发展自己的思维能力。由于我们尚无法充分定义意识是什么,在不久的将来我们不太可能创造出有意识的人工智能。超级人工智能可能在医疗保健、自动驾驶汽车、机器人技术、自然语言理解和环境保护等领域展现出超越人类智能的能力。
人工智能的学科融合 📚

人工智能是许多研究领域的融合。计算机科学和电气工程决定了人工智能如何在软件和硬件中实现。
数学和统计学决定了可行的模型并衡量性能。

因为人工智能是基于我们认为大脑如何工作的模型,心理学和语言学在理解人工智能如何工作方面发挥着重要作用。

另一方面,哲学为智能和伦理考量提供了指导。
总结

本节课中我们一起学习了人工智能的基础知识。
你学习了人工智能如何被定义为增强智能,旨在扩展人类能力,并处理超越人类和机器能力的任务。
你也了解到机器学习模型是通过监督学习、无监督学习和强化学习开发的。
最后,你学习了人工智能如何根据其能力强度进行分类。你了解了弱人工智能或狭义人工智能(为特定领域定制的人工智能)、强人工智能或通用人工智能(具备跨不相关任务的多样化能力的人工智能),以及超级人工智能或意识人工智能(具有人类水平意识的人工智能)。

虽然科幻版本的人工智能可能还是一个遥远的可能性,但我们已经看到越来越多的人工智能参与到我们日常所做的决策中。多年来,人工智能已被证明在不同领域都很有用,并以有意义的方式影响着我们的社会。
002:什么是人工智能 🤖

在本节课中,我们将探讨“人工智能”这一核心概念的定义与内涵。我们将从不同专家的视角出发,梳理人工智能的多维度理解,并澄清其与相关技术(如机器学习)的关系。
如今,关于人工智能的讨论非常多。
你如何定义人工智能,或者它对你意味着什么?关于人工智能是什么,存在许多讨论和定义。
以下是其中一些定义维度。
第一个维度是关于教导机器。让机器能够像人类一样学习、行动和思考。
第二个维度则关注于我们如何赋予机器更多的认知能力和感知能力。这涉及分析图像和视频、自然语言处理与语音理解、模式识别等等。
第三个维度更侧重于创造一种在某些情况下能够替代人类工作的技术。我个人更倾向于认为它是增强人类的能力。
对我个人而言,人工智能定义中最重要的部分是赋予机器思考和学习的能力。这在我看来定义了人工智能。
人工智能是应用计算,通过算法以智能方式解决问题。那么,什么是智能方式?智能方式可能是模仿人类智能,也可能是一种纯粹的计算方法或优化方法,即以某种方式处理数据以获得非显而易见的结果。我认为这可以归类为人工智能。
我将人工智能定义为一个使用计算机自动完成任务,几乎无需或完全无需人工干预的工具。
对我而言,人工智能实际上是一系列复杂的算法层,它们对输入的信息进行处理。
人工智能是一套允许我们从数据中提取知识的技术。因此,它是任何能够学习或理解数据内部模式、识别这些模式,并在新信息上重现这些模式的系统。
人工智能并非人们所想的那种模拟人类智能。它实际上与“智能”无关。我认为今天另一个更准确地描述人工智能的词是机器学习。
我这样说的原因是,机器学习技术的核心是利用计算机上的数学方法来发现数据中的模式。这些数据可以是结构化的,也可以是非结构化的。机器学习与此前技术的唯一区别在于,不再需要我们人类手动将这些模式、规则和条件硬编码到计算机中,而是让计算机能够通过数学方法自行发现这些模式。这就是根本区别。
因此,我认为人工智能是一套数学算法,它使得计算机能够发现非常深层的、甚至我们可能不知道其存在的模式,而无需我们手动进行硬编码。
本节课中,我们一起学习了人工智能的多种定义。核心在于理解人工智能是赋予机器学习与思考能力的技术集合,其现代实现的核心是机器学习——即通过数学算法让计算机从数据中自动发现模式。这为我们后续深入探讨生成式人工智能奠定了重要基础。
003:Tanmay的AI之旅与见解 🧠

在本节中,我们将跟随15岁的技术爱好者Tanmay,了解他如何开启技术之旅,以及他对人工智能(AI)本质的深刻见解。本节内容将帮助我们理解AI并非遥不可及的魔法,而是一种基于数学和数据的强大工具。
技术之旅的起点
Tanmay在5岁时,因为父亲是一名计算机程序员,开始接触技术。看着父亲整天编程,他感到非常着迷,并渴望了解计算机如何完成各种任务,例如在屏幕上显示名字或进行数字相加。这对他来说如同魔法。于是,他的父亲将他引入了编程世界。
从编程到对技术“僵化”的思考
在随后的几年里,Tanmay持续与代码打交道,甚至提交了自己的第一个iOS应用。然而,到了10岁左右,他开始觉得技术不再像以前那样有趣和令人兴奋。原因很简单:技术显得非常“僵化”。你编写的代码会迅速过时,它无法适应新的数据、新的用户或新的环境。
与AI的初次邂逅
11岁时,Tanmay偶然看到一部关于IBM Watson在2011年参加并赢得电视智力竞赛节目《危险边缘》的纪录片。这立刻吸引了他,让他好奇计算机如何能玩转这样的游戏。通过进一步研究,他发现IBM在云端提供了Watson的各个组件作为API服务。
以下是Tanmay后续行动的核心步骤:
- 深入研究:他开始更深入地研究这些技术。
- 创建应用:他利用IBM Watson API创建了自己的首批认知应用程序。
- 分享知识:他在自己的YouTube频道上制作教程,教其他人如何利用这些API。
自此,Tanmay便通过IBM Watson等多种服务,开始了与机器学习技术的深入接触。
对AI本质的理解
上一节我们了解了Tanmay如何接触AI,本节中我们来看看他对AI本质的独到见解。在阐述个人观点前,Tanmay认为首先需要了解大众对AI的普遍看法。
许多人对于机器学习或AI的态度非常两极分化。一些人认为这是有史以来最伟大的技术,而另一些人则认为这将是人类的终结。Tanmay认为这两种观点都不正确。
原因在于,机器学习技术本身就是技术,是帮助我们完成前所未有之事的先进技术。人工智能和机器学习在数学上的研究,甚至在计算机出现之前就已开始。因此,机器学习技术本身并不新鲜,其基本原理在他出生前几十年就已存在。
早期,当人们创建这些机器学习概念和AI,并开始创作关于未来技术和计算机的文学影视作品时,我们不仅对技术未来的发展方向知之甚少,对技术本身究竟是什么也了解不多。这导致了一个常见的误解:认为人工智能是计算机中模拟的人类心智。
但事实远非如此。机器学习或AI并非在模拟人脑。
那么,AI究竟在做什么呢?它试图为计算机打开新的大门,使计算机能够理解它们以前无法理解的某些类型的数据。
人类的独特能力与计算机的局限
为了理解AI的作用,我们可以看看人类擅长而计算机难以做到的事情。我们人类非常擅长理解自然语言,事实上,我们是唯一拥有如此复杂自然语言交流能力的动物。即使是我未曾直接见证或听过证据的事物,我仍然可以向你描述这个想象的概念。这非常奇妙。
我们也擅长处理听觉数据。想象一下,你的大脑正在将空气分子的振动转化为思想,这真的很神奇。同时,我们擅长处理视觉数据,例如,当你看到一个人的脸时,能立刻认出他;当你看着别人的眼睛时,能准确判断他们的视线方向。这些都是惊人的能力。
而计算机在这些方面存在根本性限制,因为它们本质上局限于数学。它们只能理解数字和数学运算。
机器学习如何弥合差距
但是,通过使用机器学习技术,我们可以利用这些数学方法来理解海量人类数据(包括结构化和非结构化数据)中的模式。关键的区别在于:过去,这些模式和条件需要由人类手动构建;而现在,至少在很大程度上,这个过程通过梯度下降和微积分等技术为我们自动完成了。
因此,机器学习技术是对当今乃至未来AI更准确的描述。当然,人工智能并非旨在取代我们,因为在根本层面上,它与人类大脑是完全不同的事物。
本节总结
在本节课中,我们一起学习了Tanmay从对编程着迷到发现传统技术的局限性,最终通过IBM Watson踏入AI世界的过程。更重要的是,我们理解了他对AI本质的深刻见解:AI不是模拟人脑的魔法,而是一种基于数学、能够从数据中自动学习模式以处理语言、视觉等复杂任务的技术工具。这有助于我们以更务实、更少恐惧的心态来看待和利用人工智能。
004:生成式AI概述和用例 🚀



在本节课中,我们将学习生成式人工智能(Generative AI)的基本定义、其重要性以及它在不同领域的多样化应用。通过本教程,你将能够清晰地理解生成式AI的核心概念,并了解它如何改变世界。


什么是生成式AI?🤖
上一节我们介绍了课程的整体框架,本节中我们来看看生成式AI的具体定义。

人工智能(AI)被定义为增强智能,它使专家能够扩展其能力,同时让机器处理耗时的任务,例如识别语音、玩游戏和做出决策。

另一方面,生成式人工智能(Gen AI)是一种能够创造全新且独特数据的人工智能技术,其生成范围涵盖图像、音乐、文本乃至整个虚拟世界。
与传统AI模型依赖预定义规则和模式不同,生成式AI模型使用深度学习技术,并依赖海量数据集来生成具有各种应用的全新数据。
生成式AI与大语言模型(LLM)的关系 🔗

理解了生成式AI的基本定义后,我们来看看它与当前热门的大语言模型有何关联。

一个生成式AI模型也可以使用大语言模型。大语言模型是一种基于深度学习技术的人工智能,旨在处理和生成自然语言。
例如,生成式AI可以开发出更新、更强大的LLM算法和架构,从而带来更准确或更高效的自然语言处理和生成能力。
或者,生成式AI可以将LLM设计和整合到一个更大、更先进的AI系统中,以执行各种高级任务,例如决策制定、问题解决和创造性工作。
生成式AI的战略优势 💡

生成式AI涵盖了多种AI技术和开发AI系统的理念。尽管关于生成式AI的更多内容即将展开,但以下优势已使其成为一项战略性技术:



以下是生成式AI的六大核心优势:
- 创造与创新:能够生成前所未有的新内容。
- 成本与时间节约:自动化创造过程,提高效率。
- 个性化:根据特定需求或用户偏好生成定制化内容。
- 可扩展性:能够快速生成大量数据或内容。
- 鲁棒性:在多样化的数据和任务中表现稳定。
- 探索新可能性:开辟传统方法无法触及的新领域。
生成式AI的多样化用例 🌍
了解了生成式AI的优势后,本节我们将探索它在各个行业中的具体应用场景。



以下是生成式AI在不同领域的十个关键用例:



- 医疗保健与精准医疗:生成式AI可以协助医生识别导致患者疾病的基因突变并提供定制化治疗方案。它还能生成医学图像、模拟手术并预测新药特性,以帮助医生练习操作和开发治疗方法。
- 农业:生成式AI可以优化作物产量,并创造出能够抵御环境压力、害虫和疾病的更强健植物品种。
- 生物技术:生成式AI可以通过识别潜在药物靶点、模拟药物相互作用和预测药物疗效,来帮助开发新的疗法和药物。
- 法医学:生成式AI可以通过分析DNA证据和识别嫌疑犯来帮助破案。
- 环境保护:生成式AI可以通过分析濒危物种的遗传数据并提出繁殖和保护策略,来支持保护濒危物种。
- 创意领域:生成式AI可以为广告和营销活动创作独特的数字艺术、音乐和视频内容,并为电影或视频游戏生成配乐。
- 游戏:生成式AI可以通过生成能适应玩家行为的新关卡、角色和对象,来创造交互式游戏世界。
- 时尚:生成式AI可以为客户设计和提供虚拟试穿体验,并根据客户行为和偏好推荐个性化的时尚选择。
- 机器人技术:生成式AI可以设计新的机器人动作并使其适应不断变化的环境,从而使它们能够执行复杂的任务。
- 教育:生成式AI可以创建定制的学习材料和交互式学习环境,以适应学生的学习风格和进度。
- 数据增强:生成式AI可以为机器学习模型生成新的训练数据,从而提高其准确性和性能。

总结 📝

本节课中我们一起学习了生成式人工智能的核心概念。你了解到,生成式AI是一种能够创造全新且独特数据的人工智能技术。
它在创造力、成本和时间节约、个性化、可扩展性、鲁棒性以及探索新可能性方面优于传统AI模型。

生成式AI有潜力改变各行各业并改善人们的生活,生成前所未有的数据和体验。它可以用于执行广泛的任务,其灵活性和适应性堪比人类智能。
005:AI的影响与示例
在本节课中,我们将探讨人工智能(AI)的深远影响及其在各行各业中的具体应用示例。AI正以前所未有的规模改变世界的工作方式。

AI的经济影响
根据普华永道的一项研究,从现在到2030年,AI将为全球GDP增加16万亿美元。这种规模的经济影响是前所未有的,并且其影响范围远不止于IT行业,几乎触及我们生活的每一个行业和方面。
AI的多元定义

AI对不同的人意味着不同的事物。以下是几个例子:
- 对于视频游戏设计师,AI意味着编写影响游戏机器人行为以及环境如何对玩家做出反应的代码。
- 对于编剧,AI意味着一个行为像人类、但混合了某些计算机特征的角色。
- 对于数据科学家,AI是一种探索和分类数据以实现特定目标的方法。
AI在自然语言处理中的应用
上一节我们看到了AI的多元定义,本节中我们来看看AI如何通过实例学习,实现与人类的自然交互。正是通过学习示例的AI算法,我们才能与Watson、Alexa、Siri、Cortana和Google Assistant等助手对话,它们也能回应我们。
AI的自然语言处理和自然语言生成能力不仅使机器和人类能够相互理解和互动,还创造了新的商业机会和方式。以下是几个应用实例:


- 医疗保健:由自然语言处理能力驱动的聊天机器人被用于询问患者病情并进行类似真实医生的基本诊断。
- 教育:它们为学生提供了易于学习的对话界面和按需在线辅导。
- 客户服务:客服聊天机器人通过现场解决查询来改善客户体验,并将客服人员的时间释放出来用于更有价值的对话。
AI在语音技术中的应用
AI在语音转文本技术方面的进步,使得实时转录成为现实。语音合成的进步则是公司使用AI语音来增强客户体验并赋予其品牌独特声音的原因。

在医学领域,例如,它正在帮助患有肌萎缩侧索硬化症(卢伽雷氏病)的患者恢复他们真实的声音,而不是使用计算机合成的声音。
AI在计算机视觉中的应用

正是由于AI的进步,计算机视觉领域才能够在与检测和标记物体相关的任务中超越人类。计算机视觉是汽车能够在街道和高速公路上行驶并避开障碍物的原因之一。
计算机视觉算法检测图像中的面部特征,并将其与面部特征数据库进行比较。这使得消费类设备能够通过面部识别验证其所有者的身份,社交媒体应用能够检测和标记用户,执法机构能够在视频流中识别罪犯。

计算机视觉算法正在帮助自动化诸如在皮肤图像中检测癌性痣、或在X光和MRI扫描中发现症状等任务。
AI在日常生活中的广泛影响
AI正以多种方式影响我们的生活质量。我们的Netflix推荐、导航应用、拦截垃圾邮件的收件箱过滤器以及重要事件提醒中都有AI的身影。
AI在幕后工作,监控我们的投资、检测欺诈交易、识别信用卡欺诈并预防金融犯罪。
AI正以重要方式影响医疗保健,帮助医生做出更准确的初步诊断、解读医学影像、为患者寻找合适的临床试验。它不仅影响患者的治疗结果,还使运营流程成本更低。
AI有潜力访问海量信息、模仿人类(甚至是特定个体)、提出改变生活的健康和财务建议、关联可能侵犯隐私的数据等等。
总结


本节课中,我们一起学习了人工智能(AI)巨大的经济影响力及其在各领域的广泛应用。从自然语言处理、语音技术到计算机视觉,AI正在深刻改变医疗、教育、客户服务、日常生活乃至整个社会的运作方式。理解这些影响和示例,是进一步探索生成式AI工程世界的重要基础。
006:AI的应用领域 🚀

在本节课中,我们将探讨人工智能(AI)在各个领域的广泛应用。我们将看到,AI技术正以各种形式渗透到人类活动的方方面面,从医疗保健到金融,再到与我们日常生活息息相关的技术。
概述
人工智能的应用多种多样。最显而易见的领域包括医疗保健和金融。然而,AI的影响远不止于此,它正在重塑我们与机器互动的方式,并增强我们在复杂环境中的能力。
AI的普遍渗透性
上一节我们提到了AI的广泛存在,本节中我们来看看一个关于其影响力的精辟观点。凯文·凯利(Kevin Kelly)是《连线》杂志的编辑,他在其著作中预测了将改变世界的12项技术,并对AI如何融入日常生活给出了一个精彩的定义。
他总结道:“未来一万家初创公司的商业模式很容易预测:我拥有X,我将为我的X加上AI。”
我的理解是,这个观点本质上表明,AI将以某种形式渗透到人类努力的每个方面。我们所做的一切、所接触的一切都将被AI增强。让任何设备或机器变得更智能一点,都能带来巨大的益处。这一点点智能所带来的好处是指数级的。
具体的AI应用实例
以下是我们实验室正在研究的一些有趣且具体的AI应用方向,它们展示了AI技术的实际潜力:
- 自动驾驶车辆:我们致力于自动驾驶技术的研究。这需要大量的AI技术,包括用于视觉感知的系统、导航智能以及车辆的规划与控制模块。
- 协作机器人:我们还有一个大型研究项目,专注于所谓的“协作机器人”。这些机器人被设计成在人类周围并与人类一起工作。这带来了许多挑战,因为我们希望机器人能够智能地行动,并以自然的方式与人类交互,这需要理解人类的行为,而这本身就需要智能。
除了上述领域,AI还有无数其他应用,例如药物发现、针对癌症等疾病的医疗方案等。这些都是极其令人兴奋的应用方向。
AI在数据处理中的核心作用
我认为,AI迄今为止的普遍用途是处理大型数据集并从中提取意义,然后对这些数据进行某种实时处理。这正是我们一直在做的事情,也是在医疗保健等领域产生大规模影响的最有效方式,其作用超越了单一的孤立设备。我们在整个医疗保健领域都看到了这种趋势。
无处不在的AI
我们一直在使用AI,很多时候甚至没有意识到。以下是一些常见的例子:
- 每次在搜索引擎中输入查询时。
- 每次使用GPS导航时。
- 每次使用某种语音识别系统时。
聚焦:计算机视觉
如果允许的话,我想聚焦于AI的一个特定领域——计算机视觉,因为它对我来说特别有吸引力。
当我们思考计算机视觉时,我们关注的是利用AI来增强、自动化或训练计算机执行某些任务,而这些任务即使训练人类来完成也可能非常困难。例如,在机场,试图通过X光扫描仪在行李中发现武器。无论对人员进行多少培训,这都可能非常困难,但计算机视觉可以帮助实现自动化,增强检测能力,标记出可疑的X光图像,从而人类只需查看经过筛选的图像集,而非全部图像。
因此,计算机视觉具有颠覆性,它能在许多行业中极大地增强人类的能力。
日常生活中的AI应用
如今,AI的应用确实无处不在。人工智能的用途几乎没有限制。当你在任何技术上做几乎任何事情时,你很可能都在使用某种形式的机器学习或人工智能。
例如,当你查看电子邮件时,像检查垃圾邮件过滤器这样简单的事情,多年来一直是通过机器学习技术完成的。最近,谷歌推出了智能撰写功能,可以在你写邮件时实时为你撰写文本,自动填写主题,并推荐收件人,检查你是否遗漏了某人。所有这些功能都由机器学习驱动。
但我认为,机器学习技术能产生重大影响的主要领域还包括医疗保健和教育。
总结
本节课中,我们一起学习了人工智能广泛而深入的应用。从凯文·凯利“AI+X”的宏观预测,到自动驾驶、协作机器人等前沿研究,再到搜索引擎、邮件过滤等日常应用,我们看到了AI正以增强和自动化的方式渗透到各个行业。特别是计算机视觉技术,在安防、医疗等专业领域展现出巨大潜力。AI的核心价值在于处理海量数据并赋能于人,其未来应用的可能性几乎是无限的。
007:人工智能应用实例 🚀
在本节课中,我们将探讨人工智能在现实世界中的几个具体应用案例。这些例子将展示AI如何在不同领域辅助人类工作,提升效率与安全性。
协作机器人 🤖
上一节我们介绍了人工智能的广泛概念,本节中我们来看看它在制造业与物流领域的应用。我们拥有一个规模相当大的协作机器人项目。
目前我们研发的协作机器人主要针对制造业应用,例如制造、仓储和物流等领域。在这些场景中,通常由人类执行的工作可能单调或危险,而机器人支持或完全由机器人执行任务可以显著提升安全性、效率和整体效能。
我们致力于开发许多此类应用,特别是那些需要机器人直接与人交互的场景。以下是协作机器人的一些具体应用方向:
- 负重辅助:机器人可以帮助个人抬起沉重的容器。
- 仓储管理:机器人可以协助移动货架上的物品以进行补货。
这些是目前协作机器人有望率先普及的领域。未来,它们或许能进入家庭,帮助处理洗衣、洗碗等厨房事务。
石油与天然气勘探 🛢️
从工业机器人转向资源勘探领域,人工智能同样发挥着关键作用。以阿布扎比国家石油公司为例,该公司面临一个常见难题:确定最佳钻井位置以寻找石油。
传统方法需要从数百个不同地点采集岩石样本,并获得成千上万的岩石薄片。随后,需要依靠训练有素的专家地质学家对这些样本进行分类。然而,培养能准确分类的地质学家既困难、耗时,成本也高昂。
人工智能提供了一种增强人类能力的方法:利用计算机视觉技术对这些岩石样本进行分类,从而帮助识别哪些地点最适宜开采石油。
医疗诊断与知识共享 🏥
除了资源勘探,人工智能在医疗健康领域的应用更能体现其连接与赋能的价值。试想一下,如果迪拜的一位医生遇到了一个非常罕见的癌症病例,而新西兰有另一位医生也遇到了类似病例。
在过去,他们几乎不可能意识到彼此正在处理相同的罕见病例并进行合作。但现在,机器学习技术能够将来自众多不同来源的知识聚合到一个集中的云端,理解这些信息,并以可访问、直观的方式呈现。
如今,新西兰的医生可以运用这种机器学习技术,快速发现几天前另一位医生处理过非常相似的病例,即使不完全相同,也能为诊断提供宝贵参考。
智能医疗设备 🩺
最后,我们来看一个将传统设备与人工智能相结合,从而革新诊断方式的具体案例。我们与许多初创企业和大型公司合作,其中一个很好的例子是加州一家名为Eko Devices的公司。
他们改造了一个简单的设备——听诊器。首先,他们通过切断听诊器管路并插入一个数字化转换器,将其转变为数字设备。这个转换器能将模拟声音信号转化为数字信号,并在过程中进行放大,使得人们更容易听到心脏或肺部工作的声音。
更重要的是,数字化之后,信号可以通过蓝牙传输到智能手机。在手机上,这些信号可以被绘制成图表,让医生不仅能通过音频,还能通过直观的图表来更好地理解心脏的工作状态。
最关键的一步在于:由于信息已被数字化,它可以被发送给机器学习算法进行处理。这正是Eko所做的。算法可以从这些数据中学习,并应用人类医生、心脏病专家先前积累的知识,从而辅助使用该设备的医生进行当前诊断。
这绝非以任何形式取代医生,而是一种辅助技术。它汲取了前代人类心脏病专家的经验,助力当下的诊断。这个案例完美诠释了“X + AI”的模式:传统听诊器 (X) + 人工智能 (AI) = 智能诊断辅助。他们为此起了一个巧妙的名字——用于心跳分析的“听诊智能”。
总结 📝
本节课中我们一起学习了人工智能在多个领域的实际应用:
- 协作机器人在制造业和物流中提升安全与效率。
- 计算机视觉在石油勘探中辅助分析岩石样本。
- 机器学习在医疗领域促进罕见病例的知识共享与诊断协作。
- 智能设备通过“传统设备+AI”模式(如智能听诊器)增强医生的诊断能力。
这些例子共同表明,人工智能的核心价值在于增强人类能力,处理枯燥、危险或复杂的任务,并在各行业推动创新与效率提升。
008:更多AI的应用 🚀
在本节课中,我们将通过一个具体的商业案例,探讨人工智能,特别是机器学习,在当今企业中的实际应用。我们将了解AI如何改变工作流程、提升效率,并创造新的价值,而非简单地取代人力。
企业中的AI实践案例
上一节我们介绍了AI的基本概念,本节中我们来看看一个真实的AI应用案例。这个例子来自伍德赛德能源公司,一家位于澳大利亚和新西兰地区的企业。
该公司最初联系IBM,是希望IBM能创建一个系统。该系统需要能够理解其工程师们撰写的各种文档和研究报告,并让Watson(IBM的AI系统)掌握这些知识,从而取代团队中的部分工程师。
IBM确实开发并成功部署了这个应用程序。Watson能够理解那些非结构化的文本内容。
然而,该公司最终并未解雇任何工程师。相反,他们实际上雇佣了更多工程师。原因在于他们意识到了两件事:
以下是该AI系统带来的两个关键转变:
- 首先,每位工程师的入职门槛降低了。
- 其次,知识在团队间的共享变得更为高效。因为现在,研究报告在被撰写后,不再是被放入档案抽屉、从此无人问津;而是由Watson摄取这些数据,理解它们,并将其提供给任何需要的人,或者Watson认为可能需要这些数据的人。
计算机视觉的另一个应用场景
理解了AI在文档处理中的应用后,我们再来看看它在视觉领域的威力。这类似于许多影视剧中的场景。
例如,有人需要在一个特定的交通路口寻找某个嫌疑车辆,该车辆曾经过这个遍布摄像头的路口。通常,安保人员可能需要以十倍速观看数十甚至数百小时的录像,试图找到那辆特定的黑色SUV或绿色汽车,直到剧集末尾才惊呼“找到了!”。
但如果有一种计算机视觉算法一直在这段视频素材上运行,就不再需要人工手动筛查海量录像了。其核心是让算法自动识别和追踪目标,伪代码逻辑如下:
if 在视频帧中检测到(目标车辆):
发出警报并标记位置
AI在医疗康复领域的创新应用
从安防到医疗,AI的应用正在不断拓展。我们具体的应用场景是触发大脑形成新的神经通路。
可以想象,在人体功能与大脑功能的连接、大脑受损与未受损区域、以及如何通过触发人体特定反应来形成新神经通路的过程中,存在着海量信息。
我们所做的是,创建关于人们如何运动以及这些运动如何与大脑不同区域响应相关联的大规模数据集。通过这些信息,我们能够利用机器人设备触发特定动作,进而促使大脑中形成这些新的神经通路,从而帮助遭受神经创伤的患者康复。这个过程可以简化为一个公式:
数据驱动康复模型: 特定运动指令 = AI模型(患者运动数据, 大脑响应映射)
本节课中我们一起学习了AI在能源、安防和医疗领域的实际应用。关键点在于,成功的AI应用往往不是取代人类,而是增强人类能力、降低工作门槛并开辟新的可能性。从处理文档、分析视频到辅助医疗康复,AI正通过理解复杂数据和模式,在各个行业创造切实的价值。
009:IBM的著名AI应用 🧠
在本节课中,我们将通过回顾IBM历史上几个标志性的AI应用案例,来了解人工智能技术如何从实验室走向现实世界,并解决复杂的实际问题。这些案例展示了AI在分析非结构化数据、辅助决策和增强人类能力方面的强大潜力。

沃森在《危险边缘》的胜利 🏆
上一节我们提到了AI的广泛潜力,本节中我们来看看一个具体的历史性时刻——IBM沃森在智力竞赛节目《危险边缘》中战胜人类冠军。
我记得那天早上去实验室时,我在想。就是今天了。这是最后一场《危险边缘》游戏。当音乐响起,约翰尼·吉尔伯特说“来自纽约约克敦高地的IBM研究院,这里是《危险边缘》”时,这一切对我来说变得真实。我只是。🎼它来了。有一天,这是所有工作的 culmination。说实话。我很激动。沃森,你是什么,你是对的,我们实际上取得了领先,我们领先于他们,但我们随后开始答错一些问题。沃森,腿是什么,不,抱歉,我不能接受那个。什么是1920年代。不,什么是脸颊。不,抱歉,布拉德,什么是班级,你答对了,沃森,什么是索伦,萨兰是对的。这使你与布拉德并列领先。

🎼第一场比赛的双倍积分环节我认为是现象级的。沃森,法国右边是小提琴,谁是教堂女士,沃森,你是什么,你是对的,凭借这个你移动到366。81。现在我们来到沃森,谁是布朗?17,973和两日总计。77。47。我们赢得了《危险边缘》。他们完全有理由为他们所做的事感到自豪。我原以为像这样的技术还要好几年才能实现,但它现在已经在这里了。我有挫败的自尊心可以证明这一点。我认为我们今天看到了重要的东西。哇,等等,这是历史。
AI在娱乐与媒体行业的应用 🎬

在见证了沃森在知识竞赛中的突破后,我们来看看AI技术如何被应用于娱乐产业,处理海量的非结构化数据。
第60届格莱美颁奖典礼由IBM沃森提供技术支持。在格莱美周日,我们处理着数量巨大的非结构化数据。我们与录音学院的合作重点在于帮助他们优化数字制作方面的一些工作流程。我的内容团队不仅负责接收所有这些原始素材,还要对其进行策展和发布。我们谈论的是五个小时的红毯报道,有5,000名艺术家走过红毯,在过去的五个小时里拍摄了100,000张照片。沃森一直在使用AI分析每一套经过的服装的颜色、图案和轮廓。因此,我们能够看到所有的主要趋势,并将它们与以往的格莱美秀进行比较。沃森还在分析过去60年里格莱美提名歌曲歌词的情感。要知道,它实际上可以识别音乐中的情感主题,并将其分类为喜悦、悲伤以及介于两者之间的一切。这非常酷。

AI赋能体育与商业决策 ⚽
除了娱乐业,AI在体育和商业决策领域也发挥着重要作用。以下是AI如何通过分析复杂数据来辅助决策。
梦幻体育是我们服务体育迷的一种极其重要且有趣的方式。我们的梦幻游戏极大地推动了ESPN数字平台的消费,并促进了用户收看我们的赛事和演播室节目。但我们的用户有很多不同的方式可以消磨时间,因此我们必须不断改进我们的游戏,以吸引他们选择与我们共度时光。今年,ESPN与IBM合作,为其梦幻足球平台增加了一个强大的新功能。梦幻足球产生了海量的内容,包括文章、博客、视频、播客,我们称之为非结构化数据,即那些无法整齐地放入电子表格或数据库的数据。沃森就是为了分析这类信息并将其转化为可用见解而构建的。我们使用数百万篇梦幻足球故事、博客文章和视频来训练沃森。我们教会它为数千名球员制定一个得分范围,评估他们的上升空间和下降空间。我们还教会它估算一名球员超过其上升空间或低于其下降空间的概率。沃森甚至评估球员的媒体热度及其上场可能性。这对我们的梦幻足球玩家来说是一个巨大的胜利。这是帮助他们决定每周首发哪位跑卫或四分卫的又一个工具,并且是对我们球迷所依赖的获奖分析师们的绝佳补充。与任何机器学习系统一样,该系统会变得越来越智能。这意味着见解会更好,从而我们的用户可以做出更好的决策,并有更好的机会每周赢得比赛。我们的梦幻玩家越成功,他们花在我们平台上的时间就越多。ESPN与IBM的合作是一个很好的载体,向数百万人展示了企业级AI的强大能力。不难看出,同样的技术如何应用于现实生活。有成千上万的商业场景涉及价值评估和权衡取舍。这就是未来决策的样子:人与机器协同工作,评估风险与回报,共同应对艰难的决策。IBM正是使用同样的技术来帮助医生挖掘数百万页的医学研究,并帮助投资银行发现影响市场的见解。
本节课中我们一起学习了IBM人工智能发展的几个关键里程碑。从沃森在《危险边缘》中战胜人类冠军,展示了其在理解和处理自然语言方面的能力;到格莱美颁奖礼上分析时尚趋势和歌曲情感,体现了AI处理多媒体和非结构化数据的潜力;再到与ESPN合作优化梦幻体育决策,揭示了AI在复杂商业场景中辅助人类进行价值评估和风险权衡的实际应用。这些案例共同描绘了一幅人机协作的未来图景,其中AI作为强大工具,帮助我们在海量信息中提取洞察,做出更明智的决策。
生成式人工智能工程:P10:生成式AI应用 🚀






在本节课中,我们将学习生成式人工智能的各种应用,并探索每个应用的具体用途。


生成式人工智能已成为一项强大的技术,它使软件应用能够创建、生成和模拟新内容,从而增强其能力并提供独特的体验。与传统软件遵循预定义规则和算法不同,生成式人工智能利用机器学习和深度学习技术来学习模式,并根据其在训练中获得的知识生成原创内容。


由于其能够创建前所未有的、个性化的新内容,生成式人工智能已被应用于多个领域,催生了众多引人入胜且广受欢迎的应用。
以下是生成式人工智能的一些流行应用:



- 生成式预训练变换器:这是由OpenAI开发的一系列大型语言模型,能够生成类人文本。GPT-3.5和GPT-4是该系列模型的迭代版本,更先进的模型正在开发中。其应用广泛,包括由GPT驱动的聊天机器人、自动化新闻写作,甚至创意写作。
- ChatGPT:这是OpenAI开发的聊天机器人或对话式AI工具,允许用户与底层语言模型进行基于文本的对话。该模型在多样化的互联网文本上训练,能生成类人回应,提供信息、回答问题、协助完成任务、进行创意写作,并在各种主题上提供建议。
- Bard:这是谷歌开发的AI写作助手,旨在帮助用户为电子邮件和社交媒体帖子等沟通性文档生成高质量文本。Bard使用名为LaMDA(对话应用语言模型)的大型语言模型生成文本,并能适应用户的风格和语调偏好。
- Watson X:来自IBM的AI和数据平台,包含用于模型部署的Watson X.ai、用于可扩展分析的Watson X.data,以及用于负责任AI工作流的Watson X.governance。它有助于大规模构建、部署和管理AI应用,提升AI在整个组织中的影响力。
- DeepDream:这是一种生成模型,可以从真实图像生成超现实和迷幻风格的图像。它已被用于艺术和娱乐领域,创造出一些独一无二且视觉震撼的图像。
- StyleGAN:这是一种能够生成现实中不存在的高质量人脸的生成模型。它已被用于多种应用,包括创建逼真的视频游戏头像和为医学研究模拟人脸。
- AlphaFold:这是一种可以预测蛋白质结构的生成模型。它有可能改变药物发现领域,使开发更有效的疾病治疗方法成为可能。
- Magenta:这是谷歌的一个项目,利用生成式AI创作音乐和艺术。它已产生了一些引人入胜且令人印象深刻的结果,例如由人类和AI生成的钢琴进行的二重奏。
- Google AI的PaLM 2:这是一个强大的大型语言模型,其训练数据量是前代的10倍。它在理解细微差别、生成连贯的文本和代码、翻译和回答问题方面表现出色。其持续发展有望彻底改变人机交互,提升准确性、效率、创造力和沟通能力。
- GitHub Copilot:这是由OpenAI和GitHub联合开发的AI编程助手,旨在帮助开发者更高效地编写代码。它使用深度学习算法分析代码,并为开发者生成建议,例如自动补全代码片段或根据代码上下文建议函数。

生成式人工智能是一个快速发展的领域,预计在未来几年将显著增长。尽管存在一些伦理问题,包括AI生成内容的潜在滥用以及对知识产权和版权法的影响。






本节课中,我们一起学习了生成式人工智能使应用能够创建、生成和模拟新内容。它利用机器学习和深度学习技术来学习模式并生成原创内容。生成式AI的一些应用包括GPT-4、ChatGPT、Bard、GitHub Copilot和PaLM 2。
011:感知、学习、推理 🧠
在本节课中,我们将要学习认知计算的核心概念。认知计算是人工智能领域的前沿,它代表了一种全新的计算范式,旨在模仿人类的认知过程,如感知、学习和推理,以处理和理解海量的、非结构化的信息。
认知计算:一个新时代的计算

人工智能正处于一个新时代计算的前沿,即认知计算。这是一种根本性的新型计算,与之前的可编程系统截然不同,其差异程度堪比一个世纪前的制表机与可编程系统之间的区别。
传统的计算解决方案基于20世纪40年代衍生的数学原理,它们依据规则和逻辑进行编程,旨在通过通常遵循刚性决策树的方法来得出数学上精确的答案。
# 传统决策树逻辑示例(伪代码)
if condition_A:
do_X()
elif condition_B:
do_Y()
else:
do_Z()
但是,面对当今丰富的大数据和基于复杂证据进行决策的需求,这种僵化的方法常常会失效或无法跟上可用信息的步伐。

认知计算的价值与人类专长
认知计算使人们能够创造一种深刻的新型价值,即从海量数据中找出隐藏的答案和洞察。无论是医生诊断病人、财富经理为客户提供退休投资组合建议,还是厨师创造新食谱,他们都需要新的方法来处理日常接触的大量信息,并将其置于具体情境中,从而从中获取价值。
这些过程旨在增强人类的专业知识。🎼 认知计算模仿了人类专业知识的一些关键认知要素,其系统能够像人类一样对问题进行推理。

人类推理的四个关键步骤


当我们人类试图理解某事并做出决策时,会经历四个关键步骤。以下是这些步骤的详细说明:

- 观察:我们观察可见的现象和证据体。
- 解读:我们运用已知知识来解读所见,生成关于其含义的假设。
- 评估:我们评估哪些假设是正确的或错误的。
- 决策:我们选择看似最佳的行动方案并据此行动。
正如人类通过观察、评估和决策过程成为专家一样,认知系统使用类似的过程来推理它们所读取的信息,并且能够以极快的速度和巨大的规模完成这一过程。
处理结构化与非结构化数据
与传统计算解决方案不同,认知计算解决方案能够理解非结构化数据。传统方案通常只能处理整齐组织的结构化数据,例如存储在数据库中的数据。
# 结构化数据示例(如数据库中的一行)
{
"姓名": "张三",
"年龄": 30,
"城市": "北京"
}


而非结构化数据占当今数据的80%,主要包括人类为其他人类消费而产生的所有信息,例如文学、文章、研究报告、博客、帖子和推文。处理这类数据是一个巨大的挑战。




自然语言处理的挑战
结构化数据由定义明确的字段管理,包含明确指定的信息。而认知系统依赖于自然语言,它受语法、上下文和文化的规则支配。自然语言是隐含的、模糊的、复杂的,处理起来极具挑战性。
虽然所有人类语言都难以解析,但某些习语在英语中尤其具有挑战性。例如,我们可能会因为“下着倾盆大雨”而感到“忧郁”,同时还在填写别人要求我们填写的表格。
认知系统像人一样阅读和解释文本。它们通过语法、关系和结构上分解句子,从书面材料的语义中辨别含义。



理解上下文与持续学习
认知系统能够理解上下文。这与简单的语音识别非常不同,后者只是将人类语音转换为一组单词。认知系统试图理解用户语言的真实意图,并利用这种理解,通过一系列广泛的语言模型和算法进行推断。
# 上下文理解示例(伪代码)
用户输入: “我觉得有点冷。”
系统理解: [用户可能希望调高室温,或需要一件外套。]
此外,认知系统会学习、适应并不断变得更聪明。它们通过从与我们的互动中,以及从自身的成功和失败中学习来做到这一点,就像人类一样。

总结

本节课中,我们一起学习了认知计算的核心概念。我们了解到,认知计算是一种模仿人类感知、学习和推理过程的新型计算范式,它能够处理和理解海量的非结构化数据,理解自然语言的上下文和真实意图,并通过持续学习不断进化。这使其在增强人类专业知识、从复杂数据中提取洞察方面具有巨大潜力。
012:人工智能的术语与核心概念

在本节课中,我们将学习人工智能领域的关键术语与核心概念。理解这些术语和概念是掌握人工智能技术的基础,能帮助你更好地利用AI的潜力、推动创新并在相关领域保持领先。

人工智能正在创造一个机器不仅能理解人类语言,还能预测需求、识别人脸并提供安全防护的世界。在这个AI时代,理解其语言、关键术语和相关概念至关重要。例如,自动驾驶汽车就高度依赖机器学习、深度学习、自然语言处理和计算机视觉等技术来导航并做出实时决策。理解这些关键术语,能为你提供关于这些系统如何运作、其优势与挑战的宝贵见解。

在讨论各种术语和概念之前,让我们先从理解人工智能本身开始。
什么是人工智能?🤖
人工智能是计算机科学的一个分支,专注于创建能够执行通常需要人类智能才能完成任务的系统。
AI系统通常会展现出与人类智能相关的行为,例如:
- 规划
- 学习
- 推理
- 解决问题
- 知识表示
- 感知
- 运动与操控
- 社交智能
- 创造力

人工智能主要分为三类:
- 狭义人工智能:也称为弱人工智能,专注于执行特定任务。
- 通用人工智能:也称为强人工智能,具备类人的认知技能,能够跨多种任务进行学习和适应。
- 超级人工智能:旨在超越人类智能,目前仍处于理论阶段,尚未实现。
什么是机器学习?🧠

理解了人工智能的基本概念后,让我们深入探讨机器学习。
机器学习是人工智能的一个子集,它使用计算机算法分析数据,并根据学习到的内容做出智能决策,而无需进行显式编程。

机器学习算法使用大型数据集进行训练,并从示例中学习。它们不遵循基于规则的算法。机器学习使机器能够自主解决问题,并利用提供的数据做出准确的预测。
什么是深度学习?🔍

接下来,让我们讨论深度学习。

深度学习是一个重要的概念,也是机器学习的一个专门子集。它使用多层神经网络(称为深度神经网络)来分析复杂数据并模拟人类的决策过程。
深度学习算法能够标记和分类信息,并识别数据中的复杂模式。它使AI系统能够通过评估决策的正确性来持续学习,并提高结果的质量和准确性。

什么是神经网络?⚙️

另一个重要概念是神经网络,这是一种受人类大脑神经结构启发的计算模型。

神经网络由相互连接的节点(或称神经元)组成,通常包含三层:
- 输入层:接收并处理原始数据。
- 隐藏层:执行复杂的计算并转换数据。
- 输出层:将处理后的数据转换为输出格式,产生最终结果。

本节课中,我们一起学习了人工智能如何模拟人类智能,并将其分为三类:用于特定任务的弱人工智能、具备类人认知能力的强人工智能,以及旨在超越人类智能的超级人工智能。
我们还学习了机器学习作为AI的子集,如何使用算法分析数据、无需显式编程即可做出决策,并实现自主解决问题。
此外,我们了解到深度学习使用具有多层的神经网络来分析复杂数据。

最后,我们学习了神经网络这一由三层互连节点组成的计算模型。掌握这些核心概念,是您进一步探索生成式人工智能世界的坚实第一步。
013:术语和相关概念 🔍
在本节课中,我们将学习人工智能领域几个核心且容易混淆的术语和概念,包括人工智能、机器学习、深度学习、神经网络以及数据科学。理解它们之间的区别与联系,是深入学习AI技术的基础。
在深入探讨AI的工作原理及其各种应用之前,我们首先需要区分几个密切相关的术语和概念:人工智能、机器学习、深度学习以及神经网络。这些术语有时会被混用,但它们所指的并非同一事物。
人工智能 (AI) 🤖
人工智能是计算机科学的一个分支,致力于模拟智能行为。AI系统通常会展现出与人类智能相关的行为,例如规划、学习、推理、解决问题、知识表示、感知、运动与操控,以及(在较小程度上)社交智能和创造力。

机器学习 (ML) 📊




机器学习是人工智能的一个子集,它使用计算机算法分析数据,并根据学习到的内容做出智能决策,而无需进行显式编程。机器学习算法使用大型数据集进行训练,它们从示例中学习,不遵循基于规则的算法。
以下是机器学习的一个核心特点:
- 数据驱动学习:算法通过分析大量数据来学习模式,而非依赖硬编码的指令。
机器学习使机器能够自主解决问题,并利用提供的数据做出准确的预测。
深度学习 (DL) 🧠
深度学习是机器学习的一个专门子集,它使用分层的神经网络来模拟人类的决策过程。深度学习算法能够对信息进行标记、分类并识别模式。正是深度学习使得AI系统能够在工作中持续学习,并通过判断决策是否正确来提高结果的质量和准确性。
神经网络 (NN) ⚡



人工神经网络(通常简称为神经网络)的灵感来源于生物神经网络,尽管其工作方式有很大不同。AI中的神经网络是由称为“神经元”的小型计算单元组成的集合,这些单元接收输入数据,并随着时间学习如何做出决策。


神经网络通常是深度分层的,这也是深度学习算法随着数据集规模增大而效率提升的原因。相比之下,其他一些机器学习算法在数据量增加时性能可能会达到瓶颈。

人工智能与数据科学 📈
现在你已经对几个关键AI概念之间的区别有了大致了解,还有一个重要的区分需要理解,那就是人工智能与数据科学之间的区别。
数据科学是从大量不同数据中提取知识和见解的过程与方法。它是一个跨学科领域,涉及数学、统计分析、数据可视化、机器学习等。数据科学使我们能够处理信息、从海量数据中看到模式、发现意义,并利用这些来做出驱动业务的决策。
数据科学可以使用许多AI技术从数据中获取洞察。例如,它可以使用机器学习算法甚至深度学习模型来从数据中提取意义并得出结论。人工智能和数据科学之间存在一些交叉,但两者并非子集关系。更准确地说,数据科学是一个涵盖整个数据处理方法的广义术语,而人工智能则包含了让计算机学习如何解决问题和做出智能决策的一切技术。人工智能和数据科学都可能涉及使用大数据,即体量巨大的数据集。
在接下来的几节课中,我们将更详细地讨论机器学习、深度学习和神经网络这些术语。
总结 📝

本节课中,我们一起学习了人工智能领域的核心术语。我们明确了人工智能 (AI) 是模拟智能行为的广阔领域,机器学习 (ML) 是其子集,专注于让机器从数据中学习。深度学习 (DL) 是机器学习的一个分支,利用深层神经网络 (NN) 进行复杂决策。最后,我们区分了数据科学,它是一个更广泛的数据处理和分析领域,与AI有交集但各有侧重。理解这些概念的区别是构建AI知识体系的重要第一步。
014:机器学习 🧠
在本节课中,我们将要学习机器学习的核心概念。机器学习是人工智能的一个子集,它使用计算机算法分析数据,并根据学习到的知识做出智能决策,而不是遵循基于规则的算法。机器学习通过构建模型来对数据进行分类和预测。

什么是机器学习?
上一节我们介绍了机器学习的定义,本节中我们来看看一个具体的例子,以理解机器学习如何解决问题。
假设我们想要判断一颗心脏是否会衰竭。这是一个可以用机器学习解决的问题。例如,我们拥有以下数据:每分钟心跳次数、身体质量指数、年龄、性别,以及心脏是否衰竭的结果。利用机器学习,我们可以基于这些数据学习并创建一个模型,该模型在给定输入时能够预测结果。
那么,这与使用统计分析创建算法有何不同?算法是一种数学技术。在传统编程中,我们获取数据和规则,并用它们来开发一个能给出答案的算法。
机器学习与传统编程的区别
在刚才的心脏衰竭例子中,如果使用传统算法,我们会利用每分钟心跳次数和身体质量指数等数据来创建一个判断心脏是否会衰竭的算法。本质上,这将是一个 if-then-else 语句。当我们提交输入时,会根据我们确定的算法得到答案,而这个算法本身不会改变。
相比之下,机器学习则使用数据和答案来创建算法。我们最终得到的不是答案,而是一套决定机器学习模型形态的规则。模型在获得输入时,会自行确定规则和 if-then-else 逻辑。本质上,模型所做的是确定传统算法中的参数。我们不是武断地决定“每分钟心跳次数 + 身体质量指数 = 某个结果”,而是使用模型来确定逻辑是什么。
与传统算法不同,这个模型可以持续训练,并在未来用于预测数值。机器学习通过检查和比较大型数据集来定义行为规则,从而发现共同模式。
机器学习的类型
机器学习主要依赖几种不同的学习范式。以下是三种主要的机器学习类型:


监督学习
例如,我们可以向机器学习程序提供大量鸟类图片,并训练模型在提供鸟类图片时返回“鸟”的标签。我们也可以为“猫”创建标签,并提供猫的图片进行训练。当机器学习模型看到猫或鸟的图片时,它会以一定的置信度给图片贴上标签。这种类型的机器学习被称为监督学习,即算法在人类标记的数据上进行训练。你为监督学习算法提供的样本越多,它在分类新数据时就越精确。
无监督学习
另一种机器学习类型是无监督学习,它依赖于向算法提供未标记的数据,并让它自行寻找模式。你提供输入但不提供标签,让机器推断其特性。算法接收未标记的数据,进行推断并发现模式。这种学习对于数据聚类很有用,即根据数据与其邻居的相似程度以及与其他所有事物的差异程度对数据进行分组。数据聚类后,可以使用不同的技术来探索这些数据并寻找模式。
例如,你可以向机器学习算法提供持续的网络流量数据流,让它独立学习基线正常网络活动,以及网络上可能发生的异常和恶意行为。
强化学习
第三种机器学习算法是强化学习,它依赖于为机器学习算法提供一套规则和约束,并让它学习如何实现目标。你定义状态、期望目标、允许的操作和约束。算法通过尝试不同的允许操作组合来找出如何实现目标,并根据决策的好坏获得奖励或惩罚。算法会尽力在提供的约束条件下最大化其奖励。你可以使用强化学习来教机器下棋或穿越障碍路线。
机器学习模型
机器学习模型是用于在数据中寻找模式的算法,而无需程序员显式地编程这些模式。


本节课中我们一起学习了机器学习的基本概念,包括其定义、与传统编程的区别,以及监督学习、无监督学习和强化学习这三种主要类型。理解这些基础是进一步探索生成式人工智能和提示工程的关键。
015:机器学习技术与训练
在本节课中,我们将要学习机器学习的基本分类、核心概念以及模型训练的过程。我们将从宏观的机器学习分类开始,逐步深入到监督学习的具体任务,并解释模型是如何通过数据被“训练”出来的。
机器学习是一个广阔的领域,我们可以将其划分为三个主要类别:监督学习、无监督学习和强化学习。利用这些方法,我们可以解决许多不同的任务。
监督学习、无监督学习与强化学习
上一节我们介绍了机器学习的三大类别,本节中我们来详细看看它们各自的特点。


监督学习指的是数据集中包含类别标签,我们利用这些标签来构建分类模型。这意味着我们接收到的数据带有说明数据含义的标签。


在一个先前的例子中,我们有一个包含“年龄”或“性别”等标签的表格。
无监督学习则没有类别标签,我们必须从非结构化数据中发现类别标签。这可能涉及深度学习等技术,例如通过查看图片来训练模型。


这类任务通常通过聚类来完成。


强化学习是一个不同的子集,它使用奖励函数来惩罚不良行为或奖励良好行为。


监督学习的细分:回归、分类与神经网络

了解了三大类别后,我们聚焦于监督学习。监督学习可以进一步细分为三个子类别:回归、分类和神经网络。

回归模型通过观察特征 X 与结果 Y 之间的关系来构建,其中 Y 是一个连续变量。


本质上,回归用于估计连续值。

神经网络指的是模仿人脑结构的模型。

🎼 分类:聚焦于离散值
与回归不同,分类专注于识别离散值。我们可以根据多个输入特征 X 来分配离散的类别标签 Y。

在一个先前的例子中,给定一组特征 X,如每分钟心跳次数、身体质量指数、年龄和性别,算法将输出 Y 分类为两个类别:真或假,以预测心脏是否会衰竭。
在其他分类模型中,我们可以将结果分为两个以上的类别。例如,预测一个菜谱是属于印度菜、中国菜、日本菜还是泰国菜。


以下是几种常见的分类形式:
- 决策树
- 支持向量机
- 逻辑回归
- 随机森林



特征与分类过程
在分类任务中,我们需要从数据中提取特征。在这个例子中,特征就是每分钟心跳次数或年龄。



特征是输入模式的独特属性,有助于确定输出的类别。每一列是一个特征,每一行是一个数据点。
分类是预测给定数据点类别的过程。我们的分类器使用一些训练数据来理解给定的输入变量与该类别之间的关系。

🎼 模型训练详解
那么,“训练”究竟是什么意思呢?训练指的是使用学习算法来确定和开发模型的参数。虽然有许多算法可以实现这一点,但通俗地说,如果你正在训练一个模型来预测心脏是否会衰竭(即真或假值),你会向算法展示一些标记为“真”的真实数据,然后再向算法展示一些标记为“假”的数据。你将重复这个过程,使用带有真或假值(即心脏实际是否衰竭)的数据。



算法会不断修改其内部值,直到学会从指示心脏衰竭(真)或未衰竭(假)的数据中进行区分。



数据集划分与模型评估
在机器学习中,我们通常将一个数据集分成三个子集:训练集、验证集和测试集。
以下是每个子集的作用:
- 训练子集:用于训练算法的数据。
- 验证子集:用于验证结果并微调算法参数的数据。
- 测试数据:模型从未见过的数据,用于评估模型的性能。
然后,我们可以使用准确率、精确率和召回率等术语来表明模型的好坏。


本节课中我们一起学习了机器学习的主要分类(监督、无监督、强化学习),深入探讨了监督学习下的回归、分类和神经网络任务,并详细解释了特征提取、模型训练的过程以及如何通过划分数据集来训练和评估模型。理解这些基础概念是进一步学习生成式人工智能工程的重要基石。
016:深度学习
概述
在本节课中,我们将要学习深度学习的基本概念。我们将了解深度学习与机器学习的关系、其核心工作原理、训练过程以及它的主要优势和应用领域。
深度学习:人工智能的专门子集
机器学习是人工智能的一个子集,而深度学习则是机器学习的一个专门子集。
深度学习通过将算法分层来创建神经网络,这是一种对大脑结构和功能的人工模拟。这种结构使得人工智能系统能够在工作中持续学习,并提高结果的质量和准确性。正是这种能力,使得系统能够从照片、视频和音频文件等非结构化数据中学习。
深度学习的核心:分层处理与上下文理解
例如,深度学习赋予了人工智能系统自然语言理解的能力,使它们能够推断出所传达信息的上下文和意图。
深度学习算法并不直接将输入映射到输出。相反,它们依赖于多个处理单元层。每一层将其输出传递给下一层,下一层进行处理后再传递给更下一层。正是由于这许多层次,它才被称为“深度”学习。

在创建深度学习算法时,开发人员和工程师需要配置层数以及连接每层输出与下一层输入的函数类型。


深度学习的训练过程
上一节我们介绍了深度学习的结构,本节中我们来看看它是如何被训练的。
然后,他们通过提供大量带标注的样本来训练模型。例如,你给一个深度学习算法成千上万张图片以及对应每张图片内容的标签。该算法会将这些样本通过其分层的神经网络运行,并调整神经网络每一层中变量的权重,以便能够检测出定义具有相似标签的图像的共同模式。
深度学习的核心优势:数据规模效应
深度学习解决了早期学习算法中存在的一个主要问题。当数据集增长时,机器学习算法的效率和性能会达到瓶颈,而深度学习算法随着被输入更多数据会持续改进。

深度学习的应用领域
深度学习已被证明在各种任务中非常高效,以下是其主要应用领域:

- 图像描述
- 语音识别与转录
- 面部识别
- 医学影像分析
- 语言翻译
此外,深度学习也是无人驾驶汽车的主要组成部分之一。
总结

本节课中我们一起学习了深度学习。我们明确了它是机器学习的一个专门分支,其核心是模仿人脑的分层神经网络结构。我们了解了它通过调整权重从标注数据中学习模式的过程,并认识到其性能会随着数据量的增加而持续提升。最后,我们列举了深度学习在图像、语音、医疗和自动驾驶等多个领域的强大应用。
017:神经网络 🧠


在本节课中,我们将要学习神经网络的基本概念、工作原理以及主要类型。神经网络是人工智能系统的核心构建模块,其设计灵感来源于人脑的神经结构。通过学习,你将能够描述神经网络及其功能,并识别不同类型的神经网络。


神经网络简介

想象一下,教会一台机器像人脑一样学习,例如识别人脸和图像,或者独立驾驶汽车。这种非凡能力背后的机制就存在于神经网络之中。
神经网络是一种受人类大脑神经结构影响的计算模型。

神经网络的结构与工作原理
一个人工神经网络由相互连接的节点(称为神经元)组成。这些神经元接收输入数据,就像人脑的神经网络一样,并随着时间学习如何做出决策。通过向网络提供数据(例如猫和狗的图片),它可以学习识别模式并建立联系。网络接触的数据越多,学习效果就越好。
一个神经网络包含一个输入层和一个输出层,还可以包含一个或多个隐藏层。

- 输入层接收数据。例如,在图像识别任务中,输入层会接收图像的像素值。
- 隐藏层处理数据。每个隐藏层通过应用激活函数来转换输入数据。激活函数是数学函数,允许网络学习复杂的模式。
- 输出层产生网络处理的最终结果。
需要注意的是,当网络包含更多隐藏层时,它就变得更深,这就是“深度学习”一词的由来。

神经网络的训练过程
神经网络通过一个称为“训练”的过程进行学习。我们来理解一下这个过程的步骤。
首先,在前向传播步骤中,数据会通过神经网络的各层。在此步骤中,网络会计算出一个输出。
这个输出会与正确答案进行比较,以计算差异,这个差异称为误差或损失。这一步显示了网络的预测与实际结果的匹配程度。
接着,在反向传播步骤中,这个误差会被送回网络,以调整内部参数,例如权重和偏置。这种调整旨在减少未来预测的误差。

前向传播、误差计算和反向传播会使用不同的数据集重复多次,直到神经网络能够持续做出准确的预测。

神经网络的类型
上一节我们介绍了神经网络的基本训练过程,本节中我们来看看几种主要的神经网络类型。以下是几种常见的神经网络:

- 感知机神经网络:这是最简单的人工神经网络类型,仅包含输入层和输出层。
- 前馈神经网络:在这种网络中,信息单向流动(即向前)。每一层的神经元接收来自前一层的输入,然后将其输出传递给下一层的神经元。
- 深度前馈神经网络:与前馈网络类似,但包含不止一个隐藏层。
- 模块化神经网络:这种网络结合了两个或更多的神经网络来得出输出。
- 卷积神经网络:CNN是一种特别适合分析视觉数据的神经网络。“卷积”一词指的是一个数学运算,其中一个函数应用于另一个函数,结果是两个函数的混合。在CNN中,这个过程通过多个层进行,每一层对前一层的输出执行卷积操作。
- 循环神经网络:在RNN中,隐藏层中的每个神经元都会接收一个带有特定时间延迟的输入。这使得RNN能够考虑输入的上下文。你可以在需要访问当前迭代中先前信息的地方使用这种神经网络,例如,在预测句子中的下一个单词时,因为它会考虑对话的上下文和流程。
总结

本节课中,我们一起学习了神经网络。我们了解到,神经网络是受人类大脑结构启发的AI系统构建模块。神经网络由层组成,包括输入层、一个或多个隐藏层以及输出层。神经网络依靠前向传播来处理从输入层到输出层的数据,而反向传播则根据前向传播期间计算的损失来调整内部参数。我们还介绍了多种类型的神经网络,包括感知机神经网络、前馈神经网络、深度前馈神经网络、模块化神经网络、卷积神经网络和循环神经网络。
018:AI的关键应用领域 🎯
在本节课中,我们将学习人工智能的几个主要应用领域。我们将从最复杂的自然语言处理开始,逐步探讨计算机视觉、音频数据处理以及传统的结构化数据分析。每个领域都有其独特的挑战和机遇。
自然语言处理:最复杂的数据领域 📝
上一节我们介绍了人工智能的宏观图景,本节中我们来看看第一个关键领域——自然语言处理。自然语言处理是机器学习处理的最复杂的数据类型。所有其他类型的数据,无论是基因序列、音频还是图像,都存在某种可识别的模式。例如,汽车的声音或人声都有其特定模式。然而,自然语言本质上是一项非常“人类”的任务,是人类发明出来供人类理解的数据源。
人类并不从字面意义上理解语言,而是从概念上理解。例如,如果我用数字“3”代替字母“E”,你仍然能理解,因为我们不把“3”看作字面上的数字,而是将其视为代表“E”概念的符号。人类大脑能够根据上下文推断出“3”代表的是字母“E”。这些是计算机目前难以直接处理的能力。因此,自然语言处理是机器学习中最令我感兴趣的领域。
计算机视觉:最流行的应用领域 👁️
在了解了自然语言处理的复杂性后,我们转向第二个关键领域——计算机视觉。计算机视觉是目前最流行的人工智能应用领域之一,因为它使我们能够实现许多功能。作为人类,视觉是我们的主要感官。事实上,在任何时刻,大脑的大部分处理能力都用于理解我们所看到的事物,无论是人脸、电脑、文本还是其他任何东西。计算机视觉的目标就是让机器具备类似的理解能力。
音频数据处理:多重挑战的结合 🔊
接下来,我们探讨第三个关键领域——基于音频的数据处理,例如文本转语音和语音转文本。这个领域非常复杂,因为它将许多挑战结合在了一起。
以下是音频处理面临的主要挑战:
- 多语言支持:不能仅支持英语,必须支持其他语言和不同人群。
- 发音多样性:即使在同一种语言内,人类的发音方式也千差万别。每个人都有不同的口音和单词发音习惯,不存在一个所有人都完全一致的标准化发音。
- 数据处理的复杂性:音频数据本质上非常难以处理。音频是空气分子的振动,这些振动速度极快。音频通常以超过44千赫兹的频率录制,这意味着每秒会产生超过44000个数据点。这个数据量通常相当于一张低分辨率图像所包含的数据点总数。
尽管面临这些挑战,像IBM、谷歌、微软这样的公司已经找到了解决方案,并致力于创建各种服务来简化开发者的工作。
传统结构化数据分析 📊
最后,我们来看看传统的结构化数据分析领域。这本质上是对表格数据的理解,是人工智能应用的基础领域之一。它涉及从具有明确行列结构的数据中提取模式和洞察。
本节课中我们一起学习了人工智能的四个关键应用领域:复杂而迷人的自然语言处理、广泛应用的计算机视觉、充满挑战的音频数据处理,以及基础而重要的传统结构化数据分析。理解这些领域有助于我们把握人工智能技术的全貌和应用方向。
019:自然语言处理、语音与计算机视觉 👁️🗨️
在本节课中,我们将学习人工智能最常见的三个应用领域:自然语言处理、语音技术和计算机视觉。我们将逐一探讨它们的基本概念、工作原理以及实际应用。

自然语言处理:让计算机理解人类语言 🗣️

人类拥有最先进的交流方式,即自然语言。虽然人类可以使用计算机互相发送语音和文本信息,但计算机本身并不具备处理自然语言的能力。
自然语言处理是人工智能的一个子集,它使计算机能够理解人类语言的含义。NLP利用机器学习和深度学习算法来辨别词语的语义。
核心公式/概念:
- NLP = 理解人类语言
- 它通过语法、关系和结构上解构句子,并理解使用语境来实现。
例如,根据对话的上下文,NLP可以判断“cloud”一词是指“云计算”还是指“天空中漂浮的大量凝结水蒸气”。NLP系统还能理解意图和情感,例如判断一个问题是出于沮丧、讽刺还是恼怒。为了理解用户语言的真实意图,NLP系统通过一系列广泛的语言模型和算法进行推理。
自然语言处理被细分为许多与音频和视觉任务相关的子类别。
语音技术:语音与文本的转换 🔊
为了让计算机能用自然语言交流,它们需要能够将语音转换为文本,使交流更自然、易于处理;同时也需要能够将文本转换为语音,使用户无需盯着屏幕即可与计算机交互。

上一节我们介绍了自然语言处理,本节中我们来看看实现人机自然交互的关键技术:语音转换。




语音转文本
早期的语音转文本技术需要程序员经历一个繁琐的过程,即发现并编码规则,以对语音样本进行分类和转换。而借助神经网络,你只需提供语音样本及其对应的文本,无需编码规则。神经网络会找出单词发音之间的共同模式,然后学习将新的录音映射到对应的文本。
语音转文本技术的这些进步,是我们拥有实时转录功能的原因。以下是其应用实例:
- 谷歌在其“来电筛选”功能中使用AI驱动的语音转文本来处理诈骗电话并向你显示文字。
- YouTube使用此技术提供自动隐藏式字幕。
文本转语音
语音转文本的反面是文本转语音,也称为语音合成。过去,创建一个语音模型需要数百小时的编码工作。现在,在神经网络的帮助下,合成人声已成为可能。其过程通常涉及两个神经网络:
- 第一个神经网络(分类器)摄入一个人大量的语音样本,直到它能判断一个新的语音样本是否属于同一个人。
- 第二个神经网络(生成器)生成音频数据,并将其通过第一个网络,看其是否验证为属于目标人物。如果不通过,生成器会修正其样本并再次通过分类器运行。两个网络重复此过程,直到生成听起来自然的样本。
以下是文本转语音的应用:
- 公司使用AI驱动的语音合成来提升客户体验,并赋予其品牌独特的声音。
- 在医疗领域,这项技术正在帮助肌萎缩侧索硬化症患者重获他们真实的声音,而不是使用计算机合成的声音。




计算机视觉:让计算机“看见”世界 👁️
计算机视觉领域专注于复制人类视觉系统的部分复杂性,并使计算机能够像人类一样识别和处理图像及视频中的物体。计算机视觉是使数字世界能够与物理世界交互的技术之一。
近年来,由于深度学习和神经网络的进步,计算机视觉领域取得了巨大飞跃,在检测和标记物体等相关任务上甚至超越了人类。
以下是计算机视觉的关键应用:
- 自动驾驶汽车:这项技术使自动驾驶汽车能够理解周围环境。
- 人脸识别:它在人脸识别应用中扮演着至关重要的角色,使计算机能够将人脸图像与其身份匹配。
- 增强现实与混合现实:这项技术允许智能手机、平板电脑和智能眼镜等计算机设备在真实世界图像上叠加和嵌入虚拟物体。
- 在线图片库:像Google相册这样的在线图片库使用计算机视觉来检测物体,并按其所含内容的类型对图像进行分类。


总结 📝



本节课中,我们一起学习了人工智能的三个核心应用领域。自然语言处理使计算机能够理解和处理人类语言;语音技术实现了语音与文本之间的双向转换,为人机交互提供了更自然的接口;计算机视觉则赋予计算机“看”和理解视觉世界的能力。这些技术共同构成了当今许多智能系统的基础,从虚拟助手到自动驾驶汽车,深刻改变着我们的生活和工作方式。
020:自动驾驶汽车 🚗

在本节课中,我们将探讨自动驾驶汽车领域,了解其背后的核心技术挑战,特别是计算机视觉和3D物体检测所扮演的关键角色。
自动驾驶汽车的研究工作
您能介绍一下您在自动驾驶汽车方面的工作吗?过去几年,我们一直在研究自动驾驶汽车。自2005年早期的竞赛以来,这个领域显然引起了爆炸性的兴趣。我们工作的核心是组装我们自己的自动驾驶车辆,使其能够在公共道路上行驶。去年八月,我们的车辆已在滑铁卢地区上路。
核心挑战:3D物体检测
在自动驾驶汽车领域,我们的一个关键研究方向是3D物体检测。对于算法而言,这仍然是一项具有挑战性的任务,需要自动识别驾驶环境中的每一辆车、每一个行人和每一个标志。这样,车辆才能就如何移动以及与这些物体互动做出正确的决策。
因此,我们投入大量精力研究如何接收激光数据、视觉数据和雷达数据,然后将它们融合成车辆周围世界的完整视图。
计算机视觉的重要性
当我们想到计算机视觉时,通常会立刻联想到自动驾驶汽车。为什么会这样?因为,在道路上驾驶时,人类很难同时保持高度注意力。你不可能一边看智能手机,一边同时观察路况。
当然,有时也很难预测人们在街上会做什么,比如他们骑着自行车或滑板车过马路。因此,当我们拥有某种摄像头或传感器来帮助我们检测这些情况,并在潜在事故发生前进行预防时,这非常棒。人类视觉的一个局限就在于视觉注意力。
例如,我可以看着你说话,但你身后可能有一块美味的披萨。我一次只能注意一个或有限数量的事物,无法像摄像头或计算机视觉那样,同时关注视野内的一切。这就是摄像头和计算机视觉的一大优势。
技术的优势与未来展望
它们帮助我们关注周围整个世界,而无需我们四处张望以确保注意到所有事物,这仅仅是在自动驾驶汽车中的应用。我想我们都大致了解这如何塑造了人工智能和计算机视觉对驾驶和交通行业的影响。
自动驾驶汽车无疑是未来。目前,人们对自动驾驶车辆抱有极大的兴趣,部分原因在于它们有潜力真正改变我们社会的运作方式。我对能够乘坐自动驾驶汽车,在上班途中阅读或使用手机,而不是在多伦多的交通中亲自驾驶感到非常兴奋。
因此,我认为它们代表了真正令人兴奋的进步,但仍有大量工作要做。在拥有真正稳健、安全、能够100%时间在我们的道路上自主行驶的汽车之前,自动驾驶领域仍有许多有趣的挑战需要解决。

本节课总结:我们一起学习了自动驾驶汽车的研究现状,深入了解了其核心技术3D物体检测的挑战,探讨了计算机视觉在弥补人类注意力局限方面的重要性,并展望了自动驾驶技术未来的发展潜力与待解决的挑战。
021:探索当今AI的担忧 🔍

在本节课中,我们将要学习当今人工智能领域的一些热点话题与担忧。我们将探讨可信AI的重要性,并深入了解AI在面部识别、招聘、社交媒体营销以及医疗保健等具体应用场景中引发的伦理与社会问题。


可信AI:当今AI的核心议题 🎯
上一节我们介绍了课程概述,本节中我们来看看当前AI领域的核心议题。人们经常问我当前AI的热点话题是什么。我的回答是,今天给出的答案很可能在下周甚至明天就会不同。AI世界极具活力,这是一件好事。它是一项新兴技术,拥有惊人的可能性,并有潜力以远超我们此前想象的速度解决诸多问题。然而,正如我们所看到的,在某些情况下,它也可能产生有害的后果。因此,我认为AI的热点议题是:我们如何负责任地运用它?
IBM提出了五大支柱来解决这个问题,概括了负责任AI的理念,即可解释性、透明度、稳健性、隐私性和公平性。我们可以更深入地探讨这些主题。但我想在此强调两点。
第一,这不是一项一劳永逸的工作。如果你打算使用AI,如果我们打算将其应用于社会,这不是你仅仅在开始或结束时才需要处理的事情。你必须在AI的整个生命周期中持续关注这些问题。无论你是在规划阶段、设计AI、训练AI、部署AI,还是作为与AI交互的最终用户,都需要不断思考这五大支柱。
第二,我认为更重要的是,这是一项团队运动。我们都需要意识到AI带来的潜在好处和潜在危害,并鼓励每个人提出问题,为人们保持对AI工作原理及其行为的好奇心留出空间。只有这样,我们才能真正利用它来解决有益的问题,取得卓越的成果,并减轻任何潜在的危害。
所以,请保持好奇心。


面部识别技术:潜力与风险 👁️
上一节我们探讨了可信AI的框架,本节中我们来看看AI在面部识别技术中的应用。在设计围绕人工智能的解决方案时,面部识别已成为一个突出的用例。
以下是正在设计的模型和算法的三种典型类别:
- 面部检测:仅检测一个物体是否是人脸,而不是狗或猫等。这种面部识别不会唯一地识别该面孔可能属于谁。
- 面部认证:你可能使用这种面部识别来解锁你的iPhone或Android设备。在这种情况下,我们通过将面部图像的特征与之前存储的单一图像进行比较,提供一对一的认证。这意味着你实际上只将图像与iPhone或Android设备所有者的特定图像进行比较。
- 面部匹配:在这种情况下,我们将图像与其他图像的数据库进行比较。这与前一种情况不同,模型试图将个人的面部与属于其他人的图像或照片数据库进行匹配。
面部识别有许多不同的例子,其中许多无疑你已经在你日常活动中体验过。有些已被证明是有帮助的,而另一些则被证明不那么有帮助,还有一些则被证明本质上是直接有害的,某些人群因使用这些面部识别系统而受到了伤害。
我们看到,AI系统中的面部识别解决方案在诸如机场导航、通过安检线,或者使用我们之前讨论过的例子(如使用面部识别解锁iPhone、家门或汽车门)等场景中提供了重要价值。这些都是面部识别技术的有益用途。
但也存在一些必须禁止的明确案例和用途。这些可能包括未经本人明确许可在人群中识别个人,或对个人或群体进行大规模监控。这类技术应用引发了重要的隐私、公民权利和人权关切。
当被错误的人以错误的方式使用时,面部识别技术无疑可以被用来压制异议、侵犯少数群体的权利,或者仅仅抹去你对隐私的基本期望。
AI在招聘中的应用:效率与偏见 ⚖️

上一节我们讨论了面部识别技术的双面性,本节中我们来看看AI在招聘流程中的应用。AI正被越来越多地引入到职业发展的各个阶段:招聘、入职、职业发展(包括晋升和奖励)、处理人员流失等。
以筛选招聘为例。考虑一个收到成千上万份工作申请的组织,人们申请各种工作:前台、后台、季节性、永久性等。AI可以帮助你对申请者进行排名和优先级排序,针对目标职位空缺,向招聘经理呈现一份顶级候选人名单,而不是让庞大的团队坐下来筛选所有这些申请。AI解决方案可以处理简历中的文本,并将其与其他结构化数据结合,以辅助决策。
现在,我们需要谨慎地设置防护措施。我们需要确保AI在招聘中的使用不会在性别、种族等敏感属性上产生偏见。即使这些属性没有被AI直接使用,也可能通过代理属性(如邮政编码或之前从事的工作类型)悄然渗入。

社交媒体营销:精准与伦理 📱
上一节我们探讨了招聘中的AI偏见风险,本节中我们来看看AI在社交媒体营销中的应用。这是当今AI的热点话题之一,它彻底改变了品牌在TikTok、LinkedIn、Twitter、Instagram、Facebook等社交媒体平台上与受众互动的方式。
当今的AI可以为你创建广告,为你创建社交媒体帖子,帮助你精准定位这些广告,并可以使用情感分析为你识别新的受众。所有这些都为营销人员带来了惊人的效果,提高了营销活动的有效性,同时降低了运行这些活动的成本。
然而,AI为在社交媒体平台上进行营销所提供的这些技术和能力,也引发了一些伦理问题。营销之所以成功,很大程度上归功于社交媒体平台从其用户那里收集的所有数据。表面上,收集这些数据是为了为最终用户提供更个性化的体验。但收集了哪些数据以及你是否同意他们使用这些数据,并不总是明确的。
现在,这些对品牌营销活动如此有效的技术,同样可以应用于生成错误信息、阴谋论,无论是政治还是科学方面的错误信息。这对我们的整个社会产生了可怕的影响。这就是为什么所有企业都必须遵守一些明确的原则,围绕透明度、可解释性、信任和隐私,来规范他们如何使用AI或将AI构建到他们的解决方案和平台中,这一点至关重要。

AI在医疗保健中的应用:预测与公平 🏥
上一节我们审视了社交媒体营销中的伦理挑战,本节中我们来看看AI在医疗保健领域的应用。AI的使用正在所有医疗保健领域(医疗保健提供者、支付方、生命科学等)不断增加。
支付方组织正在使用利用理赔数据的AI和机器学习解决方案,通常将其与健康的社会决定因素等其他数据集相结合。一个顶级用例是用于协调护理的疾病预测。例如,预测会员群体中谁可能在未来三个月内出现不良状况(如急诊就诊),然后提供正确的干预和预防形式。
在这种情况下,公平护理变得非常重要。我们需要确保AI在年龄、性别、种族等所有敏感属性上没有偏见。当然,在所有领域中,对话式AI(虚拟代理以及帮助人类更好地服务会员群体的系统)已成为标配。
在医疗保健中所有这些AI用例中,我们看到了一些共同点:能够从组织拥有的丰富数据集中解锁洞察、改善会员或患者体验,以及设置防护措施以确保AI是可信的。
总结 📝

本节课中,我们一起学习了当今人工智能领域的主要担忧与应用伦理。我们探讨了构建可信AI的五大支柱,并深入分析了AI在面部识别、招聘、社交媒体营销及医疗保健等具体领域带来的机遇与挑战。关键点在于,AI的应用必须贯穿责任与伦理的考量,在整个生命周期中关注公平、透明与隐私,并鼓励全社会的共同参与和监督,以确保这项强大技术能够造福社会,同时将其潜在危害降至最低。
022:探索人工智能与伦理 🤖

在本节课中,我们将要学习人工智能伦理的概念、重要性以及如何在组织中付诸实践。我们将探讨人工智能伦理为何是一个社会技术性挑战,以及如何负责任地构建和使用人工智能。

人工智能伦理的重要性
人工智能在我们的生活中无处不在。我们在线使用信用卡购物、在网络上搜索信息、在社交平台上发布内容或关注他人,甚至在驾驶时使用基于人工智能的导航和驾驶辅助功能时,都会用到它。
这种普遍性给我们的生活以及社会结构和平衡带来了快速而重大的转变。因此,人工智能不仅是一门技术和科学学科,也具有非常重大的社会影响。这引发了许多伦理问题,涉及人工智能应如何设计、开发、部署、使用和监管。
人工智能的社会技术维度
人工智能的社会技术维度要求我们努力识别所有利益相关者,这远远超出了技术专家的范畴,还包括社会学家、哲学家、经济学家、政策制定者以及受该技术部署影响的所有社群。
在定义生态系统、在人工智能开发和部署的所有阶段、以及在人工智能对部署场景的影响中,包容性都是必要的。没有包容性,我们就有风险只为部分人创造人工智能,而将许多其他人置于不利地位。每个人都需要参与定义我们想要利用人工智能和其他技术(作为手段而非目的)构建的未来愿景。
为了实现这一愿景,需要适当的指导方针来引导人工智能的创造和使用朝着正确的方向发展。技术工具是有用且必要的,但它们应辅以原则、保障措施、定义明确的流程和有效的治理。
我们不应认为所有这些会减缓创新速度。

伦理作为创新的加速器
想想交通规则。交通信号灯、先行权规则、停车标志和速度限制似乎会让我们减速。然而,如果没有它们,我们并不会开得更快,反而会因为对其他车辆和行人的状态完全不确定而开得更慢。
人工智能伦理识别并解决这项技术引发的社会技术问题,确保支持并促进正确的创新,从而使通往我们期望的未来的道路更快。
正如IBM首席执行官所言,信任是我们运营的许可证。我们通过负责任地使用技术的政策、计划、合作伙伴关系和倡导赢得了这种信任。一百多年来,IBM一直处于创新的前沿,为我们的客户和社会带来利益。
这种方法绝对适用于人工智能的开发、使用和部署。因此,伦理应嵌入到设计和开发流程的生命周期中。
构建值得信赖的人工智能
伦理决策不仅仅是一种技术问题解决方法。相反,应基于原则、价值观、标准、法律和对社会的利益,采取一种伦理的、社会学的、技术的和以人为本的方法。因此,拥有这个基础是重要且必要的,但从哪里开始呢?
一个很好的起点是一套指导原则。在IBM,我们称我们的原则为“信任与透明原则”,共有三条:
- 人工智能的目的是增强而非取代人类智能。
- 数据和洞察力属于其创造者。
- 包括人工智能系统在内的新技术必须透明且可解释。
最后一条原则建立在我们的五大支柱之上:
- 透明:通过分享人工智能的用途和运作方式来增强信任。
- 可解释:系统应能解释其决策。
- 公平:当系统经过适当校准时,它应能协助做出更好的选择,并确保公平性。
- 健壮:意味着系统应该是安全的。
- 隐私保护:保障隐私和权利。
我们知道仅有原则和支柱是不够的。我们拥有一套广泛的工具和才华横溢的从业者,可以帮助诊断、监控、促进我们所有的支柱,并进行持续监控以减轻风险和意外后果。

将人工智能伦理付诸实践

将人工智能伦理付诸实践的第一步,与任何事情一样,是关于建立理解和意识。这是为了让您的团队能够思考人工智能伦理,以及将其付诸实践意味着什么。
无论您正在构建和部署什么解决方案,让我们举个例子:如果您正在构建一个学习解决方案并将其部署在公司内部。负责此事的HR负责人应该思考:这个解决方案是否以用户为中心设计?我们是否与用户共同创建了解决方案?它如何确保不同群体的所有员工都能平等获得机会?
对人工智能伦理的深刻理解,并持续反思这些问题,是将人工智能伦理付诸实践的关键基础。
将人工智能伦理付诸实践的第二步,是在建立了理解和意识、并且每个人都在反思这个话题之后,建立一个治理结构。这里的关键点是,这是一个为了规模化实践人工智能伦理的治理结构。它不是指在某个市场或业务单元中孤立地进行一次,而是指一个能够大规模运作的治理结构。
因此,我们讨论了作为基础的理解和意识,以及作为领导者责任的第二步——治理结构。一旦具备了这两个要素,第三步就是操作化。
您如何确保在马来西亚或波兰的开发人员、数据科学家或供应商知道如何将人工智能伦理付诸实践,这对他们意味着什么?在全球层面建立结构是一回事,但如何确保它在各个市场以及每个用户、每个数据科学家、每个开发人员那里都能大规模地操作化?
明确操作化支柱
这一切都关乎于明确值得信赖的人工智能支柱。对IBM而言,它们是:透明、可解释、公平、健壮和隐私保护。

让我们回到学习解决方案的例子。您是以用户为中心设计的吗?想想我们认为一流的透明推荐系统,比如您最喜欢的电影流媒体服务或打车服务。它透明吗?它可解释吗?它是否告诉您推荐内容是什么以及为什么做出这些推荐,同时也告诉您作为用户,最终决定权在您手中?
公平性在于通过确保不同群体不仅采用流程,也获得结果,从而给予每个人平等的机会。健壮性、隐私保护……每个数据科学家、开发人员和每个供应商都需要以非常操作化的方式理解这些对我们意味着什么。
在本节课中,我们一起学习了人工智能伦理的核心概念及其重要性。我们了解到人工智能伦理是一个需要多方参与的社会技术挑战,并探讨了构建值得信赖人工智能的三大原则与五大支柱。最后,我们明确了将伦理付诸实践的三个关键步骤:建立理解与意识、设立治理结构以及实现具体操作化。遵循这些指导,可以帮助组织负责任地开发和部署人工智能技术。
023:定义AI伦理 🤖⚖️





在本节课中,我们将要学习人工智能伦理的定义及其核心支柱。我们将探讨为何在构建和使用AI时,将伦理置于核心至关重要,并详细解析构成AI伦理基础的五个关键方面。
人类依赖文化上公认的道德和行为标准,即伦理,来指导其决策过程,特别是那些影响他人的决策。



随着人工智能越来越多地被用于自动化和增强决策,将伦理置于AI构建的核心变得至关重要,以确保其结果符合人类的伦理和期望。


AI伦理是一个多学科领域,旨在研究如何最大化AI的积极影响,同时减少其风险和负面影响。它探讨诸如数据责任与隐私、包容性、道德主体性、价值对齐、问责制和技术滥用等问题,以理解如何以符合人类伦理和期望的方式构建和使用AI。

上一节我们介绍了AI伦理的重要性与定义,本节中我们来看看构成AI伦理的五个核心支柱。

以下是AI伦理的五大支柱:可解释性、公平性、鲁棒性、透明性和隐私性。

这些支柱是帮助我们将伦理原则嵌入AI系统的重点关注领域。

- 可解释性:当AI能够展示其如何以及为何得出特定结果或建议时,它就是可解释的。你可以将可解释性理解为AI系统在“展示其工作过程”。
- 公平性:当AI公平地对待个人或群体时,它就是公平的。AI可以通过抵消人类偏见来帮助人类做出更公平的选择。但需注意,偏见也可能存在于AI中,因此必须采取措施来减轻它。
- 鲁棒性:当AI能够有效处理异常情况(如异常输入或对抗性攻击)时,它就是鲁棒的。鲁棒的AI旨在能够承受有意和无意的干扰。
- 透明性:当关于AI系统如何设计和开发的适当信息与人类共享时,AI就是透明的。透明性意味着人类能够获取相关信息,例如用于训练AI系统的数据是什么、系统如何收集和存储数据,以及谁有权访问系统收集的数据。
- 隐私性:由于AI会摄入大量数据,其设计必须优先考虑并保护人类的隐私和数据权利。为尊重隐私而构建的AI仅收集和存储其运行所需的最少量数据,并且在未经用户同意等考虑下,收集的数据绝不应被挪作他用。





本节课中我们一起学习了AI伦理的定义及其五大支柱。总而言之,可解释性、公平性、鲁棒性、透明性和隐私性这五大支柱共同帮助我们更合乎伦理地设计、开发、部署和使用AI,并理解如何以符合人类伦理和期望的方式构建和使用AI。
024:理解人工智能中的偏见 🧠


在本节课中,我们将要学习人工智能(AI)领域中的一个核心议题:偏见。我们将探讨偏见如何在AI系统中产生,它可能带来的影响,以及如何开始着手缓解这些偏见。
偏见在人工智能中的定义与影响
上一节我们介绍了课程主题,本节中我们来看看偏见的具体含义。人工智能中的偏见,指的是在关键决策任务中,AI系统表现出不受欢迎的行为,对某些群体或个人造成系统性不利影响。这些任务可能涉及贷款审批、招聘,甚至刑事司法。
例如,一个帮助决定谁应获得额外预防性医疗保健的AI系统,如果分配给白人的资源多于黑人,就体现了偏见。另一个例子是招聘算法,如果AI系统给予符合条件的男性比符合条件的女性更多的面试机会,这也是一种偏见。
偏见的来源 📊
理解了偏见的表现后,我们需要探究其根源。AI或机器学习系统是基于人类决策者过去所做的历史决策进行训练的。因此,过去的决策者自身可能存在的显性或隐性偏见,会通过偏见数据反映在训练数据中。
以下是偏见产生的几个主要来源:
- 历史数据中的偏见:训练数据本身记录了人类过去的偏见决策。
- 数据采样偏差:在特定数据集中,某些群体可能被过度代表或代表不足。
- 数据处理引入的偏差:在数据科学项目的数据准备阶段,即使是特征工程这样的步骤也可能引入新的偏差。例如,在医疗保健案例中,如果将住院、门诊和急诊费用合并为一个单一特征,可能会比对非裔美国人产生更多偏见;而将它们作为独立特征处理,引入的偏见则少得多。
- 问题定义偏差:对问题本身的定义可能就有偏差。例如,试图预测“犯罪性”或“未来犯罪”,但使用“逮捕次数”作为指标是不合适的,因为警察在某些社区的巡逻更频繁,且被逮捕不等于有罪。
如何缓解偏见 ⚖️
既然我们讨论了偏见的多种来源,就需要采取行动来消除这些源头。缓解偏见是一个多层面的过程。
首先,认识到偏见的存在至关重要。组建一个拥有多元生活经验的团队,有助于识别可能存在的危害和偏见。
其次,寻找偏见较少的数据集是另一种有效方法。

最后,还存在技术性方法。如果我们在有偏见的数据上训练机器学习模型,可以引入额外的约束或其他统计度量来减轻偏见。IBM已经开发了多种此类算法,其中许多已在开源工具包“AI Fairness 360”中提供。
IBM的实践与承诺 🛡️
为了确保技术对社会产生积极影响,IBM设立了AI伦理委员会,致力于通过“Good Tech”实现有意识的包容。该委员会由多元化的IBM员工组成,专注于研究消除偏见,并在此领域建立标准。
IBM在多个内部领域运用AI和数据技能来应对偏见:
- 技术开发:利用技术开发资产以解决偏见问题,并关注包容性语言和技术术语(如“语言至关重要”倡议)。
- 解决方案测试:确保对解决方案进行测试,以降低偏见出现的概率和可能性。
- 多元化与包容性(D&I):使用AI和数据分析来为决策提供支持,同时最小化偏见的潜在影响。
- 人力资源(HR):在薪酬、留任、招聘和晋升决策中,利用AI和数据洞察来增强决策支持,这有助于满足全球合规要求并采取主动行动。

总结

本节课中,我们一起学习了人工智能中偏见的核心概念。我们明确了偏见是指在AI决策中对特定群体产生系统性不利影响的行为。我们探讨了偏见产生的多个来源,包括历史数据偏见、采样偏差、数据处理偏差以及问题定义偏差。最后,我们了解了缓解偏见的几种途径,包括提高意识、选择更好的数据以及采用技术工具,并看到了IBM在这些方面的具体实践。理解并应对偏见,对于构建负责任、公平的人工智能系统至关重要。
025:AI伦理和法规 📜

在本节课中,我们将要学习人工智能的法规是什么,AI法规如何与AI伦理相关联,以及为什么对于从事AI相关工作的人来说,理解AI法规至关重要。

什么是AI法规?⚖️
上一节我们介绍了课程主题,本节中我们来看看AI法规的具体定义。
法规是由政府制定、可通过法律强制执行的规则。围绕人工智能的法规环境正在迅速发展。为了在法律和伦理的框架下设计、开发、部署和使用AI,理解关键的法规内容非常重要。
IBM的立场与精准监管框架 🎯
理解了法规的基本概念后,我们来看看行业内的具体主张。IBM的立场是呼吁对人工智能进行精准监管,并支持那些旨在增加公司开发与运营可信赖AI的责任的针对性政策。
精准监管指的是基于风险、结合具体情境,并将责任分配给最接近风险一方的监管方式,这种责任方可能在AI生命周期的不同阶段发生变化。


具体而言,IBM提出了一个精准监管框架,该框架为提供和/或使用AI系统的组织包含了五项政策要务。
以下是这五项要务的详细列表:

- 指定AI伦理官员:任命一名负责确保符合可信赖AI标准的首席官员。
- 针对不同风险制定不同规则:换言之,根据具体情境监管AI,而非监管技术本身。
- 不要隐藏你的AI:使其透明化。
- 解释你的AI:换言之,使其可解释,而非一个“黑箱”决策。
- 测试你的AI是否存在偏见。
总结 📝
本节课中我们一起学习了人工智能法规的基础知识。我们了解到法规是具有法律强制力的政府规则,其环境在快速变化。IBM倡导对AI实施精准监管,并提出了一个包含五项核心政策的框架,旨在通过明确责任、区分风险、提升透明度和可解释性,以及测试偏见,来推动可信赖AI的发展。理解这些法规和伦理原则,对于负责任地开发和应用AI技术至关重要。
026:AI伦理治理与ESG 👨⚖️🌱

在本节课中,我们将要学习人工智能治理(AI Governance)与环境、社会和治理(ESG)框架的基本概念,并探讨它们如何与AI伦理紧密相连。我们将了解治理的目标、ESG的三大支柱,以及IBM如何将这些理念融入其战略。

什么是AI治理?🎯
上一节我们介绍了课程主题,本节中我们来看看AI治理的具体定义。治理是指组织通过其公司指令、员工、流程和系统进行管理的行为,旨在指导、评估、监控并在整个AI生命周期中采取纠正措施,以确保AI系统的运行符合组织的意图、利益相关者的期望以及相关法规的要求。
治理的目标是通过建立问责制、责任和监督的要求,来提供值得信赖的AI。治理能带来诸多益处,以下是几个关键好处:
- 信任:当AI活动与价值观保持一致时,组织可以构建透明、公平且值得信赖的系统,从而提升客户满意度和品牌声誉。
- 效率:当AI活动被标准化和优化时,开发可以更高效地进行,从而加速产品上市时间。
- 合规:当AI活动已得到管理和监控时,调整它们以符合新的和即将出台的行业法规及法律要求会变得不那么繁琐。
成功的治理计划包含哪些要素?🔧
了解了治理的定义和好处后,我们来看看一个成功的治理计划由哪些核心要素构成。一个成功的治理计划需要考虑人员、流程和工具。
它明确定义了人员在构建和管理可信AI中的角色和职责,包括将制定政策并建立问责制的领导者。它建立了用于构建、管理、监控和沟通AI的流程,并利用工具在整个AI生命周期中获得对AI系统性能更高的可见性和一致性。

什么是ESG?🌍
在探讨了AI治理的构成后,我们转向一个更广泛的框架——ESG。ESG代表环境、社会和治理,这些是用于衡量公司所有非财务风险和机会的因素。
在IBM,这转化为“IBM影响力”(IBM Impact),即我们在ESG方面的战略和理念。IBM影响力由三大支柱组成,我们相信这些支柱将创造一个更可持续的未来。
以下是这三大支柱:
- 环境影响:致力于对环境产生积极影响。
- 公平影响:致力于在社会中创造公平的机会和结果。
- 伦理影响:致力于在商业道德和社区中践行伦理。
我们通过在世界、商业道德、环境以及我们工作和生活的社区中产生持久的积极影响来实现这一目标。ESG中的治理方面涉及创建优先考虑道德、信任、透明度,尤其是问责制的创新、政策和实践。
AI伦理与治理如何关联?⚖️
最后,我们来看看AI伦理在治理和ESG框架中的位置。AI伦理是我们治理计划的一个重要方面。

例如,在2022年,我们的目标是让1000个生态系统合作伙伴接受科技伦理培训。这个目标很重要,因为我们相信AI的益处应该惠及大众,而不仅仅是少数人,并且培养可信AI的文化必须无处不在,而不仅仅是在IBM内部。
我们正引领AI伦理的发展,致力于创造一个更合乎伦理的未来。
总结 📝

本节课中我们一起学习了AI治理的核心定义、目标及其带来的信任、效率与合规等好处。我们探讨了成功治理计划所需的人员、流程和工具三大要素。接着,我们了解了ESG(环境、社会和治理)框架及其三大支柱,并看到了IBM如何将其融入“IBM影响力”战略。最后,我们明确了AI伦理是治理和ESG倡议中的关键组成部分,对于构建普惠、可信的人工智能未来至关重要。
027:AI的演变与未来 🚀
在本节课中,我们将回顾人工智能的发展历程,并探讨其未来的方向与挑战。我们将看到AI如何从解决规则明确的游戏问题,演进到处理现实世界中复杂、非结构化的数据,并最终走向人机协作的新阶段。
早期的AI研究者对游戏非常感兴趣。这是因为游戏虽然规则和目标明确,但其内部却蕴含着极其复杂的可能性空间。
上一节我们提到了AI对游戏的兴趣,本节中我们来看看计算机是如何在这些复杂游戏中取得突破的。以IBM的“深蓝”在国际象棋上的工作为例,计算机展现出的核心能力是:利用海量的计算资源进行更深层次的搜索,探索比以往更多的棋步可能性。
在“深蓝”之后,AI发展的另一个交叉点是IBM的“沃森”系统在智力竞赛节目《危险边缘》中获胜。
以下是“沃森”系统带来的关键启示:
- 它解答的问题并非简单地从数据库中查询。
- 它需要从大量不同的信息资源中进行信息检索。
- 它利用机器学习技术将这些信息组合起来,得出超越任何单一文献记录的答案。
如今,我们的技术已经更加先进,使我们能够着手解决更具挑战性的问题。这些问题通常具有定义不明确或混乱的特性。
从石油天然气到医疗保健,从媒体娱乐到零售,每个行业都正被非结构化数据的海啸所淹没。
以下是这些非结构化数据的常见形式:
- 多媒体内容
- 图像
- 视频
- 文本
理解这些数据的能力正变得至关重要。
认知计算最有价值的应用之一是在医疗健康领域。医疗提供者面临着利用所有可用信息的巨大挑战。
以下是医疗领域面临的数据挑战:
- 医学文献每年增加约70万篇文章,现有文献已达数百万。
- 现代影像技术产生海量信息,一次扫描可能包含5000张图像。
- 需要结合图像分析、自然语言理解、文本分析、医学文献和患者病史。
通过整合这些技术,医生可以获得更多的信息和知识,以帮助他们做出尽可能准确的诊断。
显然,计算机的能力与人的能力在此交汇,产生了比两者单独作用更优的结果。未来真正有趣的是,找到最佳的人机协作方式。
“沃森”系统探索了智能的另一个方面,也是更困难的方面——语言智能。它必须能够解读问题并得出正确答案,无论话题是什么。
因此,我认为现代世界中AI的理想场景,不是试图开发一个能完全自主处理问题所有方面的系统。
以下是理想的人机协作模式:
- 机器做它们最擅长的事:如高速计算、海量数据检索与模式识别。
- 人类做我们最擅长的事:如直觉判断、伦理考量、创造性思维和情感互动。
可以想象,这种人机结合将比任何一方单独行动做得更好。
我们始终在寻找下一个可以攻克的重大挑战。这可能需要多年的努力,但当我们成功时,将为世界创造宝贵的价值。
本节课中我们一起学习了AI从解决规则明确的游戏问题,到处理非结构化数据,再到迈向人机协同合作的演变历程。未来,AI的发展将更侧重于与人类优势互补,共同解决复杂的现实世界难题。
028:与AI的未来 🔮

在本节课中,我们将探讨人工智能(AI)的未来发展趋势。我们将了解AI技术发展的惊人速度、它对社会各领域(特别是医疗保健)的潜在影响,以及它如何可能改变我们的日常生活和工作方式。
AI发展的惊人速度
上一节我们介绍了AI的基本概念,本节中我们来看看AI技术发展的速度。AI的进步并非线性,而是呈指数级加速。
一个典型的例子是DeepMind开发的围棋系统。围棋是一项有2500年历史的游戏。第一代AI系统击败了人类冠军,其能力超越了人类两千多年的围棋智慧。然而,更令人惊讶的是,第二代系统在不到一年的时间内就超越了第一代系统,并且仅用了大约40小时的训练时间就达到了这种精通水平。在100场对局中,它取得了100场胜利。
因此,我们所知道的是,技术加速的步伐令人惊叹,并且我们很难准确预测其未来。
未来的核心预测
如果非要做一个预测,那么核心趋势可以总结为以下三点:
以下是关于AI未来发展的三个核心预测:
- 更快:技术迭代和进步的速度将持续加快。
- 更好:AI系统的性能和能力将不断提升。
- 更便宜:AI技术的应用成本将逐渐降低。
并且,所有这些变化都将在非常短的时间内迅速发生。世界将变得非常有趣,技术将飞速进化。因为这些技术不仅能自动化执行我们前所未见的任务,还能在执行过程中不断学习并持续改进。
自动化与生活变革
我们将看到AI系统被部署到各个领域,并且每年它们在执行的任务上都会变得更好。这将带来一场我们曾经经历过的革命。
以下是一些可能被自动化并从我们每日任务清单中消除的简单事项:
- 我们不再需要自己驾驶汽车。
- 我们可能不再需要自己收拾碗碟。
就像最初的洗衣机、洗碗机等发明一样,AI将帮助我们丰富生活、简化生活方式并提高舒适度。随着AI世界的发展,我们将看到更多这样的演进。
医疗保健领域的变革
特别是在医疗保健领域,AI技术将是颠覆性的。我们拥有海量的信息,可以从一个特定系统中提取并应用到另一个系统中。
我们可以构建各种对长期护理极为有益的模型。我对此领域的发展感到非常兴奋。
我们有望看到:
- 更快的康复时间。
- 更好的患者治疗结果。
- 人们花费在医院和各种护理中心的时间和金钱更少。
对未来的愿景与希望
展望未来,我对做出长期预测总是持谨慎态度。但我希望我们确实能够部署这些协作机器人系统,包括自动驾驶汽车,以使人们的生活更美好。
其理念是利用AI和机器人技术来提高整个社会的生活质量。
我期待的未来是,AI在将我们从枯燥、平凡、肮脏、危险的工作中解放出来方面扮演核心角色,并有望为我们提供更多时间与家人共度,通过数据分析带来更好的医疗保健。
如果让我设想一个希望在未来几年内实现的愿景,那就是我们将真正利用这些技术来让我们的生活更美好,并将我们从枯燥、肮脏、危险的工作中解放出来。
本节课中我们一起学习了AI未来的发展趋势。我们认识到其发展是指数级的、不可预测的,并将在效率、成本和能力上持续进步。AI有望自动化日常任务,在医疗保健等领域引发革命,最终目标是提升全社会的生活质量,将人类从乏味和危险的工作中解放出来。未来,AI将成为我们生活中不可或缺的协作伙伴。
029:成功采用AI的旅程 🪜
在本节课中,我们将学习企业如何通过一个系统化的步骤——“AI阶梯”,来成功采用人工智能技术,将数据转化为业务价值。
在一个经历剧烈数字化转型的世界里,企业正寻求借助人工智能来塑造未来的工作方式。


人工智能能够预测并告知未来的结果,它使人们能够在企业中从事更高价值的工作,并构想新的业务模式。



它可以自动化决策、流程和体验,但人工智能并非魔法。


事实是,没有信息架构(IA),就没有人工智能(AI)。


然而,许多组织难以起步,因为其80%的数据被锁在孤岛中,无法直接用于业务。
那么,如何将抱负转化为实际成果呢?


答案是通过一套规范性的步骤,我们称之为“AI阶梯”。
旅程始于将所有数据现代化,并统一到一个可在任何云上运行的单一平台上。
在阶梯本身,包含四个关键步骤。

以下是AI阶梯的四个核心步骤:
- 收集数据:使数据变得简单且易于访问。认真思考你需要训练哪些模型。
- 组织数据:为那些AI模型创建一个业务就绪的分析基础。
- 分析数据:在信任和透明的基础上进行分析。因为如果你无法解释结果、防止偏见或证明其准确性,那么应用和扩展人工智能就毫无意义。
- 注入价值:一旦你真正信任你的数据和你部署的人工智能,你就可以在控制日常工作的应用程序和流程中实现其全部价值。


换句话说,最后一步是“注入”。或者说,你开始在整个业务中实现人工智能的运营化。


我们通过在这个人工智能和多云世界中释放其数据的价值,帮助了成千上万的企业将人工智能投入工作。


我们通过为员工提供合适的技能组合,以及在人工智能中建立信任和透明度来实现这一目标。

这就是AI阶梯的概要,让我们开始攀登吧。





本节课中,我们一起学习了“AI阶梯”框架。该框架强调,成功采用AI始于坚实的数据基础(信息架构IA),并遵循收集 → 组织 → 分析 → 注入四个步骤。这个过程旨在帮助企业系统化地解锁数据价值,将AI抱负转化为可信任、可运营的实际成果,从而塑造未来的工作方式。
030:29_AI职业建议

概述
在本节课中,我们将学习来自行业专家的关于如何学习人工智能以及开启AI职业生涯的宝贵建议。这些建议涵盖了从学习路径、心态调整到所需技能等多个方面,旨在为初学者提供清晰的指引。
核心建议
上一节我们介绍了课程概述,本节中我们来看看专家们给出的具体建议。以下是他们提出的核心观点。
- 选择正确,前景广阔:人工智能将渗透到人类努力的每一个领域,因此选择学习和应用AI是一个正确的决定。
- 保持开放心态:技术发展迅速,未来充满未知。重要的是保持开放心态,不拘泥于特定技术或方法,要敢于前瞻性和创造性思考。
- 注重实践应用:最关键的建议是应用所学知识。学习不应停留在理论层面,而应注重实践。
学习路径与基础
了解了核心心态后,我们来看看具体的学习路径应该怎么规划。以下是专家建议的步骤。
- 打好基础:首先通过优秀的课程(例如本课程)掌握AI基础知识,了解各类AI系统,并找到自己最感兴趣的细分领域。
- 深化专业学习:随后,可以寻找相关的学术项目来深入学习特定领域。
- 夯实数理基础:对于高中生等初学者,务必重视数学和科学的学习。在AI领域工作,数学知识至关重要,能帮助你充分理解AI系统的运行原理。公式可表示为:扎实的数学基础 → 深入理解AI系统。
- 利用在线资源:认真对待数学和科学,然后利用Coursera等平台及其他教育项目,获取进入行业所需的基础知识。
技术门槛与技能要求
明确了学习路径,我们还需要了解进入AI领域的技术门槛。与过去相比,情况已大不相同。
- 门槛降低:AI领域在过去五年变化巨大。如今,你不再需要拥有高等数学的博士学位或掌握晦涩的编程语言。
- 应用层重点:你只需要知道如何使用软件API并理解待解决的问题。例如,使用Watson时,重点是理解问题和API的工作方式。
- 深入研究的需求:然而,如果你想构建自己的算法,仍然需要一些高级知识。
AI的本质与学习前提
在开始学习之前,理解AI在技术中的定位非常重要。AI和机器学习是技术未来的关键,它开启了与计算机交互的全新方式。但机器学习技术并非孤立存在的学科。
它只是程序员工具箱中众多算法的一种,尽管是一种更智能、更强大的算法。因此,在学习机器学习之前,充分理解实际的编程技术以及机器学习背后的技术基础至关重要。因为机器学习实际上需要下一代编程和硬件加速的支持,这是常规编程和算法不一定需要的。
所以,首要的是确保你对技术本身充满热情。继续学习编程、编码,学习如何与计算机“对话”,理解代码背后的计算思维,然后再从最基础的部分开始学习机器学习。
实践入门与领域广度
理论准备就绪后,实践是最好的老师。你可以从一个API(如IBM Watson)开始,了解它能做什么,然后再转向更高级的自定义技术及其背后的数学原理。
AI是一个迷人的领域,但它建立在大量基础学科之上。你需要真正掌握数学、概率论与统计学、优化理论,并且必须能够编程,能够利用现有工具训练网络并理解其工作原理。AI是一个非常广阔的领域,需要许多不同领域的专家和专长。
因此,你能做的最好的事情之一就是快速开始,动手实践一些简单任务,例如尝试识别数字或在网络图片中寻找猫咪。这些都是极佳的挑战,能让你起步并了解在该领域需要学习什么。
总结与展望
最后,让我们对今天的课程做一个总结。现在进入AI领域,就像二三十年前进入互联网相关领域一样。当前正是软件的复兴时期。现在成为可能的事情,在十年前却无法实现。我们拥有了计算技术和算力,也积累了知识,而这个领域只会不断增长。
所以,你需要做的就是立刻开始行动。
本节课总结
本节课中,我们一起学习了多位专家对AI学习者和从业者的建议。关键点包括:肯定AI领域的选择,强调保持开放心态和注重实践;规划了从基础课程、数理基础到专业深化的学习路径;指出了当前AI应用门槛降低但深入研究仍需扎实基础;明确了AI作为强大工具的本质及学习编程先导的重要性;最后鼓励通过实践项目入门,并指出AI领域的广阔前景与巨大机遇。核心建议是:夯实基础,动手实践,即刻启程。
031:AI创新的温床 🌍
在本节课中,我们将了解全球人工智能(AI)创新与机遇的地理分布。我们将探讨哪些城市和地区正在成为AI发展的中心,并分析其背后的原因。
全球AI机遇分布
上一节我们介绍了AI领域的宏观趋势,本节中我们来看看具体哪些地区充满了AI发展的活力。根据对机会流向的观察,AI领域的机遇实际上分布相当广泛,许多不同地方都存在大量机会。
以下是当前AI创新与机遇较为集中的几个关键地区:
- 美国旧金山湾区:这里持续是AI和机器人领域初创企业的温床,预计将继续发展。
- 美国波士顿:拥有大量初创企业。
- 美国西雅图:也是重要的AI中心之一。
- 加拿大多伦多与蒙特利尔:已成功发展出相当健全和繁荣的AI生态系统,预计将继续发展和增长。
加拿大的AI生态系统
了解了北美的主要AI中心后,我们进一步聚焦于加拿大,特别是多伦多地区的卓越表现。多伦多的发展势头迅猛,其生态系统围绕多伦多大学过去几十年的卓越进展建立起来,例如向量研究所。
以下是多伦多AI生态繁荣的具体体现:
- 该地区涌现出优秀的孵化器和初创公司,大力投资于AI技术和能力。
- 大型公司在此设立研究实验室,并将其紧邻大学布局。
- 有大量资金专门投入多伦多的AI研究。
因此,多伦多在与全球任何最佳的AI学习和工作地点的竞争中都具有优势。加拿大整体表现非常出色,在集中顶尖AI人才方面做得非常好。
加拿大其他AI中心
除了多伦多和蒙特利尔,加拿大还有其他城市也发展成为强大的AI中心。
以下是加拿大其他重要的AI枢纽城市:
- 温哥华
- 埃德蒙顿
这些中心持续增长,并吸引着大量优秀的AI人才。这种趋势预计将持续下去。
本节课中我们一起学习了全球AI创新中心的分布。我们看到,机遇不仅限于传统的科技中心,加拿大等多个地区通过构建强大的生态系统、吸引人才与投资,正迅速崛起为AI研究和工作的理想之地。加拿大正在成为一个进行AI研究和工作的绝佳地点。
032:Tanmay的AI学习建议 🧠

在本节课中,我们将学习Tanmay Bakshi分享的关于如何入门人工智能领域的核心建议。这些建议特别针对对技术和AI充满好奇的青少年和学生,旨在澄清常见误解,并提供一个清晰、循序渐进的学习路径。
上一节我们介绍了课程背景,本节中我们来看看Tanmay对AI初学者的具体建议。
首先,Tanmay指出,在人们询问如何进入机器学习或AI领域时,存在许多误解。许多人认为机器学习是一个独立、孤立的学科,只要学习了就能直接实现算法。但事实上,机器学习只是编程算法工具箱中的另一种算法。在某些情况下,它可能比其他算法强大得多,但从根本上说,它仍然是一种算法。
因此,在进入机器学习或AI领域之前,理解如何编程至关重要。由于机器学习技术相对复杂,拥有关于计算机工作原理、代码如何运行,甚至编译器背后机制的深入知识,将极大地帮助你学习如何编写机器学习算法。
机器学习并非普通的算法实现,比如路径查找或搜索。它的特殊性在于:
- 它需要强大的硬件加速支持。
- 它要求你至少理解一些反向传播背后的微积分知识。
理解这些是掌握机器学习和AI基础工作原理的必要条件。
以下是Tanmay建议的学习路径:
首先,你需要对技术本身充满热情。如果你对技术没有热情,那么机器学习技术可能并非你应当努力追求的方向。
确认了自己的热情后,便可以开始学习技术领域的概念。学习如何编程,并掌握如Python、新兴语言Julia,以及因为Swift for TensorFlow项目而值得关注的Swift等语言。
接下来,至少学习一些神经网络背后的实际数学原理。Tanmay回忆自己初次接触机器学习时,是在纸上画了一个小型神经网络,并手动进行反向传播计算,以理解权重如何更新、损失值如何工作等机制。
在获得了这种基础理解后,你可以尝试用自己掌握的语言从零开始实现这些神经网络。
当你通过实践和示例学习,对工作原理有了清晰认识后,便最终可以开始使用不同的库和工具包,以便在机器学习领域快速构建应用原型。
以上是进入机器学习领域的一个高层级观点。当然,也存在更好、更直观的入门方式。
例如,以Watson为例。观察它如何在云上提供API,你会发现,使用Watson无需理解机器学习背后的任何原理,同时你依然能利用其所有强大功能。语言翻译器等工具使用了几乎是最先进的神经机器翻译技术,你甚至可以在完全不了解模型背后原理的情况下训练自己的模型。
因此,从像Watson这样的工具包开始,同时获得对编程和机器学习的良好认知,了解机器学习能做什么、不能做什么,然后再深入钻研其背后的数学原理,这是另一种非常有效的入门途径。
本节课中,我们一起学习了Tanmay Bakshi的AI学习建议。核心要点是:消除“机器学习是孤立学科”的误解,将其视为编程算法的一种;强调编程基础和数学理解的重要性;并提供了一个从培养热情、学习编程、理解数学原理,到动手实践、最终利用高级工具的学习路线图。同时,也指出了从应用工具(如Watson)入手,再深入原理的另一种有效学习路径。
033:Polong的AI职业建议 🧭

在本节课中,我们将学习Polong分享的关于如何进入人工智能领域的职业建议。这些建议基于他本人从心理学背景转型为数据科学家/AI专家的亲身经历,对于初学者和非技术背景的学习者具有很高的参考价值。
上一节我们了解了进入AI领域的普遍挑战,本节中我们来看看Polong分享的具体建议。他首先回顾了自己非典型的职业转型路径。
Polong拥有心理学背景。他最初计划从事学术研究,但后来意识到自己并不想成为教授或在学术环境中从事教学研究工作。因此,他开始寻找工作,并发现大学所学知识与公司实际需求之间存在差距。
为了弥合这一差距,Polong采取了以下关键步骤。以下是他的核心建议:
1. 获取技能
他利用在线课程资源,通过编程来练习Python、R和数据分析技能,从而建立起被众多公司所看重的基础技能组合。
2. 展示能力
掌握技能后,下一个问题是如何向潜在雇主证明这些能力。Polong通过创建个人作品集来解决这个问题,其中包含各种在线作业、练习和项目,用以展示他的实际能力。
3. 公开教学
回到多伦多后,他开始在技术聚会上教授Python和数据科学。这进一步公开地证明了他的能力,让人们能亲眼看到他声称掌握的技能,这有助于克服简历上心理学背景带来的“证明负担”。
4. 连接同行
Polong建议与当地AI领域的专家建立联系,例如数据科学家、机器学习研究员或数据工程师。这有助于你更清晰地了解自己希望成为哪种类型的AI专家,因为该领域包含从尖端算法研究到业务优化等众多不同方向。与业内人士交流是明确职业目标、甚至建立有价值人脉的重要一步。
本节课中我们一起学习了Polong提出的进入AI职业领域的四点核心建议:获取技能、展示能力、公开教学以及连接同行。这些步骤为初学者,尤其是跨专业背景的学习者,提供了一条清晰可行的行动路径。关键在于主动学习、构建可验证的项目成果,并积极融入专业社区。
034:0_课程介绍 🚀

在本节课中,我们将要学习生成式人工智能的入门知识,了解其核心概念、应用领域以及本课程的结构与学习目标。

想象一个由人工智能驱动的世界,它将使我们工作更高效、寿命更长、能源更清洁。这个世界已经到来。生成式人工智能已经深刻改变了我们的生活方式。

生成式人工智能模型能够模仿人类的思维和创造力,以生成新颖的内容并执行复杂的任务。组织可以利用生成式人工智能来提高生产力和盈利能力。个人可以使用生成式人工智能工具来提升效率、为工作增添实际价值、节省成本并最大化品牌价值。
如果你尚未涉足此领域,本课程正适合你。我们欢迎所有对快速发展的生成式人工智能领域抱有真诚兴趣的专业人士、爱好者、从业者和学生。无论你的背景或经验如何,这是一门面向所有人的课程。
课程目标 🎯


本课程旨在让你对生成式人工智能的能力、应用以及常见模型和工具有一个扎实的理解。在本课程结束时,你将能够:
- 描述生成式人工智能的能力及其在现实世界中的用例。
- 识别生成式人工智能在不同领域和行业中的应用。
- 探索常见的生成式人工智能模型和工具。
课程结构 📚
这是一门由三个模块组成的精炼课程。预计每个模块需要花费一到两个小时来完成。
模块一:核心概念与应用
在课程的第一个模块中,你将学习生成式人工智能的核心概念,了解其在不同领域的应用案例,并理解其在生成文本、图像、代码、音频和视频方面的能力。
模块二:行业应用与工具

在第二个模块中,你将探索信息技术、娱乐、教育、金融和医疗保健等不同行业如何利用生成式人工智能。此外,在本模块中,你将学习用于生成文本、图像、代码、音频和视频的常见模型和工具(如 ChatGPT、DALL-E 和 Synthesia)的能力与特性。


模块三:实践与评估
模块三要求你参与一个最终项目,并完成一个计分测验,以检验你对课程概念的理解。你也可以访问课程术语表,并获得关于后续学习路径的指导。
学习资源与活动 💡
本课程融合了概念讲解视频和辅助阅读材料。观看所有视频以充分掌握学习材料的潜力。
你将体验到动手实验和一个最终项目,这些活动展示了生成式人工智能在多个领域的常见用例。每节课末尾都有练习测验,帮助你巩固所学知识。课程结束时,你还需要完成一个计分测验。
课程还提供了讨论论坛,方便你与课程工作人员联系并与同伴交流。最有趣的是,通过专家观点视频,你将听到经验丰富的从业者分享他们对生成式人工智能不同方面的见解。
总结与展望 🌟



本节课中,我们一起学习了生成式人工智能的初步介绍、课程目标与结构。当生成式人工智能正在全球范围内增强个人、组织和社区的创造力与专业能力时,本课程为你提供了一个创造新体验的绝佳机会。
生成式人工智能工程:P35:为什么学习生成式AI与IBM

在本节课中,我们将探讨生成式人工智能(Generative AI)为何成为当前技术浪潮的核心,以及为何掌握相关技能对个人职业发展至关重要。我们将了解生成式AI的广泛影响、企业应用需求,以及IBM在推动负责任AI实践中的角色。
生成式人工智能正受到每一位领导者、每一个组织、企业或政府的关注。伴随关注而来的是机遇。各组织正在寻找理解这项技术,并且最重要的是,具备应用该技术技能的人才。
与以往许多趋势性技术不同,生成式人工智能几乎触及了每个行业中的每一个岗位。生成式AI技能预计将变得非常重要,不仅对计算机科学家如此,对所有人都是如此。这些技能将变得像文字处理、电子表格甚至基本商业素养一样必不可少。这正是“生成式AI普及化”课程项目设立的原因。
目前,人工智能领域正涌现大量新的关注点。企业正将目光超越消费级AI应用。聊天机器人界面是展示生成式AI潜力的绝佳方式,而现实用例则是将生成式AI嵌入现有流程,使其成为几乎每个业务工作流程中不可或缺的功能。
IBM很自豪能够帮助企业将生成式AI整合到其运营中。通过这些课程项目,你将获得的技能应能助力你的职业生涯,并可以立即应用到你的工作中。
企业对生成式AI的潜力感到兴奋,但同时也对其潜在风险感到担忧。这些课程项目将赋予你处理AI伦理问题的技能,这些技能根植于IBM开创的负责任方法。


本节课中,我们一起学习了生成式AI的普遍重要性及其对各类职业的影响。我们了解到,掌握生成式AI技能正成为一项基础能力,而企业不仅关注其应用潜力,也重视以负责任的方式部署它。IBM提供的学习路径旨在帮助学习者获得可直接应用的实用技能,并为应对相关的伦理挑战做好准备。
036:生成式AI基础专业课程介绍 🚀


在本节课中,我们将介绍IBM的《生成式人工智能工程》专业课程。该课程旨在帮助初学者全面了解生成式AI的核心概念、工具和应用,无需任何技术背景。通过学习,你将掌握如何利用生成式AI提升个人技能与职业发展。
你是否知道,全球的营销人员已经在使用生成式AI来创作内容、撰写文案、激发创意、分析市场数据以及生成图像?
根据彭博社的预测,到2032年,生成式AI市场的规模预计将达到1.3万亿美元。

因此,深入了解生成式AI对你而言至关重要。
那么,生成式AI适合所有人学习吗?答案是肯定的。
你可以利用其潜力,为自己创造更好的职业前景和生活。
本专业课程面向所有对探索生成式AI力量充满热情的人,无需具备先前的AI技术知识或背景。
即使是初学者也能从中受益,因为它全面涵盖了生成式AI的基本概念、模型、工具和应用。
在本课程结束时,你将能够:
- 解释生成式AI基础模型的基本概念、能力、模型、工具、应用和平台。
- 讨论提示工程,并应用强大的提示工程技术来编写有效的提示,从而从AI模型中生成期望的结果。
- 讨论生成式AI的局限性,并解释其伦理关切及负责任使用的考量。
- 认识到生成式AI在提升你职业生涯和帮助改进工作场所方面的能力。
课程结构 📚
本专业课程包含五门精心设计的自定进度课程,每门课程需要3到5小时完成。

课程1:生成式AI导论与应用 🌐



上一节我们概述了课程目标,本节中我们来看看第一门课的具体内容。
课程1是你理解生成式AI能力的第一步,其能力涵盖文本、图像、音频、视频、虚拟世界、代码和数据等多个领域。
你将了解不同行业如何应用常见的生成式AI模型和工具,例如:
- GPT
- DALL-E
- Stable Diffusion
- IBM Granite
- Synthesia
课程2:提示工程精要 ✍️
在了解了生成式AI的广泛应用后,接下来我们将学习如何有效地与AI交互。


课程2介绍了提示工程的概念,以及它如何帮助你释放如ChatGPT这类生成式AI工具的全部潜力。
你将探索开发有效提示的技术、方法和最佳实践,并使用以下常用工具:
- IBM Watsonx Prompt Lab
- Spellbook
- Dust
课程3:生成式AI的核心构建模块 ⚙️
掌握了与AI对话的技巧后,我们需要深入理解其背后的原理。

课程3专注于生成式AI的核心概念和构建模块,例如:
- 深度学习
- 基于Transformer架构的大语言模型
- 扩散模型
- 基础模型
你还将了解不同的生成式AI平台,如IBM Watsonx.ai和Hugging Face。
课程4:生成式AI的伦理与局限 ⚖️

理解了技术原理,我们还需审视其带来的社会影响。
在课程4中,你将探讨与生成式AI相关的伦理考量。例如:
- 它对数据隐私和安全、版权侵权、劳动力以及环境有何影响?
- 你将描述其局限性,例如数据偏见、缺乏可解释性、透明度和可理解性。
- 识别生成式AI的常见滥用,如深度伪造和幻觉。
课程5:生成式AI的未来与你的职业 🚀
探讨了挑战之后,让我们展望未来,看看生成式AI将如何塑造新的机遇。

最后,课程5讨论了生成式AI的未来。你难道不想知道在那个未来里,你的职业机会有哪些吗?
你将学习生成式AI如何影响和增强不同行业中的现有职能、技能和工作角色,以及如何利用生成式AI构建自己的应用程序,创造新的商业机会。
本专业课程的内容旨在吸引并赋能你。
学习方法与实践 🛠️

通过观看精选的概念视频、聆听AI专家分享他们的见解和技巧,以及在实践实验室和项目中练习技术,你将在日常生活中使用生成式AI工具和应用程序时感到更加自信。
目前,65% 的生成式AI用户是千禧一代或Z世代,72% 是在职人士。通过本专业课程的学习,你将准备好加入生成式AI变革者的行列。

生成式AI,适合每一个人。
总结


本节课中,我们一起学习了IBM《生成式人工智能工程》专业课程的完整介绍。该课程共分为五个部分,从应用入门、提示工程、核心技术、伦理考量到未来展望,为初学者提供了一条清晰的学习路径。课程强调实践与理论结合,旨在帮助学习者自信地掌握并应用生成式AI技术,把握未来的职业发展机遇。
037:生成式AI简介 🧠

在本节课中,我们将要学习生成式人工智能的基本概念、其发展历程,以及它与判别式人工智能的区别。我们将从人工智能的基础定义开始,逐步深入到生成式AI的核心模型和应用。


概述

人工智能已经存在多年,它塑造了我们生活的方方面面,并彻底改变了我们的工作和生活方式。其核心定义是机器对人类智能的模拟。AI模型从海量现有数据中学习,这个过程被称为训练。人工智能主要有两种基本方法:判别式AI和生成式AI。
判别式人工智能
判别式AI是一种学习区分不同数据类别的方法。它通过分析带有标签的训练数据来学习模式,并用于对新数据进行分类或预测。
以下是判别式AI的工作原理:
- 训练过程:模型接收一组训练数据,其中每个数据点都带有其所属类别的标签。
- 决策边界:模型学习在数据特征空间中划分不同类别的“决策边界”。
- 预测:对于新的数据点,模型通过判断其落在决策边界的哪一侧来预测其类别。

判别式AI模型利用高级算法来区分、分类、识别模式,并根据训练数据得出结论。一个典型的例子是电子邮件垃圾邮件过滤器,它可以区分垃圾邮件和非垃圾邮件。

判别式AI模型最适合应用于分类任务。然而,它们无法理解上下文,也无法基于对训练数据的上下文理解来生成新的内容。
生成式人工智能
上一节我们介绍了判别式AI的分类能力,本节中我们来看看生成式AI如何更进一步。生成式AI模型学习基于训练数据生成全新的内容。它们能够捕捉训练数据的底层分布,并生成新颖的数据实例。
生成式AI的工作流程始于一个“提示”。这个提示可以是文本、图像、视频或模型能够处理的任何其他输入。作为输出,模型会生成新的内容,包括文本、图像、音频、视频、代码和数据。
生成式AI的输出形式可以与提示相同,例如“文本到文本”;也可以与提示不同,例如“文本到图像”或“图像到视频”。

这里有一个简单的例子来理解判别式AI和生成式AI的区别:
- 判别式AI 最适合回答诸如“这张图片画的是鸟巢还是蛋?”这类问题。
- 生成式AI 则会响应诸如“画一张里面有三个蛋的鸟巢图像”这样的提示。
如果说判别式AI模仿了我们的分析和预测能力,那么生成式AI则更进一步,模仿了我们的创造能力。正如《哈佛商业评论》的评论所暗示的:AI不仅可以提升我们的分析和决策能力,还可以增强创造力。

生成式AI的模型基础
生成式AI的创造能力来源于其核心模型。这些模型可以被视为生成式AI的构建模块。

以下是几种关键的生成式AI模型:
- 生成对抗网络:包含一个生成器和一个判别器相互竞争学习的框架。
- 变分自编码器:通过学习数据的压缩表示来生成新数据。
- Transformer模型:基于自注意力机制,擅长处理序列数据,是大型语言模型的基础。
- 扩散模型:通过逐步去噪过程从随机噪声中生成高质量图像。
判别式模型和生成式模型都是使用深度学习技术创建的。深度学习涉及训练人工神经网络从海量数据中学习。人工神经网络是由称为神经元的较小计算单元组成的集合,其建模方式类似于人脑处理信息的过程。
生成式AI的演进
生成式AI并非一个新概念,其根源可追溯到机器学习的起源。在20世纪50年代末,科学家们提出机器学习时,就探索了使用算法创建新数据。到了20世纪90年代,神经网络的兴起为生成式AI注入了新的进展。
进入21世纪10年代初,在大型数据集和增强计算能力的支持下,深度学习进一步推动了生成式AI的发展。2014年,随着伊恩·古德费洛及其同事引入GANs,生成式AI发生了变革。GANs以及VAEs、Transformers等模型为生成式AI的增长以及基础模型和工具的开发奠定了基础。
基础模型是具有广泛能力的AI模型,可以被调整以创建针对特定用例的、更专业的模型或工具。其中一类特定的基础模型称为大型语言模型,它们经过训练以理解人类语言,并能处理和生成文本。
2018年,OpenAI推出了基于Transformer的LLM,称为生成式预训练Transformer。多年来,不同的LLM,如GPT系列中的GPT-3和GPT-4、Google的PaLM、Meta的Llama等,显著增强了生成式AI生成连贯且相关文本的能力。在其他用例的模型方面也有类似的发展,例如用于图像生成的Stable Diffusion和DALL-E模型。

应用与影响
多种生成式模型的发展,催生了针对不同用例的生成式AI工具市场的增长。
以下是不同领域的生成式AI工具示例:
- 文本生成:ChatGPT, Bard
- 图像生成:DALL-E 2, Midjourney
- 视频生成:Synthesia
- 代码生成:GitHub Copilot, AlphaCode
快速涌现的模型和工具为生成式AI在各个领域的应用开辟了广阔的空间。引用麦肯锡关于生成式AI经济潜力的报告:“生成式AI有潜力改变工作的结构,通过自动化部分个人活动来增强个体工人的能力。”该报告还预测,生成式AI对生产力的影响可能为全球经济增加数万亿美元的价值。
总结

本节课中我们一起学习了生成式AI的核心知识。我们了解到,生成式AI模型能够基于其训练数据生成全新的内容。此外,生成式AI的创造能力建立在诸如GANs、VAEs、Transformers和扩散模型等模型之上。基础模型可以被调整以创建针对特定用例的专业模型或工具。最后,我们认识到生成式AI模型和工具在不同领域和行业中拥有广泛的应用前景。
生成式人工智能工程:P38:生成式AI的能力 🚀
在本节课中,我们将学习生成式人工智能(Generative AI)的核心能力,并探讨这些能力在现实世界中的应用场景。生成式AI能够创造全新的内容,其应用范围广泛,潜力巨大。

文本生成能力 📝
上一节我们概述了生成式AI的多种能力,本节中我们首先来看看其文本生成能力。这是指AI生成清晰、流畅且符合上下文语境的文本回复的能力。
生成式AI文本生成能力的核心是先进的大型语言模型(LLMs)。这些模型在大型数据集上进行训练,能够学习数据中的模式和结构,从而生成连贯且相关的文本。
以下是LLMs能够执行的一些主要任务:
- 文本补全:根据已有内容续写文本。
- 摘要:将长文本浓缩为简短摘要。
- 问答:根据给定信息回答问题。
- 翻译:在不同语言之间进行翻译。
- 代码生成:根据描述生成代码片段。
- 图文配对:理解图像内容并生成描述文本,或根据文本生成图像。
一些知名的LLMs包括OpenAI的GPT(Generative Pre-trained Transformer)和Google的PaLM(Pathways Language Model)。它们为聊天机器人、虚拟助手等提供了强大的对话交互能力。



图像生成能力 🎨
接下来,我们探讨生成式AI的图像生成能力。这指的是AI能够合成具有艺术感且逼真的图像,这些图像与真实照片非常相似。

生成式模型基于深度学习技术(如生成对抗网络和变分自编码器)来生成高质量的图像。生成的图像展现出逼真的纹理、自然的色彩和精细的细节,给人以真实拍摄的印象。
以下是几个应用实例:
- StyleGAN:可以生成高质量、高分辨率的虚构人脸、动物或自然景观图像。
- DeepArt:能够根据简单的草图创作出完整的艺术作品。
- DALL-E:可以根据用户的文字描述生成全新的图像。
除了艺术、设计、娱乐和游戏领域,生成图像还可用于增强训练数据集,并辅助医学成像和科学可视化研究。
音频生成能力 🎵
现在,让我们看看生成式AI在音频领域的生成能力。生成式模型可以创作新的音乐作品,使用文本转语音技术将文本转换为音频,并创造合成语音及自然的人声。
这些模型能够转换、修改、净化人声,降低噪音并提升音频质量。它们还能相当逼真地模仿人类声音。

以下是几个具体应用:
- WaveGAN:可以生成新的、逼真的原始音频波形,包括语音、音乐和自然声音。
- MuseNet:能够结合多种乐器、风格和流派,生成新颖的音乐作品。
- Tacotron 2 和 Mozilla TTS:使用先进的TTS系统创建合成语音,模仿人类的音调、音高、节奏和表达。


AI生成的音频在媒体创作、娱乐、教育培训、游戏及虚拟现实等多个领域都有广泛应用。
视频生成能力 🎬
上一节我们介绍了音频生成,本节中我们来看看视频生成能力。生成式AI模型能够创建动态、清晰的视频,范围从基础动画到复杂场景。
这些模型通过结合时间连贯性和自然语言处理技术,将图像转化为动态视频。时间连贯性确保了视频在时间维度上意义和上下文的一致性,从而使得视频中的运动平滑、过渡自然。
例如,VideoGPT模型可以根据用户提供的文字提示生成新视频。用户可以指定期望的内容来引导视频生成过程,包括视频补全、编辑、合成、预测和风格迁移等。
生成的视频可应用于艺术、娱乐、教育、游戏、医学及研究等多个领域。


代码生成能力 💻

生成式AI不仅能生成多媒体内容,还能生成代码。接下来,我们探讨其代码生成能力。生成式模型可以根据所需功能,生成新的代码片段、函数或完整程序。
这些模型在现有代码库上进行训练,能够完成或创建代码、重构代码、识别并修复代码错误、测试软件以及生成包括注释、函数描述和使用示例在内的文档。
例如,GitHub Copilot 和 IBM Watson Code Assistant 都是基于AI的编程助手,可以帮助自动补全代码、处理复杂任务,并根据输入生成代码。
AI生成的代码可用于软件开发、机器学习、数据分析、机器人自动化以及游戏和AR/VR环境开发等领域。开发者可以利用代码生成能力来更高效地编写、调试和测试代码。

数据生成与增强能力 📊



除了生成代码,生成式AI还能生成和增强数据。现在,让我们探索其数据生成与增强能力。生成式模型可以生成新数据并扩展现有数据集。
生成合成数据集有助于增加数据的多样性和可变性,从而带来更稳健、更有效的模型性能。
这些模型可以为图像、文本、语音、表格数据、时间序列数据等多种类型生成新样本并增强数据集。
数据生成与增强能力在医疗健康、游戏、教育培训、艺术创作以及自动驾驶等众多领域都有重要应用。


虚拟世界创造能力 🌐
生成式AI另一个强大的能力是创造高度逼真且复杂的虚拟世界。你可以创建模拟真实行为、表情、对话甚至决策的虚拟化身。
你还可以创建具有逼真纹理、声音和物体的复杂虚拟环境,这些环境遵循物理世界的规律。元宇宙平台利用生成式模型为用户创造独特且个性化的体验。
生成式AI还能创造具有独特个性的虚拟身份,为虚拟化身赋予特定的个人特质,并体现在其行为和对话中。
虚拟世界创造能力在游戏、娱乐、教育、增强/虚拟现实、元宇宙平台以及虚拟偶像和数字人格等领域有着广泛的应用前景。
总结 📚
本节课中,我们一起学习了生成式人工智能模型的多种核心能力及其在现实世界中的应用。
生成式AI能够:
- 生成连贯且符合语境的文本内容。
- 创造逼真的高质量图像。
- 合成语音、创作新音频和动态视频。
- 生成和补全代码。
- 合成新数据以增强现有数据集。
- 创造高度逼真和复杂的虚拟世界,包括虚拟化身和数字人格。

这些能力共同构成了生成式AI强大的创造力基础,并正在不断拓展其应用边界。
039:生成式AI的应用 🚀
在本节课中,我们将学习生成式人工智能在不同领域的具体应用。通过了解这些应用案例,你将能够认识到生成式AI如何改变各行各业的工作流程与效率。
概述
生成式AI的能力正被广泛应用于多个关键领域。本节将重点介绍其在IT与DevOps、娱乐、教育、银行与金融、医疗保健、人力资源以及通用工作场景中的应用。我们将逐一探讨每个领域的具体工具和案例。




IT与DevOps领域的应用
上一节我们介绍了生成式AI的概览,本节中我们来看看它在IT与DevOps领域的应用。生成式AI通过自动化代码生成、测试和运维任务,显著提升了软件交付流程和基础设施管理的效率。


以下是生成式AI在IT与DevOps中的主要应用方向:
- 代码生成:生成式AI的代码生成能力减少了手动编码的工作量和在重复性任务上花费的时间。
- 代码审查:由生成式AI驱动的代码审查工具(如GitHub Copilot和Synk DeepCode)会检查代码库和编码标准,以提升代码质量和可维护性。
- 自动化测试:生成式模型可以生成模拟用户行为的合成测试用例和测试数据。测试用例的多样性影响着软件的效率、可靠性和健壮性。诸如Applitools和Testim等工具通过确保测试数据的深度和多样性来保证充分的测试覆盖率。
- 监控与异常检测:诸如IBM的Watson AIOps和Mugsoft AIOps等工具会分析系统日志、指标和其他数据,以监控和检测代码中的异常。这有助于进行主动维护和故障排除,减少停机时间并防止关键故障。
- 自动化文档与部署:GitLab Duo通过自动创建发布说明、变更日志以及更新部署模板和脚本来支持持续集成与部署(CI/CD)流程。
IT与DevOps领域的其他应用还包括自然语言界面、自动化基础设施管理和预测性维护。
娱乐领域的应用

了解了生成式AI如何优化技术流程后,我们转向创意产业。在娱乐领域,生成式AI工具能够创造多样化的合成内容,并实现内容的个性化。
以下是生成式AI在娱乐领域的主要应用:
- 内容生成:生成式AI工具可以生成各种合成内容,例如音乐、剧本、故事、视频、电影和电子游戏。它们还能翻译、本地化和个性化内容。
- 游戏与体验开发:诸如Side Effects公司的Houdini等游戏开发工具利用生成式AI的力量来创建游戏、动画、增强现实和虚拟现实体验,以及具有独特行为的角色。
- 虚拟形象:最近,由生成式AI驱动的虚拟影响者和虚拟形象也日益流行,它们能与用户互动,创造引人入胜的体验。
教育领域的应用
生成式AI的另一个重要影响领域是教育。从内容生成到个性化学习体验,再到模拟实践学习,其影响是巨大的。
以下是生成式AI在教育领域的主要应用:




- 语言与内容:凭借其语言能力,它们可以提供语言翻译,使内容能以不同语言访问。
- 个性化学习:它们可以批改作业以提供即时反馈,并创建支持个体学习者节奏和优势的学习路径与评估策略。
- 学习分析:可以根据学习者的表现和偏好生成分类法。生成式算法可以检测特殊需求和学习障碍,以帮助学习者和教育者制定特定的课程计划。
- 进度追踪:生成式算法也被用于随时间追踪学习者的进度,这被称为知识追踪。这有助于为个体需求提供合适的节奏和内容。
辅导支持、虚拟和模拟环境以及包容性教育也从中受益。例如,Nolej能在几分钟内提供AI生成的电子学习内容,包括针对目标主题的互动视频、术语表、练习题和摘要。Duolingo是一个语言学习平台,它使用GPT-3来纠正法语语法并为英语创建测试项目。
银行与金融领域的应用
银行和金融机构极大地受益于生成式AI自动检测风险、生成见解和提供具备金融知识的建议的能力。

以下是生成式AI在金融领域的主要应用:



- 行业专用模型:Kore.ai是首个银行业专用的LLM,它帮助银行应用程序提供类人的、具备金融知识的响应。
- 风险评估:例如,DataRobot可以通过模拟潜在的欺诈场景来生成合成用例,以检测信用风险、欺诈风险和市场波动,用于信用评分。
- 自动化决策:Personetics和AIO Logic利用生成式模型来检测风险、确定利率并构建定制贷款。它们自动化评估客户信用度,并设定信用额度或保险保费。
- 市场分析:由生成式AI驱动的工具,如BloombergGPT,可以分析新闻文章、社交媒体和其他分类文本数据,以执行市场情绪分析并更有效地管理投资组合。
- 客户服务:生成式AI工具建立了对话系统,并使用机器人顾问、聊天机器人和虚拟助手来协助财务规划。
监管合规与报告、财务预测、投资组合优化、反洗钱和算法交易是一些从中大大受益的领域。需要注意的是,其中一些应用和工具同时利用了生成式和判别式AI模型。

医疗保健领域的应用
现在让我们讨论生成式AI在医学和医疗保健研究、药物发现、诊断和患者护理方面的一些应用。
以下是生成式AI在医疗领域的主要应用:
- 医学影像与诊断:凭借其生成类似于患者数据的合成图像的能力,生成式模型提高了用于医学图像分析的深度学习模型的鲁棒性。这些模型可以为数据非常有限的罕见医疗状况合成数据。这有助于促进研究、训练AI模型并为罕见病例开发新的诊断工具。
- 药物发现:在药物发现中,这些模型通过生成新分子、加速药物发现过程并降低开发成本来提供帮助。
- 远程医疗:远程医疗和远程监控也受益于生成式AI驱动的对话工具。例如,Rasa可以与患者建立具备医学知识的对话,以提供即时的医疗设备、健康相关支持以及个性化的治疗计划。


该领域的其他方面包括电子健康记录管理、医疗保健欺诈检测以及医学模拟和培训。

人力资源领域的应用
让我们看看生成式AI如何赋能人力资源部门,使其自动化重复性任务、提供有价值的见解并简化HR流程。



以下是生成式AI在人力资源领域的主要应用:
- 任务自动化:例如,Watson X Orchestrate帮助自动化HR任务,如创建职位需求、筛选和列出相关简历、安排面试、候选人入职等。
- 人才招聘:Talenteria专注于人才招聘。
- 员工互动:Lina AI使用对话式AI系统来自动化HR任务和员工互动。
- 绩效管理:Mcorva通过自动生成绩效文档和评估来专注于工作场所和绩效管理。
生成式AI在HR中的其他应用包括培训与发展、分析与决策以及合规与政策实施。
对工作方式的影响
虽然我们今天只谈到了几个领域,但人们最终相信生成式AI将对所有行业产生重大影响。另一个影响巨大的领域是我们的工作方式。
根据麦肯锡关于生成式AI经济潜力的报告,当前的生成式AI和其他技术有潜力自动化当今占用员工60%至70%时间的工作活动。到2030年至2060年间,今天多达一半的工作活动可能被自动化。生成式AI日益增长的理解自然语言的能力最终将影响甚至通常与高等教育和习得技能相关的知识型工作。
总结
本节课中,我们一起学习了生成式AI在各个领域的流行应用。然而,重要的是要注意,生成式AI的潜在应用在所有行业和生活的各个方面几乎是无限的。

- 在IT与DevOps中,应用包括代码生成、代码审查、自动化测试、监控与异常检测、自动化文档以及持续集成与部署流程。
- 在娱乐领域,生成式AI通过生成各种合成内容以及翻译、本地化和个性化内容,提供了令人兴奋的可能性。
- 在教育领域,生成式AI改变了教育的覆盖范围和质量,影响着学习者、教育者和教育技术。
- 在金融领域,应用领域包括风险评估、信用评分、情绪分析、投资组合管理、合规、预测、交易和客户服务。
- 在医学和医疗保健领域,我们看到应用包括医学研究、诊断、医学培训、患者护理和远程医疗。
- 在人力资源领域,应用涉及人才招聘、员工互动、绩效管理、培训与发展、HR分析和政策实施。
- 在工作场所,生成式AI的应用正在改变我们的工作方式,使我们更高效、更成功。
040:6_文本生成工具 📝
在本节课中,我们将要学习生成式人工智能在文本生成方面的基础知识,了解核心模型的能力,并介绍几种流行的文本生成工具。
概述
文本生成是生成式人工智能的核心应用之一。其核心是大型语言模型,它们通过学习海量数据中的模式和结构,能够理解上下文、语法和语义,从而生成连贯且符合语境的文本。本节我们将探讨这些模型的基本原理,并介绍包括ChatGPT和Bard在内的多种实用工具。

文本生成的基础:大型语言模型(LLMs)


上一节我们介绍了生成式AI的概览,本节中我们来看看其文本生成能力的核心——大型语言模型。
基于在训练期间学习到的模式和结构,LLMs能够解释上下文、语法和语义,以生成连贯且符合语境的文本。通过分析词语和短语之间的统计关系,LLMs能够为任何给定的语境调整出富有创造性的写作风格。
LLMs是许多文本生成模型的基础,其中两个著名的例子是:
- 生成式预训练变换器(GPT)
- PaLM(Pathways Language Model)


这些模型已经进化为多模态模型,提供了多种能力。
流行的文本生成工具
了解了LLMs的基础后,我们通过两个流行的工具来具体了解这些模型的能力。
ChatGPT 🤖
ChatGPT基于GPT系列大型语言模型,并使用了先进的自然语言处理技术。虽然最初ChatGPT仅接受文本提示作为输入来生成新内容,但在新版本中,它已能同时接受图像和文本输入。ChatGPT为文本生成提供了多样化的能力。
以下是ChatGPT的一些核心能力:
- 上下文对话:能够进行流畅且基于上下文的对话。
- 创意任务协助:可以帮助完成各种创意任务,例如生成演示文稿大纲。
- 多语言支持:虽然最擅长英语,但能理解并响应多种其他语言。
- 学习辅助:可以作为学习新语言或任何科目的有用工具。
例如,你可以输入提示:“帮我创建一个展示学习平台功能的幻灯片”,ChatGPT会为特定幻灯片提供标题、内容和视觉元素的建议。
Google Bard 🎭
另一个流行的文本生成工具是Google Bard。它基于Google的先进语言模型PaLM。PaLM是Transformer模型与Google Pathways AI平台的结合。Pathways AI基于“路径”架构,即负责特定任务(如NLP或机器翻译)的专用模块。除了庞大的文本和代码训练数据集,它还能从互联网上的资源中提取信息来响应提示。
以下是尝试使用Bard探索其能力的示例:
- 信息总结:尝试使用提示来获取某个主题的最新新闻摘要,例如“提供关于乌克兰战争的最新新闻摘要”。它会提供多个草稿作为响应,你可以选择其一或重新生成。
- 创意生成与问题解决:提示它“为推广一个时尚品牌提供数字营销活动的策略”,它会提供该营销活动的分步方法。
其他文本生成工具与用例
除了ChatGPT和Bard,文本生成工具还能应用于其他有价值的场景。
以下是它们的一些扩展应用:
- 数学与问题解决:可以帮助处理基础数学、统计和通过这些科目解决问题。
- 金融分析:精通金融分析、投资研究、预算制定等。
- 代码生成:可以生成代码并跨各种编程语言和框架执行代码相关任务。
在与ChatGPT和Bard互动后,你会发现:ChatGPT在生成动态响应和维持对话流方面更有效;而Bard由于能通过Google搜索和Google学术访问网络资源,在研究某个主题的最新新闻或信息时可能是更好的选择。
需要意识到,包括GPT和PaLM在内的生成式AI模型正在不断进化,因此它们的能力和特性可能会发生变化。
专用文本生成工具
除了通用工具,还有针对特定用途的文本生成工具。
以下是几个例子:
- Jasper:生成符合品牌声音的、任意长度的高质量营销内容。
- Writesonic:为不同类型的文本(如文章、博客、广告和营销文案)提供特定模板。
- Copy.ai:擅长创建社交媒体、营销和产品描述的内容。
此外,还有用于特定用例的工具:


- 摘要工具:例如
resumer,通过提取关键思想或概念来生成文本摘要。 - 分类工具:例如
youclassifier,用于为一段文本分配一个或多个类别。 - 情感分析工具:例如Brand24和Repustate,用于生成反映人类语言中所表达的基础情感的文本。
- 多语言翻译工具:例如Language Weaver和Yandex Translate。
隐私考量与开源替代方案
一个重要注意事项是,许多开源的生成式AI工具会收集和审查与其共享的数据以改进其系统。这是与这些工具交互时的一个重要考虑因素,以避免共享任何机密或敏感信息。
那么,我们是否有开源且保护隐私的替代方案?答案是肯定的。
以下是几个例子:
- GPT4All:可以安装在你的机器上,作为无需互联网或图形处理单元的、具有隐私意识的聊天机器人运行。
- H2O AI 和 PrivateGPT:这些聊天机器人旨在通过在没有互联网连接的情况下在本地机器上运行(利用LLMs的能力)来保护用户隐私。
不仅如此,你还可以通过将这些工具链接到你组织的文档和数据库,来定制它们以在特定组织内部使用。
文本生成工具的优势
生成式AI文本生成工具提供了多项好处:
- 学习辅助:提供分步解释,是良好的学习助手。
- 提升效率:能够快速生成不同形式的文本,为作者和创作者提高效率。
- 激发创意:增强创造力并激发新想法。
- 虚拟助手:通过实现引人入胜的互动对话,可用作虚拟助手和聊天机器人。
- 提高生产力:通过自动化重复性写作任务,可以提高组织的生产力。
- 促进全球化沟通:通过多语言支持,实现全球受众的沟通和内容本地化。
总结
本节课中我们一起学习了:
- LLMs通过解释上下文、语法和语义来生成连贯且符合语境的文本,它们是许多文本生成工具的基础。
- 两个流行的文本生成工具是OpenAI的ChatGPT(基于GPT)和Google的Bard(基于PaLM)。两者都能生成不同类型的文本、翻译语言并以互动和信息丰富的方式回答问题。
- 我们还讨论了其他工具,如Jasper、Copy.ai、Writesonic。
- 开源的、保护隐私的文本生成器包括GPT4All、H2O AI和PrivateGPT。

通过理解这些工具的基本原理和应用,你可以开始利用生成式AI的强大能力来辅助写作、学习、创作和解决各种问题。
041:图像生成工具 🖼️

在本节课中,我们将学习生成式人工智能在图像生成领域的基本能力,并介绍几种主流的图像生成模型与工具。通过本课,你将能够描述这些模型的核心功能,并了解如何利用它们来创建和修改图像。

概述

生成式AI图像生成模型能够根据文本描述创建全新的图像,并能对真实或生成的图像进行定制化修改,以获得期望的输出。例如,你可以生成一个“戴着帽子、手里拿着书的小孩”的图像,随后还可以更改书中封面的颜色。
文本到图像生成
上一节我们概述了图像生成的基本概念,本节中我们来看看如何通过文本提示来生成图像。
你可以使用免费的AI图像生成器(例如FreePik)来创建图像。操作时,需要输入一段描述你想要的图像的文本提示。提示词描述的准确性和用词会直接影响生成图像的质量。


例如,输入提示词:“一艘船在日落时分的平静湖面上航行,周围是郁郁葱葱的绿植和宁静的天空”。选择风格后,即可生成图像。工具通常会生成多个版本供你选择、下载,你也可以通过修改提示词来生成其他图像。

图像生成模型的更多可能性

除了基础的文本生成图像,图像生成模型还具备多种高级功能。

以下是几种关键的图像处理能力:

- 图像到图像转换:指将图像从一个领域转换到另一个领域,同时保留原始内容和风格。例如:
- 将草图转换为逼真图像。
- 将卫星图像转换为地图。
- 提升安防摄像头图像的分辨率和细节。
- 应用于医学影像增强。
- 风格迁移与融合:提取一张图像的风格,并将其应用到另一张图像上,从而创建混合或融合图像。例如,将一幅画作的风格应用到一张照片上。
- 图像修复:重建图像中缺失或损坏的部分,使其变得完整。可用于:
- 艺术品修复。
- 取证分析。
- 移除图像中不需要的物体,同时保持画面的连续性和上下文。
- 将虚拟物体融合到真实场景中(增强现实)。
- 图像外绘:通过生成与原始图像连贯的新部分来扩展原始图像。可用于:
- 生成更大尺寸的图像。
- 提升图像分辨率。
- 创建全景视图。
主流图像生成模型

图像生成和修改能力的演进,离不开背后驱动模型的不断发展。

以下是几个重要的图像生成模型:

- OpenAI的DALL-E 🎨
- 基于GPT模型,在大型图像及其文本描述数据集上训练而成。
- 能够生成多种风格的高分辨率图像,包括逼真的照片和绘画。
- 新版DALL-E提供了生成多种图像变体以及通过图像修复和外绘进行图像转换的能力。
- Stable Diffusion 🌊
- 一个开源的“文本到图像”扩散模型。
- 扩散模型是一种能创建高分辨率图像的生成模型。
- 核心功能是基于文本提示生成图像,但也可用于图像到图像转换、修复和外绘。
- NVIDIA的StyleGAN 👾
- 该模型将图像内容建模和图像风格建模分离开,从而能精确控制风格,并操纵特定特征(如姿势或面部表情)。
- 已演进到能生成具有更逼真细节的更高分辨率图像。

可用的图像生成工具


了解了核心模型后,我们来看看一些可供使用的具体工具。

你可以使用Crayon、FreePik和Pixlr等免费工具来探索生成式AI的文本到图像生成能力,这些工具能以不同的形式和风格生成图像。

此外,还有一些专注于艺术风格的工具:


- DeepArt.io 是一个在线平台,可以将照片转化为不同艺术风格的作品。
- MidJourney 是一个平台,它构建了一个图像生成者社区,帮助艺术家和设计师使用AI创作图像,并探索彼此的作品。

许多生成式AI图像生成器还提供API接口,允许将它们的功能集成到不同的软件程序和工具中。一些提供API的流行图像生成器包括DALL-E、MidJourney和Crayon。
科技巨头的参与

技术巨头如微软和Adobe也已涉足AI图像生成器领域。
- Microsoft Bing Image Creator 🖥️
- 基于DALL-E模型。
- 你可以通过访问Bing.com/create或通过Microsoft Edge浏览器使用该工具,这使得Microsoft Edge成为首个集成AI图像生成器的浏览器。
- Adobe Firefly 🔥
- 这是一系列生成式AI工具,旨在与Adobe Creative Cloud应用程序(如Photoshop和Illustrator)集成。
- Firefly使用Adobe Stock图片、开源许可内容和公共领域内容进行训练。
- 它能接受超过100种语言的文本提示,并包含多种工具,允许你操控颜色、色调、光照、构图,以及使用生成式填充、文本效果、生成式重新着色、3D转图像和图像扩展等功能。
总结


本节课中,我们一起学习了生成式AI模型和工具如何通过文本和图像提示来生成新图像。它们还提供了图像到图像转换、风格迁移、图像修复和外绘等能力。几个著名的图像生成模型包括DALL-E、Stable Diffusion和StyleGAN。目前有多种图像生成工具可用,提供多样化的图像生成和转换功能,其中一些还能通过API进行集成。我们还了解到,Adobe Firefly是一个旨在与Adobe创意云应用程序集成的生成式AI工具家族。
042:音频和视频生成工具 🎵🎬
在本节课中,我们将学习生成式人工智能在音频和视频领域的应用工具。我们将了解这些工具如何创建有影响力的媒体内容,并探索它们重新构想虚拟世界的能力。
市场前景与概述
根据Market US的估计,生成式AI音乐市场在2022年价值2.29亿美元,预计将以28.6%的高复合年增长率增长,到2032年将达到26.6亿美元。生成式AI音乐正是利用生成式AI的音频能力创造的。近年来,这些能力正在帮助公司和个人,无论是新手还是经验丰富者,简化流程,将他们复杂的构想变为现实。
想象一下,如果你一直拖延开始制作播客,或者想为你的混音添加一些音效,那么你将会爱上生成式AI音频工具。


音频生成工具 🎤
生成式AI音频工具主要分为三类:语音生成工具、音乐创作工具以及音频质量增强工具。
语音生成工具
语音生成工具主要是文本转语音工具,它们将文本转换为音频。虽然朗读技术并非全新,但生成式AI架构升级了这项技术的工作方式。
以下是其工作原理:
- 深度学习算法在大量人类语音数据集上进行反复训练。
- 这使得算法能够分解并高效复制发音、语速、情感和语调等声音特征。
- 因此,生成式AI TTS工具能创造出更准确、更自然的语音,这对有视觉障碍、语言障碍或其他阅读困难的人士尤其有帮助。
从趣味性角度看,这些工具可以帮助你“听”文章、反馈和笔记,这可能比阅读更轻松。它们也能帮助你更好地沟通。
如果你想以一种出众的方式为你的演示文稿配音,你可以登录诸如 LOvo、Cynthsia、Merrf.ai 或 Listener 等平台。这些工具提供了庞大的AI语音库、多种语言和情感选择,你甚至可以创建独特的声音或克隆自己的声音。



一些工具还允许你编辑音轨、发音、语调和语速,以创造出听起来专业的最终产品。
音乐创作工具 🎹

假设在一个阳光明媚的下午,你内心的业余音乐家感到灵感迸发。你可以尝试Meta的AudioCraft,这是一个在音效和20,000小时Meta自有或授权音乐上预训练的生成式AI工具。
此外,还有Shutterstock的Amper Music、AIVA、Soundful、Google的Magenta以及G4驱动的Wave工具。这些工具让你可以从广泛的音乐库、不同的音乐流派、乐器风格和旋律中进行选择。
你只需要输入一个基于你需求的文本提示,工具就能:
- 谱写简短的旋律或即兴重复段。
- 建议或添加乐器。
- 创作一首新歌。
- 为你的下一个YouTube或Instagram视频制作配乐。
生成式AI还可以帮助你混音、母带处理,并将最终的音乐作品发布到流行的流媒体平台上。
音频增强工具 🔊
你甚至可以使用音频增强工具。这些工具经过预训练,能够识别特定声音,可以为你的音频添加有趣的声音或去除不需要的噪音。
例如:
- Descript 可以帮助你消除背景噪音、增强低质量录音并添加所需的音效。
- Adobe AI 可以清理文件中的 unwanted noise。
许多音乐生成工具也具备音频编辑和增强功能。

视频生成工具 🎥
上一节我们介绍了音频工具,本节中我们来看看视频生成工具。有些项目需要的不仅仅是精选的音效。在2022年,Runway AI 就利用生成式AI能力制作了奥斯卡获奖电影《瞬息全宇宙》。
即使你不制作大型电影,也可以在日常生活中使用生成式AI视频工具。
假设你正在制作一部关于你所在城市树木缺乏的纪录片。你可以登录 Runway的Gen1工具,它将现有的视频片段转换成不同的风格;或者使用 Runway的Gen2工具,通过文本、图像或视频输入来创建视频。
或者,你也可以使用 E视频工具包 或 Synthesia应用。以下是这些工具的功能:
- 如果你没有任何素材,可以上传照片。
- 使用文本提示来生成你需要的图像。
- 录制旁白。
- 增强你的音频。
- 转换视频文件格式。
- 发布你的视频。
Synthesia甚至允许你创建自定义头像,以增强品牌辨识度。


重塑虚拟世界 🌐
生成式AI可以增强你的虚拟世界体验。你可以创建具有混合特征和异域景观的独特、富有想象力的虚拟世界。生成模型还能实时响应,提高模拟的准确性。
元宇宙平台利用生成式AI来创造更个性化、更具吸引力的用户体验。游戏元宇宙允许你快速生成3D对象,甚至创建配备特定人格特征的虚拟形象,这些特征会反映在他们的表情、行为和决策中。
例如:
- The Sandbox 是一个元宇宙,用户可以在其中即时构建、拥有并向全球推广他们的游戏。
- Scenario AI 帮助创建和连接定制的移动游戏资产。
总结 📝

本节课中,我们一起学习了生成式AI音频和视频工具如何产生影响。通过一个简单的文本提示,你可以:
- 生成多种语言的人声级语音。
- 录制歌曲。
- 添加音效或去除 unwanted noise。
- 制作视频和动画。
- 构建增强版和充满异域风情的虚拟世界。

这些工具极大地降低了媒体内容创作的门槛,让每个人都能更轻松地将创意变为现实。
043:代码生成工具 🛠️
在本节课中,我们将要学习生成式人工智能在代码生成领域的应用。我们将探讨其基本能力、常用工具的优势与局限,并了解如何利用这些工具来提升开发效率。

概述
生成式人工智能模型和工具能够根据自然语言输入生成代码。这些模型基于深度学习和自然语言处理技术,能够理解上下文并生成符合语境的代码。

上一节我们介绍了生成式AI的基本概念,本节中我们来看看它在代码生成方面的具体能力。
代码生成的核心能力
基于深度学习和自然语言处理,代码生成工具具备以下多种能力:

以下是代码生成工具的主要功能列表:
- 生成新代码:根据文本提示生成全新的代码片段或完整程序。
- 代码补全:预测并补全部分编写的代码片段。
- 代码优化:生成现有代码的优化版本。
- 代码转换:将代码从一种编程语言转换为另一种。
- 生成文档:为代码生成摘要和注释,以改进文档。
- 提供解决方案:根据描述的问题,推荐完整的编程解决方案,包括算法、数据结构和编程方法。

GPT的代码生成能力

让我们深入探索GPT在代码生成方面的能力。OpenAI的GPT在类人文本生成方面表现出色,在代码创建上也展示了令人印象深刻的能力。
生成简单代码

以下是一个通过基于GPT的ChatGPT生成简单Python代码的例子。
当你输入文本提示:“写一个Python代码来生成问候某人的消息”,ChatGPT会生成相应的Python代码。

def greet_person(name):
message = f"Hello, 数据科学与人工智能笔记(全)! Welcome."
return message



# 示例用法
print(greet_person("Alice"))
有趣的是,它还会提供关于如何运行此代码的指导。
有效提示的关键
为了生成有效的代码,提供清晰的提示至关重要。你需要指定编程语言,并提供其他相关的要求和约束。

调试代码
为了演示GPT如何帮助调试代码,可以在ChatGPT中输入一段错误的代码作为文本提示。
当一段错误的代码和文本被提示给ChatGPT时,它会提供正确的代码并解释所做的修正。
其他能力
GPT还能够实现代码的跨语言翻译,并生成代码文档和注释以提高可读性。
工具的演进与局限

基于GPT的模型和工具已经发展到能够生成更长、更准确的代码。这使得开发者可以利用这些模型和工具来开发应用程序、网站和插件。
此外,GPT的演进使得从图像生成代码成为可能。例如,你可以输入一个课程大纲的图像,来为一个功能完整的应用程序生成代码。
Google Bard也提供了代码生成和调试能力,支持超过20种编程语言。
优势与适用场景

ChatGPT和Bard是学习新编程语言的宝贵工具,因为它们能提供逐步的、详细的解释,有助于更好地理解。
它们在生成具有基本逻辑和编程概念的代码方面表现出色。
局限性

然而,这些工具可能无法从零开始生成大型或复杂的代码。
虽然这些工具理解编程概念和语法,但它们可能无法完全理解语义。因此,生成的代码可能在技术上是准确的,但仍可能无法按预期运行。
需要注意的是,这些模型的知识受限于其训练数据。特定版本的GPT可能不了解其训练之后发布的编程框架和库。例如,GPT-3.5的知识截止日期是2021年9月。
因此,如果你需要生成更新颖的代码,可以考虑使用专门为代码生成设计的模型和工具。
专用代码生成工具
不同的代码生成器提供特定的功能和特性。然而,当需求是让混合云开发者能为多样化需求编写代码时,IBM Watson Code Assistant是一个选择。

以下是几款主流的专用代码生成工具:


- GitHub Copilot:由OpenAI Codex驱动,这是一个生成式预训练语言模型。它帮助开发者生成基于解决方案的代码。Copilot在自然语言文本和公开可用的源代码(包括GitHub仓库)上进行了训练。它可以作为扩展集成到流行的代码编辑器(如Visual Studio)中。它能生成遵循最佳实践和行业标准的代码片段。
- Polycoder:一个开源的AI代码生成器。它基于GPT模型,并在用12种编程语言编写的各种GitHub仓库数据上进行了训练。它在编写C语言代码方面特别准确。Polycoder提供了一个广泛的内置模板库,可作为各种用例代码生成的蓝图。Polycoder可以帮助精确地创建、审查和优化符合要求的代码片段。
- IBM Watson Code Assistant:建立在IBM watsonx.ai基础模型之上,适用于任何技能水平的开发者。你可以将Watson Code Assistant与代码编辑器集成。它使开发者能够通过实时推荐、自动完成功能和代码重构辅助,准确高效地编写代码。此外,你可以将代码或项目文件输入Watson Code Assistant进行分析。它能识别模式、提出改进建议并生成代码片段或模板。开发者可以根据特定项目需求自定义生成的代码。
还有许多其他AI驱动的代码生成器和代码助手工具可用于帮助开发者更快地编写准确的代码。
例如,Amazon Code Whisperer可以集成到代码编辑器中,并提供实时代码推荐。Tabnine有助于实现准确的代码补全。Replit是一个平台,为用户提供编码、学习和协作的交互空间。
优势与注意事项

具有自动代码编写和优化功能的基于AI的代码生成器,帮助开发者提高了生产力和代码质量。它们支持快速原型设计以迭代设计想法。这些工具还通过支持多语言代码翻译,有助于实现跨平台兼容性和迁移。
基于AI的代码生成器遵循一致的模式和编码标准。它们可以建议重构模式以遵循最佳实践。

然而,应谨慎使用这些工具,以确保AI生成的代码不会导致伦理问题。例如,安全漏洞,因为这些工具可能被用于生成恶意代码,或者基于训练数据产生数据偏见。
总结
本节课中我们一起学习了基于生成式AI的模型和工具可以从文本和图像提示生成新代码、优化现有代码并生成基于解决方案的代码。ChatGPT和Bard适用于简单的代码生成、调试和学习编程。

GitHub Copilot、Polycoder和IBM Watson Code Assistant等主流代码生成器提供了多样化的功能,如实时推荐、代码重构和解决方案模板。总的来说,代码生成器提高了生产力,加速了开发周期,促进了编码最佳实践,并培养了统一的编码标准。
044:课程介绍 🎬


在本节课中,我们将要学习提示工程的基础知识,并了解本课程的整体结构、学习目标以及你将掌握的核心技能。
概述
一位专家,如果你问对问题,他就能给出所有答案。有趣的是,这正是我们为生成式人工智能模型设计提示词所遵循的原则。我们使用这些提示词来查询和提问人工智能应用,例如聊天机器人、图像、音频或视频生成工具,甚至虚拟世界。提示词能够优化生成式人工智能模型的响应。其力量在于你所提出的问题。知道如何编写有效且直接的提示词,将使你能够生成更精确、更相关的内容。
现在,一个好问题是:完成本课程后,我能做什么?
课程目标
本课程面向所有初学者,无论是专业人士、爱好者、从业者还是学生,只要对学习如何编写有效提示词抱有真诚的兴趣。这是一门面向所有人的课程,无论你的背景或经验如何。



在本课程结束时,你将能够:
- 解释提示工程在生成式人工智能模型中的概念和重要性。
- 应用创建提示词的最佳实践。
- 评估常用的提示工程工具。
- 应用常见的提示工程技术和方法来编写有效的提示词。


课程结构

这是一门精炼的课程,包含三个模块,每个模块需要一到两个小时完成。

以下是课程模块的详细内容:
模块一:提示工程基础
在课程的第一个模块中,你将学习提示工程的概念,从如何定义提示词及其构成元素开始。你将学习应用编写有效提示词的最佳实践,并评估常见的提示工程工具,例如 IBM Watson X Prompt Lab、Spellbook 和 Dust。
模块二:提示工程方法与技术
在模块二中,你将学习各种提示工程方法,例如访谈模式、思维链和思维树。你将发现巧妙设计提示词的技术,例如 零样本 和 少样本,以产生精确且相关的响应。
模块三:实践与评估
模块三要求你参与一个最终项目,并提供一个计分测验来检验你对课程概念的理解。你还可以访问课程术语表,并获得关于后续学习步骤的指导。
学习资源与活动



本课程精心编排了概念视频和辅助阅读材料。观看所有视频以充分掌握学习材料的潜力。
你将享受实践实验室和最终项目,这些活动展示了如何在 IBM 生成式人工智能教室中通过创建有效的提示词来优化结果。课程包含练习测验,帮助你巩固学习。课程结束时,你还需要完成一个计分测验。
课程还提供了讨论论坛,方便你与课程工作人员联系并与同伴互动。最有趣的是,通过专家观点视频,你将听到经验丰富的从业者分享他们对提示工程中使用的工具、方法以及编写有效提示词的艺术的见解。
总结
本节课中,我们一起学习了本课程的概览。我们了解到,提示工程的核心在于提出正确的问题以引导AI生成最佳答案。本课程旨在帮助你掌握定义提示词、应用最佳实践、使用工具以及实施高级技术的能力。课程通过模块化的结构、丰富的实践项目和专家见解,为你提供了全面的学习路径。


你准备好学习关于编写提示词的一切知识,以释放生成式人工智能的全部潜力了吗?让我们开始吧。
生成式人工智能工程:P45:什么是提示



在本节课中,我们将学习提示(Prompt)的基本概念及其构成要素。理解如何编写有效的提示对于引导生成式AI模型产生期望的输出至关重要。
生成式AI模型的一个重要能力是其输出与人类创作的内容高度相似:相关、符合语境、富有想象力、细致入微且语言准确。而生成这种输出的关键因素之一就是提示。
那么,什么是提示?提示是你提供给生成式模型的任何输入,用以产生期望的输出。你可以将其视为给模型的指令。例如:
写一小段文字描述你最喜欢的度假胜地。编写HTML代码,为在线表单生成一个城市下拉选择框。
这些都是用于产生特定输出的直接提示。提示也可以是一系列逐步细化输出的指令,以达到期望的结果。例如:
写一个关于火星上学生生活的短篇故事。他在研究期间面临了哪些挑战?

从这些例子可以看出,提示包含问题、上下文文本、引导模式或示例,以及基于这些自然语言请求为模型提供的部分输入。生成式AI模型根据这些提示收集信息、进行推理并提供创造性的解决方案。这些指令帮助模型基于提供的输入,产生相关且合乎逻辑的回应或输出。
为了更好理解,让我们看更多例子。
假设你希望模型写一个关于农民在10年内成为成功商人的奋斗与成就的短篇故事。如果你的提示是“来自小镇的富人故事,他的奋斗与成就”,它会产生一个通用的输出。这被称为朴素提示,即以最简单的方式向模型提问。


为了向模型传达你的意图,你可以进行简单的调整,从而显著改善结果。你的提示需要包含上下文、恰当的结构,并且易于理解。
因此,你可以将提示重写为:
写一个关于农民在10年内成为富有且有影响力的商人的奋斗与成就的短篇故事。



再看另一个例子,你想让模型生成你想象中的日落风景图像。将提示写为“山间的日落图像”可能无法给出期望的输出。这个提示过于简短,缺乏对你脑海中图像的详细描述。
你可以将提示重写为:
生成一幅描绘宁静日落的图像,场景是坐落在群山之间的河谷。
要掌握编写有效提示的艺术,让我们逐一理解一个结构良好的提示的构成要素。

以下是构成一个结构良好提示的核心要素:


- 指令
为模型提供关于你希望执行任务的明确指导,引导生成式AI模型的行为,以影响其回应的形成。
例如:写一篇600字的文章,分析全球变暖对海洋生物的影响。

-
上下文
上下文有助于建立构成指令背景的环境,并为生成相关内容提供框架。
为了理解这一点,让我们为上一个例子中的提示添加一些上下文:
近几十年来,全球变暖发生了显著变化,导致海平面上升、风暴强度增加和天气模式改变。这些变化对海洋生物产生了严重影响。写一篇600字的文章,分析全球变暖对海洋生物的影响。
这个提示将帮助模型生成与上下文一致的输出。 -
输入数据
这是你作为提示的一部分提供的任何信息。生成式模型可以将其用作参考,以获得包含特定细节或想法的回应。
为了提供输入数据,同一个提示可以重构如下:
你已获得一个包含太平洋温度记录和海平面测量的数据集。写一篇600字的文章,分析全球变暖对太平洋海洋生物的影响。 -
输出指示器
输出指示器为评估模型生成输出的属性提供了基准。它可以概述你期望输出具备的语气、风格、长度和其他品质。
在提示“写一篇600字的文章,分析全球变暖对海洋生物的影响”中,输出指示器指定生成的输出应为一篇600字的文章。它将根据分析的清晰度以及相关数据或案例研究的纳入情况进行评估。
这些要素中的每一个都在帮助生成式AI模型理解你的需求并给出期望的输出方面发挥着作用。



本节课中,我们一起学习了提示是提供给生成式模型以产生期望输出的任何输入或一系列指令。这些指令有助于引导模型的创造力,并协助产生相关且合乎逻辑的回应。一个结构良好的提示的构成要素包括指令、上下文、输入数据和输出指示器。这些要素帮助模型理解我们的需求并生成相关的回应。
046:什么是提示工程 🧠

在本节课中,我们将学习提示工程的定义、重要性以及如何通过一个结构化的流程来设计有效的提示,以引导生成式AI模型产生更相关、更准确的输出。

概述


提示工程是设计有效提示的过程,旨在引导生成式AI模型生成更优质、更符合预期的回答。它结合了批判性分析、创造力和技术敏锐度。如果提示不够精确,模型可能会产生不充分甚至错误的结果。
提示工程的过程



上一节我们介绍了提示工程的基本概念,本节中我们来看看如何通过一个迭代的、结构化的流程来创建有效的提示。
以下是创建有效提示的逐步流程:
- 定义目标
流程的第一步是确立一个清晰的目标。你必须明确希望模型生成什么内容。- 示例目标:概述人工智能在汽车领域的益处与风险。


- 创建初始提示
根据定义的目标,现在是时候创建初始提示了。它可以是一个问题、一个指令或一个场景。- 示例初始提示:
写一篇分析人工智能融入汽车行业所带来的益处和缺点的文章。
- 示例初始提示:


-
测试提示
接下来,需要测试你创建的提示并分析其响应。响应可能相关,但可能缺乏你所追求的特定视角。- 示例分析:对初始提示的响应直接列出了人工智能在汽车行业的益处和缺点,但未强调可能出现的伦理问题,也没有讨论其正面和负面影响。
-
分析响应
你必须仔细审查响应,检查其是否符合你的目标。如果不符合,请记下不足之处。- 示例不足:初始提示未能全面涵盖人工智能在汽车行业相关的益处和风险范围。


-
优化提示
利用通过测试和分析获得的知识,现在可以修改提示了。这可能包括增强其特异性、添加上下文或重新措辞。- 示例优化提示:
写一篇信息性文章,讨论人工智能在革新汽车行业中的作用。需涉及关键方面,如益处、缺点、伦理考量以及正面和负面影响。涵盖特定领域,如自动驾驶和实时交通分析,同时审视潜在挑战,如技术复杂性和网络安全问题。
- 示例优化提示:
-
迭代流程
最后三个步骤(测试、分析、优化)需要重复进行,直到你对模型的响应感到满意为止。- 示例最终提示:
写一篇文章,重点阐述人工智能如何重塑汽车行业。聚焦于自动驾驶和实时交通分析等领域的积极进展,同时深入探讨与复杂技术方面相关的担忧,例如决策算法和潜在的网络安全漏洞。强调这些担忧可能对车辆安全产生的影响。确保分析透彻、有实例支撑并能引发批判性思考。
- 示例最终提示:
提示工程的重要性与相关性


了解了提示工程的流程后,我们来看看它在生成式AI模型应用中的核心价值。
- 优化模型效率:提示工程有助于设计智能提示,让用户无需大量重新训练即可充分利用模型的能力。
- 提升特定任务性能:提示工程使生成式AI模型能够生成细致入微且符合上下文的响应,从而在特定任务中更加有效。
- 理解模型限制:通过每次迭代优化提示并研究模型的相应响应,可以帮助我们理解其优势和弱点。这些知识可以进一步指导未来的功能增强或模型整体开发。
- 增强模型安全性:熟练的提示工程可以防止因提示设计不当而导致生成有害内容的问题,从而增强模型使用的安全性。





总结


本节课中我们一起学习了提示工程的核心内容。我们了解到,提示工程是设计有效提示以充分利用生成式AI模型能力、产生最佳响应的过程。我们还学习了通过定义目标、创建提示、测试、分析、优化和迭代来优化提示的流程。最后,我们探讨了提示工程在优化模型效率、提升任务性能、理解模型限制和增强安全性方面的重要性。
047:提示创建的最佳实践 🎯
在本节课中,我们将学习如何应用最佳实践来创建有效的提示,并通过多个示例解释起草和优化提示的过程。


撰写有效的提示对于充分发挥生成式人工智能模型的潜力、生成相关且准确的回应至关重要。通过应用创建有效提示的最佳实践,你可以监督生成输出的风格、语气和内容。这些最佳实践主要围绕四个核心维度展开:清晰度、上下文、精确度以及角色扮演或人物模式。
清晰度 ✨

上一节我们介绍了创建有效提示的四个维度。本节中,我们首先来看看清晰度。清晰的提示有助于模型准确理解你的意图。
为了确保提示的清晰度,请记住以下几点:
- 使用简单直接的语言:简单明了的语言可以轻松传达指令。因此,应撰写明确且易于理解的提示。
- 避免专业术语:特殊术语可能会使模型或用户感到困惑。因此,应使用能被广泛受众理解的简单词汇来撰写提示。
- 明确任务描述:模糊的提示可能导致回应与你的意图不符。因此,你必须清晰地描述模型需要执行的任务。
让我们通过一个例子来理解这一点。

原始提示:
讨论在植物完全无叶柄的托叶上借助阳光发生的烹饪过程。同时提及一种绿色的东西,以及光、空气和水对植物地上部分的重要性。
这个提示存在许多问题。它没有明确提及你想要讨论的过程,包含了复杂的术语使其难以理解,同时也非常模糊,没有清晰地描述手头的任务。
优化后的提示:
解释植物光合作用的过程,详细说明叶绿素的作用,以及阳光、二氧化碳和水如何促成这一生物功能。
优化后的提示使用了简单、清晰、简洁的语言,并明确表示你想要讨论植物光合作用的过程。
上下文 📖

接下来,我们探讨第二个重要维度:上下文。上下文总是能帮助模型理解情境或主题。
这可以涉及对需要回应的环境进行简要介绍或解释。相关的信息或具体细节,如人物、地点、事件或概念,有助于引导模型的理解。因此,在撰写提示时,融入这些细节非常重要。
例如,以下提示没有包含足够的上下文和具体细节来引导模型的理解:

原始提示:
写下1775年革命战争爆发期间发生了什么。
为了建立正确的上下文并包含相关信息,我们可以这样改写:
优化后的提示:
描述导致美国革命战争的历史事件,重点关注波士顿倾茶事件、萨拉托加战役等关键事件。强调美洲殖民地与英国政府之间的紧张关系,并解释这些事件如何导致了1775年革命战争的爆发。
精确度 🎯


创建有效提示的另一个重要维度是精确度。精确度有助于在提示中勾勒出你的请求。
如果你在寻找特定类型的回应,请清晰地表达出来。在提示中融入示例可以帮助模型理解你期望何种回应,并引导其思考过程。
例如,在以下提示中,没有精确地勾勒出特定类型的回应,也没有提供示例:

原始提示:
谈谈经济学中的供求关系及其影响。
为了确保精确度,我们可以这样改写:
优化后的提示:
解释经济学中的供求概念。描述需求增加如何影响价格,并借助一个说明性示例,例如智能手机市场。同样,通过类比石油生产中断等情况,解释供应减少对价格的影响。
这个提示清晰地表达了你想借助示例来解释一个概念。


角色扮演 👤
最后,我们来讨论最后一个维度:角色扮演或人物模式。从特定角色或人物视角撰写的提示,可以帮助模型生成与该视角一致的回应。
必要的上下文细节使模型能够有效地扮演特定角色。因此,如果你要求模型从历史人物、虚构角色或特定职业的角度进行回复,那么请提供相关的上下文细节。

让我们看这个例子:
原始提示:
写一篇日志,描述一个未知外星行星上奇特的动植物。

这个提示只会给出关于外星行星的科学细节,而不会从专业人士的角度解释其答案。
你可以这样改写提示:
优化后的提示:
假设你是一名刚刚降落在一个未知外星行星上的宇航员。写一篇日志,描述你遇到的奇特动植物,例如天空的颜色和回荡在外星景观中的陌生声音。表达你在记录这段非凡旅程时的兴奋、好奇以及一丝忧虑。
在这个例子中,你明确给出了上下文细节,并假设自己是一名宇航员。因此,这个提示将生成与宇航员视角一致的回应。
总结 📝
本节课中,我们一起学习了为生成式人工智能模型撰写有效提示的重要性,它能帮助我们监督输出的风格、语气和内容。撰写有效提示的最佳实践可以在四个维度上实施:清晰度、上下文、精确度和角色扮演。
- 清晰度包括使用简单、简洁的语言。
- 上下文提供背景和所需细节。
- 精确度意味着具体化并提供示例。
- 角色扮演可以通过假设一个人物角色并提供相关上下文来增强回应。


这些实践可以根据具体需求进行调整,以获得最佳结果。
生成式人工智能工程:P48:常见的提示工程工具 🛠️
在本节课中,我们将要学习常见的提示工程工具。你将能够描述这些工具的通用功能,并解释几种常见工具的具体能力。
提示工程是设计精确且符合上下文的提示词,以与生成式AI模型交互,从而生成相关且准确输出的过程。为了辅助这一过程,存在多种提示工程工具。这些工具提供了丰富的功能和特性,旨在优化提示词的创建,以获得期望的结果。它们对于可能不精通自然语言处理技术,但又希望在使用生成式AI模型时达成特定目标的用户尤为有用。



通用功能介绍
让我们先来探索各类提示工程工具提供的通用功能。
以下是这些工具通常具备的核心功能:


- 提示建议:许多工具能够根据给定的输入或期望的输出,为用户提供提示词建议。
- 结构优化:这些工具可以建议如何构建提示词,以实现更好的上下文沟通,帮助用户设计出能让模型充分理解用户意图的提示。
- 迭代精炼:用户可以根据工具的初始响应,迭代式地优化提示词,以找到最有效的版本。
- 偏见缓解:提示工程工具可能提供功能,帮助减轻生成式AI模型响应中的偏见。它们可以指导用户如何设计提示词,以减少产生偏见或不恰当输出的可能性。
- 领域适配:这些工具可以帮助创建针对特定领域(如法律、医疗或技术)的提示词。
- 预设库:一些工具提供了针对各种用例的预定义提示词库,用户可以根据具体需求进行定制。
上一节我们介绍了提示工程工具的通用功能,本节中我们来看看几个具体的工具实例。
常见工具详解
以下是几个在提示工程领域较为常见的工具:
-
IBM Watson X AI Prompt Lab
- 描述:这是IBM Watson X AI平台中的一个集成工具。该平台包含一系列工具,用于轻松训练、调优、部署和管理基础模型。
- 核心功能:Prompt Lab 使用户能够基于不同的基础模型进行提示词实验,并根据需求构建提示词。它提供了针对不同用例(如摘要、分类、生成和提取)的示例提示,帮助用户快速上手。用户可以通过添加指令和示例来训练模型,展示模型应如何响应输入。
-
Spellbook (by Scale AI)
- 描述:这是一个集成开发环境。
- 核心功能:使用Spellbook,用户可以基于大语言模型构建应用程序,并为各种用例(如文本生成、提取、分类、问答、自动补全和摘要)进行提示词实验。它包含一个提示编辑器,允许用户编辑和测试提示词。用户可以利用提示模板来使用结构化提示生成文本,也可以访问预构建的提示作为示例。

- Dust
- 描述:一个提供Web用户界面的工具。
- 核心功能:它用于编写提示词并将它们链接在一起。用户可以管理不同版本的链式提示。Dust还提供了一种自定义编码语言和一组标准模块,用于处理LLM提供的输出。此外,它还支持集成其他模型和服务。


- Prompt Perfect
- 描述:一个用于优化提示词的工具。
- 核心功能:可用于为不同的大语言模型或文生图模型优化提示。它支持常见的文本模型(如GPT、Stable LM、LLaMA)和图像模型(如DALL-E、Stable Diffusion)。优化时,用户首先需要选择要为其优化提示的相关模型,因为不同模型有不同的优化策略。用户还可以选择与预览质量、语言和审核相关的插件。在编写提示时,可以尝试自动补全功能。工具会展示用户编写的原始提示和由Prompt Perfect生成的优化后提示。在“Streamline”模式下,用户可以逐步优化和精炼提示词:编写 -> 优化 -> 再次编辑 -> 再优化,直到满意为止。
除了上述专用工具,一些其他流行的平台和接口也提供了提示工程资源或实验环境。
以下是其他有用的资源与平台:






- GitHub:拥有大量关于提示工程和LLM的代码仓库。这些仓库中提供的指南、示例和工具有助于提升提示工程技能。
- OpenAI Playground:一个基于Web的工具,帮助用户使用OpenAI的各种模型(如GPT系列)来实验和测试提示词。
- Playground AI:一个平台,帮助用户使用Stable Diffusion模型实验文本提示以生成图像。
- LangChain:一个Python库,提供了构建和链接提示词的功能。
- 提示词市场 (如 PromptBase):有趣的是,提示词也可以进行买卖。PromptBase就是一个例子,它支持为流行的生成式AI工具和模型(如Midjourney、ChatGPT、DALL-E、Stable Diffusion和LLaMA)买卖提示词。用户可以根据自己的需求购买针对特定模型或工具的提示词(例如,购买一个用于在Midjourney中生成漫画角色的提示词)。如果用户拥有出色的提示词编写技能,也可以上传并出售提示词。该平台还支持直接在其平台上编写提示词并在其市场上出售。
总结


本节课中,我们一起学习了提示工程工具。我们了解到,这些工具提供了多种特性和功能来优化提示词,包括提供建议、优化结构、支持迭代精炼、缓解偏见、适配特定领域以及提供预设提示库。我们还介绍了几种常见的工具和平台,例如IBM Watson X AI Prompt Lab、Spellbook、Dust和Prompt Perfect,以及其他有用的资源和市场。掌握这些工具将帮助你更高效地与生成式AI模型进行交互。
049:文本到文本的提示技术 📝

在本节课中,我们将学习如何通过文本提示技术来提升大型语言模型的可靠性与输出质量。我们将探讨多种核心提示技巧,并了解有效使用文本提示所带来的益处。
近年来,自然语言处理领域因大型语言模型的应用而取得了显著进步。然而,随着模型规模和复杂度的持续增长,关于其可靠性、安全性和潜在偏见的担忧也随之浮现。有效使用文本提示是应对这些关切的一种有前景的解决方案。文本提示是精心设计的指令,用于引导大型语言模型的行为以生成期望的输出。但生成内容的质量和相关性,取决于提示的有效性以及模型本身的能力。



接下来,让我们深入探讨那些能使文本提示更有效、并能提升大型语言模型输出可靠性的具体技术。



任务明确化 🎯
文本提示应明确地向大型语言模型指定目标,以提高回答的准确性。例如,提示“将这句英文翻译成法语”就是一个实现任务的清晰指令。
上下文引导 🧭
这是一种通过文本提示为大型语言模型提供具体指令以生成相关输出的技术。例如,如果你希望模型生成一篇关于纽约市地标的短文,一个像“写一段关于纽约市的短文”这样的提示可能会得到一个笼统的回应,可能无法涵盖你想要的内容。另一方面,一个更具体的提示,如“写一段关于纽约市的短文,重点介绍其标志性地标”,由于提示中包含了上下文,将能生成更合适的输出。



领域专业知识 ⚕️
当需要大型语言模型在专业领域(如医学、法律或工程学)生成内容时,领域专业知识对于提升模型的可靠性至关重要。在这些领域,准确性和精确性至关重要。文本提示可以使用特定领域的术语。例如,假设你想获取关于甲状腺功能减退症的医学信息,你的提示可以这样写:“请解释甲状腺功能减退症的病因、症状和治疗方法,包括最新的研究和医学指南。”
偏见缓解 ⚖️


这是一种通过文本提示提供明确指令以生成中性回应的技术。例如,假设你担心模型在回应关于领导力特质的写作提示时存在性别偏见。为了解决这个问题,你可以使用这样的文本提示:“写一段100字的关于领导力特质的段落,不偏向任何性别。提供来自所有性别的平等特质示例。”
框架设定 📐
这是另一种通过文本提示引导大型语言模型在所需边界内生成回应的技术。假设你希望模型总结一篇关于气候变化的冗长文章,你的文本提示可以是:“提供一篇关于气候变化文章的100字摘要,重点关注其主要发现和建议。”
你知道吗?如今,经过海量数据训练并被调整以遵循指令的大型语言模型,可以执行零样本学习任务。


零样本提示 🚀


零样本提示是一种方法,生成式人工智能模型无需针对这些特定提示进行先验训练,即可对提示生成有意义的回应。例如,提示可以是:“选出这句话中的形容词。句子是:Anita bakes the best cakes in the neighborhood。” 这里的输出将是“best”。

然而,通常你无法通过一次提示就获得理想的回应,可能需要迭代。这就引出了用户反馈循环技术。
用户反馈循环 🔄

在这种技术中,用户对文本提示提供反馈,并根据大型语言模型生成的回应迭代地优化提示。这个循环允许用户逐步改进模型的输出质量,直到达到期望的状态。例如,用户通过文本提示要求模型写一首诗。大型语言模型生成了一首诗。用户说:“让它更有趣一些。” 大型语言模型调整诗歌以包含更多幽默元素。用户认可了修改后的诗歌。
类似地,对于复杂的任务,当你无法清晰描述需求时,会使用一种称为少样本提示的技术。
少样本提示 📚

少样本提示支持上下文学习,即在提示中提供示范,以引导模型获得更好的性能。这些示范作为后续示例的条件,在这些示例中你希望模型生成回应。例如,假设模型的任务是生成简短的旅行推荐。作为少样本提示,你为模型提供以下引导性上下文:“推荐一个以美丽海滩闻名的夏季旅行目的地。推荐一个以美丽秋叶闻名的秋季旅行目的地。” 在使用这些少样本提示后,模型可以为其他类型的假期生成旅行推荐。例如,如果任务是“推荐一个值得探索的城市”,模型将生成答案:“考虑参观像巴黎这样充满活力的城市,以其丰富的历史、艺术和标志性地标而闻名。” 这就是模型如何基于少样本提示中提供的最少训练数据,为不同类型的假期生成旅行推荐。


使用我们刚刚讨论的方法将文本提示与大型语言模型结合使用,会带来诸多好处。让我们看看其中一些。
使用文本提示的好处 ✨
大型语言模型的可解释性得到增强。可解释性指的是用户理解和解释模型决策过程及其生成输出背后原因的程度。可解释性帮助用户、开发者和利益相关者理解模型如何工作、为何做出某些预测或生成特定文本,以及它在各种应用中是否值得信赖。可解释性对于解决与人工智能相关的伦理问题至关重要。它帮助所有利益相关者评估并确保大型语言模型的行为符合特定领域的伦理准则和法律要求。
除了提高大型语言模型的可靠性和可解释性之外,有效的文本提示还能在用户和大型语言模型之间建立信任。当用户能够理解大型语言模型的工作原理,并看到他们的指令对模型行为的直接影响时,就会在用户和大型语言模型之间促成透明且有意义的互动。






总结 📋

本节课中,我们一起学习了各种可以通过文本提示提升大型语言模型可靠性和质量的技术。具体来说,我们探讨了任务明确化、上下文引导、领域专业知识、偏见缓解、框架设定和用户反馈循环。我们还学习了零样本和少样本提示技术。最后,我们了解了有效使用文本提示与大型语言模型的若干好处,例如增强模型的可解释性、解决伦理考量以及建立用户信任。
050:面试模式方法 🎤
在本节课中,我们将学习提示工程中的“面试模式方法”。这是一种通过模拟对话或访谈风格与模型互动来设计提示词的策略,旨在引导生成式AI模型产生更具体、更符合需求的回答。
概述


上一节我们介绍了提示工程的基本概念,本节中我们来看看一种更高级的交互策略——面试模式方法。这种方法的核心在于通过一系列精心设计的问答,引导模型逐步深入理解用户需求,从而生成高度优化的响应。
面试模式方法的工作原理
面试模式方法要求对提示词进行细致的优化,以确保模型生成的回答能精确满足你的目标。其典型流程如下:
- 用户提供初始指令:你首先向模型提供一个明确的角色和任务指令。
- 模型发起追问:模型根据你的指令,开始向你提出一系列必要的后续问题。
- 用户回答问题:你逐一回答模型提出的问题,提供更多细节。
- 模型处理并生成最终响应:模型根据你提供的所有信息,进行处理和整合,最终生成一个高度优化的回答。
核心公式可以概括为:
最终响应 = 模型处理(初始指令 + 用户对追问的回答)

你提供的信息越详细、越具体,最终得到的结果就越好。


应用示例:旅行顾问
为了更好地理解,我们来看一个具体的例子。假设你希望模型扮演一位旅行顾问,为你规划一次假期的旅行行程。

以下是你可以给模型的初始提示指令:
你将扮演一位经验丰富的旅行专家。你的目标是与我进行一次全面的旅行规划对话。请首先提出一系列详细的问题(一次一个),以收集所有必要信息,从而根据我的具体偏好、兴趣和预算,制定出最量身定制且令人难忘的旅行行程。
在收到这个指令后,模型会开始提出一系列后续问题,例如:
- 你最喜欢去哪种类型的旅行目的地?
- 你能描述一下你理想假期的活动和体验吗?
- 你通常如何规划旅行?在选择目的地时,哪些因素对你最重要?
- 在规划旅行目的地时,你是否对特定的文化或历史方面感兴趣?
- 旅行时你偏好哪种住宿选择?为什么?
- 你如何平衡预算考虑与获得难忘旅行体验的愿望?
在这个例子中,每个问题都建立在前一个问题的基础上,形成了一场关于旅行偏好的结构化、信息丰富的对话。根据你对这些问题的回答,模型将规划出一个符合你偏好和需求的、令人难忘的旅行行程。
面试模式方法的优势
通过本视频的学习,我们了解到面试模式方法优于传统的单次提示方法,因为它允许在与生成式AI模型互动时进行更动态、更迭代的对话。

与提供单一的静态提示不同,面试模式涉及与模型进行来回的信息交换。这有助于实时澄清疑问并引导模型的响应方向,从而增强了用户优化结果的能力。
总结

本节课中,我们一起学习了提示工程中的面试模式方法。我们了解了它的工作原理,即通过模拟访谈式的问答互动,逐步引导模型获取详细信息以生成精准响应。我们还通过一个旅行规划的例子,具体演示了如何应用这种方法。最后,我们总结了该方法的优势在于其动态交互性,能够显著提升生成结果的针对性和质量。
生成式人工智能工程:P51:思维链方法 🧠
在本节课中,我们将学习一种名为“思维链”的提示工程方法。这种方法通过构建一系列提示来引导生成式AI模型,使其能够理解复杂任务的逻辑,并生成连贯、准确的回答。

思维链是一种基于提示的学习方法。它通过构建一系列提示或问题,来引导模型生成期望的回应。使用这种方法,可以展示生成式AI模型的认知能力,并更好地解释其推理过程。

它涉及将复杂任务分解为更小、更简单的步骤,通过一系列更直接的提示来实现。每个提示都建立在前一个提示的基础上,共同引导模型走向预期的结果。
在直接向模型提问之前,你需要先向它提供一系列相关的问题及其对应的解决方案。这一连串的提示有助于模型思考问题,并运用相同的策略来正确回答更多类似问题。简单来说,提示中需要包含一个问题及其准确答案,以便为模型提供所需的上下文和逐步推理过程。然后,再提出一个不同的问题,要求模型使用相同的推理思路来解答。

为了更好地理解,我们来看一个例子。
思维链应用示例
假设你向模型提出一个数学问题:“马修有6个鸡蛋。他又买了两盘鸡蛋,每盘有12个。他现在有多少个鸡蛋?”对于复杂问题,模型的逻辑可能会出错。
为了训练模型掌握解决此类问题所需的适当推理,你可以先构建一个类似的问题作为示例:“玛丽有8个萝卜。她用了5个萝卜做晚餐。第二天早上,她又买了10个萝卜。她现在有多少个萝卜?”
关键点在于,你必须同时提供正确的逻辑解决方案:

- 玛丽最初有8个萝卜。
- 她用掉了5个,所以剩下
8 - 5 = 3个萝卜。 - 第二天她又买了10个,所以现在总共有
3 + 10 = 13个萝卜。

这将帮助模型理解其中涉及的逻辑,从而得出正确的解决方案。
因此,你最终的提示应包含以下内容:
- 一个相关的问题及其适当的解决方案。
- 然后,提出另一个可以用相同逻辑或推理来解决的问题。
在这个提示中,你可以看到有一个问题、该问题的逻辑解决方案,以及另一个可以用相同逻辑解决的新问题。
构建思维链提示的步骤


以下是构建有效思维链提示的关键步骤:
- 选择示例问题:挑选一个与你的目标问题在结构和逻辑上相似的问题。
- 提供逐步解答:为示例问题写出清晰、逐步的推理过程和最终答案。
- 提出目标问题:在示例之后,提出你真正希望模型解答的问题。
- 引导应用逻辑:明确或隐含地指示模型使用从示例中学到的推理方式来解答新问题。
一个典型的思维链提示结构如下:
问题:[示例问题]
解答:[逐步推理] 因此,答案是 [答案]。
问题:[你的目标问题]
解答:
思维链的优势

上一节我们介绍了思维链的具体构建方法,本节我们来看看这种方法带来的主要好处。
- 提升推理透明度:模型被迫展示其思考步骤,而不仅仅是给出最终答案,这使得其输出更易于理解和验证。
- 提高复杂问题准确率:对于需要多步推理的数学、逻辑或规划问题,思维链能显著提升答案的正确性。
- 引导模型思考方式:通过提供推理范例,你实际上是在“教”模型如何像人类一样一步步地解决问题。

本节课中,我们一起学习了“思维链”提示工程方法。我们了解到,这种方法通过为模型提供相关示例问题及其分步解决方案,来强化生成式AI模型的认知能力,并引导其进行逐步思考。其核心在于训练模型掌握解决某类问题的底层逻辑,从而能够将相同的逻辑应用于解决更多类似的问题。掌握思维链技巧,是构建高效、可靠AI提示的关键一步。
052:思维树方法 🌳
在本节课中,我们将学习一种创新的提示工程技术——思维树方法。我们将了解其基本原理、运作方式,并通过一个具体示例学习如何应用它来生成更精准、更具逻辑性的AI回复。
思维树方法是一种旨在扩展“思维链”提示法能力的创新技术。它使生成式AI模型能够展现出更高级的推理能力。该方法涉及将提示或查询分层构建,类似于树状结构,以指定模型所需的思考或推理路径。当您需要向模型提供明确的指令或约束,以确保其生成期望的输出时,这种方法尤其有用。此方法在解锁新解决方案和解决复杂问题方面具有巨大潜力。
上一节我们介绍了思维树方法的基本概念,本节中我们来看看它的具体工作原理。


思维树方法的工作原理是生成多条思考路径,类似于决策树,以探索不同的可能性和想法。与传统的线性方法不同,该技术允许模型同时评估并探索多条路径。每个想法或思路会像树枝一样分叉,形成一个相互关联的思考树状结构。模型通过评估每条可能的路径,根据其对结果的预测分配数值,并剔除前景较小的思路,最终确定最有利的选择。
为了更好地理解,我们将通过一个示例来说明。
假设您希望模型为一家电子商务企业设计吸引和留住熟练远程员工的招聘与保留策略,并要求模型运用思维树方法来完成。
您可以向模型提供以下提示指令:


想象三位不同的专家来回答这个问题。
所有专家都会写下他们思考的一个步骤,然后与小组分享。
然后所有专家继续进行下一步,依此类推。
如果有任何专家在任何时候意识到自己错了,那么他们就会退出。
除了上述提示指令,您还需要给出原始问题提示:
扮演人力资源专家的角色,为一家电子商务企业设计一个招聘与保留策略,重点是吸引和留住熟练的远程员工。
构建这样的提示指令将使生成式AI模型能够考虑一个逐步的过程并进行逻辑思考。它还会让模型考虑中间想法,在此基础上进行构建,并探索可能通向不同结果的“分支”。这种做法将最大化模型的使用和潜力,从而产生更有用的结果。

本节课中我们一起学习了思维树方法。这是一种在思维链方法基础上发展起来的创新技术,它涉及将提示分层构建成类似树状的结构,以指导模型的推理和输出生成。当需要明确的指令或约束来获得期望的输出时,这种方法尤其有价值。它使模型能够同时探索各种可能性和想法,像决策树一样分叉展开。
053:文本到图像的提示技术 🎨

在本节课中,我们将要学习如何通过特定的文本提示技术,来提升生成式AI模型所创建图像的质量和表现力。我们将逐一探讨五种核心的图像提示技术,帮助你写出更有效的图像生成指令。
图像是沟通的重要组成部分,广泛应用于营销、广告、教育、新闻等诸多领域。然而,有些图像在传达情感方面比其他图像更为出色。图像提示就是你希望生成图像的文本描述。它可以简单到一个单词或短语,也可以更详细地描述图像的构图、色彩和氛围。为了增强通过生成式AI模型获得的图像的影响力,使其更具说服力和吸引力,你可以使用图像提示技术。这些技术旨在提升生成式AI模型所产图像的质量、多样性和相关性。
有多种图像提示技术可用于改善图像的影响力。接下来,我们将逐一学习这些技术。
风格修饰词 🖌️



风格修饰词是用于影响生成式AI模型所产图像的艺术风格或视觉属性的描述符。这些描述符可以帮助模型在遵循输入提示结构和内容的同时,产出具有创新风格的图像。



你可以修改图像的各种视觉元素,如颜色、对比度、纹理、形状和大小,从而生成具有美学吸引力、视觉愉悦的输出。你的提示可以包含关于各种艺术风格、艺术时期、摄影技术、所用艺术材料类型,甚至是你希望模型模仿的知名品牌或艺术家特征的信息。所有这些信息都能帮助生成模型理解期望的输出图像外观或风格。
以下是图像提示中使用的风格修饰词示例。这些提示中使用的风格修饰词已被高亮标出。
- 提示示例 1:
一只猫,**赛博朋克风格**,霓虹灯,未来城市背景 - 提示示例 2:
宁静的湖泊,**水墨画风格**,山峦倒影 - 提示示例 3:
一幅**梵高风格**的向日葵静物画
质量提升词 📈
高质量图像相比低质量图像更具说服力和可信度。低分辨率图像通常会出现模糊和像素化,使观看者难以辨别其中的细节。另一方面,高分辨率图像保证了基本的可见性和可读性。使用高质量的图形设计可以提升图像的感知价值。



质量提升词是用于图像提示中的术语,旨在增强视觉吸引力,并提高输出的整体保真度和清晰度。这些特定术语可以指导生成式AI模型执行降噪、锐化、色彩校正和分辨率增强等步骤。


你可以在图像提示中使用诸如高分辨率、超详细、锐利、互补色等许多术语作为质量提升词。它们可以增强图像的特定特征,从而产生更连贯的输出。
让我们看一些例子来理解如何在图像提示中使用质量提升词。诸如突出纹理、4K分辨率、锐利、清晰细节、精细线条、互补色、模糊背景和脱颖而出等术语,就是给定图像提示中使用的质量提升词。
- 提示示例 1:
一只老虎的特写,**4K分辨率**,**锐利**,**突出纹理** - 提示示例 2:
现代客厅,**互补色**,**清晰细节**,**模糊背景**使家具**脱颖而出**
重复强调法 🔁

上一节我们介绍了如何通过质量提升词优化图像细节,本节中我们来看看如何通过重复来强化概念。重复技术利用了迭代采样的原理,以增强模型生成图像的多样性。



重复涉及在图像中强调特定的视觉元素,为模型创造一种熟悉感,使其能够专注于你想要突出的特定想法或概念。这可以通过在图像提示中重复相同的单词或相似的短语来实现。重复有助于强化通过图像传达的信息,并增加模型对概念的“记忆”。
模型并非仅根据提示生成一张图像,而是生成多张具有细微差别的图像,从而产生一组多样化的潜在输出。当生成模型面对抽象或模糊的提示,而存在多种有效解释可能时,这种技术尤其有价值。
让我们看一些在图像提示中使用重复词的例子。诸如微小、密集、巨大、广阔、宁静、清澈和茂盛等词被重复多次,以聚焦于特定的想法。
- 提示示例:
一片**茂盛**、**茂盛**、**茂盛**的绿色森林,阳光透过**密集**的树叶
加权术语 ⚖️
加权术语指的是使用那些能够产生强烈情感或心理影响的词语或短语。例如,免费、限时优惠和保证等词常用于广告中,以引发紧迫感、安全感和信任感。同样,奢华、高端和独家等词用于营造专属感和精致感。
生成式AI模型允许你为正则或负则术语赋予权重,以强调或弱化某种情感。在图像提示中使用加权术语有助于创建令人难忘、有说服力的图像,并能引发观众的情感共鸣。




以下是一些在图像提示中使用加权术语的示例。
如你在第一个示例中所见,词语温暖被赋予了正权重10,而噼啪作响的权重是正8。这意味着生成模型必须更侧重于温暖一词,而对噼啪作响的关注稍少一些。同样,在第二个示例中,词语闪烁被赋予了正6权重,而霓虹灯照亮的权重是正8。因此模型应更侧重于霓虹灯照亮。在最后一个示例中,词语彩色被赋予了负6权重,而异国情调被赋予了正10权重。这意味着模型必须强调异国情调一词,并弱化彩色一词。
- 提示示例 1:
(温暖:10) 壁炉,(噼啪作响:8) 的火焰 - 提示示例 2:
雨夜的城市街道,(闪烁:6) 的灯光,(霓虹灯照亮:8) 的招牌 - 提示示例 3:
(彩色:-6) 的羽毛,(异国情调:10) 的鸟
畸形修复提示 🛠️
本节我们将学习最后一种技术,用于处理生成图像中可能出现的缺陷。这种技术用于修改可能影响图像效果的畸形或异常。

图像中的畸形可能包括扭曲(特别是在人体部位如手或脚上)、像素化或其他会损害视觉吸引力和图像整体质量的问题。这可以通过使用恰当的负面提示在一定程度上得到缓解。
以下是图像提示中使用的畸形修复提示技术示例。你可以看到,在所有这些示例中,都使用了恰当的负面词语来缓解图像畸形问题。


- 提示示例 1:
一个美丽的天使,翅膀展开,**避免畸形的手和脚** - 提示示例 2:
未来主义机器人,金属质感,**无模糊,无像素化** - 提示示例 3:
人物肖像,面部特写,**避免扭曲的比例,避免奇怪的表情**
总结 📝


本节课中我们一起学习了图像提示技术在提升生成式AI模型图像生成能力方面起着至关重要的作用。风格修饰词、质量提升词、重复强调法、加权术语和畸形修复提示是五种可用于改善生成图像影响力的技术。通过结合使用这些技术,可以创建更令人难忘、更具吸引力、更有说服力的视觉效果,从而有效地传达预期信息。
054:数据类型
概述
在本节课中,我们将要学习Python编程语言中的核心概念之一:数据类型。我们将了解Python如何表示不同类型的数据,并探讨几种最常用的数据类型,包括整数、浮点数、字符串和布尔值。
什么是数据类型?🤔
数据类型是Python用来表示不同种类数据的方式。
在Python中,你可以拥有不同的数据类型。它们可以是像11这样的整数,像21.213这样的实数,甚至可以是单词。整数、实数和单词都可以表示为不同的数据类型。
以下图表总结了上述示例对应的三种数据类型。第一列表示表达式,第二列表示其数据类型。
我们可以通过使用type命令来查看Python中数据的实际类型。
# 使用type()函数查看数据类型
print(type(11)) # 输出: <class 'int'>
print(type(21.213)) # 输出: <class 'float'>
print(type("Hello")) # 输出: <class 'str'>
整数类型 (int) 🔢
整数可以是负数或正数。需要注意的是,整数有一个有限的范围,但这个范围非常大。
以下是一些整数的例子:
5-1001000

浮点数类型 (float) 📊
浮点数代表实数。它们不仅包括整数,还包括整数之间的数字。


考虑0和1之间的数字。我们可以选择它们之间的数字,这些数字就是浮点数。同样地,考虑0.5和0.6之间的数字,我们也可以选择它们之间的数字,这些也是浮点数。


我们可以继续这个过程,为不同的数字进行“放大”观察。当然,这个过程存在精度限制,但这个限制非常小。

类型转换 (Type Casting) 🔄
你可以在Python中改变表达式的类型,这被称为类型转换。
你可以将一个整数转换为浮点数。例如,你可以将整数2转换或“强制转换”为浮点数2.0。这本质上没有改变数值。
# 将整数转换为浮点数
int_num = 2
float_num = float(int_num)
print(float_num) # 输出: 2.0
print(type(float_num)) # 输出: <class 'float'>
但是,如果你将一个浮点数转换为整数,则必须小心。例如,如果你将浮点数1.1转换为整数1,你会丢失小数部分的信息。
# 浮点数转整数会丢失小数部分
float_num = 1.1
int_num = int(float_num)
print(int_num) # 输出: 1
如果一个字符串包含一个整数值,你可以将其转换为int类型。
# 包含整数的字符串可以转换为int
str_num = "123"
int_num = int(str_num)
print(int_num) # 输出: 123

如果我们尝试转换一个包含非整数值的字符串,将会得到一个错误。

# 包含非整数的字符串转换会报错
# str_num = "123.4"
# int_num = int(str_num) # 这会引发 ValueError

你也可以将一个整数或浮点数转换为字符串。
# 将数字转换为字符串
int_to_str = str(456)
float_to_str = str(78.9)
print(type(int_to_str)) # 输出: <class 'str'>
print(type(float_to_str)) # 输出: <class 'str'>
布尔类型 (bool) ✅❌
布尔值是Python中另一个重要的数据类型。一个布尔值可以取两个值。
第一个值是True(请注意,我们使用大写字母T)。布尔值也可以是False(使用大写字母F)。
使用type命令查看布尔值,我们会得到bool,这是boolean的缩写。
# 布尔类型
print(type(True)) # 输出: <class 'bool'>
print(type(False)) # 输出: <class 'bool'>
如果我们把布尔值True转换为整数或浮点数,会得到1。
# 布尔值转数字
print(int(True)) # 输出: 1
print(float(True)) # 输出: 1.0

如果我们把布尔值False转换为整数或浮点数,会得到0。
# 布尔值转数字
print(int(False)) # 输出: 0
print(float(False)) # 输出: 0.0
反之,如果你将数字1转换为布尔值,会得到True。类似地,如果将数字0转换为布尔值,会得到False。
# 数字转布尔值
print(bool(1)) # 输出: True
print(bool(0)) # 输出: False


总结
本节课中,我们一起学习了Python中的基本数据类型。我们了解了整数(int)、浮点数(float)、字符串(str) 和布尔值(bool) 这四种核心类型,并掌握了如何使用type()函数查看类型,以及如何进行安全的类型转换。理解数据类型是编写正确、高效Python代码的基础。建议通过实验练习更多例子,或查阅Python官方文档以了解Python支持的其他数据类型。
055:表达式与变量 🧮

在本节课中,我们将学习Python编程中的两个基础概念:表达式和变量。理解它们是编写任何程序的第一步。

概述
表达式是计算机执行的操作描述,而变量则用于存储数据值。我们将从基本的算术运算开始,逐步了解如何使用变量来保存和操作这些运算的结果。
什么是表达式? ➕➖✖️➗
表达式描述了计算机执行的一种操作类型。在Python中,表达式就是程序执行的各种运算。
例如,基本的算术运算,如将多个数字相加:
40 + 50 + 70
在这个例子中,结果是160。我们称这些数字为操作数,而加号(+)这样的符号称为运算符。
我们可以使用减号(-)执行减法运算:
4 - 6
在这种情况下,结果是一个负数(-2)。

我们可以使用星号(*)执行乘法运算:
5 * 5
结果是25。这里的运算符是星号(*)。
我们还可以使用正斜杠(/)执行除法运算:
25 / 5
25除以5等于5。
25 / 6
25除以6约等于4.167。在本课程使用的Python 3版本中,这两种除法运算的结果都是浮点数。

我们可以使用双斜杠(//)进行整数除法,结果会被取整:
25 // 6
结果是4。
请注意,在某些情况下,整数除法的结果与常规除法不同。
运算顺序 📐
Python在执行数学表达式时遵循数学惯例(先乘除,后加减)。以下两个表达式展示了不同的运算顺序:
2 + 3 * 6
(2 + 3) * 6
在第一种情况下,Python先执行乘法(3 * 6),然后加上2,得到结果20。
在第二种情况下,括号内的表达式(2 + 3)先执行,得到5,然后乘以6,得到结果30。
Python可以进行更多种类的运算,实验部分提供了更多示例。我们也会在课程中涵盖更复杂的操作。



引入变量 📦


上一节我们介绍了表达式,本节中我们来看看如何使用变量来存储值。


我们可以使用变量来存储值。例如,我们使用赋值运算符(即等号 =)将值1赋给变量 my_variable:
my_variable = 1
然后,我们可以在代码的其他地方通过输入变量的确切名称来使用这个值。我们使用冒号来表示变量的值。
我们可以使用赋值运算符为 my_variable 赋予一个新值:
my_variable = 10
现在,该变量的值为10。变量的旧值不再重要。
变量与表达式结合使用 🔄
我们可以存储表达式的结果。例如,我们将几个值相加,并将结果赋给变量 X:
X = 40 + 50 + 70
现在 X 存储了结果(160)。
我们也可以对 X 执行操作,并将结果赋给一个新变量 Y:
Y = X / 60
现在 Y 的值为2.666...。
我们还可以对 X 执行操作,并将新值重新赋给 X 本身:
X = X / 60
变量 X 现在的值是2.666...。和之前一样,X 的旧值不再重要。
我们也可以在变量上使用 type() 命令来查看其数据类型。






变量命名最佳实践 ✨


为变量使用有意义的名称是一种良好实践,这样你就不必费力记住每个变量的用途。

假设我们想将以下音乐数据集中高亮示例的分钟数转换为小时数。我们称包含总分钟数的变量为 total_min。通常使用下划线来分隔单词:
total_min = 40 + 50 + 70
你也可以使用大写字母来开始新单词(驼峰命名法),但下划线风格(蛇形命名法)在Python中更常见。
我们称包含总小时数的变量为 total_hour。我们可以通过将 total_min 除以60来获得总小时数:
total_hour = total_min / 60
结果大约是2.367小时。
如果我们修改第一个变量(total_min)的值,那么依赖于它的变量(total_hour)的值也会相应改变。我们无需修改代码的其他部分,这体现了使用变量的优势。



总结


本节课中,我们一起学习了Python中表达式和变量的核心概念。表达式是执行计算的指令,而变量是存储这些计算结果的容器。我们了解了基本的算术运算符、运算顺序、如何给变量赋值和重新赋值,以及为变量选择有意义名称的重要性。掌握这些基础知识是进行更复杂编程的基石。
056:字符串操作 🧵
在本节课中,我们将要学习Python中字符串的基本概念和操作方法。字符串是编程中最常用的数据类型之一,理解如何创建、访问和修改字符串是学习Python的重要一步。
什么是字符串?
在Python中,字符串是一个字符序列。字符串被包含在两个引号内。
您也可以使用单引号。字符串可以是空格或数字。
字符串也可以是特殊字符。我们可以将字符串绑定或赋值给另一个变量。
将字符串视为一个有序序列有助于理解它。
序列中的每个元素都可以使用由数字数组表示的索引来访问。
访问字符串元素
上一节我们介绍了字符串是一个有序序列,本节中我们来看看如何访问其中的元素。
第一个索引可以按如下方式访问。我们可以访问索引6。此外,我们还可以访问第13个索引。
我们也可以对字符串使用负索引。最后一个元素由索引负一给出。
第一个元素可以通过索引负十五获得,依此类推。
我们可以将一个字符串赋值给另一个变量。将字符串视为列表或元组是有帮助的。
我们可以将字符串作为序列处理并执行序列操作。

我们还可以输入一个步长值,如下所示。我们选择的两个索引是每隔一个变量。

我们也可以结合切片。在这种情况下,我们返回直到索引4的每隔一个值。

我们可以使用len命令来获取字符串的长度。因为这里有15个元素,结果是15。
以下是访问字符串元素的几种方式:
- 使用正索引访问特定位置,例如
string[0]。 - 使用负索引从末尾开始访问,例如
string[-1]。 - 使用切片获取子串,例如
string[0:4]。 - 使用带步长的切片,例如
string[0:10:2]。
字符串操作
了解了如何访问字符串后,我们来看看如何对字符串进行基本的操作。
我们可以连接或组合字符串。我们使用加号符号。
结果是一个结合了两者的新字符串。我们可以复制字符串的值。
我们只需将字符串乘以我们想要复制的次数。在这个例子中是3。
结果是一个新字符串。这个新字符串由原始字符串的三个副本组成。
这意味着您不能更改字符串的值,但可以创建一个新字符串。例如,您可以通过将其设置为原始变量并与一个新字符串连接来创建一个新字符串。

结果是一个从“Michael Jackson”变为“Michael Jackson is the best”的新字符串。
以下是字符串的基本操作:
- 连接:使用
+运算符,例如"Hello" + " " + "World"。 - 复制:使用
*运算符,例如"Hi" * 3。 - 不可变性:字符串创建后不能修改,任何操作都会生成新字符串。
转义序列
字符串是不可变的。反斜杠表示转义序列的开始。
转义序列表示可能难以输入的字符串。例如,反斜杠N表示换行。
输出是在遇到反斜杠N后换行。类似地,反斜杠T表示制表符。
输出是在反斜杠T的位置给出一个制表符。
如果您想在字符串中放置一个反斜杠,请使用双反斜杠。

结果是转义序列后的一个反斜杠。
我们也可以在字符串前面放一个R。
以下是常见的转义序列:
\n:换行符。\t:制表符。\\:表示一个反斜杠字符本身。- 在字符串前加
r可以创建原始字符串,忽略转义,例如r"C:\new_folder"。

字符串方法

现在让我们看看字符串方法。字符串是序列,因此具有适用于列表和元组的方法。
字符串还有第二组专门用于字符串的方法。
当我们对字符串A应用一个方法时,我们会得到一个与A不同的新字符串B。
让我们看一些例子。让我们尝试upper方法。
此方法将小写字符转换为大写字符。在这个例子中,我们将变量A设置为以下值。我们应用upper方法并将其设置为等于B。
B的值与A相似,但所有字符都是大写的。
replace方法替换字符串的一个片段(即子字符串)为一个新字符串。

我们输入想要更改的字符串部分。第二个参数是我们想要用其替换该片段的内容。

结果是一个片段被更改的新字符串。
find方法查找子字符串。参数是您想要查找的子字符串。

输出是该序列的第一个索引。我们可以查找子字符串“jack”。
如果子字符串不在字符串中,则输出为负1。请查看实验部分以获取更多示例。
以下是几个核心的字符串方法:
.upper():将字符串中的所有字符转换为大写。.replace(old, new):将字符串中的old子串替换为new子串。.find(sub):查找子串sub在字符串中第一次出现的索引,如果未找到则返回-1。
总结

本节课中我们一起学习了Python字符串的基础知识。我们了解了字符串的定义、如何通过索引和切片访问其中的字符,以及字符串的不可变性。我们还学习了字符串的基本操作,如连接和复制,认识了转义序列的用途,并实践了几个常用的字符串方法,如upper()、replace()和find()。掌握这些内容是进行更复杂文本处理的基础。
057:列表和元组 📚
在本节课中,我们将要学习Python中的两种复合数据类型:列表和元组。它们是Python中关键的数据结构,用于存储有序的元素集合。
元组 📦
元组是一种有序序列。以下是创建一个名为ratings的元组的示例。
元组表示为括号内用逗号分隔的元素。括号内的这些值就是元组的元素。

ratings = (1, 2, 3, 4, 5)
在Python中,有不同类型的数据,如字符串、整数、浮点数。它们都可以包含在一个元组中。但变量本身的类型是tuple。
访问元组元素
元组的每个元素可以通过索引来访问。下表展示了索引与元组中元素的关系。
| 索引 | 元素 |
|---|---|
| 0 | 1 |
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 4 | 5 |
第一个元素可以通过元组名称后跟一个方括号和索引号来访问,索引从0开始。
first_element = ratings[0] # 结果为 1

我们可以如下访问第二个元素。

second_element = ratings[1] # 结果为 2
我们也可以访问最后一个元素。在Python中,我们可以使用负索引。关系如下表所示。
| 索引 | 元素 |
|---|---|
| -5 | 1 |
| -4 | 2 |
| -3 | 3 |
| -2 | 4 |
| -1 | 5 ``` |
对应的访问方式如下。
last_element = ratings[-1] # 结果为 5
元组的操作

我们可以通过相加来连接或组合元组。结果如下。
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
combined_tuple = tuple1 + tuple2 # 结果为 (1, 2, 3, 4, 5, 6)
新元组的索引如下。
如果我们想从元组中获取多个元素,我们也可以对元组进行切片。例如,如果我们想要前三个元素,我们使用以下命令。切片时,结束索引是你想要的最后一个元素的索引加一。
first_three = ratings[0:3] # 结果为 (1, 2, 3)
类似地,如果我们想要最后两个元素,我们使用以下命令。注意,结束索引是元组最后一个元素的索引加一。
last_two = ratings[-2:] # 结果为 (4, 5)
我们可以使用len命令来获取元组的长度。由于有五个元素,结果是五。
length = len(ratings) # 结果为 5
元组的不可变性
元组是不可变的,这意味着我们不能改变它们。为了理解为什么这很重要,让我们看看当我们将变量ratings1设置为ratings时会发生什么。
ratings = (1, 2, 3, 4, 5)
ratings1 = ratings
每个变量并不包含一个元组,而是引用同一个不可变的元组对象。关于对象的更多信息,请参见对象和类模块。
假设我们想更改索引2处的元素,因为元组是不可变的,我们不能这样做。

# ratings[2] = 10 # 这行代码会引发 TypeError
因此,ratings1不会因为ratings的改变而受到影响,因为元组是不可变的。也就是说,我们不能改变它。
我们可以为ratings变量分配一个不同的元组。变量ratings现在引用另一个元组。
ratings = (10, 20, 30)
作为不可变性的结果,如果我们想要操作一个元组,我们必须创建一个新的元组。例如,如果我们想对一个元组排序,我们使用sorted函数。输入是原始元组,输出是一个新的已排序列表。关于函数的更多信息,请参见我们关于函数的视频。

sorted_ratings = sorted(ratings) # 返回一个新的列表 [10, 20, 30]
嵌套元组
一个元组可以包含其他元组,以及其他复杂的数据类型。这被称为嵌套。我们可以使用标准的索引方法来访问这些元素。
如果我们选择一个包含元组的索引,同样的索引约定适用。然后我们可以访问该元组中的值。例如,我们可以访问第二个元素。

nested_tuple = ((1, 2), (3, 4), (5, 6))
second_element_of_first_tuple = nested_tuple[0][1] # 结果为 2
我们可以直接将此索引应用于元组变量NT。将其可视化为一棵树会很有帮助。


我们可以将这种嵌套可视化为一棵树。元组有以下索引。如果我们考虑包含其他元组的索引,我们看到索引2包含一个有两个元素的元组。我们可以访问那两个索引。
complex_nested = (1, 2, (3, 4), (5, (6, 7)))
element = complex_nested[3][1][0] # 结果为 6
同样的约定适用于索引3。我们也可以访问那些元组中的元素。我们可以继续这个过程。
我们甚至可以通过添加另一个方括号来访问树的更深层次。我们可以访问字符串中的不同字符或第一个列表中包含的第二个元组中的各种元素。

上一节我们介绍了元组,本节中我们来看看列表。
列表 📝
列表也是Python中一种流行的数据结构。列表同样是一个有序序列。
L = ["hard rock", 10, 1.2]
列表用方括号表示。在许多方面,列表类似于元组。一个关键区别是它们是可变的。列表可以包含字符串、浮点数、整数。我们可以嵌套其他列表。我们也可以嵌套元组和其他数据结构。对于嵌套,应用相同的索引约定。
像元组一样,列表的每个元素都可以通过索引访问。下表代表了索引与列表中元素的关系。
| 索引 | 元素 |
|---|---|
| 0 | "hard rock" |
| 1 | 10 |
| 2 | 1.2 |
第一个元素可以通过列表名称后跟一个方括号和索引号来访问,在这种情况下是0。
first_element = L[0] # 结果为 "hard rock"

我们可以如下访问第二个元素。
second_element = L[1] # 结果为 10
我们也可以访问最后一个元素。在Python中,我们可以使用负索引。关系如下。
| 索引 | 元素 |
|---|---|
| -3 | "hard rock" |
| -2 | 10 |
| -1 | 1.2 ``` |

对应的索引如下。
我们也可以在列表中进行切片。例如,如果我们想要这个列表中的最后两个元素,我们使用以下命令。注意,结束索引比列表的长度大一。
last_two_elements = L[-2:] # 结果为 [10, 1.2]
列表和元组的索引约定是相同的。请查看实验部分以获取更多示例。
列表的操作
我们可以通过相加来连接或组合列表。结果如下。
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = list1 + list2 # 结果为 [1, 2, 3, 4, 5, 6]
新列表具有以下索引。
列表是可变的。因此,我们可以改变它们。例如,我们应用extend方法,通过添加一个点后跟方法名,然后是括号。括号内的参数是我们要连接到原始列表的新列表。
L = ["hard rock", 10, 1.2]
L.extend([4, 5]) # L 变为 ['hard rock', 10, 1.2, 4, 5]
在这种情况下,不是创建一个新列表L1,原始列表L通过添加两个新元素被修改。要了解更多关于方法的信息,请查看我们关于对象和类的视频。
另一个类似的方法是append。如果我们应用append而不是extend,我们向列表添加一个元素。
L.append(6) # L 变为 ['hard rock', 10, 1.2, 4, 5, 6]
如果我们查看索引,现在只多了一个元素。索引5包含我们追加的元素。每次我们应用一个方法,列表都会改变。
如果我们应用extend,我们向列表添加两个新元素。列表L通过添加两个新元素被修改。如果我们追加字符串"A",我们进一步改变列表,添加字符串"A"。
由于列表是可变的,我们可以改变它们。例如,我们可以如下更改第一个元素。
L[0] = "banana" # L 变为 ['banana', 10, 1.2, 4, 5, 6, 'A']
我们可以使用del命令删除列表的一个元素。我们只需将要删除的列表项作为参数指示出来。例如,如果我们想删除第一个元素,结果变为[10, 1.2, 4, 5, 6, 'A']。
del L[0]
我们可以删除第二个元素。此操作从列表中移除第二个元素。
del L[1] # 假设 L 现在是 [10, 1.2, 4, 5, 6, 'A'],删除后变为 [10, 4, 5, 6, 'A']
我们可以使用split将字符串转换为列表。例如,split方法将以空格分隔的每组字符转换为列表的一个元素。
string = "A,B,C"
list_from_string = string.split(',') # 结果为 ['A', 'B', 'C']
我们可以使用split函数在特定字符(称为分隔符)上分隔字符串。我们只需传递我们想要分割的分隔符作为参数。在这种情况下,是一个逗号。结果是一个列表。每个元素对应一组被逗号分隔的字符。
别名与克隆
当我们设置一个变量B等于A时,A和B都引用同一个列表。多个名称引用同一个对象被称为别名。
A = ["hard rock", 10, 1.2]
B = A
从列表的幻灯片中我们知道,B中的第一个元素被设置为"hard rock"。如果我们把A中的第一个元素改为"banana",我们会得到一个副作用。B的值也会因此改变。A和B引用同一个列表;因此,如果我们改变A,列表B也会改变。如果在改变列表A后检查B的第一个元素,我们得到的是"banana"而不是"hard rock"。
你可以使用以下语法克隆列表A。变量A引用一个列表,变量B引用原始列表的一个新副本或克隆。现在,如果你改变A,B不会改变。

A = ["hard rock", 10, 1.2]
B = A[:] # 或者 B = A.copy()
A[0] = "banana"
# 现在 A 是 ['banana', 10, 1.2], B 仍然是 ['hard rock', 10, 1.2]
我们可以使用help命令获取关于列表、元组和Python中许多其他对象的更多信息。只需传入列表、元组或任何其他Python对象。
help(list)
请查看实验部分,了解你可以用列表做的更多事情。

本节课中我们一起学习了Python中的列表和元组。我们了解了它们的定义、创建方法、如何访问和操作其中的元素,以及它们的关键区别——元组的不可变性与列表的可变性。我们还探讨了嵌套结构、切片、连接以及别名与克隆等重要概念。掌握这些基础数据结构是进行有效Python编程的关键一步。
058:字典 📚
在本节课中,我们将要学习Python中的一种重要数据结构——字典。我们将了解字典的基本概念、如何创建和操作字典,以及它与列表等其他数据结构的区别。
概述
上一节我们介绍了列表,它是一种通过整数索引访问元素的有序集合。本节中我们来看看字典,它是一种通过“键”来访问“值”的无序集合。字典在存储和检索成对关联的数据时非常高效。
字典的基本概念




字典是Python中的一种集合类型。列表使用整数索引,这些索引类似于地址。列表包含元素。字典则包含键和值。键类似于索引,也像地址,但键不必是整数,通常是字符或字符串。值类似于列表中的元素,用于存储信息。

创建字典
要创建一个字典,我们使用花括号 {}。键是第一个元素,它们必须是不可变且唯一的。每个键后面跟着一个值,两者之间用冒号 : 分隔。值可以是不可变的、可变的,并且允许重复。每个键值对之间用逗号 , 分隔。
考虑以下字典示例,其中专辑标题是键,发行日期是值:
{"Back in Black": 1980, "The Dark Side of the Moon": 1973, "The Bodyguard": 1992}
我们可以用表格来可视化字典,第一列代表键,第二列代表值。




字典的基本操作




我们可以将字典赋值给一个变量,并使用键来访问对应的值。
以下是字典的基本操作方法:

- 访问值:使用方括号
[],参数是键。例如dict["Back in Black"]会返回值1980。 - 添加新条目:通过赋值语句
dict["Graduation"] = 2007,可以添加一个新的键值对。 - 删除条目:使用
del语句,例如del dict["Thriller"]会删除键"Thriller"及其对应的值。 - 检查键是否存在:使用
in命令,例如"Back in Black" in dict。该命令检查键是否在字典中,存在则返回True,否则返回False。 - 获取所有键:使用
.keys()方法,返回一个包含所有键的类列表对象。 - 获取所有值:使用
.values()方法,返回一个包含所有值的类列表对象。
总结




本节课中我们一起学习了Python字典。我们了解了字典由键值对组成,键用于查找对应的值。我们掌握了如何创建字典、如何访问、添加、删除条目,以及如何检查键的存在和获取所有键值。字典是存储关联数据的强大工具,建议通过实验练习来巩固理解。
059:集合(Sets)📚
在本节课中,我们将要学习Python中的另一种集合类型——集合(Set)。我们将了解集合的定义、特性、基本操作以及集合间的数学运算。
集合也是一种集合类型。这意味着,与列表(List)和元组(Tuple)类似,你可以向集合中添加不同的Python数据类型。
与列表和元组不同,集合是无序的。这意味着集合不记录元素的位置。
集合只包含唯一的元素。这意味着在同一个集合中,一个特定的元素只会出现一次。
定义集合 🔧

要定义一个集合,你需要使用花括号 {}。将集合的元素放在花括号内。
代码示例:
my_set = {‘apple‘, ‘banana‘, ‘cherry‘, ‘apple‘}
print(my_set) # 输出:{‘cherry‘, ‘banana‘, ‘apple‘}
你会注意到定义时包含了重复项“apple”。当实际创建集合时,重复的项将不会出现。

列表转换为集合 🔄
你可以使用 set() 函数将一个列表转换为集合。这被称为类型转换(Typecasting)。
你只需将列表作为 set() 函数的输入参数。结果将是一个由列表转换而来的集合。
代码示例:
my_list = [‘apple‘, ‘banana‘, ‘cherry‘, ‘apple‘]
my_set = set(my_list)
print(my_set) # 输出:{‘cherry‘, ‘banana‘, ‘apple‘}

让我们来看一个例子。我们从一个列表开始。我们将这个列表输入到 set() 函数中。set() 函数返回一个集合。请注意,结果集合中没有重复的元素。
集合的基本操作 🛠️
上一节我们介绍了如何创建集合,本节中我们来看看如何修改集合。考虑一个集合A,我们可以用一个圆圈来表示它。如果你熟悉集合论,这可以是维恩图的一部分。
维恩图是一种通常使用形状(如圆圈)来表示集合的工具。
以下是集合的一些基本操作方法:
我们可以使用 add() 方法向集合中添加一个项目。我们只需在集合名称后加一个点,然后调用 add() 方法。参数是我们要添加的新元素。
代码示例:
set_a = {‘AC/DC‘, ‘Back in Black‘, ‘Thriller‘}
set_a.add(‘NSYNC‘)
print(set_a) # 输出可能包含 ‘NSYNC‘
现在集合A包含了‘NSYNC‘这个项目。如果我们尝试添加相同的项目两次,什么也不会发生,因为集合中不能有重复项。
假设我们想从集合A中移除‘NSYNC‘。
我们也可以使用 remove() 方法从集合中移除一个项目。我们只需在集合名称后加一个点,然后调用 remove() 方法。参数是我们要移除的元素。
代码示例:
set_a.remove(‘NSYNC‘)
print(set_a) # ‘NSYNC‘ 已被移除
在 remove() 方法应用于集合后,集合A不再包含‘NSYNC‘这个项目。你可以对集合中的任何项目使用此方法。
我们可以使用 in 命令来验证一个元素是否在集合中,如下所示。该命令检查特定项目(例如‘AC/DC‘)是否在集合中。如果项目在集合中,则返回 True。

代码示例:
print(‘AC/DC‘ in set_a) # 输出:True
print(‘Who‘ in set_a) # 输出:False
如果我们查找一个不在集合中的项目(例如‘Who‘),由于该项目不在集合中,我们将得到 False。
集合的数学运算 ➕➖✖️➗


这些是数学集合运算的类型。我们还可以进行其他操作。
我们可以在集合之间进行许多有用的数学运算。
让我们定义集合 album_set1。我们可以用一个红色圆圈或维恩图来表示它。
代码示例:
album_set1 = {‘AC/DC‘, ‘Back in Black‘, ‘Thriller‘}
类似地,我们可以定义集合 album_set2。我们也可以用一个蓝色圆圈或维恩图来表示它。


代码示例:
album_set2 = {‘AC/DC‘, ‘Back in Black‘, ‘The Dark Side of the Moon‘}

交集(Intersection)

两个集合的交集是一个新的集合,包含同时存在于这两个集合中的元素。使用维恩图会很有帮助。代表两个集合的圆圈相结合,重叠部分代表新的集合。由于重叠部分由红色圆圈和蓝色圆圈共同构成,我们用“且”(and)来定义交集。
在Python中,我们使用符号 & 来求两个集合的交集。

代码示例:
album_set3 = album_set1 & album_set2
print(album_set3) # 输出:{‘AC/DC‘, ‘Back in Black‘}
如果我们把集合的值覆盖在圆圈上,将公共元素放在重叠区域,在执行交集操作后,我们看到所有不同时存在于两个集合中的项目都消失了。
我们看到‘AC/DC‘和‘Back in Black‘同时存在于两个集合中。结果是一个新的集合 album_set3,包含了 album_set1 和 album_set2 中的所有公共元素。
并集(Union)

两个集合的并集是一个新的集合,包含两个集合中的所有项目(去重后)。我们可以如下找到集合 album_set1 和 album_set2 的并集。
在Python中,我们使用 union() 方法或 | 操作符。

代码示例:
album_set_union = album_set1.union(album_set2)
# 或者 album_set_union = album_set1 | album_set2
print(album_set_union) # 输出:{‘AC/DC‘, ‘Back in Black‘, ‘Thriller‘, ‘The Dark Side of the Moon‘}
结果是一个包含 album_set1 和 album_set2 所有元素的新集合。这个新集合在图中用绿色表示。

子集(Subset)
考虑新的集合 album_set3。该集合包含元素‘AC/DC‘和‘Back in Black‘。我们可以用维恩图表示,因为 album_set3 中的所有元素都在 album_set1 中。代表 album_set1 的圆圈包裹着代表 album_set3 的圆圈。

我们可以使用 issubset() 方法检查一个集合是否是另一个集合的子集。
代码示例:
print(album_set3.issubset(album_set1)) # 输出:True
由于 album_set3 是 album_set1 的子集,结果为 True。

关于集合还有很多可以做的事情。请查看实验部分以获取更多示例。
总结 📝

本节课中我们一起学习了Python中的集合。我们了解了集合无序、元素唯一的特性,学习了如何创建集合、将列表转换为集合,以及如何使用 add()、remove() 和 in 进行基本操作。我们还深入探讨了集合间的数学运算,包括交集(&)、并集(.union() 或 |)以及如何检查子集关系(.issubset())。集合是处理唯一项数据集和进行集合论运算的强大工具。
060:条件和分支 🧠
在本节课中,我们将要学习编程中的“条件”与“分支”概念。它们是控制程序流程的基础,决定了程序在不同情况下执行不同的代码块。我们将从比较操作开始,逐步深入到 if、else 和 elif 语句,最后学习逻辑运算符。
比较操作
上一节我们介绍了课程概述,本节中我们来看看比较操作。比较操作会对比两个值或操作数,然后基于某个条件产生一个布尔值(True 或 False)。


例如,我们给变量 a 赋值为 6。我们可以使用由两个等号 == 表示的相等运算符来判断两个值是否相等。
a = 6
result = (a == 7) # 判断 a 是否等于 7
print(result) # 输出:False
在这个例子中,由于 6 不等于 7,结果是 False。如果我们判断 a 是否等于 6,结果将是 True。
以下是其他常见的比较运算符:
- 大于(
>):如果左操作数的值大于右操作数的值,条件为True。 - 大于等于(
>=):如果左操作数的值大于或等于右操作数的值,条件为True。 - 小于(
<):如果左操作数的值小于右操作数的值,条件为True。 - 不等于(
!=):如果两个操作数的值不相等,条件为True。
这些运算符不仅适用于数字,也适用于字符串。例如,比较字符串 "ACDC" 和 "Michael Jackson" 是否相等会得到 False,而判断它们是否不相等则会得到 True。
If 语句
理解了比较操作后,我们就可以利用其结果来控制程序流程了。分支允许我们为不同的输入运行不同的语句。可以把 if 语句想象成一个上锁的房间:如果条件为 True,你就可以进入房间执行预设的任务;如果条件为 False,程序就会跳过这个任务。
考虑一个音乐会场景:蓝色矩形代表一场 ACDC 音乐会。如果个人年龄大于或等于 18 岁,他们可以进入。如果年龄小于 18 岁,则不能进入。
if 语句的语法如下:
if condition:
# 如果条件为 True,则执行这里的代码
例如:
age = 17
if age >= 18:
print(“你可以进入。”)
print(“继续。”)
当 age 为 17 时,条件为 False,因此不会执行 print(“你可以进入。”) 这行代码,程序直接输出“继续。”。当 age 为 19 时,条件为 True,程序会先输出“你可以进入。”,再输出“继续。”。
Else 语句
if 语句只能处理条件为真的情况。那么条件为假时我们想执行其他操作该怎么办呢?这时就需要 else 语句。else 语句会在 if 条件为 False 时运行一个不同的代码块。
继续使用音乐会类比:如果用户 17 岁,他们不能去 ACDC 音乐会,但可以去 Meatloaf 音乐会(用紫色方块表示)。

else 语句的语法如下:

if condition:
# 如果条件为 True,则执行这里的代码
else:
# 如果条件为 False,则执行这里的代码
例如:
age = 17
if age >= 18:
print(“你可以进入 ACDC 音乐会。”)
else:
print(“去看 Meatloaf 音乐会吧。”)
print(“继续。”)
当 age 为 17 时,if 条件为 False,程序会执行 else 块中的代码,输出“去看 Meatloaf 音乐会吧。”。当 age 为 19 时,if 条件为 True,程序执行 if 块中的代码,输出“你可以进入 ACDC 音乐会。”,并跳过 else 块。


Elif 语句
有时我们需要检查多个条件。elif 是 else if 的缩写,它允许我们在前一个条件为 False 时检查额外的条件。如果某个 elif 条件为 True,则执行其对应的代码块。
在音乐会例子中,如果个人刚好 18 岁,他们可以去 Pink Floyd 音乐会,而不是 ACDC 或 Meatloaf 音乐会。
elif 语句的语法如下:



if condition1:
# 条件1为 True 时执行
elif condition2:
# 条件1为 False 但条件2为 True 时执行
else:
# 所有条件都为 False 时执行
例如:
age = 18
if age > 18:
print(“你可以进入 ACDC 音乐会。”)
elif age == 18:
print(“去看 Pink Floyd 音乐会吧。”)
else:
print(“去看 Meatloaf 音乐会吧。”)
print(“继续。”)
当 age 为 18 时,第一个条件 age > 18 为 False,程序检查 elif 条件 age == 18,该条件为 True,因此输出“去看 Pink Floyd 音乐会吧。”。


逻辑运算符

为了构建更复杂的条件,我们需要逻辑运算符。逻辑运算符对布尔值进行运算,并产生新的布尔值。主要有三种:not、or 和 and。
not运算符:它取反一个布尔值。如果输入是True,结果是False;如果输入是False,结果是True。or运算符:它接受两个布尔值。只要其中至少一个为True,结果就为True;只有两者都为False时,结果才为False。and运算符:它接受两个布尔值。只有两者都为True时,结果才为True;只要其中至少一个为False,结果就为False。
以下是使用逻辑运算符的示例:
# 使用 or 运算符
album_year = 1990
if (album_year < 1980) or (album_year > 1989):
print(“这张专辑制作于70年代或90年代。”)



# 使用 and 运算符
album_year = 1983
if (album_year > 1979) and (album_year < 1990):
print(“这张专辑制作于80年代。”)
在第一个例子中,1990 不满足第一个条件(< 1980),但满足第二个条件(> 1989),因此 or 运算结果为 True,执行打印语句。在第二个例子中,1983 同时满足两个条件,因此 and 运算结果为 True,执行打印语句。
总结

本节课中我们一起学习了程序流程控制的核心概念:条件与分支。我们从比较操作开始,学会了如何使用 ==、>、< 等运算符产生布尔值。接着,我们深入探讨了分支语句:if 用于执行条件为真的代码块;else 用于处理条件为假的情况;elif 则允许我们链式检查多个条件。最后,我们学习了逻辑运算符 not、or 和 and,它们能帮助我们将简单的条件组合成更复杂的逻辑判断。掌握这些知识是编写能够根据不同情况做出决策的智能程序的基础。
061:循环 🔄
在本节课中,我们将要学习循环,特别是 for 循环和 while 循环。我们将使用大量直观的例子来帮助你理解。关于使用数据的例子,请参考实验部分。
在开始讨论循环之前,我们先来回顾一下 range 函数。
range 函数
range 函数会输出一个有序序列。如果输入是一个正整数,输出就是一个序列。这个序列包含的元素数量与输入值相同,但从0开始。
例如,如果输入是 3,输出就是序列 0, 1, 2。
如果 range 函数有两个输入,并且第一个输入小于第二个输入,那么输出序列将从第一个输入值开始,迭代到不包含第二个数字为止。
对于输入 10 和 15,我们得到以下序列:
range(10, 15) # 输出:10, 11, 12, 13, 14
关于 range 函数的更多功能,请参考实验部分。请注意,如果你使用 Python 3,range 函数不会像 Python 2 那样显式生成一个列表。

上一节我们介绍了 range 函数,本节中我们来看看 for 循环。
for 循环
我们将主要关注列表,但许多操作同样适用于元组。循环用于重复执行一项任务。
考虑一组彩色方块。假设我们想把每个彩色方块替换成白色方块。为了简化,我们给每个方块编号,并将这组方块统称为 squares。
如果我们想告诉某人将 0 号方块替换为白色方块,我们会说:
将 squares[0] 替换为白色方块
或者用代码表示:
squares[0] = 'white'
类似地,对于下一个方块,我们可以说:
squares[1] = 'white'
我们为每个方块重复这个过程。唯一变化的是我们引用的方块索引。
如果要在 Python 中执行类似的任务,我们不能使用实际的方块,所以让我们用一个列表来代表这些盒子。列表中的每个元素都是一个代表颜色的字符串。我们想把每个元素中的颜色名称改为“white”。
以下是 Python 中执行循环的语法:
for i in range(5):
squares[i] = 'white'
注意缩进。range 函数会生成一个序列。这段代码会简单地重复缩进块内的所有内容五次。如果你将值改为 6,它就会执行六次。然而,每次循环中,变量 i 的值都会递增 1。
在这个片段中,我们将列表的第 i 个元素更改为字符串 'white'。i 的值首先被设置为 0。循环的每次迭代都从缩进块的开始处执行。然后我们运行缩进块内的所有内容。列表的第一个元素被设置为 'white'。然后我们回到缩进块的开始,逐行向下执行。当我们到达更改列表值的那一行时,我们将索引 1 的值设置为 'white'。i 的值增加 1。我们为索引 2 重复这个过程。这个过程持续到下一个索引,直到我们处理完最后一个元素。
我们也可以在 Python 中直接遍历列表或元组,甚至不需要使用索引。
以下是列表 squares。每次迭代,我们将列表 squares 的一个元素传递给变量 square。
for square in squares:
print(square)
在这个部分,让我们显示变量 square 的值。第一次迭代时,square 的值是 'red'。然后我们开始第二次迭代,square 的值是 'yellow'。接着开始第三次迭代,也是最后一次迭代,square 的值是 'green'。
一个用于迭代数据的有用函数是 enumerate。它可以用来获取列表中元素的索引和元素本身。
让我们使用带有数字(代表每个方块的索引)的盒子类比。这是遍历列表并提供每个元素索引的语法:
for i, square in enumerate(squares):
print(f"Index: {i}, Color: {square}")
我们使用列表 squares,并用颜色名称来代表彩色方块。函数 enumerate 的参数是列表,在这个例子中是 squares。变量 i 是索引,变量 square 是列表中对应的元素。
让我们用屏幕的左侧来显示循环不同迭代中变量 square 和 i 的值。第一次迭代时,变量 square 的值是 'red',对应第 0 个索引,i 的值是 0。第二次迭代时,变量 square 的值是 'yellow',i 的值对应其索引,即 1。我们为最后一个索引重复这个过程。
了解了 for 循环后,接下来我们看看 while 循环。

while 循环
while 循环与 for 循环类似,但它不是执行固定次数的语句,而是仅在满足某个条件时运行。
假设我们想将列表 squares 中所有橙色的方块复制到列表 new_squares 中,但一旦遇到非橙色方块就停止。我们事先不知道方块的值。只要方块是橙色的,我们就继续这个过程,或者说检查方块是否等于 'orange'。如果不是,我们就停止。
对于第一个例子,我们会检查方块是否为橙色。它满足条件,所以我们复制这个方块。我们为第二个方块重复这个过程。条件满足,所以我们复制这个方块。在下一次迭代中,我们遇到了一个紫色方块。条件不满足,因此我们停止这个过程。这本质上就是 while 循环的作用。

让我们用左边的图来表示代码。我们将使用一个包含颜色名称的列表来代表不同的方块。
我们创建一个空列表 new_squares。实际上,这个列表的大小是不确定的。我们从索引 0 开始。while 语句将重复执行缩进块内的语句,直到括号内的条件为假。
new_squares = []
i = 0
while squares[i] == 'orange':
new_squares.append(squares[i])
i += 1
我们将列表 squares 的第一个元素的值追加到列表 new_squares 中。我们将 i 的值增加 1。我们将列表 squares 的第二个元素的值追加到列表 new_squares 中。我们再次增加 i 的值。现在,数组 squares 中的值是 'purple'。因此,while 语句的条件为假,我们退出循环。

关于循环的更多例子,特别是使用真实数据的例子,请查看实验部分。
总结

本节课中我们一起学习了循环。我们首先回顾了用于生成序列的 range 函数。然后,我们深入探讨了 for 循环,它用于对序列(如列表)中的每个元素重复执行代码块,可以通过索引或直接遍历元素来实现。我们还介绍了 enumerate 函数,它可以方便地同时获取元素的索引和值。最后,我们学习了 while 循环,它会在指定条件为真时持续执行代码块。掌握这些循环结构是进行有效编程和数据处理的基础。
062:函数 🧩

在本节课中,我们将要学习Python中的函数。你将了解如何使用Python的一些内置函数,以及如何构建自己的函数。函数是代码复用的核心,掌握它们能极大地提升你的编程效率。

什么是函数?🤔



函数接收一些输入,然后产生一些输出或引发某些改变。它本质上是一段可以重复使用的代码。你可以自己实现函数,但在很多情况下,你会使用他人编写的函数。这时,你只需要知道函数的功能以及在某些情况下如何导入它们。
为了更直观地理解,我们可以将橙色和黄色的方块想象成相似的代码块。我们可以运行这些代码,输入一些数据,然后得到一个输出。如果我们定义一个函数来执行这个任务,我们只需要调用这个函数即可。让小的方块代表用于调用函数的代码行。

通过调用函数几次,我们可以替换掉这些冗长的代码行。现在,我们的代码变得更短,但执行的任务完全相同。
函数的工作原理 🔄
你可以将这个过程想象成这样:当我们调用函数 F1 时,我们向函数传递一个输入。这些值会被传递给你编写的所有那些代码行。函数会返回一个值,你可以使用这个值。例如,你可以将这个值作为输入传递给一个新的函数 F2。当我们调用这个新函数 F2 时,这个值会被传递给另一组代码行。函数返回一个值,这个过程不断重复,将值传递给你调用的函数。你可以保存这些函数以便重复使用,或者使用其他人的函数。
Python的内置函数 📦
Python拥有许多内置函数。你不需要知道这些函数内部如何工作,只需要知道它们执行什么任务即可。

以下是几个常用内置函数的介绍:

len()函数:接收一个序列类型(如字符串、列表)或集合类型(如字典、集合)的输入,并返回该序列或集合的长度。- 公式/代码:
len(sequence_or_collection) - 示例:对于列表
[1, 2, 3, 4, 5, 6, 7, 8],len()函数会确定列表中有8个元素,并返回8。
- 公式/代码:


-
sum()函数:接收一个可迭代对象(如元组、列表),并返回所有元素的总和。- 公式/代码:
sum(iterable) - 示例:对于列表
[10, 20, 30, 10],sum()函数会计算所有元素的总和,并返回70。
- 公式/代码:
-
排序列表的两种方法:有两种方法可以对列表进行排序。第一种是使用
sorted()函数,第二种是使用列表的sort()方法。方法与函数类似。sorted()函数:返回一个新的已排序列表或元组,不改变原列表。- 代码:
sorted_list = sorted(original_list)
- 代码:
sort()方法:直接改变原列表,不创建新列表。- 代码:
original_list.sort()
- 代码:
让我们用一个例子来说明两者的区别。假设我们有一个列表 album_ratings = [10.0, 8.5, 9.5]。
当我们对 album_ratings 应用 sorted() 函数时,会得到一个新的已排序列表 sorted_album_rating,而原列表 album_ratings 保持不变。
如果我们使用 sort() 方法,列表 album_ratings 本身会被改变,并且不会创建新的列表。
如何构建自己的函数 🛠️
上一节我们介绍了如何使用Python的内置函数,本节中我们来看看如何构建自己的函数。
以下是一个Python函数的例子,它返回输入值加一的结果。
def add_one(a):
b = a + 1
return b
要定义一个函数,我们以关键字 def 开始。函数名应该能描述其功能。括号内是函数的形参 a,后面跟着一个冒号。接下来是一个带缩进的代码块。在这个例子中,我们将 a 加1并赋值给 b,然后返回或输出 b 的值。
定义函数后,我们就可以调用它了。调用 add_one(5),函数会将1加到5上并返回6。我们也可以再次调用这个函数,例如 c = add_one(10),那么变量 c 的值就是11。
让我们进一步探索。当你调用一个函数时,可以这样理解(注意:这是Python的简化模型,实际底层工作原理并非如此):我们调用函数并给它输入值5。可以认为值5被传递给了函数。现在,函数内的命令序列开始运行。形参 a 的值是5,b 被赋值为6。然后我们返回 b 的值,也就是6。如果我们再次调用函数,整个过程会重新开始,我们传入一个8,执行后续操作,函数返回值9。这只是一个有帮助的类比。
让我们尝试让这个函数更复杂一些。通常,我们会在函数的前几行编写文档字符串来说明函数的功能。这个文档字符串被三个引号包围。你可以使用 help() 命令来显示这个文档。
一个函数可以有多个参数。例如,函数 mult 将两个数字相乘(即求它们的乘积)。
def mult(a, b):
return a * b
如果我们传入整数2和3,结果是新的整数6。如果我们传入整数10和浮点数3.14,结果是浮点数31.4。如果我们传入整数2和字符串“Michael Jackson”,字符串“Michael Jackson”会被重复两次。这是因为乘法符号也可以表示重复一个序列。如果你不小心用一个整数乘以一个字符串(而不是两个整数),你不会得到错误,而是会得到一个字符串,你的程序可能会继续运行,但之后可能因为在你期望整数的地方得到了字符串而失败。这个特性会让编码更简单,但你必须更彻底地测试你的代码。

在许多情况下,一个函数可能没有 return 语句。在这些情况下,Python会返回一个特殊的 None 对象。实际上,如果你的函数没有 return 语句,你可以把它当作函数根本不返回任何东西。例如,函数 MJ() 只是打印名字“Michael Jackson”。我们调用这个函数,它就会打印出来。
让我们定义一个不执行任何任务的函数 no_work()。Python不允许函数体为空,所以我们可以使用关键字 pass,它什么都不做,但满足了函数体非空的要求。如果我们调用这个函数并打印它,函数会返回 None。在后台,如果没有调用 return 语句,Python会自动返回 None。
通常,函数会执行多个任务。例如,这个函数先打印一条语句,然后返回一个值。
我们也可以在函数中使用循环。例如,这个函数打印出列表或元组的值和索引。
可变参数与作用域 🌐
可变参数允许我们输入可变数量的元素。考虑以下函数,它的参数名前面有一个星号 *。当我们调用这个函数时,传入的参数会被打包成一个元组。
变量的作用域是程序中该变量可被访问的部分。在任何函数外部定义的变量被称为在全局作用域内,意味着它们在定义后可以在任何地方被访问。
在全局作用域内定义的变量称为全局变量。当我们调用一个函数时,我们就进入了一个新的作用域,即该函数的局部作用域。在函数内部定义的变量是局部变量,它们只存在于函数的作用域内。
全局作用域内的变量可以与局部作用域内的变量同名而不会冲突。如果在一个函数内部没有定义某个变量,Python会检查全局作用域。如果我们在函数内部使用 global 关键字定义一个变量,那么这个变量将成为全局变量。
总结 📝

本节课中我们一起学习了Python函数的核心概念。我们了解了函数是什么,它们如何工作,以及如何使用Python的内置函数,如 len()、sum() 和 sorted()。更重要的是,我们学习了如何定义自己的函数,包括如何设置参数、编写函数体和使用 return 语句。我们还探讨了可变参数、变量的作用域(全局与局部)以及 global 关键字的使用。函数是构建模块化、可重用代码的基石,熟练掌握它们对你的编程之旅至关重要。关于函数还有更多可以探索的内容,建议通过实践练习来巩固这些知识。
063:异常处理 🛡️



在本节课中,我们将要学习异常处理。异常处理是编程中管理运行时错误的关键技术,它能确保程序在遇到意外情况时不会崩溃,而是优雅地处理问题并继续执行。我们将解释异常处理的概念,演示其使用方法,并理解其基本原理。


什么是异常处理?
你是否曾经在应该输入文本的输入框中误输入了数字?我们大多数人都曾犯过这种错误,或者是在测试程序时故意为之。但你是否知道,为什么程序会显示错误信息而不是完成并终止运行?
为了让错误信息出现,程序在后台触发了一个事件。这个事件被激活,是因为程序试图对输入的姓名进行计算,却发现输入的内容是数字而非字母。通过将这段代码包裹在异常处理器中,程序知道了如何处理这类错误,并能够输出错误信息,让程序得以继续执行。这只是请求用户输入时可能发生的众多错误之一。
Try-Except 语句的工作原理

上一节我们介绍了异常处理的基本概念,本节中我们来看看 try-except 语句是如何工作的。

这种语句首先会尝试执行 try 代码块中的代码。但如果发生错误,程序会跳出 try 块,并开始搜索与错误匹配的异常。一旦找到处理该错误的正确异常,它就会执行相应的代码行。
例如,假设你正在编写一个打开并写入文件的程序。程序启动后,由于数据无法读取而发生了错误。因为这个错误,程序跳过了 try 语句下的代码行,直接执行了 except 语句。由于这个错误属于 IO 错误(输入/输出错误)的范畴,它就在控制台打印了“无法打开或读取文件中的数据”。
定义具体的异常类型
在编写简单程序时,有时我们只用一个 except 语句就能应付。但如果发生了未被 IOError 捕获的其他错误呢?如果发生这种情况,我们就需要为此添加另一个 except 语句。


对于这个 except 语句,你会注意到它没有指定要捕获的错误类型。虽然这看起来是一个合理的步骤,可以让程序捕获所有错误而不终止,但这并非最佳实践。

例如,假设我们的小程序只是一个超过一千行代码的大型程序中的一小部分。我们的任务是调试这个程序,因为它不断抛出错误,给用户造成困扰。在调查程序时,你发现这个错误反复出现。由于这个错误没有详细信息,你最终花费了数小时来定位和修复它。
添加 Else 和 Finally 语句
到目前为止,在我们的程序中,我们已经定义了如果发生错误应该打印出错误信息,但我们没有收到任何程序成功执行的通知。这时,我们可以添加一个 else 语句来提供这个通知。
通过添加这个 else 语句,它将在控制台为我们提供一个通知,表明文件写入成功。



现在我们已经定义了程序正常执行或发生错误时会发生什么,对于这个例子,还需要添加最后一个语句。


我们正在打开一个文件,最后需要做的事情是关闭文件。通过添加一个 finally 语句,它将告诉程序无论最终结果如何都要关闭文件,并在控制台打印“文件现已关闭”。
总结



本节课中,我们一起学习了如何编写 try-except 语句,了解了在创建异常时始终定义具体错误类型的重要性,并掌握了如何添加 else 和 finally 语句来完善异常处理逻辑。异常处理是构建健壮、可靠程序的基础技能。
064:对象和类 🧱
在本节课中,我们将要学习Python中的对象和类。我们将了解什么是对象,如何创建自定义的类,以及如何通过方法来操作对象。这些概念是面向对象编程的基础,对于构建复杂的程序至关重要。
什么是对象?🤔
Python中有许多不同的数据类型,例如整数、浮点数、字符串、列表、字典和布尔值。在Python中,每一种数据类型都是一个对象。
每个对象都包含以下内容:
- 类型:对象的类别。
- 内部表示:对象在内存中的存储方式。
- 方法:一组用于与对象数据交互的函数。


一个对象是某个特定类型的实例。例如,我们可以有类型1和类型2。类型1可以有多个黄色的对象,每个对象都是类型1的一个实例。同样,类型2可以有多个绿色的对象,每个对象都是类型2的实例。
让我们看几个不那么抽象的例子。

每次我们创建一个整数,我们都是在创建整数类型的一个实例,或者说是在创建一个整数对象。例如,1, 2, 3, 4, 5 就是五个整数类型的实例,即五个整数对象。


同样,每次我们创建一个列表,我们都是在创建列表类型的一个实例,或者说是在创建一个列表对象。例如,[1, 2], [3, 4, 5], [6], [7, 8, 9, 10], [11, 12] 就是五个列表类型的实例,即五个列表对象。
对象的类型与方法 🔧
我们可以使用 type 命令来查看对象的类型。
type([1, 2, 3]) # 输出:<class 'list'>
type(5) # 输出:<class 'int'>
type('hello') # 输出:<class 'str'>
type({'a': 1}) # 输出:<class 'dict'>
一个类或类型的方法,是该类或类型的所有实例都提供的函数。方法是你与对象交互的方式。我们一直在使用方法,例如在列表上使用 sort 方法。
考虑列表 ratings,其数据是包含在列表中的一系列数字。sort 方法会改变对象内部的数据。我们通过在对象名称后加上一个点 .,然后是方法名和括号 () 来调用方法。



ratings = [2, 5, 3, 1, 4]
ratings.sort() # 调用 sort 方法
print(ratings) # 输出:[1, 2, 3, 4, 5]
我们有一个用橙色表示的 ratings 列表,其数据是一系列数字。当我们调用 sort 方法时,这会改变对象内部包含的数据,你可以说它改变了对象的状态。我们还可以在列表上调用 reverse 方法,再次改变列表,反转对象内部序列的顺序。
在许多情况下,你不需要了解类及其方法的内部工作原理,只需要知道如何使用它们。
创建自定义类 🏗️
接下来,我们将介绍如何构建你自己的类。你可以在Python中创建自己的类型或类。
在本节中,你将创建一个类。这个类拥有数据属性和方法。然后,我们创建该类的实例或对象。



定义类的数据属性


类的数据属性定义了该类。让我们创建两个类:第一个类是圆形,第二个类是矩形。
思考一下什么构成了一个圆形。观察下图,我们只需要一个半径来定义一个圆。我们还可以添加颜色,以便于后续区分该类的不同实例。因此,我们的类数据属性是 radius 和 color。
类似地,为了定义一个矩形,我们需要高度和宽度。我们同样会添加颜色以便区分实例。因此,数据属性是 color, height 和 width。

编写类定义
要创建 Circle 类,你需要包含类定义。这告诉Python你正在创建自己的类。

class Circle(object):
# 类的内容
class 关键字表示类定义,Circle 是类的名称。括号中的 object 表示这是该类的父类(对于本课程,你始终使用 object)。
对于 Rectangle 类,我们改变类名,但其余部分保持不变。

class Rectangle(object):
# 类的内容
类是一个蓝图,我们必须设置属性来创建对象。
我们可以创建一个 Circle 类型的对象实例,其颜色数据属性为红色,半径数据属性为4。我们也可以创建第二个 Circle 类型的对象实例,其颜色为绿色,半径为2。
同样,我们可以创建一个 Rectangle 类型的对象实例,其颜色为蓝色,高度和宽度数据属性均为2。第二个 Rectangle 类型的对象实例,其颜色为黄色,高度为1,宽度为3。
现在,我们有了 Circle 类的不同对象,以及 Rectangle 类的不同对象。



构建Circle类:构造函数与数据属性 ⚙️

让我们继续在Python中构建 Circle 类。我们定义类,然后使用类构造函数为每个类实例初始化数据属性 radius 和 color。
__init__ 函数是一个构造函数。它是一个特殊的函数,告诉Python你正在创建一个新类。Python中还有其他特殊函数用于创建更复杂的类。
class Circle(object):
def __init__(self, radius, color):
self.radius = radius
self.color = color

self参数指的是新创建的类实例。radius和color参数用于初始化类实例的radius和color数据属性。在构造函数体内,我们可以将这些参数的值赋给self.radius和self.color。
类似地,我们可以定义 Rectangle 类。
class Rectangle(object):
def __init__(self, color, height, width):
self.color = color
self.height = height
self.width = width

这次,类的数据属性是 color, height 和 width。

创建对象
创建类之后,为了创建一个 Circle 类的对象,我们引入一个变量,这将是对象的名称。我们通过使用对象构造函数来创建对象。
red_circle = Circle(10, "red")
对象构造函数由类名以及参数(即数据属性)组成。当我们创建一个 Circle 对象时,我们像调用函数一样调用代码。传递给 Circle 构造函数的参数用于初始化新创建的 Circle 实例的数据属性。


将 self 想象成一个包含对象所有数据属性的盒子是很有帮助的。

访问和修改数据属性
输入对象名称,后跟一个点 . 和数据属性名称,可以获取数据属性的值。
print(red_circle.radius) # 输出:10
print(red_circle.color) # 输出:red

我们可以看到 self 参数和对象之间的关系。在Python中,我们也可以直接设置或更改数据属性:输入对象名称,后跟一个点 . 和数据属性名称,并将其设置为相应的值。
red_circle.color = "yellow"
print(red_circle.color) # 输出:yellow

我们验证了颜色数据属性已经改变。通常,为了改变对象中的数据,我们在类中定义方法。


类的方法 🛠️
我们已经看到数据属性如何构成定义对象的数据。方法是与数据属性交互并改变数据属性的函数,用于更改或使用对象的数据属性。
假设我们想改变一个圆的大小,这涉及到改变 radius 属性。我们向 Circle 类添加一个名为 add_radius 的方法。该方法是一个需要 self 以及其他参数的函数。
class Circle(object):
def __init__(self, radius, color):
self.radius = radius
self.color = color
def add_radius(self, r):
self.radius = self.radius + r
在这个例子中,我们将一个值 r 加到数据属性 radius 上。


让我们看看当我们创建一个对象并调用 add_radius 方法时,这部分代码是如何工作的。
和之前一样,我们使用对象构造函数创建一个对象。我们向构造函数传递两个参数:半径设置为2,颜色设置为红色。
my_circle = Circle(2, "red")
在构造函数体内,数据属性被设置。我们可以使用盒子类比来查看对象的当前状态。
我们通过添加一个点 .,后跟方法名和括号 () 来调用方法。在这种情况下,函数的参数是我们想要添加的量。

my_circle.add_radius(8)
调用方法时,我们不需要担心 self 参数,就像构造函数一样,Python会为我们处理。在许多情况下,除了 self 之外,方法的定义中可能没有指定任何参数,因此我们在调用函数时不传递任何参数。


在内部,该方法以值 8 和正确的 self 对象被调用。该方法为 self.radius 分配一个新值。

这改变了对象,特别是 radius 数据属性。当我们调用 add_radius 方法时,它通过改变 radius 数据属性的值来改变对象。
实践与总结 📝
我们可以在类构造函数的参数中添加默认值。在实验部分,我们还会创建一个名为 draw_circle 的方法。
在实验中,我们可以使用构造函数创建一个新的 Circle 类型对象,颜色为红色,半径为3。我们可以访问数据属性 radius 和 color。最后,我们可以使用 draw_circle 方法来绘制圆形。
类似地,我们可以创建一个新的 Circle 类型对象,访问其数据属性,并使用 draw_circle 方法绘制它。



总结一下,我们创建了一个名为 red_circle 的 Circle 类对象,其半径属性为3,颜色属性为红色。

我们还创建了一个名为 blue_circle 的 Circle 类对象,其半径属性为10,颜色属性为蓝色。
在实验中,我们有一个类似的 Rectangle 类。我们可以使用构造函数创建一个新的 Rectangle 类型对象,访问其高度、宽度和颜色的数据属性,并使用 draw_rectangle 方法绘制矩形。
所以,我们有一个类,而对象是该类的实现或实例化。例如,我们可以创建两个 Circle 类的对象或两个 Rectangle 类的对象。
dir() 函数对于获取与类相关的数据属性和方法列表非常有用。将你感兴趣的对象作为参数传递,返回值是该对象数据属性的列表。
被下划线包围的属性是供内部使用的,你不需要担心它们。那些看起来常规的属性才是你应该关注的,这些是对象的方法和数据属性。

关于Python中的对象,你还可以做更多事情。请查看 Python.org 获取更多信息。

本节课总结 📚
在本节课中,我们一起学习了Python中对象和类的核心概念。我们了解到:
- Python中的所有数据类型都是对象,每个对象都有类型、内部表示和方法。
- 对象是某个类(类型)的实例。
- 我们可以使用
class关键字定义自己的类,并通过__init__构造函数初始化对象的数据属性。 - 方法是定义在类中的函数,用于操作对象的数据属性。
- 我们可以创建类的多个实例(对象),每个实例都有自己的数据。
- 使用
dir()函数可以查看对象的所有属性和方法。

掌握这些面向对象编程的基础知识,将帮助你更好地组织代码,构建更复杂、更模块化的应用程序。
065:使用open函数读取文件 📂
在本节课程中,我们将学习如何使用Python内置的open函数来创建文件对象,并从TXT文件中获取数据。我们将了解如何打开文件、读取内容以及正确关闭文件。
使用open函数打开文件
我们将使用Python的open函数来获取一个文件对象。然后,我们可以对该对象应用方法来读取文件中的数据。


以下是打开名为example1.txt文件的方法。我们使用open函数,第一个参数是文件路径,由文件名和文件目录组成。第二个参数是模式,常用的值包括'r'表示读取,'w'表示写入,'a'表示追加。在本例中,我们将使用'r'进行读取。最终,我们获得一个文件对象。
file1 = open('example1.txt', 'r')

获取文件信息与关闭文件
现在,我们可以使用文件对象来获取文件的信息。我们可以使用数据属性.name来获取文件名,结果是一个包含文件名的字符串。我们还可以使用数据属性.mode来查看对象的模式,这里会显示'r',代表读取。
你应该始终使用方法.close()来关闭文件对象。但有时这可能会显得繁琐,因此让我们使用with语句。使用with语句打开文件是更好的做法,因为它会自动关闭文件。
with open('example1.txt', 'r') as file1:
# 在此缩进块中执行操作
读取文件内容

上一节我们介绍了如何打开文件,本节中我们来看看如何读取其内容。代码将运行缩进块中的所有内容,然后关闭文件。这段代码读取文件example1.txt。我们可以使用文件对象file1。代码将执行缩进块中的所有操作,然后在缩进结束时关闭文件。
方法.read()将文件的值作为一个字符串存储在变量file_stuff中。你可以打印文件内容。你可以检查文件是否已关闭,但你不能在缩进块外读取它,不过你仍然可以在缩进块外打印文件内容。
我们可以打印文件内容,将会看到以下输出。
with open('example1.txt', 'r') as file1:
file_stuff = file1.read()
print(file_stuff)
当我们检查原始字符串时,会看到\n。这是Python用来表示换行的方式。

逐行读取文件内容

我们可以使用方法.readlines()将每一行输出为列表中的一个元素。第一行对应列表中的第一个元素,第二行对应第二个元素,依此类推。
with open('example1.txt', 'r') as file1:
file_stuff = file1.readlines()
print(file_stuff)


我们可以使用方法.readline()来读取文件的第一行。如果我们运行这个命令,它会将第一行存储在变量file_stuff中,然后打印第一行。
with open('example1.txt', 'r') as file1:
file_stuff = file1.readline()
print(file_stuff)

我们可以使用.readline()方法两次。第一次调用时,它会将第一行保存在变量file_stuff中,然后打印第一行。第二次调用时,它会将第二行保存在变量file_stuff中,然后打印第二行。
with open('example1.txt', 'r') as file1:
file_stuff = file1.readline()
print(file_stuff)
file_stuff = file1.readline()
print(file_stuff)

我们可以使用循环来逐行打印每一行,如下所示。

with open('example1.txt', 'r') as file1:
for line in file1:
print(line)

按字符数读取
让我们将字符串中的每个字符表示为一个网格。我们可以指定想要从字符串中读取的字符数,作为方法.read()的参数。

with open('example1.txt', 'r') as file1:
print(file1.read(4))

当我们在方法.read()中使用参数4时,我们会打印出文件中的前四个字符。
每次我们调用该方法,都会在文本中前进。如果我们使用参数16调用该方法,会打印出前16个字符,然后是换行符。如果我们第二次调用该方法,会打印出接下来的五个字符。最后,如果我们最后一次调用该方法,参数为9,则会打印出最后九个字符。
请查看实验部分,以获取更多关于方法和其他文件类型的示例。
总结

本节课中我们一起学习了如何使用Python的open函数读取文件。我们涵盖了打开文件、获取文件信息、使用with语句自动管理文件关闭、以及使用.read()、.readline()和.readlines()等不同方法读取文件内容。我们还学习了如何按指定字符数读取文件。掌握这些基础操作是进行文件处理和数据分析的重要第一步。
066:使用open函数写入文件 📝

在本节课中,我们将学习如何使用Python的open函数向文件中写入数据。我们将涵盖创建新文件、向文件写入文本、追加内容以及复制文件等核心操作。
概述

上一节我们介绍了如何使用open函数读取文件。本节中,我们来看看如何使用相同的函数向文件中写入数据。写入文件是数据持久化存储的基础,对于保存程序输出、日志记录等任务至关重要。

使用open函数写入文件
我们可以使用Python的open函数获取一个文件对象,并创建一个文本文件。然后,我们可以对该文件对象应用write方法写入数据,最终文本将被写入到文件中。
以下是创建并写入文件的基本步骤:
- 创建文件对象:使用
open函数,并指定模式参数为'w'(写入)。 - 写入数据:对文件对象调用
write方法。 - 关闭文件:使用
with语句自动管理文件关闭,或手动调用close方法。

创建并写入新文件
我们可以按如下方式创建文件example2.txt。我们使用open函数,第一个参数是文件路径(由文件名和目录组成)。如果该文件已存在于目录中,它将被覆盖。我们将模式参数设置为'w'以进行写入。最后,我们获得文件对象。与之前一样,我们使用with语句,代码将运行缩进块中的所有内容,然后关闭文件。我们创建文件对象file1。

with open('example2.txt', 'w') as file1:
file1.write('This is line A\n')
我们使用open函数。这将在您的目录中创建一个文件example2.txt。我们使用write方法将数据写入文件。该方法的参数是我们希望输入到文件中的文本。
连续写入与写入列表
如果我们连续多次使用write方法,每次调用时它都会向文件写入内容。第一次调用时,我们将写入"this is line A",并使用\n表示换行。第二次调用该方法时,它将写入"this is line B"。然后文件将被关闭。

with open('example2.txt', 'w') as file1:
file1.write('This is line A\n')
file1.write('This is line B\n')
我们也可以将列表中的每个元素写入文件。

与之前一样,我们使用with命令和open函数创建一个文件。列表lines包含三个文本元素。我们使用for循环读取列表lines的每个元素,并将其传递给变量line。
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
with open('example2.txt', 'w') as file1:
for line in lines:
file1.write(line)

循环的第一次迭代将列表的第一个元素写入文件example2。第二次迭代写入列表的第二个元素,依此类推。循环结束时,文件将被关闭。
向现有文件追加内容

我们可以将模式设置为'a'(小写)来进行追加。这不会创建新文件,而是使用现有文件。如果我们调用write方法,它只会写入现有文件,然后添加"this is line C",接着关闭文件。

with open('example2.txt', 'a') as file1:
file1.write('This is line C\n')
复制文件内容
我们可以按如下方式将一个文件复制到一个新文件。首先,我们读取文件example1.txt,并通过文件对象read_file与之交互。然后,我们创建一个新文件example3.txt,并使用文件对象write_file与之交互。

with open('example1.txt', 'r') as read_file:
with open('example3.txt', 'w') as write_file:
for line in read_file:
write_file.write(line)
for循环从文件对象read_file中取出一行,并使用文件对象write_file将其存储到文件example3.txt中。第一次迭代复制第一行,第二次迭代复制第二行,直到到达文件末尾。然后两个文件都被关闭。
总结

本节课中我们一起学习了如何使用Python的open函数进行文件写入操作。我们掌握了创建新文件(模式'w')、向文件写入字符串或列表内容、向现有文件追加数据(模式'a')以及复制文件内容的方法。记住使用with语句可以自动、安全地管理文件的打开和关闭。请查看实验部分以获取更多示例。
生成式人工智能工程:13:使用Pandas加载数据 📊
在本节课中,我们将要学习如何使用Python的Pandas库来加载和处理数据。Pandas是一个功能强大的数据分析库,它提供了便捷的数据结构,使我们能够高效地操作结构化数据。

什么是依赖库?
依赖库或库是预先编写好的代码,用于帮助解决问题。在本视频中,我们将介绍Pandas,这是一个用于数据分析的流行库。
导入Pandas库
我们可以使用以下命令导入Pandas库或依赖项。我们以import命令开始,后跟库的名称。
import pandas
现在,我们可以访问大量预构建的类和函数。这假设该库已安装在我们的实验环境中。所有必要的库都已预先安装。
加载CSV文件
假设我们想使用Pandas的内置函数read_csv来加载一个CSV文件。CSV是一种用于存储数据的典型文件类型。
我们只需输入单词pandas,然后是一个点.和函数名及其所有输入参数。
pandas.read_csv('file_path.csv')
使用别名简化代码
频繁输入pandas可能很繁琐。我们可以使用as语句来缩短库的名称。在这种情况下,我们使用标准缩写pd。

import pandas as pd

现在,我们输入pd和一个点.,后跟我们想要使用的函数名。在本例中,是read_csv。
pd.read_csv('file_path.csv')
我们并不局限于缩写pd。例如,我们可以使用术语banana。但在本视频的其余部分,我们将坚持使用pd。
深入理解代码

Pandas允许您使用数据框来处理数据。让我们详细了解一下从CSV文件到数据框的过程。
path = 'file_path.csv'
df = pd.read_csv(path)
变量path存储了CSV文件的路径。它被用作read_csv函数的参数。结果存储在变量df中,这是数据框的缩写。
查看数据

现在我们有了数据框中的数据,就可以对其进行操作了。我们可以使用head方法来检查数据框的前五行。
df.head()
加载Excel文件

加载Excel文件的过程类似。我们使用Excel文件的路径和read_excel函数。结果也是一个数据框。

df_excel = pd.read_excel('file_path.xlsx')

理解数据框结构
数据框由行和列组成。我们可以从字典创建数据框。字典的键对应列标签,值是列表,对应行数据。
然后,我们使用DataFrame函数将字典转换为数据框。
data = {'Column1': [1, 2, 3], 'Column2': ['A', 'B', 'C']}
df_from_dict = pd.DataFrame(data)
我们可以清楚地看到表格与字典之间的直接对应关系:键对应表头,值列表对应行。
选择数据列

我们可以创建一个仅包含一列的新数据框。只需输入数据框名称(本例中为df)和用双括号括起来的列标题名。
new_df_single = df[['Column_Name']]
结果是一个由原始列组成的新数据框。

您也可以对多列执行相同的操作。只需输入数据框名称(本例中为df)和用双括号括起来的多个列标题名。
new_df_multi = df[['Column1', 'Column2']]
结果是一个由指定列组成的新数据框。

总结

本节课中,我们一起学习了Pandas库的基础知识。我们了解了如何导入Pandas库,如何使用read_csv和read_excel函数加载CSV和Excel文件,以及如何创建和操作数据框。我们还学习了如何查看数据的前几行,以及如何从数据框中选择特定的列。这些技能是进行数据分析和处理的重要基础。
068:Pandas数据处理与保存 📊
在本节课中,我们将学习如何使用Pandas库处理和保存数据。我们将重点介绍如何从数据框中提取唯一值、基于条件筛选数据,以及将处理后的结果保存到文件中。
数据处理基础

上一节我们介绍了数据框的基本概念,本节中我们来看看如何对数据框中的数据进行实际操作。
当我们拥有一个数据框时,我们可以处理其中的数据,并将结果保存为其他格式。

考虑一堆由13个不同颜色方块组成的堆叠。我们可以看到其中有三种独特的颜色。
假设你想找出数据框某一列中有多少个唯一元素。这可能要困难得多,因为数据可能不是13个元素,而是数百万个。


提取唯一值
Pandas提供了unique方法来确定数据框某一列中的唯一元素。


假设我们想确定数据集中专辑的唯一发行年份。
我们输入数据框的名称,然后在方括号内输入列名released。接着我们应用unique方法。结果就是released列中的所有唯一元素。
以下是实现此操作的代码示例:
unique_years = df['released'].unique()


基于条件筛选数据
假设我们想创建一个新的数据库,其中包含1980年代及以后的歌曲。我们可以查看released列,筛选出发行年份在1979年之后的歌曲,然后选择对应的行。


我们可以在Pandas中用一行代码完成这个操作,但让我们先分解步骤。


在Pandas中,我们可以对整个数据框使用不等式运算符。结果是一个布尔值序列。
对于我们的案例,我们只需指定released列以及“晚于1979年”的不等式条件。结果是一个布尔值序列。当条件为真时,结果为True,否则为False。
以下是创建布尔掩码的代码:
condition = df['released'] > 1979

创建新数据框

我们可以在一行代码中选择指定的列。我们只需使用数据框的名称,并在方括号中放入前面提到的不等式条件,然后将其赋值给变量DF1。
现在我们就有了一个新的数据框,其中每张专辑的发行年份都在1979年之后。
DF1 = df[df['released'] > 1979]


保存数据
我们可以使用to_csv方法保存新的数据框。参数是CSV文件的名称。请确保包含.csv扩展名。


还有其他函数可以将数据框保存为其他格式。
以下是保存数据框的代码:
DF1.to_csv('albums_after_1979.csv')

总结

本节课中我们一起学习了Pandas数据处理与保存的核心操作。我们首先学习了如何使用unique()方法提取数据列中的唯一值。接着,我们探讨了如何基于条件(例如不等式df['released'] > 1979)创建布尔掩码来筛选数据行。然后,我们利用这个布尔掩码从原始数据框中筛选出符合条件的行,创建了一个新的数据框DF1。最后,我们使用to_csv()方法将处理后的新数据框保存为CSV文件,以便后续使用或分析。这些是使用Pandas进行数据清洗和预处理的基础且重要的技能。
069:一维NumPy数组入门 🧮

在本节课中,我们将学习一维NumPy数组的基础知识。NumPy是用于科学计算的核心库,它提供了高性能的多维数组对象和工具。掌握NumPy是学习数据科学、机器学习和生成式AI的重要基础。

NumPy是一个用于科学计算的库,它包含许多有用的函数。NumPy相比纯Python代码,在速度和内存使用上具有显著优势。NumPy同时也是Pandas库的基础。


数组创建与基本属性


上一节我们介绍了NumPy的重要性,本节中我们来看看如何创建NumPy数组以及其基本属性。
Python列表是一种可以存储和访问数据的容器,每个元素都与一个索引相关联。我们可以使用方括号访问每个元素,如下所示:
L = [1, 2, 3, 4, 5]
print(L[0]) # 输出 1

NumPy数组(或ND数组)与列表类似。它的大小通常是固定的,并且每个元素都是相同类型(例如整数)。我们可以通过首先导入NumPy,然后将列表转换为NumPy数组。我们按如下方式转换列表:
import numpy as np
a = np.array([0, 1, 2, 3, 4])
我们可以通过索引访问数据。与列表一样,我们可以使用整数和方括号访问每个元素:
print(a[0]) # 输出 0
数组 a 的存储方式如下。如果我们检查数组的类型,会得到 numpy.ndarray。由于NumPy数组包含相同类型的数据,我们可以使用属性 dtype 来获取数组元素的数据类型。在本例中,是64位整数:
print(a.dtype) # 输出 dtype('int64')
以下是数组 a 的一些基本属性:
size:数组中元素的数量。因为有五个元素,结果是5。ndim:表示数组维度的数量,或数组的秩。在本例中,是1。shape:一个整数元组,表示数组在每个维度上的大小。对于一维数组,形状是(5,)。

我们可以用实数创建一个NumPy数组。当我们检查数组的类型时,得到 numpy.ndarray。如果我们检查属性 dtype,会看到 float64,因为元素不是整数。还有许多其他属性,可以查阅 numpy.org。



索引与切片
上一节我们学习了如何创建数组,本节中我们来看看如何访问和修改数组中的元素。

我们可以按如下方式将数组的第一个元素更改为100:
a[0] = 100
数组的第一个值现在是100。我们可以按如下方式更改数组的第五个元素:
a[4] = 0
第五个元素现在是0。


与列表和元组类似,我们可以对NumPy数组进行切片。数组的元素对应以下索引。我们可以选择索引1到3(不包括3)的元素,并将其分配给一个新的NumPy数组 c,如下所示:
c = a[1:4]
这些元素确实对应于索引。与列表一样,我们不计算与最后一个索引对应的元素。
我们可以按如下方式将对应的索引分配给新值:
a[1:4] = [200, 300, 400]
数组 a 现在有了新值。有关NumPy用法的更多示例,请参阅实验或 numpy.org。


基本数组运算

NumPy使得在数据科学中常用的许多操作变得更加容易。与常规Python相比,这些相同的操作在NumPy中通常计算速度更快,并且需要更少的内存。让我们在一维数组的背景下回顾其中一些操作。为了使内容更有趣,我们将在欧几里得向量的背景下研究许多操作。


向量加法
向量加法是数据科学中广泛使用的操作。考虑具有两个元素的向量 u。元素由不同的颜色区分。类似地,考虑具有两个分量的向量 v。在向量加法中,我们创建一个新向量 z。z 的第一个分量是向量 u 和 v 的第一个分量之和。类似地,第二个分量是 u 和 v 的第二个分量之和。这个新向量 z 现在是向量 u 和 v 的线性组合。
用线段或箭头表示向量加法是有帮助的。第一个向量用红色表示。第二个向量用蓝色表示。当我们添加向量 u 和 v 时,我们得到新向量 z。我们添加第一个分量(水平方向)和第二个分量(垂直方向)。在添加向量时,使用“首尾相接法”很有帮助,即将向量 v 的尾部放在向量 u 的尖端。新向量 z 通过连接第一个向量 u 的基部和第二个向量 v 的尾部来构建。
以下三行代码将添加两个列表并将结果放入列表 z 中:
u = [1, 0]
v = [0, 1]
z = []
for n, m in zip(u, v):
z.append(n + m)
我们也可以用一行NumPy代码执行向量加法:
import numpy as np
u = np.array([1, 0])
v = np.array([0, 1])
z = u + v
对两个列表执行向量加法需要多行代码,如屏幕右侧所示。此外,NumPy代码运行速度会快得多。如果你有大量数据,这一点很重要。

向量减法


我们也可以通过将加号改为减号来执行向量减法。对两个列表执行向量减法需要多行代码,如屏幕右侧所示。
# NumPy方式
z = u - v

标量乘法

向量与标量的乘法是另一个常用操作。考虑向量 y。每个分量由不同颜色指定。我们简单地将向量乘以一个标量值,在本例中是2。向量的每个分量都乘以2。在本例中,每个分量都加倍。

我们可以使用线段或箭头来可视化这个过程。原始向量 y 是紫色的。将其乘以标量值2后,向量被拉伸了两个单位,如红色所示。新向量在每个方向上都变长了两倍。


使用NumPy,向量与标量的乘法只需要一行代码:
y = np.array([1, 1])
z = 2 * y
使用Python列表执行相同任务需要多行代码,如屏幕右侧所示。此外,该操作也会慢得多。

哈达玛积(逐元素乘法)

哈达玛积是数据科学中另一个广泛使用的操作。考虑以下两个向量 u 和 v。u 和 v 的哈达玛积是一个新向量 z。z 的第一个分量是 u 和 v 的第一个元素的乘积。类似地,第二个分量是 u 和 v 的第二个元素的乘积。结果向量由 u 和 v 的逐元素乘积组成。

我们也可以用一行NumPy代码执行哈达玛积:
u = np.array([1, 2])
v = np.array([3, 2])
z = u * v
对两个列表执行哈达玛积需要多行代码,如屏幕右侧所示。

点积


点积是数据科学中另一个广泛使用的操作。考虑向量 u 和 v。点积是由以下项给出的单个数字,表示两个向量的相似程度。我们将 v 和 u 的第一个分量相乘。然后我们将第二个分量相乘并将结果相加。结果是一个数字,表示两个向量的相似程度。


我们也可以使用NumPy函数 dot 执行点积,并将其赋值给变量 result,如下所示:
result = np.dot(u, v)


广播与通用函数

上一节我们介绍了基本的向量运算,本节中我们来看看NumPy的两个强大特性:广播和通用函数。

考虑数组 u。该数组包含以下元素。如果我们向数组添加一个标量值,NumPy会将该值添加到每个元素。这个属性被称为广播。
u = np.array([1, 2, 3, -1])
z = u + 1 # 结果为 [2, 3, 4, 0]

通用函数是在ND数组上操作的函数。我们可以将通用函数应用于NumPy数组。考虑数组 a。我们可以使用方法 mean 计算 a 中所有元素的平均值。这对应于所有元素的平均值。在本例中,结果是 0。
a = np.array([1, -1, 1, -1])
mean_a = a.mean() # 结果为 0.0

还有许多其他函数。例如,考虑NumPy数组 b。我们可以使用方法 max 找到最大值。我们看到最大值是 5。因此,方法 max 返回 5。
b = np.array([1, 2, 3, 4, 5])
max_b = b.max() # 结果为 5

我们可以使用NumPy创建将NumPy数组映射到新NumPy数组的函数。让我们在屏幕左侧实现一些代码,并使用屏幕右侧来演示发生了什么。我们可以按如下方式访问NumPy中的 pi 值:
np.pi
我们可以以弧度创建以下NumPy数组 x。这个数组对应以下向量。我们可以将函数 sin 应用于数组 x 并将值赋给数组 y。这会将正弦函数应用于数组中的每个元素。这对应于将正弦函数应用于向量的每个分量。结果是一个新数组 y,其中每个值对应于对数组 x 中的每个元素应用正弦函数。

用于绘制数学函数的一个有用函数是 linspace。linspace 在指定间隔内返回均匀间隔的数字。我们指定序列的起点、序列的终点。参数 num 表示要生成的样本数,在本例中为 5,样本之间的间隔是 1。
np.linspace(-2, 2, num=5) # 结果为 [-2., -1., 0., 1., 2.]
如果我们将参数 num 改为 9,我们会在从 -2 到 2 的区间内得到 9 个均匀间隔的数字。结果是后续样本之间的差是 0.5,而不是之前的 1。
我们可以使用函数 linspace 从区间 0 到 2π 生成 100 个均匀间隔的样本。我们可以使用NumPy函数 sin 将数组 x 映射到新数组 y。我们可以导入库 pyplot 作为 plt 来帮助我们绘制函数。由于我们使用的是Jupyter笔记本,我们使用命令 %matplotlib inline 来显示绘图。以下命令绘制一个图形。第一个输入对应于水平轴或x轴的值。第二个输入对应于垂直轴或y轴的值。
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

x = np.linspace(0, 2*np.pi, num=100)
y = np.sin(x)
plt.plot(x, y)
关于NumPy,你还可以做更多事情。请查看 numpy.org 上的实验以获取更多信息。


总结
本节课中我们一起学习了一维NumPy数组的基础知识。我们首先介绍了如何从Python列表创建NumPy数组,并了解了数组的基本属性,如 dtype、size、ndim 和 shape。接着,我们探讨了如何通过索引和切片来访问及修改数组元素。
然后,我们深入学习了NumPy中高效的数组运算,包括向量加法、减法、标量乘法、哈达玛积和点积,这些操作在数据科学中至关重要。最后,我们介绍了NumPy的两个强大特性:广播(允许标量与数组进行运算)和通用函数(可对整个数组执行数学运算),并演示了如何使用 linspace 和绘图功能。

NumPy是进行高效数值计算的基石,熟练掌握它将为后续学习更复杂的数据分析和机器学习概念打下坚实基础。
070:二维NumPy数组 🧮

在本节课中,我们将要学习如何创建和使用二维NumPy数组。我们将涵盖二维数组的基础知识、创建方法、索引与切片操作,以及基本的数学运算。
概述

NumPy允许我们创建多维数组。本节将重点介绍二维数组,但NumPy同样可以构建更高维度的数组。二维数组可以直观地理解为矩阵,它由行和列组成。
二维数组的创建与属性
我们可以从嵌套列表创建二维NumPy数组。每个嵌套列表对应矩阵的一行。
考虑列表 A,它包含三个大小相等的嵌套列表:
A = [[11, 12, 13], [21, 22, 23], [31, 32, 33]]
我们可以将其转换为NumPy数组:
import numpy as np
A = np.array(A)
将NumPy数组可视化为矩形阵列有助于理解。行对应嵌套列表,列对应每个列表中的元素。
数组属性

我们可以使用以下属性来了解数组的结构:
ndim:获取数组的轴数或维度数,也称为秩。对于二维数组,秩为2。shape:返回一个元组,表示数组的形状。第一个元素是行数,第二个元素是列数。对于数组A,shape为(3, 3)。size:返回数组中元素的总数。对于数组A,size为 9(3行 × 3列)。

按照惯例,第一个轴(轴0)对应行,第二个轴(轴1)对应列。


二维数组的索引与切片

上一节我们介绍了数组的创建和属性,本节中我们来看看如何访问和选取数组中的特定元素。

我们可以使用方括号来访问数组的不同元素。第一个索引对应行,第二个索引对应列。

访问单个元素

考虑数组 A:
# 访问第二行,第三列的元素(索引从0开始)
element = A[1, 2] # 值为 23

# 访问第一行,第一列的元素
element = A[0, 0] # 值为 11
切片操作

我们也可以对二维数组进行切片,选取子数组。


以下是切片操作的示例:
A[0, 0:2]:选取第一行的前两列。A[0:2, 2]:选取前两行的最后一列。
二维数组的基本运算


了解了如何访问数组元素后,本节我们将探讨二维数组的基本数学运算,包括加法、标量乘法和元素乘法。



数组加法
两个相同形状的数组相加,等同于矩阵加法,即对应位置的元素相加。
X = np.array([[1, 0], [0, 1]])
Y = np.array([[2, 1], [1, 2]])
Z = X + Y # Z = [[3, 1], [1, 3]]


标量乘法
将数组乘以一个标量,等同于将矩阵中的每个元素都乘以该标量。
Y = np.array([[2, 1], [1, 2]])
Z = 2 * Y # Z = [[4, 2], [2, 4]]
元素乘法(哈达玛积)


两个相同形状的数组相乘,执行的是元素级别的乘法,即哈达玛积。
X = np.array([[1, 0], [0, 1]])
Y = np.array([[2, 1], [1, 2]])
Z = X * Y # Z = [[2, 0], [0, 2]]
矩阵乘法
除了元素级别的运算,NumPy也支持真正的矩阵乘法。矩阵乘法的规则是:第一个矩阵的列数必须等于第二个矩阵的行数。
考虑矩阵 A 和 B:
A = np.array([[0, 1, 1], [1, 0, 1]])
B = np.array([[1, 1], [1, 1], [-1, 1]])
在NumPy中,使用 dot 函数或 @ 运算符进行矩阵乘法:
C = np.dot(A, B)
# 或
C = A @ B
# 结果 C = [[0, 2], [0, 2]]
新矩阵 C 中第 i 行第 j 列的元素,是矩阵 A 的第 i 行与矩阵 B 的第 j 列的点积。

总结

本节课中我们一起学习了二维NumPy数组的核心知识。我们首先学习了如何从嵌套列表创建二维数组,并理解了 shape、ndim、size 等关键属性。接着,我们掌握了通过索引和切片来访问数组元素的方法。最后,我们探讨了二维数组的基本运算,包括数组加法、标量乘法、元素乘法(哈达玛积)以及真正的矩阵乘法。掌握这些基础是进行更复杂科学计算和数据分析的重要前提。NumPy的功能远不止于此,建议访问 numpy.org 以探索更多可能性。
071:简单API(第1部分)📡

在本节课中,我们将学习应用程序接口,简称API。我们将了解API是什么、API库、REST API(包括请求和响应),并通过一个使用Pycoin Gecko的实例来加深理解。
什么是API?🤔
API允许两个软件组件相互通信。例如,你有一个程序、一些数据以及其他软件组件。你可以通过API,利用输入和输出来与其他软件进行通信。就像调用函数一样,你无需了解API的内部工作原理,只需知道其输入和输出即可。
API库示例:Pandas 🐼


Pandas实际上是一组软件组件,其中许多甚至不是用Python编写的。你有一些数据和一组软件组件。我们通过Pandas API与其他软件组件通信,从而处理数据。



让我们清理一下图示。当你创建一个字典,然后使用DataFrame构造函数创建一个Pandas对象时,用API术语来说,这就是一个实例。字典中的数据被传递给Pandas API。然后,你使用这个DataFrame与API进行通信。
以下是使用Pandas API的典型流程:
- 当你调用
head()方法时,DataFrame会与API通信,显示数据框的前几行。 - 当你调用
mean()方法时,API会计算平均值并返回结果。

REST API 🌐
REST API是另一种流行的API类型。它们允许你通过互联网进行通信,从而利用存储、访问更多数据、人工智能算法等资源。REST代表表征状态转移。
在REST API中,你的程序被称为客户端。API与你通过互联网调用的Web服务进行通信。通信有一套关于输入(即请求)和输出(即响应)的规则。
以下是REST API中的一些常见术语:
- 客户端:指你或你的代码。
- 资源:指Web服务。
- 端点:客户端通过它来找到服务(我们将在下一节详细讨论)。
- 请求:客户端发送给资源的信息。
- 响应:资源(Web服务)发送给客户端的回复。

HTTP方法是互联网上传输数据的一种方式。


通过REST API发送请求与接收响应 🔄
通过发送请求来告诉REST API要做什么。请求通常通过HTTP消息进行通信,该消息通常包含一个文件,其中包含我们希望服务执行的操作指令。这个操作通过互联网传输到Web服务,然后服务执行该操作。
类似地,Web服务通过HTTP消息返回响应,信息通常通过文件返回,并传输回客户端。
实践示例:使用Pycoin Gecko获取加密货币数据 💹
加密货币数据非常适合用于API,因为它不断更新,对加密货币交易至关重要。我们将使用Pycoin Gecko(CoinGecko API的Python客户端或封装器)来获取每分钟更新的数据。我们使用这个封装器是因为它易于使用,让你可以专注于数据收集任务。我们还将介绍Pandas中处理时间序列数据的函数。


使用Pycoin Gecko收集数据很简单,步骤如下:
- 安装并导入库。
- 创建一个客户端对象。
- 使用函数请求数据。
例如,在以下函数中,我们获取过去30天比特币兑美元的数据:
# 示例代码:获取比特币价格数据
data = client.get_coin_market_chart_by_id(id='bitcoin', vs_currency='usd', days=30)
在这种情况下,我们的响应是一个JSON文件,表示为Python的嵌套列表字典,包含价格、市值和总交易量等信息,其中包含Unix时间戳和当时的价格。我们只对价格感兴趣,因此我们将使用键 'price' 来选取价格数据。
为了简化操作,我们可以将嵌套列表转换为具有timestamp和price两列的数据框。时间戳列难以理解,我们将使用Pandas的 to_datetime() 函数将其转换为更易读的格式。


使用 to_datetime() 函数可以创建可读的时间数据。输入是时间戳列,时间单位设置为毫秒。我们将输出附加到新的 date 列。
现在,我们想创建一个K线图。为了获取每日K线的数据,我们将按日期分组,找出每天的最低、最高、开盘和收盘价。最后,我们将使用Plotly创建K线图并进行绘制。
现在,我们可以通过打开HTML文件并点击标签页左上角的“信任HTML”来查看K线图。它看起来应该类似这样。

总结 📝



本节课中,我们一起学习了API的基础知识。我们了解了API如何作为软件组件间的通信桥梁,探讨了API库(如Pandas)和REST API的工作原理,包括客户端、资源、端点、请求和响应等核心概念。最后,我们通过一个使用Pycoin Gecko API获取并可视化比特币价格数据的实际例子,将理论应用于实践。
072:简单API(第2部分)🔌
在本节课中,我们将学习如何使用具备人工智能能力的应用程序接口。我们将通过一个具体示例,展示如何将音频文件转录为文本,再将文本翻译成另一种语言。整个过程将涉及两个IBM Watson API的调用。
上一节我们介绍了API的基本概念,本节中我们来看看如何实际调用两个具体的AI服务API。

概述:音频转录与翻译流程 🎤➡️📝➡️🌍
我们将按照以下步骤构建一个简单的AI应用:
- 使用Watson语音转文本API转录一个音频文件。
- 使用Watson语言翻译API将得到的文本翻译成另一种语言。
在API调用中,你需要向API发送一份音频文件的副本。这种操作通常被称为 POST请求。随后,API会在后台处理音频,并将说话内容的文本转录发送回来。这个返回过程可以理解为API发起了一个 GET请求。接着,我们将希望翻译的文本发送给第二个API。该API会翻译文本,并将译文返回给你。在本例中,我们将实现从英语到西班牙语的翻译。
在开始实践之前,我们需要先了解两个核心概念:API密钥和端点。
API密钥与端点 🔑
首先,我们来回顾API密钥和端点。它们是访问API的凭证和地址。
API密钥
API密钥是访问API的一种方式。它是一个独特的字符串,API通过它来识别和授权你的身份。通常,你的首次API调用就需要包含这个密钥,以便获得访问权限。
核心概念:API_KEY = "your_unique_secret_string_here"
在许多API服务中,每次调用都可能产生费用。因此,就像保护你的密码一样,你应该对API密钥保密。
端点

端点就是服务所在的位置。它用于在互联网上定位API,就像一个网址。

核心概念:ENDPOINT_URL = "https://api.serviceprovider.com/v1/action"
Watson 服务介绍 🤖
接下来,我们简要了解一下本教程将用到的两个IBM Watson服务。

Watson语音转文本
这项服务能够将音频和语音转换为书面文本。它适用于从客户服务对话到媒体内容字幕等多种场景。
Watson翻译
这项服务提供动态的文本翻译功能,支持在多种语言之间进行快速、准确的翻译。


本节课中我们一起学习了如何利用API密钥和端点来访问AI服务,并概述了通过组合Watson语音转文本和Watson翻译API,实现从音频到跨语言文本的完整流程。理解这些基本组件是构建更复杂AI应用的第一步。
生成式人工智能工程:19:REST API:HTTP请求(第1部分)🚀

在本节课中,我们将要学习HTTP协议的基础知识,特别是统一资源定位符(URL)、HTTP请求与响应的结构,以及常见的HTTP方法和状态码。理解这些概念是使用REST API进行数据交互的关键。
上一节我们简要介绍了REST API。HTTP协议可以被视为通过网络传输信息的通用协议。这包括了多种类型的REST API。回想一下,REST API的工作原理是发送一个请求,而这个请求是通过HTTP消息进行通信的。
HTTP消息通常包含一个JSON文件。当你(客户端)访问一个网页时,你的浏览器会向托管该页面的服务器发送一个HTTP请求。服务器会尝试查找所需的资源,默认情况下是index.html。如果你的请求成功,服务器会在一个HTTP响应中将对象发送给客户端。这个响应包含了诸如资源类型、资源长度等信息。
下图中的表格代表了Web服务器中存储的资源列表,在这个例子中,是一个HTML文件、一个PNG图像和一个文本文件。当请求信息时,Web服务器会发送所请求的信息,也就是其中一个文件。



统一资源定位符(URL)是在网络上查找资源最常用的方式。我们可以将URL分解为三个部分。


以下是URL的三个组成部分:
- 协议:这是使用的协议。对于本实验,它始终是
http://。 - 网络地址或基础URL:这用于定位资源。例如
www.ibm.com或www.gitlab.com。 - 路径:这是资源在Web服务器上的具体位置。例如
/images/ibm-logo.png。

让我们回顾一下请求和响应的过程。以下是一个使用GET请求方法的请求消息示例。我们还可以使用其他HTTP方法。
在起始行中,我们有GET方法。这是一个HTTP方法。在这个例子中,它请求文件 index.html。

请求头通过HTTP请求传递附加信息。在GET方法中,请求头是空的。有些请求包含一个请求体,我们稍后会看到一个请求体的例子。
下面的表格代表了响应。响应起始行包含版本号,后跟一个描述性短语。在这个例子中,是 HTTP/1.0,状态码 200(表示成功),以及描述短语 OK。我们稍后会详细介绍状态码。响应头包含额外信息。最后,响应体包含请求的文件,在这个例子中是一个HTML文档。



现在,让我们看看其他状态码。
状态码的前缀表示其类别。例如,100系列是信息性响应,200系列是成功响应,400系列表示客户端错误,500系列表示服务器错误。
以下是几个状态码示例:
- 100:一切正常,继续。
- 200:请求成功。
- 401:请求未授权。
- 501:服务器不支持请求的功能。



当发起一个HTTP请求时,会发送一个HTTP方法,它告诉服务器要执行什么操作。
以下是几种常见的HTTP方法:
- GET:从服务器检索数据。
- POST:向服务器发送数据。
- PUT:更新服务器上的资源。
- DELETE:删除服务器上的资源。

在下一个视频中,我们将使用Python来应用GET方法(从服务器检索数据)和POST方法(向服务器发送数据)。



本节课中我们一起学习了HTTP协议的核心组成部分。我们了解了URL的结构,分析了HTTP请求和响应的格式,认识了常见的HTTP方法(如GET和POST)以及状态码的分类和含义。这些知识是理解和使用REST API进行网络通信的基础。在下一节,我们将动手使用Python来实践这些HTTP请求。
074:HTTP请求(第2部分)📡

在本节课中,我们将学习如何使用Python的Requests库来处理HTTP协议。我们将重点介绍GET请求和POST请求,并通过实例演示如何发送请求、处理响应以及理解请求与响应中的关键组成部分。

概述
上一节我们介绍了HTTP协议的基本概念。本节中,我们将深入探讨如何使用Python的Requests库来执行HTTP请求。我们将学习如何发送GET和POST请求,并理解响应对象中的状态码、头部和正文等信息。


Python Requests库简介
Requests是Python中一个用于发送HTTP/1.1请求的流行库。它比Python内置的http.client和urllib等库更易于使用。
我们可以通过以下方式导入该库:
import requests
要发送一个GET请求到IBM官网,可以这样做:
r = requests.get('https://www.ibm.com/')


变量r是一个响应对象,它包含了请求的相关信息,例如请求的状态。

解析响应对象
我们可以使用status_code属性来查看请求的状态码,状态码200表示请求成功。
print(r.status_code) # 输出: 200
以下是响应对象中其他有用的属性和方法:
- 查看请求头部:使用
r.request.headers。 - 查看请求正文:对于GET请求,通常没有正文,所以
r.request.body会返回None。 - 查看响应头部:使用
r.headers,它会返回一个包含HTTP响应头部的Python字典。 - 获取特定头部信息:例如,使用
r.headers[‘Date’]获取请求发送的日期,使用r.headers[‘Content-Type’]获取响应数据的类型。 - 检查编码:使用
r.encoding。 - 查看响应正文:如果
Content-Type是text/html,可以使用r.text属性来获取HTML正文内容。
# 查看响应正文的前100个字符
print(r.text[:100])

发送带参数的GET请求
GET方法常用于从API检索数据,我们可以在URL中添加查询字符串来修改查询结果。在实验中,我们将使用httpbin.org这个HTTP请求和响应服务。

我们向服务器发送GET请求。基础URL加上路径/get,表示我们希望执行一个GET操作。
查询字符串是URL的一部分,用于向Web服务器发送额外信息。它以问号?开始,后跟一系列参数和值对。

以下是一个查询字符串的示例结构:
?name=Joseph&id=123
- 第一个参数名是
name,值是Joseph。 - 第二个参数名是
id,值是123。 - 每个参数名和值之间用等号
=连接。 - 多组参数之间用
&符号分隔。
让我们在Python中完成一个示例:
import requests
url = 'https://httpbin.org/get'
payload = {'name': 'Joseph', 'id': '123'}
r = requests.get(url, params=payload)
- 我们构建了基础URL,并在末尾附加了
/get。 - 我们使用字典
payload来定义查询参数,其中键是参数名,值是参数值。 - 然后,我们将这个字典传递给
get函数的params参数。


我们可以打印出最终的URL,看到参数已被正确添加:
print(r.url) # 输出类似: https://httpbin.org/get?name=Joseph&id=123
由于信息是通过URL发送的,请求正文r.request.body的值为None。我们可以查看状态码和响应内容。由于响应内容类型是JSON,我们可以使用.json()方法将其解析为Python字典。
print(r.status_code)
data = r.json()
print(data['args']) # 输出: {'name': 'Joseph', 'id': '123'}
发送POST请求

与GET请求类似,POST请求也用于向服务器发送数据。但关键区别在于,POST请求将数据放在请求正文中,而不是URL里。
为了发送POST请求,我们需要将URL的路径改为/post。这个端点期望接收数据。
我们使用相同的payload字典。要发送POST请求,我们使用post函数,并将payload字典传递给data参数。
import requests
url_post = 'https://httpbin.org/post'
payload = {'name': 'Joseph', 'id': '123'}
r_post = requests.post(url_post, data=payload)
比较GET与POST请求


通过比较GET和POST请求的响应对象,我们可以清楚地看到两者的区别:


-
URL对比:比较从响应对象中获取的URL属性。
- GET请求的URL包含查询字符串:
https://httpbin.org/get?name=Joseph&id=123 - POST请求的URL没有参数:
https://httpbin.org/post
- GET请求的URL包含查询字符串:
-
请求正文对比:
- GET请求的正文为
None。 - POST请求的正文包含我们发送的数据。
- GET请求的正文为
-
获取POST请求发送的数据:在POST请求的JSON响应中,我们可以查看
form键来获取我们发送的载荷数据。
data_post = r_post.json()
print(data_post['form']) # 输出: {'name': 'Joseph', 'id': '123'}




总结

本节课中,我们一起学习了如何使用Python的Requests库进行HTTP通信。我们详细介绍了如何发送GET和POST请求,如何添加查询参数,以及如何解析响应对象中的状态码、头部和正文。关键点在于,GET请求通过URL传递参数,而POST请求通过请求正文传递数据。掌握这些基础是进行更高级的API交互和网络编程的重要一步。
075:用于网页抓取的HTML 🕸️


在本节课中,我们将回顾超文本标记语言(HTML),这是进行网页抓取的基础。网页上存在大量有用数据,例如房地产价格和编程问题解决方案。万维网和维基百科是世界信息的宝库。如果你理解了HTML,就可以使用Python来提取这些信息。本节课,你将学习一个基础网页的HTML结构、HTML标签的构成、HTML树状结构,并理解HTML表格。
HTML基础结构
假设你有一个需求:从一个网页中找出国家篮球联盟球员的姓名和薪水。网页由HTML构成,它包含一系列被尖括号包围的蓝色元素(称为标签)所环绕的文本。这些标签告诉浏览器如何显示内容,而我们需要的数据就在这些文本中。
HTML文档的第一部分包含文档类型声明 <!DOCTYPE html>,它声明此文档是一个HTML文档。<html> 元素是HTML页面的根元素。<head> 元素包含关于HTML页面的元信息。接下来是 <body>,这是网页上实际显示的内容,通常也是我们感兴趣的数据所在。




我们看到带有 <h3> 标签的元素,这表示三级标题,会使文本变大加粗。这些标签内包含球员的姓名。请注意,数据被包裹在元素中,它以 <h3> 开始,以 </h3> 结束。此外,还有一个不同的标签 <p>,表示段落,其中包含球员的薪水。

HTML标签的构成
让我们更仔细地看看HTML标签的构成。以下是一个HTML锚标签的例子:
<a href="https://www.ibm.com">IBM</a>
它将显示“IBM”,当你点击它时,会跳转到 ibm.com。




- 标签名称:在这个例子中是
a。这个标签定义了一个超链接,用于从一个页面链接到另一个页面。将每个标签名称视为Python中的一个类,将每个单独的标签视为一个实例,会很有帮助。 - 开始标签:
<a href="https://www.ibm.com"> - 结束标签:
</a>,在标签名称前有一个斜杠。 - 内容:这些标签包含的内容,即网页上显示的部分。本例中是“IBM”。
- 属性:由属性名和属性值组成。本例中是
href="https://www.ibm.com",即目标网页的URL。
真实的网页更为复杂。根据你使用的浏览器,你可以选择HTML元素然后点击“检查”,这将使你能够查看HTML代码。网页中还有其他类型的内容,如CSS和JavaScript,本课程将不涉及。
HTML树状结构
每个HTML文档实际上都可以被称为一个文档树。让我们看一个简单的例子。标签可以包含字符串和其他标签,这些元素就是该标签的子元素。我们可以将其表示为一个家谱,每个嵌套的标签都是树中的一个层级。
例如,<html> 标签包含 <head> 和 <body> 标签。<head> 和 <body> 标签是 <html> 标签的后代。具体来说,它们是 <html> 标签的子元素。<html> 标签是它们的父元素。<head> 和 <body> 标签是兄弟元素,因为它们在同一层级。



<title> 标签是 <head> 标签的子元素,其父元素是 <head> 标签。<title> 标签是 <html> 标签的后代,但不是其子元素。标题和段落标签是 <body> 标签的子元素,并且由于它们都是 <body> 标签的子元素,它们彼此之间也是兄弟元素。<b>(加粗)标签是标题标签的子元素。标签的内容也是树的一部分,但画出来可能会很繁琐。
HTML表格
接下来,让我们回顾HTML表格。要定义一个HTML表格,我们使用 <table> 标签。
以下是定义一个简单表格的HTML结构:

<table>
<tr>
<th>表头1</th>
<th>表头2</th>
</tr>
<tr>
<td>行1, 单元格1</td>
<td>行1, 单元格2</td>
</tr>
<tr>
<td>行2, 单元格1</td>
<td>行2, 单元格2</td>
</tr>
</table>

<table>标签:定义表格。<tr>标签:定义表格中的每一行。<th>标签:通常用于第一行,定义表头单元格。<td>标签:定义表格中的标准数据单元格。
对于第一行第一个单元格,我们有 <th> 或 <td> 标签及其内容。对于第一行第二个单元格,以此类推。对于第二行,我们有新的 <tr> 标签,其内包含该行的 <td> 单元格。

总结

本节课中,我们一起学习了HTML的基础知识,这是进行网页抓取的关键第一步。我们了解了HTML文档的基本结构,包括 <html>、<head> 和 <body> 标签。我们深入探讨了HTML标签的构成,包括标签名、开始/结束标签、内容和属性。我们还学习了如何将HTML文档视为一个树状结构,理解元素之间的父子及兄弟关系。最后,我们回顾了用于组织数据的HTML表格结构。掌握了这些基础知识后,你现在已经具备了使用Python工具从网页中提取所需信息的理论基础。
076:网页抓取 🕸️


在本节课中,我们将要学习网页抓取。这是一种自动从网站提取信息的技术,可以极大地节省手动收集数据的时间和精力。
概述
想象一下,如果你需要分析数百个数据点来找出一个运动队的最佳球员。你会手动从不同网站复制粘贴信息到电子表格吗?这可能需要数小时,甚至因为任务过于繁重而放弃。网页抓取正是解决此类问题的工具。它是一个自动从网站提取信息的过程,通常只需几分钟而非数小时即可完成。
Beautiful Soup 对象的作用
要开始网页抓取,我们只需要一些Python代码以及两个名为 requests 和 beautifulsoup4 的模块的帮助。


假设你被要求从以下网页中找出国家篮球联盟球员的姓名和薪水。


首先,我们导入Beautiful Soup。我们可以将网页HTML作为字符串存储在变量 html 中。为了解析文档,我们将其传递给Beautiful Soup的构造函数。这样我们就得到了一个Beautiful Soup对象 soup,它以一种嵌套的数据结构来表示文档。
Beautiful Soup将HTML表示为一组树状对象,并提供了用于解析HTML的方法。我们将使用我们创建的 soup 对象来回顾这些对象。
标签对象对应于原始文档中的一个HTML标签。例如,title 标签。考虑 h3 标签。如果存在多个具有相同名称的标签,则选择第一个具有该标签的元素。在本例中,第一个 h3 标签的内容是“Lebron James”。我们看到这个名字被包裹在粗体属性 <b> 中。为了提取它,我们需要使用树状表示法。
导航解析树
让我们使用树状表示法。变量 tag_object 位于此处。
我们可以通过以下方式访问标签的子节点,或者说沿着分支向下导航:



tag_object.contents



你可以使用 parent 属性向上导航树。变量 tag_child 位于此处,我们可以访问它的父节点。这就是原始的 tag_object。

我们还可以找到标签对象的兄弟节点。我们只需使用 next_sibling 属性。我们可以找到 sibling1 的兄弟节点,同样使用 next_sibling 属性。
考虑 tag_child 对象。你可以像字典中的键值对一样访问其属性名称和值,如下所示:

tag_child[‘attribute_name’]

你可以将内容作为可导航字符串返回。这类似于支持Beautiful Soup功能的Python字符串。
find_all 方法
现在,让我们回顾一下 find_all 方法。这是一个过滤器。
你可以使用过滤器基于标签的名称、属性、字符串的文本或这些条件的组合进行筛选。



考虑一个披萨店的列表。像之前一样,创建一个Beautiful Soup对象,但这次将其命名为 table。

find_all 方法会遍历一个标签的所有后代,并检索所有匹配你过滤器的后代。将其应用到带有标签 tr 的 table 上。结果是一个类似列表的Python可迭代对象。
每个元素都是一个 tr 的标签对象。这对应于列表中的每一行,包括表头。
每个元素都是一个标签对象。因此,考虑第一行。例如,我们可以提取第一个表格单元格。
我们也可以遍历每个表格单元格。首先,我们通过变量 row 遍历列表 tr_rows。每个元素对应于表格中的一行。

我们可以应用 find_all 方法来查找所有的表格单元格。然后,我们可以为每一行遍历变量 cells。


在每次迭代中,变量 cell 对应于该特定行表格中的一个元素。我们继续遍历每个元素,并为每一行重复这个过程。
应用Beautiful Soup抓取网页
为了抓取一个网页,我们还需要 requests 库。
第一步是导入所需的模块。
使用 requests 库的 get 方法来下载网页。输入是URL。
使用 text 属性来获取文本,并将其赋值给变量 page。


然后,从变量 page 创建一个Beautiful Soup对象 soup。这将允许你解析HTML页面,现在你就可以开始抓取页面了。



请查看实验部分以获取更多实践内容。
总结

本节课中,我们一起学习了网页抓取。我们定义了网页抓取,了解了Beautiful Soup对象的作用,学习了如何应用 find_all 方法,并掌握了抓取网站的基本流程。通过结合 requests 库获取网页内容,再利用Beautiful Soup解析和提取所需数据,我们可以高效地自动化数据收集任务。
077:处理不同文件格式 📁


在本节课中,我们将学习如何使用Python处理多种常见的数据文件格式,包括CSV、JSON和XML。你将了解如何识别这些格式,以及使用哪些Python库来读取和提取其中的数据。
认识不同的文件格式 📄


上一节我们介绍了课程目标,本节中我们来看看数据收集过程中会遇到的各种文件格式。
当收集数据以完成数据驱动的分析时,你会遇到许多需要读取的不同文件格式。Python通过其预定义的库可以使这个过程变得更简单。但在探索Python之前,让我们先了解一些常见的文件格式。
观察文件名,你会注意到标题末尾有一个扩展名。这些扩展名让你知道文件的类型以及打开它需要什么工具。例如,如果你看到一个标题如 file_example.csv,你就会知道这是一个CSV文件。但这只是不同文件类型的一个例子,还有更多类型,例如JSON或XML。

使用Python库读取数据 🛠️
上一节我们认识了不同的文件格式,本节中我们来看看如何利用Python库来访问这些文件中的数据。
当遇到这些不同的文件格式并试图访问其数据时,我们需要利用Python库来简化这个过程。第一个需要熟悉的Python库叫做 pandas。通过在代码开头导入这个库,我们就能轻松读取不同类型的文件。

以下是导入pandas库的代码:
import pandas as pd
读取CSV文件 📊

既然我们已经导入了pandas库,让我们用它来读取第一个CSV文件。
在这个例子中,我们遇到了 file_example.csv 文件。第一步是将文件分配给一个变量,然后创建另一个变量,借助pandas库来读取文件。我们可以调用 read_csv 函数将数据输出到屏幕。
以下是读取CSV文件的代码:
file = ‘file_example.csv’
df = pd.read_csv(file)
print(df)

在这个例子中,数据没有表头,所以它将第一行数据添加为表头。由于我们不希望数据的第一行作为表头,让我们看看如何纠正这个问题。
整理CSV数据输出 🧹

现在我们已经学会了如何读取和输出CSV文件的数据,让我们把它整理得更有序一些。

从上一个例子中,我们能够打印出数据,但因为文件没有表头,它将第一行数据打印成了表头。我们通过添加一个数据框属性轻松解决了这个问题。我们使用变量 df 来调用文件,然后通过添加 columns 属性来指定列名。通过将这一行添加到我们的程序中,我们可以将数据输出整齐地组织到每列指定的表头下。
以下是添加自定义表头的代码:
df.columns = [‘Column1‘, ‘Column2‘, ‘Column3’] # 根据实际列数调整
print(df)
处理JSON文件格式 🔤



下一个我们将探索的文件格式是JSON文件格式。在这种类型的文件中,文本是以一种独立于语言的数据格式编写的,类似于Python字典。
读取此类文件的第一步是导入 json 库。导入json后,我们可以添加一行代码来打开文件,调用json的 load 属性开始读取文件,最后,我们可以打印文件。
以下是读取JSON文件的代码:
import json
with open(‘file_example.json‘, ‘r’) as f:
data = json.load(f)
print(data)
处理XML文件格式 🏷️
下一个文件格式类型是XML,即可扩展标记语言。虽然pandas库没有直接读取此类文件的属性,但让我们探索如何解析这种类型的文件。

读取此类文件的第一步是导入 xml.etree.ElementTree。导入这个库后,我们可以使用 ElementTree 属性来解析XML文件。然后我们添加列标题并将它们分配给数据框。
以下是解析XML文件的步骤代码:
import xml.etree.ElementTree as ET
tree = ET.parse(‘file_example.xml’)
root = tree.getroot()


然后创建一个循环来遍历文档以收集必要的数据,并将数据附加到数据框中。

以下是遍历XML并收集数据的示例代码:
data = []
for elem in root.findall(‘./record’): # 根据实际XML结构调整路径
row = {}
row[‘Column1’] = elem.find(‘field1’).text # 根据实际字段名调整
row[‘Column2’] = elem.find(‘field2’).text
data.append(row)
df = pd.DataFrame(data)
print(df)
总结 📝



本节课中我们一起学习了如何识别不同的文件类型,如何使用Python库来提取数据,以及在收集数据时如何使用数据框。掌握这些基础技能是进行后续数据分析和人工智能工程的重要一步。

浙公网安备 33010602011771号