解决方案:为什么想学好人工智能,就一定要建立起「系统」的概念?
优采云 发布时间: 2022-12-06 21:34解决方案:为什么想学好人工智能,就一定要建立起「系统」的概念?
作者|洪良杰主编|李佳作为人工智能工程师和数据科学家,需要建立起对“系统”最基本的认识。这些认知可以帮助你快速将书本上的理论知识与实际应用场景相结合。本文节选自洪良杰在极客时间App开设的付费专栏《AI技术内参》。
9′ 请在【极客时间】收听完整音频。
对于刚接触人工智能的工程师或数据科学家来说,“系统”往往是知识积累过程中容易被忽视的环节。尤其是非计算机专业的朋友,普遍还没有真正建立起“系统”的概念,以后在从事人工智能相关工作的时候很可能会遇到一些阻碍。
今天想和大家分享一下,作为人工智能工程师和数据科学家,需要建立的“系统”最基本的认识。这些认知可以帮助你快速将书本上的理论知识与实际应用场景相结合。
了解管道
在很多人工智能初学者的认知中,机器学习的过程就是这样的。有一个准备好的数据集,它已经具有各种特征和相应的标签或响应变量。此时,你需要做的就是使用这个数据集和一些现成的机器学习工具包来训练一些机器学习模型。模型训练好后,可以计算出一些已知的评价指标,比如accuracy、precision等。
这是一般教材和课程中介绍的标准机器学习流程,也是很多机器学习论文中的实验环境。不幸的是,这个静态过程并不适用于工业级数据产品。
要支持工业级人工智能产品,一个最基本的概念就是你需要建立一个管道,让你的环境动态化和闭环化。在英语语言背景下,“管道”一词形象地说明了这种环境的特点。我们把数据想象成“管道”中的水。这里的核心思想之一是数据从一个链接连续流到下一个链接。让我们将最终产品(管道的末端)与初始数据 采集 部分(管道的开头)结合起来,这是一个闭环。
要理解数据产品的核心,就要理解它是一个闭环。几乎所有关于数据产品的困难、问题和解决方案都可以从这个闭环中产生。从一个静态的机器学习过程到一个动态的类似流水线的闭环,这是一个质的变化,对整个环节的各个步骤都有新的要求。
我将以这里的数据集为例。在静态过程中,我们不需要过多关注这个数据集的来源。即便是采集数据集的代码或脚本也可能是一次性的,可能不具备再利用的价值。但是这种情况在管道的上下文中是不可能的。
在流水线中,采集数据的可靠性和可重复性是非常重要的一步,这对采集数据使用的代码有不同的要求。这部分代码需要反复检查,每一步都需要人工智能工程师和数据科学家进行检查。如果我们将这个例子扩展到数据管道的其他部分,就会清楚数据管道可以为构建机器学习管道带来什么根本性的变化。
管道的另一个重要特征是自动化。不能自动化的流水线就不能称为流水线。这里的自动化有两层意思。一种是指数据本身可以自动采集、排序、分析,然后自动流入机器学习部分,结果自动输出,可供在线系统使用;一个意思是每个环节本身不需要人工干预,或者只需要极少量的人工操作,就可以高可靠地运行。可见,流水线的自动化对各个环节的技术选型和实施都有很高的要求。
在现代互联网公司中,每个团队,甚至是专门的团队,一般都会开发机器学习流水线的工具平台,以保证流水线的灵活性、自动化和可靠性。对于初学者,尽量从流水线的角度去理解问题,从整个系统的角度去理解产品的开发过程,去理解机器学习的过程,这样才有可能设计出真正满足线上的技术方案需要。
了解线上线下的区别
了解了一个数据系统的闭环之后,自然而然会出现下一个问题,这也是一个核心系统级的问题。在这个流水线中,哪些部分“在线”,哪些部分“在线”“下线”呢?
这里我们先明确一下“在线”的概念。“上线”往往是指对于交互性强的互联网产品(包括电子商务、搜索引擎、社交媒体等),从用户来到某个页面,到我们为这个页面准备好所需的内容(比如作为推荐产品或搜索结果),中间的响应时间对应的是“在线”,这部分时间很短,往往只有几百毫秒。如何在这几百毫秒内进行复杂的计算,是很有讲究的。
“线下”的概念是相对于“线上”而言的。在正常情况下,无法在这数百毫秒内完成的计算是某种“离线”计算。
了解在线和离线之间的区别是初学者迈向工业级应用程序的又一重要步骤。哪些计算可以放到线上,哪些可以放到线下,成为各种机器学习架构的核心区别。
初学者需要注意的另一个问题是线上和线下是相对的概念。今天离线计算的部分可能明天在线计算。因此,慢慢学习掌握两者切换的方式,对于初学者进阶非常重要。
这里我举一个简单的线上线下切分的例子。假设我们要构建一个系统来检测垃圾邮件。对于这样一个系统,哪些部分在线,哪些部分离线?
乍一看,我们这里讨论的是一个比较简单的架构,但并不代表这个架构实现的难度也很小。在最简单的情况下,检测垃圾邮件需要一个二元分类器。如何训练这个分类器的参数是一个关键。
假设我们训练一个逻辑回归二元分类器。那么,逻辑回归的参数,即一组线性系数,应该在什么环境下获取呢?显然,训练一个逻辑回归肯定需要大量的训练数据。当有一定的训练数据量(垃圾邮件和非垃圾邮件几千以上)时,逻辑回归的参数不可能在几百毫秒内训练出来。按照这种思路,训练逻辑回归就得放到网上来计算了。一旦做出这个决定,就必须离线计算一系列模块。
此外,数据的采集也必须下线,以保证训练数据能够传递到后续的流水线模块。还有就是特征的生成,至少是训练数据特征的生成,自然是需要放到线下的。
训练逻辑回归本身,刚才我们也提到了,需要下线。以及下线的决定(从某种意义上说,时间长一点或者少一点都无所谓,总之不能满足线上几百毫秒的计算就需要下线) ,并且可以让训练逻辑回归自身。更复杂的二阶算法可以更好地收敛参数。
您可以看到,由于一个决定,整个流水线都会有一系列的决定。这些决定反过来会影响模型算法的选择,比如更复杂的算法,相对耗时。
那么在这个框架下,线上部分是什么呢?首先,在训练完一个模型之后,为了使用这个模型,我们必须把模型的参数存储在某个地方(可能是数据库,也可能是存储系统),在线系统可以立即得到这些参数。仅仅获取参数是不够的,还需要判断当前邮件。
这一步有一些问题。一种方案是在线部分获取模型参数,然后实时动态生成邮件的特征,然后实时计算一个分数,判断是否为垃圾邮件。整个过程的这三个步骤需要在数百毫秒内完成。
其实这里的第二步往往比较耗时,甚至有些特征无法在线计算。比如可能有一个特性需要查询邮件的来源是否可靠,这里可能需要操作数据库,这一步可能会非常耗时(几百毫秒的场景)。因此,动态生成特征,除非特征非常简单,否则可能无法完全在线完成。
我们可以对框架进行简单的修改。所有电子邮件首先发送到特征生成模块。这不是一个完全在线的环境。计算要求可能超过几百毫秒,但总共只有几秒,最多十几秒。生成所有特征后,邮件的判断也在这里完成,最后保存邮件是否为垃圾邮件的简单选项。在在线系统中,也就是当用户来到邮件系统界面时,我们只是直接从保存的结果中读取一个标签,速度非常快。
如上,我们通过检测垃圾邮件系统的例子分析了在线和离线的分割。现在让我们考虑一下。刚才描述的架构有什么问题吗?问题是线上的结果是预计算的结果,模型本身也是预计算的。因此,当大量突发数据(比如大量新的垃圾邮件)到来时,这种架构可能无法快速响应和更新模型。可见,如何理解线上线下,是一个需要慢慢琢磨的学习过程。
小结
今天给大家讲了两个数据科学家和人工智能工程师需要掌握的系统基础的核心概念。让我们一起回顾一下要点: 第一,现代数据流不是静态的数据集,而是动态的闭环管道。其次,了解哪些计算可以放在线上,哪些计算可以放在离线,这一点至关重要。
最后,我留给你一个思考问题。如果让你设计一个商品推荐系统,哪些部分应该放到线下,哪些部分应该放到线上?
欢迎您给我留言,与我共同探讨。
本文节选自洪良杰在极客时间App开设的付费专栏《AI技术内参》。欢迎扫描下方二维码在极客时间给我留言,与我共同探讨。
【AI技术内参专栏| 年度目录】
解决方案:服务器插件采集,这里的学问就大了!(上)
可以看出文章的标题在id为“”的标签中,所以文章的标题的CSS选择器只需要设置为#;同样,找到文章内容的相关代码:可以看到文章内容在标签中的id""中,所以文章内容CSS选择器只需要设置为#;如下图:采集器设置后更有用>,可以点击测试按钮,输入测试地址。如果设置正确,将显示文章标题和文章内容以便于查看。设置是否正确。喜欢的插件你知道多少 1.自动获取Rss插件 本插件可以在程序中自由更新,发布文章,也可以订阅订阅。2. 想做二次开发的插件可以用这个插件,可以起到搜索和翻译的作用。3. WP-o-Matic,WP Robot 这个插件是一个基于平台的内容获取工具。WP robot是一款英文建站工具。如果选择了一个主题,它会自动搜索相关帖子。主题支持雅虎的德语、法语、英语和*敏*感*词*语采集。5.这个插件很好。它主要通过阅读提要来更新您的博文,并且是全文形式。5.这个插件很好。它主要通过阅读提要来更新您的博文,并且是全文形式。5.这个插件很好。它主要通过阅读提要来更新您的博文,并且是全文形式。
优点是插件更新很及时!建议不要使用中文包,只使用英文版和原版插件!插件下载完成后,需要在后台控制面板中激活比较好用的采集器>,功能可以根据需要自定义。6. RSS (FRA) RSS (FRA) 这个插件可以通过RSS聚合,只有实际的文章 title, release date, etc. 7. 这个插件可以支持RSS, RDF, XML or HTML等多种格式允许 Rss 提要的 文章 出现在特定的 文章 中。8、本插件可以自动获取关键词、Yahoo等内容,进而达到自动发布博客内容的目的。您可以创建自己的博客场。使用此插件,您可以生成视频,图片或 文章。博客等 9、本插件可以随意自动发布你喜欢的RSS文章到你自己的博客,使其具有类似某些cms的自动采集功能。10. BDP RSS 这个插件可以聚合多个博客的内容。适用于拥有多个博客,或资源聚合共享的人群,以及群组,聚合多个博客的内容。如果您想制作自己的 网站 或博客,您可以选择,而且它又快又简单。BDP RSS 这个插件可以聚合多个博客的内容。适用于拥有多个博客,或资源聚合共享的人群,以及群组,聚合多个博客的内容。如果您想制作自己的 网站 或博客,您可以选择,而且它又快又简单。BDP RSS 这个插件可以聚合多个博客的内容。适用于拥有多个博客,或资源聚合共享的人群,以及群组,聚合多个博客的内容。如果您想制作自己的 网站 或博客,您可以选择,而且它又快又简单。