如果开始深入研究人工智能应用程序开发过程,首先要了解这些项目与常规应用程序开发项目有何不同。谈到人工智能,每个问题都需要一个独特的解决方案,即使企业已经开发了类似的项目。一方面,有多种预训练模型和经过验证的方法可用于构建人工智能。此外,人工智能是独一无二的,因为它基于不同的数据和业务案例。正因为如此,人工智能工程师通常通过深入研究业务案例和可用数据、探索现有方法和模型来开始这一旅程。
由于这些方面,人工智能项目的创建更接近于科学研究,而不是经典的软件开发。以下探讨一下其原因,以及了解这一现实如何帮助企业准备好为其项目执行这些流程和预算。
人工智能项目分类
人工智能项目可以分为四组:
- 直截了当的项目:典型的例子包括可以通过应用公共数据集和知名技术来实现的生产就绪模型。例如,ImageNet适用于旨在对图像进行分类的项目。
- 知名技术项目:在这些情况下,我们知道该项目所需的适当技术,但我们仍然需要努力收集和准备数据。
- 需要深入研究的项目:原则上,我们可以弄清楚模型是如何工作的,如何应用现有数据,或者应该采取哪些步骤来训练模型以完成特定任务。仅凭经验无法做出任何预测,因为我们不知道模型的行为方式。启动过程需要额外的测试和案例处理。
- 生产项目需要额外的努力:这组案例中的数据和模型在实践中都没有得到充分的尝试。
为什么人工智能项目如此不可预测?
人工智能项目开发环境可以被可视化为一个由技术和即用型解决方案组成的三层金字塔。
上层包含适合人工智能使用的现成产品——如第三方库或经过验证的公司解决方案。例如,谷歌用于检测支票欺诈、面部识别和物体检测的解决方案就是很好的例子。
第二个层次包括描述业务挑战的新领域。我们可能有合适的模型来解决挑战,但该技术需要稍作修改或调整才能在实施过程中证明其有效性。该模型应该专门针对其特定用例,这导致了人工智能使用中新利基市场的出现。
科学研究构成低层。科学研究还没有准备好生产,因为人们不知道这些模型会展示什么结果。这是人工智能系统的一个深层次,尽管可以朝这个方向努力。
人工智能应用程序开发与常规应用程序
使用人工智能进行应用程序开发与非人工智能应用程序没有根本区别,但包含概念证明(PoC)和演示。和用户界面(UI)/用户体验(UX)阶段在演示和人工智能组件准备就绪时开始。
应用程序开发公司在接到创建人工智能驱动的应用程序的任务时要做的第一件事就是询问客户的需求和数据:人工智能是产品的核心还是附加组件?这个问题的答案会影响解决方案的复杂程度。
客户可能不需要最准确和现代的解决方案。因此,重要的是要找出人工智能组件的缺乏是否阻碍了成熟的产品开发,以及在没有人工智能组件的情况下创建产品是否有任何意义。解决了这个问题后,我们就可以继续前进了。
一开始,可以将人工智能项目分为两个子类别:
- 从头开始构建的应用程序
- 人工智能组件集成到现有应用程序中
从头开始构建人工智能应用程序
因此,如果决定从头开始开发一个新的人工智能功能应用程序。正因为如此,没有任何基础设施来集成人工智能应用程序。这里来到了最重要的问题:人工智能功能开发是否可以像处理通常的应用程序功能一样处理,例如登录/注销或发送/接收消息和照片?
乍一看,人工智能只是用户可以与之交互的一项功能。例如,人工智能可用于检测一条消息是否应被视为垃圾邮件,识别照片中脸上的微笑,并在人脸和语音识别的帮助下实现基于人工智能的登录。然而,人工智能解决方案的开发仍然很年轻,而且还以研究为基础。这导致人们意识到应用程序的人工智能功能是整个项目中风险最大的部分,尤其是在业务目标需要提出创新且复杂的AI解决方案时。
例如,如果构建一个带有登录/注销屏幕、消息系统和视频通话的聊天应用程序。视频通话应支持类似Snapchat的过滤器。以下是风险表和应用程序不同功能复杂性的概述:
聊天应用功能
很明显,从风险最小化策略的角度来看,从具有最低复杂性和风险的任务开始开发过程是不合理的。人信可能会问,为什么类似Snapchat的过滤器风险最大?这里有一个简单的答案:要创建一个类似Snapchat的过滤器,必须涉及许多尖端技术,如增强现实(AR)和深度学习,将它们适当地混合在一起,并将它们放在计算资源低的手机上。为此,您必须解决许多非凡的工程任务。
将人工智能组件集成到现有应用程序中
将人工智能功能集成到现有项目与从头开始构建AI应用程序有一些不同。首先,我们必须使用人工智能增强的现有项目是在没有任何架构考虑AI功能的情况下开发的,这是一种常见的情况。考虑到人工智能功能是某些数据管道的一部分,我们得出结论,开发AI功能肯定需要至少对应用程序架构进行一些更改。从人工智能的角度来看,现有的应用可以分为以下几类:
(1) 基于数据库的项目:
- 文本处理
- 推荐系统
- 聊天机器人
- 时间序列预测
(2) 非基于数据库的项目:
- 图像/视频处理
- 语音/声音处理
人工智能应用程序开发的主要阶段
以下回顾一下典型的人工智能应用程序开发过程是如何分五个阶段发展的。
1.业务分析
在第一阶段,我们获得客户的输入或愿景,这些输入或愿景可以作为具有总体想法概述的文档。在这里,我们开始业务分析过程。为了准备输入,我们需要考虑业务问题。企业用业务问题解决应用程序开发公司,后者的工作是找到业务和人工智能能力的交点。
例如,在餐馆或杂货连锁店的情况下,企业主有兴趣通过分析采购和销售来减少食物浪费并实现平衡。对于人工智能工程师来说,这项任务变成了时间序列预测或关系分析任务,其解决方案使人们能够预测特定数字。
2.机器学习问题确定
下一阶段是确定应该讨论和解决的机器学习(ML)问题。这必须考虑到人工智能子领域的技术能力,例如计算机视觉、自然语言处理、语音识别、预测、生成人工智能等。
3.数据收集
数据是机器学习的燃料,是人工智能应用程序开发的关键步骤。有两种主要的数据类型——特定的和一般的。一般数据可以从开源数据网站获得,所以我们要做的就是缩小目标受众的范围,把重点放在特定的地区、性别、年龄或其他关键因素上。大量通用数据可以简化流程。
因此,如果客户有一个基于健身追踪器活动的应用程序,我们可以应用数据和迁移学习来尽快开始实施。这同样适用于可以从大量集合开始的图像分类。
(1)为新项目开发AIPoC
全新人工智能项目的概念证明(PoC)阶段应该以AI为中心。这是什么意思?为了满足风险最小化策略,我们应该从项目中风险最大的部分开始,即AI功能,如果可能的话,不要触及项目的任何其他功能。概念证明(PoC)阶段可以重复多次以达到合适的结果。在取得令人满意的结果后,可以自由地进入MVP/工业化阶段,开发应用程序的所有剩余功能。
(2)为现有项目开发AIPoC
为了使最终用户可以使用人工智能功能,首先必须开发该功能,然后将其与现有应用程序集成。即,具有应用程序代码库、架构和基础架构。
人工智能功能最令人着迷的地方在于,它们可以在不触及主要应用程序的情况下进行研究、开发和测试。这产生了一个想法,即人们可以启动人工智能隔离的概念证明(PoC)而不会对主要应用程序造成风险。这实际上是风险最小化策略的本质。
以下是要遵循的三个步骤:
(1)通过以下方式从现有应用程序中收集数据:
- 制作数据库转储
- 收集图像/视频/音频样本
- 标记收集的数据或从开源库中获取相关数据集
(2)使用之前收集的数据构建一个隔离的AI环境:
- 培训
- 测试
- 分析
(3)部署训练成功的人工智能组件:
- 为当前应用程序架构做准备的变化
- 针对新AI功能的代码库适配
根据项目类型,代码库的调整可能会导致:
- 更改数据库架构以简化和加速人工智能模块对其的访问
- 视频/音频处理微服务拓扑的变化
- 更改移动应用程序最低系统要求
4.PoC阶段估计
企业主经常向软件供应商询问概念证明(PoC)阶段可能需要的预算、时间表和工作量。正如上面所展示的,与常规开发过程相比,人工智能项目的特点是高度不可预测。这是由于任务类型、数据集、方法和技术的高度可变性。所有这些条件都解释了为什么对假设项目进行估算是一项相当困难的任务。尽管如此,我们还是根据项目的复杂程度展示了上述人工智能项目的一种可能分类。
5.新的迭代或生产
第一个概念证明(PoC)之后的下一步可以是概念证明(PoC)的新迭代,并进行进一步的改进或部署。创建新的概念证明(PoC)意味着数据添加、案例处理、错误分析等。迭代次数是有条件的,取决于项目。
任何人工智能项目都与风险直接相关。可能面临来自数据适用性的风险,以及算法或实施风险。为了降低风险,明智的做法是仅在人工智能组件的准确性满足业务目标和期望时才开始产品开发。