AI目前主要的应用领域有3个方向,包括:计算机视觉、语音交互、自然语言处理。
计算机视觉是一门研究如何使机器“看”的科学,就是指用摄影机和计算机代替人眼对目标进行识别、跟踪和测量等机器视觉的应用,是使用计算机及相关设备对生物视觉的一种模拟,对采集的图片或视频进行处理从而获得相应场景的三维信息,让计算机具有对周围世界的空间物体进行传感、抽象、判断的能力。
计算机视觉在现实场景中应用价值主要体现在可以利用计算机对图像和视频的识别能力,替代部分人力工作,节省人力成本并提升工作效率。传统的计算机视觉基本遵循图像预处理、提取特征、建模、输出的流程,不过利用深度学习,很多问题可以直接采用端到端,从输入到输出一气呵成。
(1)研究内容
(2)应用场景
计算机视觉的应用场景非常广,例如:无人驾驶、无人安防、人脸识别、光学字符识别、物体追踪、车辆车牌识别、以图搜图、医学图像分析等。最近B站新上线的弹幕防挡脸功能,即在播放视频时弹幕经过人脸则自动隐藏,也是应用了CV,这个小功能对B站核心价值之一的弹幕进行了进一步优化,大大提升了用户体验。
(3)瓶颈
(4)提供相关方案的企业
语音交互也是非常热门的方向之一,其实语音交互整个流程里包含语音识别、自然语言处理和语音合成。自然语言处理很多时候是作为单独的一个领域来研究的,本文也将单独介绍自然语言处理,所以此处只介绍语音识别和语音合成。
语音交互的最佳应用场景便是眼睛不方便看,或者手不方便操作的时候。“不方便看”比较典型的场景便是智能车载,“不方便操作”比较典型的场景便是智能音箱,这也是目前比较火的两个细分方向。
一个完整的语音交互基本遵循下图的流程:
(1)语音识别(ASR)
1)研究内容
语音识别的输入是声音,属于计算机无法直接处理的模拟信号,所以需要将声音转化成计算机能处理的文字信息。传统的识别方式需要通过编码将其转变为数字信号,并提取其中的特征进行处理。
传统方式的声学模型一般采用隐马尔可夫模型(HMM),处理流程是语音输入——编码(特征提取)——解码——输出。
还有一种“端到端”的识别方式,一般采用深度神经网络(DNN),这种方式的声学模型的输入通常可以使用更原始的信号特征(减少了编码阶段的工作),输出也不再必须经过音素等底层元素,可以直接是字母或者汉字。
在计算资源与模型的训练数据充足的情况下,“端到端”方式往往能达到更好的效果。目前的语音识别技术主要是通过DNN实现的。语音识别的效果一般用“识别率”,即识别文字与标准文字相匹配的字数与标准文字总字数的比例来衡量。目前中文通用语音连续识别的识别率最高可以达到97%。
2)衍生研究内容
(2)语音合成(TTS)
1)研究内容
是将文字转化为语音(朗读出来)的过程,目前有两种实现方法,分别是:拼接法和参数法。
DeepMind早前发布了一个机器学习语音生成模型Wav.NET,直接生成原始音频波形,可以对任意声音建模,不依赖任何发音理论模型,能够在文本转语音和常规的音频生成上得到出色的结果。
2)瓶颈
个性化TTS数据需求量大,在用户预期比较高的时候难满足。需要AI产品经理选择用户预期不苛刻的场景,或者在设计时管理好用户预期。
(3)提供相关方案的企业
(1)研究内容
自然语言处理是一门让计算机理解、分析以及生成自然语言的学科,是理解和处理文字的过程,相当于人类的大脑。NLP是目前AI发展的核心瓶颈。
NLP大概的研究过程是:研制出可以表示语言能力的模型——提出各种方法来不断提高语言模型的能力——根据语言模型来设计各种应用系统——不断地完善语言模型。自然语言理解和自然语言生成都属于自然语言理解的概念范畴。
自然语言理解(NLU)模块,着重解决的问题是单句的语义理解,对用户的问题在句子级别进行分类,明确意图识别(Intent Classification);同时在词级别找出用户问题中的关键实体,进行实体槽填充(Slot Filling)。
一个简单的例子,用户问“我想吃冰激凌”,NLU模块就可以识别出用户的意图是“寻找甜品店或超市”,而关键实体是“冰激淋”。有了意图和关键实体,就方便了后面对话管理模块进行后端数据库的查询或是有缺失信息而来继续多轮对话补全其它缺失的实体槽。
自然语言生成(NLG)模块是机器与用户交互的最后一公里路,目前自然语言生成大部分使用的方法仍然是基于规则的模板填充,有点像实体槽提取的反向操作,将最终查询的结果嵌入到模板中生成回复。手动生成模板之余,也有用深度学习的生成模型通过数据自主学习生成带有实体槽的模板。
(2)应用场景
自然语言处理作为CUI(Conversational User Interface,对话式交互)中非常重要的一部分,只要是CUI的应用场景都需要自然语言处理发挥作用。除此之外,机器翻译、文本分类也都是自然语言处理的重要应用领域。
(3)瓶颈
1)词语实体边界界定
自然语言是多轮的,一个句子不能孤立的看,要么有上下文,要么有前后轮对话,而正确划分、界定不同词语实体是正确理解语言的基础。目前的深度学习技术,在建模多轮和上下文的时候,难度远远超过了如语音识别、图像识别的一输入一输出的问题。所以语音识别或图像识别做的好的企业,不一定能做好自然语言处理。
2)词义消歧
词义消歧包括多义词消歧和指代消歧。多义词是自然语言中非常普遍的现象,指代消歧是指正确理解代词所代表的⼈或事物。例如:在复杂交谈环境中,“他”到底指代谁。词义消歧还需要对文本上下文、交谈环境和背景信息等有正确的理解,目前还无法对此进行清晰的建模。
3)个性化识别
自然语言处理要面对个性化问题,自然语言常常会出现模凌两可的句子,而且同样一句话,不同的人使用时可能会有不同的说法和不同的表达。这种个性化、多样化的问题非常难以解决。
(4)提供相关方案的企业
业内通常将人工智能分类为机器学习、计算机视觉、语音交互和自然语言处理四大领域,机器学习可以理解为是其他三大领域的底层基础,大致可以分为监督学习、非监督学习、强化学习、迁移学习。
本文在此基本不涉及公式,尽量以平直易懂的语言讲述这几种机器学习方法及相关算法。个人认为在实战过程中根据工作需要再深入学习这些算法,会更有针对性而且效率会更高,事半功倍。
概念:投喂给机器训练数据,机器从这些数据中找出一个能够良好拟合已有数据的函数,新数据来了后,就可以通过这个函数预测对应结果。
适合解决的问题:有规律可以学习、编程很难做到、有能够学习到规律的数据。
工作方式:
分类:按学习方式可以分为监督学习(包括半监督学习)、无监督学习、强化学习、迁移学习。
概念:机器学习的一种,通过学习许多有标签的样本,得到特征值和标记值之间的对应规律,然后对新的数据做出预测。
分类:根据输入数据x预测出输出数据y,如果y是整数的类别编号,则称为分类问题,算法包括:决策树、随机森林、贝叶斯、KNN、SVM、逻辑回归。如果y是实数值,则为回归问题,算法包括决策树、随机森林、KNN、SVM、线性回归。
主流算法:
1)决策树算法
基本原理:决策树是一个树结构,每个非叶节点表示一个特征属性,每个分支代表这个特征属性在某值域上的输出,每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达某个叶节点,该叶节点存放的类别即为决策结果。
决策树是一种判别模型,既支持分类问题,也支持回归问题,是一种非线性模型(分段线性函数不是线性的),它天然的支持多分类问题。决策树的构建由机器训练得到,而不是人工制定。
决策树的关键步骤是分裂属性,即在某个节点处按照某一特征属性的不同划分构造不同的分支,尽量让一个分裂子集中待分类项属于同一类别。而根据判断方法的不同所以产生了ID3算法,C4.5算法以及CART算法。
下图以银行判断是否给客户贷款为例大致说明决策树的原理:
主要用途:基于规则的信用评估、赛马结果预测。
优劣势:擅长对人、地点、事物的一系列不同特征、品质、特性进行评估,非常容易解释,但容易趋于过拟合。
2)随机森林
基本原理:由决策树与集成学习算法相结合生成,由多棵决策树组成。用多棵决策树联合预测可以提高模型的精度,这些决策树用对训练样本集随机抽样构造出的样本集训练得到。由于训练样本集由随机抽样构造,因此称为随机森林。
随机森林不仅对训练样本进行抽样,还对特征向量的分量随机抽样,在训练决策树时,每次分裂时只使用一部分抽样的特征分量作为候选特征进行分裂。随机森林是一种判别模型,既支持分类问题,也支持回归问题,并且支持多分类问题,这是一种非线性模型。
主要用途:用户流失分析、风险评估。
优劣势:随机森林对大规模数据集和存在大量且有时不相关特征的项来说很有用,且有很好的解释性。它比使用单个模型预测出来的结果要精确的多,但同时也需要大量的维护工作。
3)朴素贝叶斯
基本原理:是在已知样本的特征向量为x的条件下反推样本所属的类别y,即对于给出的待分类项,求解在此待分类项出现的条件下各个类别出现的概率,哪个概率最大,就认为此待分类项属于哪个类别。
简单的举个例子:我们看到一个人高鼻深目金发碧眼,便可以推断他属于白种人,因为在这种外貌特征下他是白种人的概率最高。贝叶斯可以处理多分类问题,是一种非线性模型。
主要用途:文本处理里的垃圾邮件过滤、情感分析、消费者分类、拼写纠正、文字广告过滤、识别恶性评论等领域。
优劣势:对于在小数据集上有显著特征的相关对象,朴素贝叶斯方法可对其进行快速分类,且很统一被解释。所需估计的参数不大,对缺失数据不太敏感,而且无需复杂的迭代求解框架,适用于规模巨大的数据集。但是对输入数据的形式比较敏感、计算先验概率时分类决策可能存在错误。如果输入变量是相关的,则会出现问题。
4)k近邻(KNN)
基本原理:把标注好类别的训练样本映射到选取的特征数维度的坐标系里,然后再把测试样本映射到这个坐标系里,选取距离该测试样本最近的k个训练样本,其中哪个训练样本类别占比最大,就可以认为该类别就是这个测试样本的类别。
kNN算法是一种判别模型,即支持分类问题,也支持回归问题,是一种非线性模型。它天然的支持多分类问题。kNN算法没有训练过程,是一种基于实例的算法。
主要用途:适用 kNN可以处理数值型(从无限的数值集合中取值,如:0.100,42.001等)和标称型(只在有限目标集中取值,如:真与假)数据。一种特征对应一个维度,一种特征下的数据可以数值型的也可以是标称型的。
优劣势:这种算法思想简单,理论成熟,准确度高。但是会占用大量内存,因为需要存储所有的训练样本点,而且每个新测试样本需要通过kNN算法分类,都要计算这个测试样本与所有训练样本点的距离。
5)线性回归
基本原理:主要用于拟合数据趋势。简而言之,就是尽量用一条线或平面或超平面来拟合已有的一组数据。确定自变量和因变量间的相互依赖的定量关系。简单的线性回归一般使用“最小二乘法”来求解,最小二乘的思想就是使得求解的这条线或平面或超平面使所有误差的平方和最小。
主要用途:适用于数值型和标称型数据。
优劣势:结果易于理解,计算不复杂,但是只能用于拟合线性数据,非线性数据拟合效果很差。
6)逻辑回归
基本原理:逻辑回归只是对线性回归的计算结果加了Sigmoid函数进行处理,将数值结果转化为了0到1之间的概率,根据这个概率可以做预测。logistic回归是一种判别模型,它是一种线性模型,用于二分类问题。
主要用途:路面交通流量分析、邮件过滤,
优劣势:实现简单,分类时计算量非常小,速度很快,存储资源低,但是容易欠拟合。
7)支持向量机(SVM)
基本原理:支持向量机的目标是寻找一个分类超平面,它不仅能正确的分类每一个样本,并且要使得每一类样本中距离超平面最近的样本到超平面的距离尽可能远。SVM是一种判别模型,它既可以用于分类问题,也可以用于回归问题。标准的SVM只能支持二分类问题,使用多个分类器的组合,可以解决多分类问题。
主要用途:新闻分类、手写识别。
优劣势:擅长在变量x和其他变量之间进行二元分类操作,无论其关系是否为线性的。可以捕获数据之间更复杂的关系,而无需人为地进行困难的数据转换。但同时它的训练时间长得多,因为计算量更大,而且可解释性也比较差。
概念:机器学习的一种,训练样本中所有样本数据都不含标记值的学习方式,目的是将样本集划分成多个类,保证同一类的样本之间尽量相似,不同类的样本之间尽量不同。没有训练过程,直接对样本进行划分。
分类:聚类和降维。
主流算法:
1)k均值(k-means)
基本原理:将观测值分为 k 个聚类,随机初始化每个类的类中心,然后计算样本与每个类的中心的距离,将其分配到最近的那个类,然后根据这种分配方案重新计算每个类的中心。这也是一种分阶段优化的策略。
2)主成分分析(PCA)
基本原理:PCA是一种数据降维和去除相关性的方法,它通过线性变换将向量投影到低维空间,对向量进行投影就是让向量左乘一个矩阵得到结果向量。降维要确保的是在低维空间中的投影能很好的近似表达原始向量,即重构误差最小化。PCA是一种无监督的学习算法,它是线性模型,不能直接用于分类和回归问题。
训练样本中只有部分样本数据包含标记值的学习方式,当没有足够人力标记所有的样本数据,并且稍稍降低对模型预测精度的要求时,便可以使用半监督学习。相比无监督学习会有较高的精度,相比有监督学习可以大幅降低人工标记成本。
例如:在拥有上百万篇文章资讯类的网站中进行文章分类标记,便可以采用半监督学习,只需要对训练样本进行少量的人工标注处理,便可以得到较高精度的分类结果。
强化学习是一种特殊的机器学习,根据输入环境参数确定要执行的动作,通过与环境交互来优化目标函数。在训练时,对于正确的动作做出奖励,对错误的动作做出惩罚,训练完成之后就用得到的模型进行预测。简要来说,强化学习算法是一种根据当前的状态确定要执行的动作的学习方式。
迁移学习简要来说,就是把已经学到训练好的模型参数迁移到新的模型来帮助并加快新模型训练数据集,这种学习方式可以大幅缩短新模型的学习时间。
深度学习是机器学习的子集,这个概念来源于对人工神经网络的研究。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。
深度机器学习方法也有监督学习与无监督学习之分,不同的学习框架下建立的学习模型很是不同。例如:卷积神经网络(Convolutional neural networks,简称CNNs)就是一种深度的监督学习下的机器学习模型,而深度置信网(Deep Belief Nets,简称DBNs)就是一种无监督学习下的机器学习模型。
深度学习相较其他机器学习最厉害的一点:可以对数据特征进行预处理(省去数据人工标注的麻烦,同时可以对更多维和复杂的特征进行向量提取和空间向量的转换,方便后续处理),这也是它为什么很多层的原因,因为其中多出来的层数都是要用来进行数据特征提取预处理的。端到端的训练,是深度学习的核心技术。目前深度学习框架有tensorflow、keras、caffe、theano、torch等。
1)卷积神经网络(CNN)
基本原理:CNN是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。
卷积神经网络由输入层、卷积层、激活函数、池化层、全连接层组成。卷积层的作用是指对图片的矩阵进行卷积运算,得到一些数值,作为图片的某些特征。因为采用了卷积来处理图像,所以需要使用激活函数来加入非线性因素,来增加表达力。
池化层的作用是对上层的数据进行采样和压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。全连接层连接所有的特征,将输出值分类。
前面卷积层和池化层进行处理后,得到了很多的特征,全连接层使用这些特征进行分类。比如:识别数字,那就是对0~9的十个类别进行分类。卷积神经网络是一个判别模型,它既可以用于分类问题,也可以用于回归问题,并且支持多分类问题。
主要用途:图像处理,计算机视觉和图像分类的主要算法。
2)递归神经网络(RNN)
基本原理:又叫循环神经网络,在任意神经网络中,每个神经元都通过 1 个或多个隐藏层来将很多输入转换成单个输出。递归神经网络会将值进一步逐层传递,让逐层学习成为可能。换句话说,RNN 存在某种形式的记忆,允许先前的输出去影响后面的输入。当输入数据具有依赖性且是序列模式时,RNN 对之前发生在数据序列中的事是有一定记忆的,这有助于系统获取上下文。
基于RNN还衍生出了LSTM(Long-Short-Term-Memerory)和GRU(Gated Recurrent Unit)等一系列算法,这些算法拥有记住过去的能力,所以可以用来处理一些有时间序列属性的数据,在处理语言、文字等方面有独到的优势。
LSTM和GRU的优点是具备与其它递归神经网络一样的优点,但因为它们有更好的记忆能力,所以更常被使用。
递归神经网络是一个判别模型,既支持分类问题,也支持回归问题,并且支持多分类问题。
主要用途:语言建模、文本生成、机器翻译、语音识别、生成图像描述。