first commit

This commit is contained in:
张乾
2024-10-15 23:13:09 +08:00
parent bbc9aed40c
commit 201a5889b1
142 changed files with 21536 additions and 2 deletions

View File

@@ -0,0 +1,63 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
086 Twitter的广告点击率预估模型
在上一篇文章的分享里我们了解了LinkedIn这家公司是怎么来做最基本的广告预估的。LinkedIn的广告预估模型分为三部分这里面的核心思想是直接对“冷启动”和“热启动”进行建模外加和EE策略Exploit & Explore结合在一起从而提升了效果。
今天我们就结合论文《Twitter时间轴上的广告点击率预估》Click-through Prediction for Advertising in Twitter Timeline[1]来看看Twitter的广告预估到底是怎么做的。
Twitter的广告预估
我们前面提到过最基本的广告形态分类,可以分为“搜索广告”和“展示广告”。当计算广告在互联网上出现以后,这两种广告形态就迅速被很多网站和服务商所采纳。
在最近的10年里随着社交媒体的发展希望在社交媒体的用户信息流里投放广告的需求逐渐增强。我们之前谈到的Facebook的案例其实也是往用户的信息流中插入广告。很多类似的社交媒体都争先恐后地开始进行相似的项目这一类广告经常被称为社交广告。
社交广告的特点是,需要根据用户的社交圈子以及这些社交圈所产生的内容,而动态产生广告的内容。广告商和社交媒体平台都相信,不管是在投放的精准度上,还是在相关性上,社交广告都有极大的可能要强过搜索广告和展示广告。毕竟,在社交媒体上,用户有相当多的信息,例如年龄、性别,甚至在哪里工作、在哪里上学等,这些信息都有助于广告商的精准投放。而用户自己在社交媒体上追踪的各种信息,又可以让广告商清晰地知道用户的喜好。
Twitter的工程师们在这篇论文里介绍的也是在信息流里投放的社交广告。只不过Twitter的工程师们认为我们之前分享的Facebook的解决方案并没有真正考虑往信息流里插入广告的难点也就是广告的排序依然把广告的排序问题当做分类问题也就是用对数几率回归Logistic Regression来解决。
另外Twitter的工程师们认为社交广告比类似Google的搜索广告更具挑战性。因为在社交信息流里用户所看到的信息都是随时变化的比如用户在Twitter中可能随时有新的信息进入到信息流中因此信息流的上下文会随时发生变化。那么如果要投放和上下文相关的广告这种变化无疑会带来前所未有的挑战。
利用排序学习来对广告排序
既然Twitter的工程师们认为信息流广告的建模最重要的就是借鉴排序学习的办法。那么我们就来看一看他们是怎么利用排序学习来为信息流社交广告建模的。
首先排序学习中最基本的就是“单点法”Pointwise排序学习。回顾一下单点法其实就是把排序学习的任务转化为分类问题。其实典型的就是直接利用“支持向量机”SVM或者对数几率回归模型。
第二种比较常用的排序学习的方法就是“配对法”Pairwise排序学习。通俗地讲配对法排序学习的核心就是学习哪些广告需要排到哪些广告之前。这种二元关系是根据一组一组的配对来体现的。学习的算法主要是看能否正确学习这些配对的关系从而实现整个排序正确的目的。对于配对法排序我们依然可以使用对数几率回归。只是这个时候我们针对的正负示例变成了某个广告比某个广告排名靠前或者靠后。
值得一提的是,通过配对法学习排序学习,对于一般的搜索结果来说,得到最后的排序结果以后就可以了。而对于广告来说,我们还需要对点击率进行准确的预测。这个我们之前提到过。于是在这篇文章中专门提到了如何从配对结果到点击率的预测。
具体来说,原理其实很简单,根据配对法学习排序完成以后的广告之间顺序是绝对的,但是绝对的数值可能是不太精确的。这里进行校准的目的是根据配对法产生的预测值,再去尽可能准确地转换为实际的点击率的数值。一般来说,这里就可以再使用一次对数几率回归。也就是说,这个模型的唯一特性就是配对法产生的预测数值,然后模型的目的是去估计或者说是预测最后的实际数值。这种使用一个回归模型来进行校准的方法,也用在比如要将支持向量机的结果转换成概率结果这一应用上。
虽然从原理上讲,先有一个配对模型进行排序,然后再有一个校准模型对模型的绝对估计值进行重新校正,这是很自然的。但是在实际的工业级应用中,这意味着需要训练两个模型,那无疑就变成了比较繁复的步骤。
所以,在这篇文章里,作者们想到了一种结合的办法,那就是结合单点法和配对法。具体来说,就是直接把两者的目标函数串联在一起。这样做的好处是,可以直接用现在已经有的训练方法,而且同时解决了排序和更加准确预测点击率的问题。我们回顾一下,单点法的特性是尽可能准确地预测每一个广告的点击率,也就是刚才提到的校准的这一个步骤所需要干的事情。这种直接串联的好处是,只需要学习一个模型就可以做到既考虑了排序,又考虑了预测的绝对精准度的问题。
在机器学习应用中,串联多个目标函数是经常使用的一种技术。其目的和作用也就和这个串联的想法一样,就是希望针对多个不同的目标进行优化。一般来说,这里面的核心是,多个串联的目标函数需要共享模型参数才能形成有关联的总的大的目标函数;如果没有共享参数,那就仅仅是一种形式上的串联。
模型的实验
在这篇文章里作者们也是用了Facebook提出的“归一化的交叉熵”简称NE的概念以及业界比较常用的AUC来针对模型进行线下评价。
在线下实验中配对法以及单点法和配对法结合的混合方法都在AUC上要超过单点法本身。这非常容易理解。只是配对法针对单点法在NE上的表现要差很多。这和我们刚才所说的没有对点击率进行估计有很大关系。这一点也在实验中得到了证实。
在在线实验中单点法相对于以前的自然排序点击率好了将近14%而混合法则好了26%左右。可以说效果非常明显。
总结
今天我为你介绍了Twitter广告点击率预估的核心算法。一起来回顾下要点第一我们讲了Twitter认为社交广告的难点是要解决广告的排序问题第二我们聊了如何利用排序学习来为点击率预估进行效果提升。
最后给你留一个思考题为什么Twitter不尝试使用树模型来对点击率进行提升呢
参考文献
Cheng Li, Yue Lu, Qiaozhu Mei, Dong Wang, and Sandeep Pandey. Click-through Prediction for Advertising in Twitter Timeline. Proceedings of the 21th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD 15). ACM, New York, NY, USA, 1959-1968, 2015.

View File

@@ -0,0 +1,69 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
087 阿里巴巴的广告点击率预估模型
今天,我们继续来进行点击率预估的案例分析,结合三篇核心论文,来看一看阿里巴巴的广告预估又有哪些值得我们学习的地方。
多段线性模型
我们之前介绍了多个公司关于点击率或者转化率预估的案例。从这些案例中,你可能已经发现有两个非常重要的特征需要机器学习模型来处理。
第一,就是数据中呈现的非线性化的关系。也就是说,我们的模型必须在某一个地方考虑到特性之间的非线性表征,以及对于目标标签的非线性关系。
第二,就是数据的不均衡以及数据的稀疏性。有很多广告商是新广告商,很多广告是新广告。在这样的情况下,我们就必须要处理“冷启动”和“热启动”这两种局面。
在《从广告点击率预估的大规模数据中学习多段线性模型》Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction[1]这篇文章中作者们提出了一种多段线性模型来解决我们刚刚说的这两个问题这个模型简称为LS-PLM Large Scale Piecewise Linear Model )。
LS-PLM的核心思路其实非常直观。既然数据在整个空间里可能呈现非线性的关系那么我们是否能够把整个空间分割成较小的区域使得每个区域内依然可以使用线性模型来逼近这个区域内的数据点呢其实在统计学习中这种模型常常被叫作“混合模型”。在很多机器学习教科书中都会讲授的一种混合模型是“高斯混合模型”Gaussian Mixture Model
LS-PLM在这篇论文的实际应用中基本上可以被理解成为一种混合线性模型。这个模型的一个子模型叫作“分割函数”也就是模型需要学习每一个数据点到底是依赖于哪一个线性模型来进行预测的。当然这个分割是一种概率的分割。实际上每一个数据点都依赖所有的线性模型来进行预测只不过对每个模型的依赖程度不一样。对于每一个不同的线性模型来说最大的不同就是每一个模型有自己的系数。也就是说之前只有一个全局模型并且只有一组系数相比之下这里有多组系数来决定模型的预测效果。很明显对于LS-PLM来说每一个局部都是线性的但是在整体上依然是一个非线性的模型。
LS-PLM还借助了两种正则化机制。一种叫作L1正则这种正则化主要是希望模型保留尽可能少的特性从而达到对于模型特性的选择。另外模型还采用了一种L2,1正则的方法这种方法的目的也是特性选择但是希望能够把一组特性全部选择或者全部置零。
在实际的实验中作者们尝试了不同数目的数据分割从2个到36个不等。最终他们发现当数据分割为12个的时候模型的效果达到最优而之后模型效果并没有明显提升。最终推出模型的AUC比直接使用一个对数概率回归的全局模型效果要好1.4%。
广告点击率预估和图像处理的结合
我们在电商上购物,对于商品的图像会不会影响我们的点击或者购买,应该有一个直观的感受。那么在广告的点击率预估上,商品的图像特征对于模型性能上的提高到底有没有帮助呢?我们再来看一篇论文[2],在这篇文章中,阿里巴巴的工程师就尝试对这个问题进行回答。
这篇文章结合了近期好几个利用深度学习来进行图像处理和广告点击率预估的工作。首先就是所有的特性都利用一个“嵌入层”Embedding Layer把原始的特性转换成为数值特性。这种思路我们在之前介绍文本处理特别是Word2Vec的时候曾经进行了详细的讲解。而在这里不管是文本信息还是图像信息都根据自己的特点转换成为了数值特性。
这里我们要解决的一个核心问题就是用户和广告之间的匹配问题这篇论文的模型是这么处理的。首先对所有广告的ID及其图像进行单独的嵌入。然后对用户过去的喜好特别是对图像的喜好进行了另外的嵌入然后这些嵌入向量形成用户的某种“画像”。用户的画像和广告信息的嵌入被直接串联起来形成最终的特征向量。在此之上利用一个多层的神经网络来学习最后的点击率的可能性。
在深度学习建模中,这种把多种来源不同的信息通过简单的拼接,然后利用多层神经网络来进行学习的方法非常普遍和实用。
在这篇论文的介绍中除了在模型上对图像进行处理以外还有一个创新就是提出了一个叫“高级模型服务器”Advanced Model Server简称AMS的架构理念。AMS是针对深度学习模型的大计算量而专门打造的计算体系。总体来说AMS的目的是把深度学习模型中的很多基础步骤进行拆分然后把这些步骤部署到不同的服务器上从而能够把复杂的模型拆分成细小的可以互相交流的步骤。
从最终的实验结果上来看基于深度学习的模型要比对数几率回归的模型好2~3%。整体上来看,利用了图像的模型要比没有利用图像的模型都要好,哪怕是线性模型也是一样的效果。但是,这个好的程度非常之小,基本上可以忽略不计。看来如何好好利用图像的信息,依然是一个比较大的挑战。
深度兴趣网络
我们刚才介绍的这种把其他信息和图像信息进行结合的方法,最近在一篇文章[3]中有一个总结。在这篇论文中作者们提出了一种叫“深度兴趣网络”或者简称DIN的架构。
DIN依靠一种基本的模型架构那就是先把所有的特性变换成嵌入向量然后针对不同的特性进行划组一些特性得以直接进入下一轮另一些特性经过类似图像中的池化Pooling操作抽取到更加高级的特性。之后所有的特性都被简单串联起来然后再经过多层的深度神经网络的操作。
DIN在这个架构的基础上提出了一种新的“激活函数”Activation Function叫DICE目的是可以在不同的用户数据中灵活选择究竟更依赖于哪一部分数据。可以说在某种意义上这个架构非常类似深度学习中比较火热的Attention架构其目的也是要看究竟那部分数据对于最终的预测更有效果。
从最后的实验中看不管是在内部数据还是外部公开的例如MovieLens或者Amazon的数据上基于DIN的模型都比线性模型和其他的深度学习模型有显著的提高。
总结
今天我为你介绍了阿里巴巴广告点击率预估的核心算法。一起来回顾下要点:第一,我们讲了如何利用混合线性模型来引入非线性的因素从而提高预测效果。第二,我们聊了如何利用深度学习模型来对数据进行建模,谈到了图像在这里面起到的作用。
最后,给你留一个思考题,深度学习模型在点击率预估方面的最大优势是什么?又有什么劣势呢?
参考文献
Kun Gai, Xiaoqiang Zhu, Han Li, Kai Liu, Zhe Wang. Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction. CoRR abs/1704.05194 , 2017.
Tiezheng Ge, Liqin Zhao, Guorui Zhou, Keyu Chen, Shuying Liu, Huiming Yi, Zelin Hu, Bochao Liu, Peng Sun, Haoyu Liu, Pengtao Yi, Sui Huang, Zhiqiang Zhang, Xiaoqiang Zhu, Yu Zhang, Kun Gai. Image Matters: Jointly Train Advertising CTR Model with Image Representation of Ad and User Behavior. CoRR abs/1711.06505 , 2017.
Guorui Zhou, Chengru Song, Xiaoqiang Zhu, Xiao Ma, Yanghui Yan, Xingya Dai, Han Zhu, Junqi Jin, Han Li, Kun Gai. Deep Interest Network for Click-Through Rate Prediction. CoRR abs/1706.06978 , 2017.

View File

@@ -0,0 +1,72 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
088 什么是基于第二价位的广告竞拍?
在之前一段时间的分享里,我们重点讲解了广告系统中的回馈预测,也就是我们常说的点击率预测或是转化率预测的问题,和你一起分享了一些有代表性的公司对于点击率预测的技术方案。
在最早介绍计算广告系统的时候我们介绍了DSP也就是需求侧平台的基本功能。这个平台的一个很重要的作用就是决定到底投放哪个广告。我们介绍过的点击率预测可以提供对广告优劣的一种预测除此之外我们还需要一种机制来决定如何从众多的广告中进行选取这就是广告的竞价排名。
广告位竞价排名的出现有两个原因。第一发布商的广告位是有限的。不管是搜索广告还是展示广告绝大多数的发布商都以一定的比例在原生的内容例如新闻、社交媒体内容里插入一些广告位。但是这些广告位的数目是有限的特别是在优质的发布商资源里就会出现一些广告位有着很大的竞争。第二既然有竞争那么如果引入一种竞价机制的话势必有可能抬高广告的单价从而让广告中间平台例如DSP或者是发布商从中获取更高的价值。
今天,我们就来讲一讲广告位竞价的一个基本原理,特别是目前广泛使用的基于第二价位的广告竞拍。
基于第一价位的竞拍
在我们开始讨论基于第二价位的广告竞拍之前,我们首先来看一个更加自然的竞拍手段,基于第一价位的竞拍。其实,在现实生活中,基于第一价位的竞拍会显得更加普遍。
所谓基于第一价位的竞拍,指的是所有的投标方都定好自己的出价,然后一次性统一出价。在出价的过程中,所有的投标方都是看不见竞争对手的出价的,这保证了出价的诚实性。
当竞拍平台接到所有投标方的出价以后,按照出价由高到低排序,出价最高的投标方获得投标的胜利。
在广告系统中如果要采用这样的形式那么决定最后投标顺序的不再是单纯的价格而往往是一个投标价格和点击率的函数最简单的函数就是点击率乘以投标价格。这其实也可以被认为是一种“期望收入”。也就是说如果发布商或者DSP是按照广告的每一次点击来收取费用的话那么点击率乘以投标价格就是这种收入的一个数学期望值。
所以,基于第一价位竞价的广告系统,按照广告收入的期望值进行竞价排名。排名第一的广告被选为显示的广告。
这种机制在早期的互联网广告平台中曾被大量使用。但是一段时间以后,大家发现,基于第一价位竞价的竞价结果往往是“虚高”的。
这也很容易形象地解释,在大家都不知道对方出价的情况下,如果希望自己能在竞拍中胜出,势必就可能报出比较高的价格。另外一个方面,投标方并不清楚这个广告位的真实价值,大家只能在条件允许的情况下,尽量抬高价格来获取这个机会。
从某种意义上来说,这样的竞价并不利于广告商的长远发展,也打击了广告商的积极性。
基于第二价位的竞拍
就是在基于第一价位竞价的基础上,互联网广告界逐渐衍生出了一种新的竞拍方法——基于第二价位的竞拍。
当我们已经熟悉了基于第一价位的竞拍模式以后,理解基于第二价位的竞拍就比较容易了。
首先,和基于第一价位的竞拍模式一样,基于第二价位的模式也是按照广告的期望收入,也就是根据点击率和出价的乘积来进行排序。但和基于第一价位模式不一样的是,中间商或者发布商并不按照第一位的价格来收取费用,而是按照竞价排位第二位的广告商的出价来收取费用。也就是说,虽然第一名利用自己的出价赢得了排名,但是只需要付第二名所出的价格。
很多互联网广告平台采用了基于第二价位的竞拍之后,发现广告商的竞价表现整体上要比基于第一价位的时候要好。时至今日,基于第二价位的竞拍方式已经成为了互联网广告的主流竞拍模式。
那么,基于第二价位的竞拍方式究竟有什么好处呢?文末推荐一个参考文献[1],有比较详细的描述。简单来说,研究人员发现,在基于第二价位竞拍的形式下,广告商按照自己对于广告位价值的理解来竞拍是相对较优的策略。
在基于第二价位的竞拍方式的环境中,又有什么值得注意的技术难点呢?
对于广告商来说主要是希望知道在当前出价的情况下究竟有多大的概率赢得当前的竞拍。这也就是所谓的“赢的概率”这对于广告商调整自己的出价有非常重要的指导意义。对于整个出价的概率分布的一个估计有时候又叫作“竞价全景观”Bid Landscape预测。这是一个非常形象的说法因为广告商希望知道整个赢的概率随着出价变化的整个分布从而调整自己的安排。
这样的预测工作会用到一些简单的模型。比如有学者认为赢的价格服从一个“对数正态分布”Log-normal。也就是说广告商出的价格并且最终赢得竞拍的这些价格在取了对数的情况下服从一个正态分布。当然这是一个假设。但是有了这么一个假设以后我们就可以从数据中估计这个对数正态分布的参数从而能够对整个“竞价全景观”进行估计。
对于“竞价全景观”或者是赢的价格分布的估计有一个比较困难的地方,那就是,作为广告商来说,往往并不知道所有其他竞争对手的出价,以及在没有赢得竞拍的情况下,那些赢得竞拍的出价是多少。简而言之,也就是我们只观测到了一部分数据,那就是我们赢得这些广告位的出价。在这种只有一部分信息的情况下,所做的估计就会不准确。
已经有一些研究工作关注这样情况的预测。比如论文《用截尾数据预测实时招标中的赢价》Predicting winning price in real time bidding with censored data[2]就利用了一种对数几率回归来估计那些没有赢得竞拍情况下的赢的价格,然后和已知的赢的价格一起对整个“竞价全景观”进行估计,这也算是目前的一项前沿研究。
总结
今天我为你介绍了广告竞价系统中的基于第二价位的广告竞拍。
一起来回顾下要点:第一,我们讲了基于第一价位的竞价原理,就是按照广告收入的期望值进行竞价排名,排名第一的广告竞拍成功;第二,我们聊了基于第二价位的竞价原理和一些技术难点,主要是如何对整个“竞价全景观”进行估计。
最后,给你留一个思考题,既然竞价排名是按照点击率乘以价格,那如何避免下面这样一种情况呢?就是一些点击率比较低的广告商利用很高的价格占据广告位,从而让用户看到很多不相关的广告?
参考文献
Jun Wang, Weinan Zhang and Shuai Yuan. Display Advertising with Real-Time Bidding (RTB) and Behavioural Targeting. Foundations and Trends® in Information Retrieval: Vol. 11: No. 4-5, pp 297-435, 2017.
Wu, W. C.-H., Yeh, M.-Y., and Chen, M.-S. Predicting winning price in real time bidding with censored data. Proceedings of the 21st ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, pages 13051314. ACM, 2015.

View File

@@ -0,0 +1,71 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
089 广告的竞价策略是怎样的?
在上一次的分享里,我们讲了广告位竞价的一个基本原理,那就是目前广泛使用的基于第二价位的广告竞拍。简单来说,基于第二价位的广告竞拍需要利用广告点击率的估计值和竞拍的价格,把所有的竞拍广告进行排序,排名第一的广告赢得竞拍。和基于第一价位的广告竞拍不一样的是,基于第二价位的广告竞拍并不直接利用排名第一的广告的出价来对其进行收费,而是利用排名第二的价位进行收费。在这样的情况下,有理论工作和实际的数据表明,基于第二价位的广告竞拍更加符合广告商对于广告位本身真实价值的判断。
今天我们来看在基于第二价位的广告竞拍的基础上DSP或者广告商究竟该如何形成自己的竞价策略Bidding Strategy
竞价策略
为什么需要竞价策略其实这个问题主要是在“实时竞价”或简称RTB的背景下来探讨的。
我们之前提到过RTB是DSP目前流行的竞价模式也就是广告商等利用计算机程序来自动对广告竞拍进行出价。从实际的运作中来看这样的自动竞价模式要比人工竞价更加方便快捷也更加高效。然而在自动竞价的模式下我们势必需要一种指导思想来让我们的计算机程序能够随着形式的变化来进行出价。
那么在RTB中竞价策略的环境究竟是怎样的呢
首先竞价的一个重要特征就是作为一个竞标方我们并不知道其他竞标方的点击率和出价。因此我们处在一个信息不完整的竞价环境中。在这样的环境中我们只能根据自己的点击率估计和自己的出价以及过去出价的成功与否来对整个市场的形势进行判断。这就是在RTB中竞价策略的一大挑战和难点。
在这样的背景下RTB竞价策略的研究和开发集中在以下两种思路上。
一种思路是把整个竞价策略当做一种“博弈”Game从而根据博弈论中的方法来对竞价环境中各个竞标方的行为和收益进行研究比较经典的论文例如参考文献[1])。用博弈论的方法来对竞价进行研究有一个最大的特点,那就是博弈论主要是对各个竞标方行为之间的关联性进行建模,这种关联性包括他们之间的收益和他们的动机。
另外一种思路是把整个竞价策略当做是纯粹的统计决策,也就是直接对广告商的行为进行建模,而把整个竞价环境中的种种联系都当做是当前决策下的不确定因素(这种思路比较有代表性的论文是参考文献[2])。在这样的思路下,各个竞标方之间的行为关联变得不那么重要,而对于整个不确定性的建模则变得至关重要。
第一种思路,也就是利用博弈论的方法来对竞价策略进行研究主要存在于学术界。虽然从理论上来说,博弈论可能提供一种比较有说服力的解释,但是这种思路需要对整个竞价环境有非常多的假设(例如竞标方是不是理性,市场是不是充分竞争等等)。而第二种思路,仅仅需要从广告商自身的角度出发,因此在现实中,这种思路的操作性更强,从而受到工业界的青睐。
总的来说,第二种思路其实就是根据当前的输入信息,例如页面信息、广告信息、用户信息以及上下文信息等,学到一个输出价格的函数,也就是说,这个函数的输出就是在现在情况下当前广告的出价。当然,这个函数势必需要考虑各种不确定的因素。
搜索广告和展示广告的竞标
搜索广告和展示广告的竞标存在着不小的区别,因此,从技术上来讲,就发展出了一系列不同的方法。
对于搜索广告来讲,在大多数情况下,每一个出价都是针对某一个搜索关键词的。例如,一个汽车广告商可能会在一个搜索引擎里竞标针对自己车的品牌,如“大众汽车”、“奥迪汽车”相关的关键词,还可能竞标更加宽泛的关键词,如“买车”、“汽车”等。同时,这里的出价也往往是事先设置好的。
参考文献[3]是第一个利用机器学习方法对搜索广告的出价进行建模的工作。在这个工作里,每一个关键词的出价来自于一个线性函数的输出,而这个线性函数是把用户信息、关键词以及其他的页面信息当做特性,学习了一个从特性到出价的线性关系。这可以算是最早的利用线性函数来进行出价的例子了。
展示广告的竞价则面临着不同的挑战。首先在展示广告中场景中并不存在搜索关键词这种概念。因此很多广告商无法针对场景事先产生出价。这也就要求RTB的提供商要能够在不同的场景中帮助广告商进行出价。
同时相比于搜索广告针对每一个关键词的出价方式来说针对每一个页面显示机会出价的挑战则更大。理论上讲每一个页面显示机会的价格都可能有很大的不同。很多RTB都利用一种叫作CPM的收费模式也就是说一旦某一个广告位被赢得之后对于广告商来说这往往就意味着需要被收取费用。所以在展示广告的情况下如何针对当前的页面显示机会以及目前的预算剩余等等因素进行统一建模就成为一个必不可少的步骤。
竞价策略的其他问题
除了我们谈论到的基本的竞价策略以外,竞价系统还有一些其他问题需要考虑。
比如一个广告商现在有1千元的预算参与到RTB竞价中。从广告商的角度来说通常希望这1千元能够比较均匀地使用到整个广告竞价中。或者说即便不是完全均匀使用至少也不希望这笔预算被很快用完。这里面的一个原因是在每天的各个时段广告的表现情况也就是说转化率或点击率是不一样的广告商通常希望自己的广告能够在比较好的时段进行展示。而如果广告在比较好的时段还没有来临之前就已经将预算消耗殆尽那就会让广告商觉得整个流程不是很友好。
因此在广告竞价策略中还存在着一个叫“预算步调”Budget Pacing的技术也就是希望能够让广告的展示相对平缓而不至于在短时间内使用完全部的预算。这势必对于广告如何出价有着直接的影响。
另外对于平台而言虽然竞价保证了一定的竞争但是也并不是所有的展示机会都有非常充分的竞争。因此从平台的角度来说如何能够保证一定的收益就变得十分重要。在这样的情况下有的平台有一种叫作“保留价格”Reserved Price的做法用来设置一个最低的竞价价格。保留价格虽然能够来保证收益但是也可能会让广告商觉得不划算因此如何来设置这个保留价格也就成为了出价策略中的一个重要组成部分。
总结
今天我为你介绍了广告竞价的基础知识,也就是如何形成竞价策略。
一起来回顾下要点第一我们讲了RTB背景下竞价策略的两种思路第二我们介绍了搜索广告和展示广告竞价策略的不同之处第三我们简单聊了广告竞价策略的一些其他相关问题。
最后,给你留一个思考题,你觉得如何评价一个广告竞价策略的好坏呢?
参考文献
Ramakrishna Gummadi, Peter Key and Alexandre Proutiere. Repeated auctions under budget constraints: Optimal bidding strategies and equilibria. In Eighth Workshop on Ad Auctions, 2012.
Yuan, S., Wang, J., and Zhao, X. Real-time bidding for online advertising: measurement and analysis. Proceedings of the Seventh International Workshop on Data Mining for Online Advertising, page 3. ACM, 2013.
Andrei Broder, Evgeniy Gabrilovich, Vanja Josifovski, George Mavromatis, and Alex Smola. Bid generation for advanced match in sponsored search. Proceedings of the fourth ACM international conference on Web search and data mining (WSDM 11). ACM, New York, NY, USA, 515-524, 2011.

View File

@@ -0,0 +1,73 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
090 如何优化广告的竞价策略?
广告的竞价排名是计算广告系统中非常重要的一个话题我们介绍了目前广泛使用的基于第二价位的广告竞拍以及在此基础上DSP或者广告商究竟该如何形成自己的竞价策略Bidding Strategy
今天,我们就来看一些具体的广告竞价策略方法。
单个广告推广计划优化
我们首先来看单个广告“推广计划”Campaign的竞价策略的优化。
在上一次的分享里我们介绍了,利用统计决策的一个重要假设就是最终的出价是一个各种输入(例如环境、用户、页面等)的函数输出。这里我们采用一个简化的假设,认为一个推广计划的出价是点击率的一个函数。在这样的情况下,我们先来理清一些概念。
第一个概念是“赢的概率”Winning Probability。这里面如果我们知道现在市场的一个价格分布以及我们的出价。那么赢的概率就是一个已知概率密度函数求概率的计算也就是通常情况下的一个积分计算。
第二个概念就是“效用”Utility。这是一个广告商关注的指标通常情况下是点击率的某种函数比如利润那就是每一次点击后的价值减去成本。
在这种情况下的成本其实主要就是出价后产生的交易价格。如果是基于第一价位的竞价,那么这个成本就是出价;如果是基于第二价位的竞价,这个成本就是超过第二价位多少还能赢得竞价的价格。
最后还有一点需要说明,那就是所有的广告推广计划都必须要在预算内,这是一个很明显的限制条件。
理清了这些基本的概念和限制条件以后,我们来看一看最一般的竞价策略。为了方便讨论,我们先假设不需要考虑预算,同时也假设,我们竞价的核心是所谓的“按照价值”的竞价。那么,在这种情况下,最优的策略其实就是按照点击率乘以点击后产生的价值来进行出价。可以说,这种策略其实是业界接纳程度最好、也是最直观的一种竞价策略。
然而,在有了预算和当前的交易流量信息的情况下,这种竞价策略就并不是最优的策略了。为什么呢?因为在有了这些限制条件的情况下,我们是否还会按照自己客观认为的广告价值来竞标就成了一个疑问。
那么,如何来应对预算和交易流量的限制呢?有没有什么优化方法? 我就结合几篇论文来跟你聊聊这个问题。
有一篇文章题目是《目标在线广告中的出价优化和库存评分》Bid Optimizing And Inventory Scoring in Targeted Online Advertising[1],这篇文章提供了一种简单的思路来应对预算和交易流量的限制优化问题。
具体来说,与其完全按照广告的价值来进行出价,不如采用这个价值乘以某个系数,而利用这个系数来动态调整目前的出价。由于是在一个已知的可能出价前面乘以一个系数,所以整个出价策略其实是一种线性变换,因此也被叫作是线性出价策略。
线性出价策略在实际操作中比较方便灵活,在这篇论文中,这种算法也取得了比较好的效果。不过遗憾的是,这种做法并没有太多的理论支持。
相比之下,另外的两个研究工作([2]和[3])则提供了一种比较通用的理论框架,可以用于不同的效用函数和损失函数。在这里,我们不展开讲这个通用框架的细节,重点介绍它的核心思路。
这个框架的整体思路是把寻找最优出价或者说是竞价函数的过程表达成为一个“有限制的最优化问题”Constrained Optimization。最优化的优化目标自然就是当前竞价流量下的收益。而最优化的限制条件就是竞价流量下的成本要等于预算。也就是说在我们期望达到预算的情况下我们需要尽可能地扩大收益这就是最优化目标的最大化这个意思。而限制条件决定了这个最大化问题的解的空间因此那些不符合条件的解就可以不考虑了。
一旦我们的问题可以用有限制的最优化问题来表达以后,整个问题的求解就变得相对比较规范化了。对于这类问题有一个标准的求解过程,就是利用“拉格朗日乘数法”,把“有限制的优化问题”转换成为“无限制的优化问题”,然后针对最后的目标函数,求导并置零从而推导出最优解的结果。这一部分的步骤是标准的高等数学微积分的内容。
这个框架最后推导出了基于第一价位和基于第二价位的最优的出价函数形式。在两种情况下,最优的出价函数都是一个基于点击率、当前竞价流量和预算的非线性函数。那么,从这个框架来看,刚才我们提到的线性竞价策略就并不是最优的。
多个广告推广计划优化
了解了单个广告推广计划的优化后很自然地多个广告推广计划的优化也是一个很重要的话题。在这方面比较经典的论文推荐你读一读《展示广告的统计套利挖掘》Statistical Arbitrage Mining for Display Advertising[4]。
从基本的思路上来讲我们需要做的是把刚才的基于单个广告推广计划的有限制优化问题给扩展到多个广告推广计划上去。除了满足各种限制条件以外比如需要满足总的预算要求论文也提出了一种基于风险控制的思路来计算每一个广告推广计划的均值和方差从而限制方差的大小来降低风险。比较遗憾的是论文提出的优化是一个基于EM算法的过程也就是说相对于单个广告推广计划来说多个广告推广计划找到的解可能并不是全局的最优解。
总结
今天我为你介绍了广告竞价的一些具体的竞价策略。
一起来回顾下要点:第一,广告竞价会有预算和交易流量的限制问题,我们介绍了单个广告推广计划的两种思路,分别是“线性出价策略”和转化为“有限制的最优化问题”;第二,我们简单聊了多个广告推广计划的思路,简单介绍了论文提出的一种基于风险控制的思路。
最后,给你留一个思考题,在广告竞价策略的诸多框架中,都基本假定我们知道了广告的点击率,这样的假设有没有问题呢?
参考文献
Perlich, C., Dalessandro, B., Hook, R., Stitelman, O., Raeder, T., and Provost, F. Bid Optimizing And Inventory Scoring in Targeted Online Advertising. Proceedings of the 18th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, pages 804812. ACM, 2012.
Zhang, W., Yuan, S., and Wang, J. Optimal Real-Time Bidding for Display Advertising. Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining, pages 10771086. ACM, 2014.
Zhang, W., Ren, K., and Wang, J. Optimal Real-time Bidding Frameworks Discussion. arXiv preprint arXiv:1602.01007, 2016.
Zhang, W. and Wang, J. Statistical Arbitrage Mining for Display Advertising. Proceedings of the 21th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, pages 14651474. ACM, 2015.

View File

@@ -0,0 +1,59 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
091 如何控制广告预算?
我们在前面的一系列分享里讲了广告位竞价的基本原理,那就是目前广泛使用的基于第二价位的广告竞拍。也分享了广告的竞价策略,以及具体的竞价策略优化方法,比如单个广告推广计划的优化等。
今天,我们来看在广告竞价策略中一个比较重要的问题,这个问题我们在前一篇的分享里也提到过,那就是如何能够比较流畅地利用广告商的预算,而不是把广告商的钱一下子都花完。
预算步调优化
控制广告预算的第一种方法是预算步调优化Budget Pacing这个方法的目的就是在某一个时间段里均匀地分配广告商的预算。同时在每一个时段发布商所面临的受众都有可能不太一样所以对于广告商而言比较理想的状态是一个广告可以在一天的不同时段被不同的受众所看到从而达到扩大受众面的目的。
预算步调优化有两种比较常见的思路一种叫“节流”Throttling一种叫“修改出价”。
节流这种方法主要是把单位时间的支出或者是成本给控制在某一个速率内,使得预算能够被均匀地使用。这种方法往往是在我们已经介绍过的竞价模型之外运行。修改出价这个思路很直观,也就是直接修改我们的竞价,从而带来预算均匀化的结果。
关于节流思路,有一种做法[1]是把如何节流当做一种“线性优化”问题,并且是有限制的最大化问题。具体来说,对于每一个出价的请求,我们都可以做一个二元的决定,决定我们是否接受这个出价请求。当然,对于每一个出价请求,这里都有一个价值和一个成本。根据对不同出价请求的设置,我们来做优化,从而能够最大化总价值。但同时,我们需要遵守一个限制,总的成本不能超过预算。这其实就是在两种目标之间实现一个均衡,简言之,我们需要在不超过总预算的情况下达到总价值的最大化。
虽然这种算法本身能够通过我们之前介绍过的“拉格朗日乘数法”来求解,但是还存在一个根本的问题,那就是这种算法并不能实时地对整个竞价的安排进行计算和更新。因为,这种线性优化方法一般都是在线下计算好了以后再到线上运行。很明显,这种方法并不适合快速变化的竞价环境。因此,也就有一些工作[2]和[3],尝试通过节流,或者更确切地说,通过在线优化来控制预算的使用情况。
对竞价直接进行修改的相关工作也很多[4]和[5]这个思路是把控制理论中的一些思想借鉴到了对竞价的直接优化上目标是让广告商的预算能够平滑使用。这里面的控制是指什么呢主要是指我们引入一个新的模块在DSP中从而能够实时监测各种指标例如竞价赢的比率、点击率等然后利用这些数据作为一个参考点从而能够形成一种回馈信息以供控制系统来对出价进行实时的调整。
和节流的思想相对比,利用控制理论对出价进行直接优化这种思路明显要更加灵活。然而在实际的工作中,更加灵活的框架依赖于对点击率以及竞价全景观的准确预测,这其实是很困难的。在真实的情况下,利用节流的思想,也就是不去修改出价,只是在其基础上直接进行操作,则往往来得简单有效。
频率上限
在工业界还有一种经常会使用的控制预算的方法叫“频率上限”Frequency Cap。简单来说这种策略就是限制某一个或者某一种广告在某一种媒介上一段时间内出现的次数。比如是否限制一个肯德基的广告在半天之内让同一个用户看见的次数5次、10次还是20次
为什么要限制频率呢?一个因素当然是我们希望广告的预算不要在短时间内消耗完。另外,短时间内反复观看某一个广告,很可能会让用户对某一个广告或者广告商产生厌烦情绪,那么广告的有效度就会降低。这对于一些广告商来说,其实是消耗了一些资源。因此,限制广告的投放是一种策略选择,从而让广告的投放花钱少、效率高。
这种频率上限的做法在工业界非常普遍,不过比较遗憾的是,关于这样做究竟是不是有很大的效果,用户多次看到广告是否会真正产生非常大的厌烦情绪从而使得广告效果降低,有没有理论支持等问题,目前还没有比较好的研究来解决。
总结
今天我为你介绍了广告竞价中的预算步调优化和频率上限两个思路。
一起来回顾下要点:第一,预算步调优化有两种常见思路,分别是“节流”和“修改出价”;第二,频率上限是一种工业界常用的方法,但是目前这方面缺乏理论依据。
最后,给你留一个思考题:今天我们介绍了使用节流的方法来控制预算,其中一种方法是线性优化,需要在预算允许的情况下最大化广告的价值。那么,对于广告商来说,如何衡量广告的价值?
参考文献
Lee, K.-C., Jalali, A., and Dasdan, A. Real Time Bid Optimization with Smooth Budget Delivery in Online Advertising. Proceedings of the Seventh International Workshop on Data Mining for Online Advertising, page 1. ACM, 2013.
Xu, J., Lee, K.-c., Li, W., Qi, H., and Lu, Q. Smart Pacing for Effective Online Ad Campaign Optimization. Proceedings of the 21st ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, pages 22172226. ACM, 2015.
Agarwal, D., Ghosh, S., Wei, K., and You, S. Budget Pacing for Targeted Online Advertisements at Linkedin. Proceedings of the 20th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, pages 16131619. ACM, 2014.
Chen, Y., Berkhin, P., Anderson, B., and Devanur, N. R. Real-time Bidding Algorithms for Performance-based Display Ad Allocation. Proceedings of the 17th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, pages 13071315. ACM, 2011.
Zhang, W., Rong, Y., Wang, J., Zhu, T., and Wang, X. Feedback Control of Real-time Display Advertising. Proceedings of the Ninth ACM International Conference on Web Search and Data Mining, pages 407416. ACM, 2016.

View File

@@ -0,0 +1,69 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
092 如何设置广告竞价的底价?
在互联网广告生态系统的环境中,我们已经分享了不少关于点击率优化和竞价排名以及如何优化出价的内容,相信你对于广告的整体运作以及其中的核心算法都有了一定的了解。
我们首先来简单回顾一下发布商和广告商或者DSP之间的关系。发布商往往是类似于新闻网站、社交媒体网站和视频网站这样的内容提供方。这些网站的一个特点就是他们本身并不产生收益甚至往往是免费提供服务。因为流量巨大这些内容提供方希望能够通过在自身的网站上发布广告从而获得巨额收益。对于广告商和DSP来说则是希望能够利用发布商的巨大流量来接触更多的用户从而推销自己的服务和产品。
我们之前的很多讨论其实重点都放到了需求侧平台也就是常说的DSP方面包括点击率预估和很多调整竞价排名的方法等等。今天我们就来看一个发布商在广告竞价流程中可以参与调优的地方那就是广告竞价中的底价优化。
底价
底价,顾名思义,就是在广告的竞价中给竞拍设定一个最低价。
为什么需要这么做呢?其实在理想的状态下,一个充分竞争的,并且有着充分广告源的市场,广告的单价应该是逐渐升高的。因为广告位资源毕竟是有限的,在有充分广告源的情况下,所有的广告商为了竞争这些有限的广告位,必定是会逐渐抬高广告位的价格。而作为内容发布商,在这个过程中则可以享受到逐渐升高的广告位价值。
然而,在现实中的很多情况下,这种理想状态的竞争态势并不完全存在。比如,对于一个新闻内容提供商来说,在新闻首页顶端出现的广告位一般更能吸引眼球,这种广告位常常可以引起充分竞争,但是在新闻页面下方的广告位则很有可能无法带来充分竞争,因为这些广告位的点击率可能只有顶端广告位点击率的十分之一甚至更少。那么,对于那些无法带来充分竞争的广告位,内容发布商就有可能无法收取理想状态下的收益,甚至在一些比较极端的情况下,会以非常便宜的价格给予广告商。
也就是说,在真实的广告竞争市场中,很多时候广告位都无法得到充分竞争。除了我们刚才所说的因为广告位的位置所导致的不充分竞争以外,同一广告位在一天中的不同时段的竞争程度也是不尽相同的。另外,在搜索广告中,不同的搜索关键词也会有不同的竞争情况。
综合这些原因,对于内容发布商来说,如何保护自己的广告位价值并且保证最低收益呢?一种方法就是设置一个广告竞价的最低价格,也就是我们这里所说的底价。当我们设置了底价以后,所有的广告竞价都不会低于这个价格,也就人为地抬高了广告位的竞争水准。
既然这是一种保护广告位价值的简单做法,那么会不会带来一些其他的问题呢?答案是,当然会。一个重要的因素就是,这个底价设置得太高,会打击广告商的积极性,进一步影响广告位的竞争,从而让整个市场变得竞争不足拉低价格。而如果这个底价设置得太低,则没有起到实际的作用,广告商仍然可以利用较低的价格获得广告位,而内容发布商可能也没有获得足够的收益。
底价优化
在了解了这些关于底价的背景知识以后,我们来思考一下该如何设置底价。
在一个基于第二价位的竞价系统中,底价存在三种情况,这些情况的不同会导致发布商有不同的收益。
第一种情况底价高于竞价的最高价。很明显这个时候发布商没有收益因为所有其他的出价都低于底价也就是说底价过高。在实际的操作中这一次广告位请求可能会被重新拍卖Re-Sell
第二种情况,底价高于第二价位。因为是基于第二价位的竞价,所以已经用第一价位获取了广告位的广告商,这个时候就需要支付底价,而不是原本的第二价位的价格。这种情况下,发布商就获取了额外的收益。这个额外的收益就是底价减去之前原本的第二价位。
第三种情况,底价低于第二价位。同理,因为是基于第二价位的竞价,所以这个时候的底价并没有影响原本的第二价位,因此发布商的收益没有变化。
我们讨论了这三种情况以后,就会发现,对于发布商来说,在绝大部分情况下,第二种情况是最理想的,因为这种时候会有额外的收益。那么,如何学习到这个底价就成为了一个挑战。
这里面发布商面临的一个困难是,广告商在提交出价的时候,发布商往往是不知道这个出价的。因此,发布商需要去“猜”所有出价的分布,这无疑是一件非常困难的任务。
在比较早期的研究中[1]研究者们借用了“最优化竞拍理论”Optimal Auction Theory来研究究竟该如何设置这个出价。
最优化竞拍理论其实假设了发布商知道出价的一个概率密度函数再进一步假设这个密度函数是服从“对数正态”Log-Normal分布的然后推导出了一个最佳的底价。在有了这个假设之后就可以利用最佳的底价对广告的竞价进行管理最终在实验中显示对于某一些广告发布商的收益增加了10%以上。
一个更加近期的研究[2]则指出在实时竞价RTB的很多场景中出价的分布未必是对数正态分布整个竞价的环境中也有很多并不符合最优化竞拍理论的情况比如广告商出价未必是按照心中的价值出价而是为了赢得更多的广告位。
在这项研究中,作者们提出了一种非常直观的类似于决策树的策略,然后研究了在不同情况下发布商策略的不同所带来收益的区别。总体说来,发布商可以采用这样一种策略来调整底价:当发现底价低于最高的出价时,保持或者提高底价;当发现底价高于最高出价时,降级底价。在这种策略的指导下,发布商能够达到一种最佳的收益。
总结
今天我为你介绍了广告竞价中底价的设置。
一起来回顾下要点:第一,在真实的广告竞争市场中,很多时候广告位都无法得到充分竞争,为了保证发布商的最佳收益,需要给竞拍设置一个最低价,也就是底价;第二,如何设置底价是一个很困难的任务,以往的研究给我们提供了两种策略可以借鉴,分别是最优化竞拍理论和类似于决策树的策略。
最后,给你留一个思考题,我们应该对所有广告位设置统一的底价吗?还是不同的广告位有不同的底价呢?
参考文献
Ostrovsky, M. and Schwarz, M. Reserve Prices in Internet Advertising Auctions: A Field Experiment. Search, pages 118, 2009.
Yuan, S., Wang, J., Chen, B., Mason, P., and Seljan, S. An Empirical Study of Reserve Price Optimisation in Real-Time Bidding. Proceedings of the 20th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, pages 18971906. ACM, 2014.

View File

@@ -0,0 +1,65 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
093 聊一聊程序化直接购买和广告期货
在周一的分享里,我们讨论了内容发布商优化自己收益策略的底价方案。如果能够把这种底价方案运用得当,就可以增加市场的竞争程度,从而人为地抬高竞价,达到增加收益的目的。
今天,我们来看关于计算广告竞价的另外两个话题:一个是程序化直接购买,另一个是广告期货。
程序化直接购买
程序化直接购买Programmatic Direct是指广告商不通过竞价的方式获取发布商的广告位。这往往意味着广告商需要和发布商直接签订合同来购买一定量的展示机会Impression
在互联网的早期,其实有很多广告合同是通过直接购买的方式进行的。这一类合同的签订通常是经过相对比较传统的模式,也就是由公司的销售人员直接进行接洽。
直接购买的广告合作合同往往是比较大的。例如,可口可乐公司需要在雅虎主页显示一类新饮料的广告。这种广告要求涵盖的人群广,并且时间也比较长。如果按照竞标的方式,这可能是要竞标上百万次甚至上千万次的展示机会。在这样的情况下,对于广告商和发布商来说,比较快捷的方式反而可能是一次性购买下这些展示机会。
以雅虎为例在很长的一段时间里广告的销售都是分为“有保证的销售”和“无保证的销售”。后者类似于今天的RTB市场而前者就是我们现在所说的直接购买。
时至今日对于顶级的内容发布商来说大家依然喜欢把最优价值的一些广告位比如较好的位置或者尺寸较大的广告留下来当做“独家”Premium广告位用于直接购买的合同。而近些年如何使用程序让直接购买更加便捷就成为了很多广告中间平台的一个重要任务。
那么对于内容发布商或者SSP供应侧平台来说需要做什么事情来推动程序化直接购买呢
首先内容发布商需要预估未来一段时间内展示机会的数量。例如在下一个小时内一共有多少展示机会。这种预估其实就是网站或者服务对流量的估计。然后把这些预估的展示机会分为两个部分一部分送入RTB用于我们之前介绍过的广告竞价排名而另一部分则用于程序化直接购买。
和传统的直接购买不同的是这时候的直接购买是程序化的因此并不需要广告商和发布商之间直接建立联系而是通过平台进行交易。从某种意义上来说这种交易和股票交易十分类似。通常情况下平台显示的是对这一批展示机会的一个统一价格。广告商以及DSP需求侧平台可以根据自己的需要直接购买这个统一价格的展示机会。一般来说这种购买可以提前几个星期甚至几个月。
一旦直接购买和通过竞价排名的方式都程序化以后,对于广告商来说,他们愿意提前直接购买广告位,因为这样购买的广告位价值低于他们的一个心理价位。而对于发布商来说,就需要权衡这两种渠道之间的收益平衡,其实在某种情况下,特别是市场竞争不完全的情况下,这也是发布商希望确保一定收益的方法,也就是在有一定折扣的情况下卖掉广告位。
在程序化直接购买方面进行研究的相关论文非常稀少[1],一个原因是这种技术的探讨往往需要比较高级的广告系统作为支撑。
广告的期权
到现在为止,我们已经讨论了广告的竞价排名以及程序化直接购买等话题,你是不是已经慢慢感受到,广告生态系统的构架和我们熟悉的另外一个领域的很多概念有着千丝万缕的联系。对,这个领域就是金融系统,特别是股票或者大宗商品的交易。
这里面的联系其实是非常直观的。第一广告和股票交易一样都有大量的交易机会。这就需要出现第三方系统和平台对于股票来说是股票交易所而对于广告来说则是广告的DSP和SSP。第二广告和股票交易一样价值和价格都有可能因为交易带来瞬息万变的差别因此越来越多的金融工具被制造出来来为这个生态系统中的种种角色进行风险控制。
比如对于RTB来说虽然这种机制为广告商和发布商创造了一种交易的模式但是这种模式中基于第二价位的竞价让广告商无法对最终的成交价进行有效控制而且对于发布商而言对于利润的把握也有一定的风险同时广告商和发布商之间也谈不上什么“忠诚度”因为相同的广告位还有可能在其他的发布商那里找到。在这种情况下“期权”Option这种金融工具就被介绍到了计算广告的环境中。
最近一段时间以来,已经有了一些零星的研究工作讨论广告期权的理论和应用([2]和[3])。当前,很多发布商是这么设置广告期权的。发布商设置一个未来某个时间点的某个或某些广告展示机会的一个提前价格。这个价格并不是展示机会的实际价格,而是一个权利。对于广告商来说,可以购买这个权利,用于得到未来的这个展示机会。当然,广告商在未来并不一定购买这个展示机会,也可以放弃这个权利。
对于广告商来说,如何参与竞拍,如何在最佳的时机去购买期权,就变成了一个复杂的优化问题。当下关于这方面的很多研究,都借用了金融领域的一些模型和算法。
总结
今天我为你介绍了在线计算广告的另外两个重要话题程序化直接购买和广告期权。到此为止我们就完整地介绍了DSP和SSP中所有有关出价和竞价的话题。
一起来回顾下要点:第一,我们从广告的历史发展中介绍了程序化直接购买的意义;第二,我们简单聊了聊广告期权存在的目的。
最后给你留一个思考题对于一个DSP来说能不能通过直接购买获得大量的展示机会然后又通过RTB竞价排名把这些机会卖出去这样做的风险是什么
参考文献
Chen, B., Yuan, S., and Wang, J. A dynamic pricing model for unifying programmatic guarantee and real-time bidding in display advertising. In Proceedings of the Eighth International Workshop on Data Mining for Online Advertising, pages 1:11:9. ACM, 2014.
Chen, B., Wang, J., Cox, I. J., and Kankanhalli, M. S. Multi-keyword multi-click advertisement option contracts for sponsored search. ACM Transactions on Intelligent Systems and Technology (TIST), 7(1):5, 2015.
Chen, B. and Wang, J. A lattice framework for pricing display advertisement options with the stochastic volatility underlying model. Electronic Commerce Research and Applications, 14(6):465479, 2015.

View File

@@ -0,0 +1,65 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
094 归因模型:如何来衡量广告的有效性
在互联网广告生态系统的环境中,我们已经分享了不少关于点击率优化和竞价排名以及如何优化出价的内容。接下来我们开始讨论一些计算广告相关的高级话题。之所以说这些是高级话题,是因为作为机器学习在计算广告的应用,这些话题往往都比较偏冷,但在现实中又特别有实用价值。
今天我们先来聊一聊归因模型,这种技术在计算广告业中被广泛使用。
什么是归因模型
归因模型Attribution Model是一种计算广告中分配“贡献”的机制。
在现代网站或者应用中,每一个用户都有可能在每一次会话中看到多个不同的广告,或者在多个不同的会话中看到相同广告的不同展示。那么,当用户点击了某个广告,或者是当用户转化以后,比如购买了某个商品或是订阅了某种服务,广告商通常希望知道究竟是哪一个广告起了更大的作用。也就是说,广告商想知道用户接收到的不同广告对这个最后的转化事件都起了什么作用,这个问题就是归因模型研究的核心。
归因模型之所以重要,是因为这里面牵涉到了广告有效性这个话题。那么,如何来衡量广告的有效性呢?
衡量广告的有效性,就需要利用归因模型,针对每一个转化来分配“贡献”。这样,对于广告商来说,就可以通过贡献值的叠加来看某一个渠道或者某一个内容发布平台的转化效果。
然而归因模型的难点在于这里面并没有完全的“基本事实”Ground Truth全部都基于一定的假设。同时归因模型直接关系到广告是否有效的计算也就关系到我们能否推行一个“公平”的市场以及能否防止其他的广告商在整个平台上进行博弈。
那么,现在各个平台普遍都在使用的是什么样的归因模型呢?下面我给你介绍几个最基本的归因模型。当然了,说这些方法是模型其实也是不够准确的,因为这些方法大多没有理论支撑,主要是基于经验或者基于传统的方法。
第一种经验方法叫“最后触碰”Last Touch
顾名思义最后触碰指的就是在转化前的最后一个广告拿走100%的贡献值。这是目前使用最广泛的归因方法,主要是因为它的简单直观。
我们之前讨论过的所有点击率或者转化率的计算都是基于这个归因方法的。一个可以去博弈“最后触碰”的方法就是让DSP需求侧平台把广告投放给那些已经对品牌或者服务产生兴趣的人从而能够以较大的概率获得用户的转化。在这个过程中广告的投放其实并没有起作用而DSP也并没有试图去转化新用户。
举一个例子如果我们已知一个用户喜欢可口可乐并且很可能在过去购买过可口可乐那么给这个用户展示最新的可口可乐促销广告就很有可能让这个用户点击广告并购买了一箱促销的可乐。但是在这个情况下我们还可以认为这个用户很有可能不需要看这个广告也会购买可乐所以这个广告其实是浪费了资源。“最后触碰”其实是鼓励了DSP采用更加保守的投放方式。
既然有“最后触碰”那肯定就有“第一次触碰”First Touch的经验方法。这种方式和“最后触碰”截然相反那就是只要一个用户最后转化了那么这个用户第一次看到的广告就获得了100%的贡献值。尽管用户可能在第一次看到这个广告后还看了其他的广告但是这些其他广告都不算数了。“第一次触碰”其实鼓励了DSP尽可能广地投放广告把广告的投放当做品牌宣传。
除了这两种比较极端但是被广泛使用的归因方法以外还有一系列的经验方法都算是这两种方法的某种平衡状态。比如一种叫“线性碰触”Linear Touch的方法是给用户在转化的道路上每一个广告都赋予一样的贡献值。还有一种叫“位置触碰”Position Based的方法其实就是“最后触碰”和“第一次触碰”的结合。另外一种经验方法“时间递减”Time Decay则是按照由远到近对所有的广告位都给一定的贡献值。离转化事件时间越近的广告获得的贡献值越多。
总之,你可以看到,这些林林总总的经验方法虽然都比较直观,但是在实践中,都有可能给一些广告商利用系统进行不公平投放的机会。
基于模型的归因方法
下面我们来看一些具备一定理论基础的归因方法,介绍一个在这方面比较早的探索研究[1]。在这个研究里作者们首先介绍了一种叫Bagged Logistic Regression的方法这个方法根据当前广告的“触碰”信息也就是用户看了什么广告来预测用户是否将会转化。在这个模型里所有的特征就是二元的用户是否观看了某个广告的信息然后标签就是用户是否转化。通过这些二元的特征学习到的系数就表达了这个广告在这个预测模型下的贡献度。当然作者们利用了Bagged的方法学习到所有的系数都是正的确保能够解释这个模型的含义。
同时,作者们还提出了一个对归因问题的概率解法,我来介绍下这个概率解法的直观思路。某一个广告对用户转化的最后作用都来自两个部分:第一部分是这个广告对用户转化的直接作用;第二个部分是当前这个广告和另外一个广告一起作用使用户转化的概率。当然,这个第二部分的联合作用需要减去这两个广告分别单独作用于用户的情况。那么,一个广告对于用户的影响,就是这两个部分概率的加和,这其实就是考虑了一阶和二阶的关系下的归因模型。
知道了归因信息之后,我们还可以把这个信息利用到广告的竞价中。直白来说,就是针对有价值的渠道进行有效的出价,而对没有效果的渠道进行控制[2]。除此以外,归因信息还可以帮助广告商来分配自己的预算,把大部分的预算用在优质的渠道中来投放广告[3]。
总结
今天我为你介绍了在线计算广告的一个高级话题:归因模型。
一起来回顾下要点:第一,归因模型是一种计算广告中分配贡献的机制,广泛使用的方法有最后触碰和第一次触碰等;第二,有一些有一定理论基础的归因方法,我们其实可以拓展归因信息的应用场景。
最后,给你留一个思考题,如何来衡量一个归因方法是否有效呢?
参考文献
Shao, X. and Li, L. Data-driven multi-touch attribution models. Proceedings of the 17th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, pages 258264. ACM, 2011.
Xu, J., Shao, X., Ma, J., Lee, K.-c., Qi, H., and Lu, Q. Lift-based bidding in ad selection. Proceedings of the 30th AAAI Conference on Artificial Intelligence, 2016.
Geyik, S. C., Saxena, A., and Dasdan, A. Multitouch attribution based budget allocation in online advertising. Proceedings of 20th ACM SIGKDD Conference on Knowledge Discovery and Data Mining, pages 19. ACM, 2014.

View File

@@ -0,0 +1,67 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
095 广告投放如何选择受众?如何扩展受众群?
从上一期的分享开始,我们来讨论计算广告相关的一些高级话题。作为机器学习在计算广告的应用,这些话题往往偏冷,但在现实中又有很大的实用价值。我们首先聊了归因模型,介绍了几种经验方法和一些基于模型的归因方法,这种模型在计算广告业中举足轻重,不过也常常被人忽视。
今天我们来看另外一个重要的话题那就是如何帮助广告商扩大受众群我们也把这种技术称为受众扩展Audience Expansion技术。
什么是受众
广告商在投放广告时有一个最根本的需求,就是希望通过广告平台接触到更多有可能被转化的受众群。所以,对于绝大多数的广告平台而言,满足广告商的这个需求就成为了一个非常重要的功能。
为了让广告商来选择受众,不少广告平台提供两种最基本的功能。
第一种方式是搜索广告的模式,也就是广告商可以选择通过某个关键词或者一系列关键词来接触到希望投放的受众。这里面其实有一个假设,那就是受众的兴趣或者意图是和关键词联系在一起的,而如果投放的广告内容和受众的兴趣以及意图相符,那么对于广告商来说,就可以假设这种情况下受众的转化率是最高的。
第二种就是通过某种选择受众群的方式来让广告商自由地选择广告投放的对象。这里最基本的方式是通过受众的“人口”Demographic信息来进行投放。典型的人口信息包括年龄、性别和地域。
不管是采用关键词还是人口信息来进行受众选择,这些方法看似简单直观,但其实也给广告商带来了不小的挑战。
首先,我们来看关于搜索关键词的难点。作为一个广告商,你怎么知道所有的跟你产品或者服务相关的关键词呢?理论上说,可能会有无穷无尽的关键词可供投放。但是关键词的投放数量也和成本有着密切的关系。所以,从现实的角度来讲,肯定是无法投放所有的关键词的。
其次,利用人口信息来选择受众,那如何来找到比较合适的人口信息呢?这里面就有很大的挑战了。广告商可以利用一些研究结果来找到对应的人口信息从而增强广告投放的效果。然而针对很多中小广告商来说,花费很大的精力和时间去研究这些不同的人口信息和广告效果之间的关系显然是不可能的。
除了我们刚才所说的这两种广告商选择受众的方式以外,现在也有不少的广告平台并不需要广告商进行“显式”的受众选择。这些服务其实就是看到了这种选择带给广告商的复杂性,与其让广告商来选择,还不如让广告平台来优化。于是,有很多广告平台提供的就是“傻瓜式”的广告服务,广告商仅需要设置预算信息,对于人群的投放则完全由广告平台来负责。
受众扩展
了解了受众的选择以后,一个很现实的问题就摆在了广告平台商的面前,如何帮助广告商来扩展已经选择了的受众群体,从而能够实现受众转化的最大化呢?
来自LinkedIn的几位作者就探讨了在社交媒体广告中受众扩展的这个问题[1]。在LinkedIn平台上广告商也就是雇主可以针对不同的群体限制条件也就是我们所说的受众来投放广告以吸引潜在的雇员和候选人。广告商在投放广告的时候可以按照雇员的职业技能比如是否会Java是否会机器学习等以及一些其他的信息例如来自哪个公司、地理位置来选择投放的受众。这和我们之前介绍的场景一样很明显即便是广告商精心选择一个看似比较有效的受众在这种情况下其实依然有很多种其他选择的可能性。
在这篇文章里,作者们介绍了这么几种受众扩展的思路。
第一种思路是和某一个广告推广计划Campaign无关的。这里主要是通过一种“类似”算法而找到类似的公司、类似的技能等等。这种扩展的好处是可以对任何广告推广进行扩展而无需积累数据。
第二种思路是广告推广相关的扩展。这里其实还是利用了“类似”算法,但是在扩展的时候是根据广告商对当前这个广告推广所选择的条件来进行选择,这样的选择自然就会和当前的广告推广更加相关。
在实际操作中LinkedIn采用了这两种思路结合的方法。先利用于推广无关的扩展方法来获取最初的一些扩展用户尽管这部分用户可能质量不高。然后当广告推广已经运行了一段时间以后再针对这个广告推广的选择进行扩展就可以找到更加高质量的扩展用户群体。
我们看到这些扩展方法都依赖于“类似”算法,这里我简单说一下这个算法的核心思想。
总体来说这个算法是针对某一个实体可以是公司、人名、地域、技能等通过搜索的方法来返回最相关的K个其他实体。作者们把这个问题看成了一个监督学习的问题。其核心就是利用了一个对数几率模型对相似的正例和负例进行学习。
那么哪些实体是正例哪些是负例呢作者们把用户频繁选择放在一起投放的实体当做了正例而把其他的实体当做负例。对于特性来说这里广泛采用了文本特性包括文本的词包表达、以及N元语法N-gram组成的特性。同时这里还利用了图相关度来推算比如两个公司在社交关系上的相关程度。然后两个实体之间的余弦相关度也作为一种特性被包含在了模型中。
在线上实验的结果中所有受众扩展的效果都比不用扩展有显著的提升。特别是在混合扩展的模式下展示机会、点击率和总的收益都提升了10%以上。这个实验结果可以用来说明受众扩展的重要性。
总结
今天我为你介绍了在线计算广告的另外一个高级话题:受众扩展。
一起来回顾下要点:第一,广告商可以通过关键词或者人口信息等方式来选择受众,不过受众选择也并不容易,有很大的挑战性;第二,我们介绍了和推广计划有关的与无关的两种受众扩展思路,以及将两种思路结合的方法,并简单介绍了两种思路都依赖的“类似”算法。
最后,给你留一个思考题,在什么情况下受众扩展可能会出现问题,如何来衡量这些问题?
参考文献
Haishan Liu, David Pardoe, Kun Liu, Manoj Thakur, Frank Cao, and Chongzhe Li. Audience Expansion for Online Social Network Advertising. Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD 16). ACM, New York, NY, USA, 165-174, 2016.

View File

@@ -0,0 +1,65 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
096 复盘 4 广告系统核心技术模块
今天我准备了 18 张知识卡,和你一起来对广告系统核心技术模块的内容做一个复盘。
在这个模块我们一起学习了18篇文章讨论了5大话题包括广告系统架构、知名公司的广告点击率预估模型、出价系统、预算等。通过这些点我们勾勒出了这个领域的主线。希望你能沿着这条线去做更多探索。
提示:点击知识卡,可以一键到达你最想复习的那一篇文章。
广告系统架构
广告点击率预估
出价系统
预算
高级话题
积跬步以至千里
最后,恭喜你在人工智能领域的千里之行,又往前迈出了一步。

View File

@@ -0,0 +1,83 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
096 如何利用机器学习技术来检测广告欺诈?
在上一期的内容中,我们聊了如何帮助广告商扩大受众群这个话题,也就是受众扩展技术。受众扩展的目的是让广告商投放的广告能够接触到更广泛的受众,甚至有可能提高广告效果。
在计算广告高级话题的最后一篇分享同时也是整个广告模块的最后一篇分享里我想来聊一聊广告中一个非常棘手同时也是一个非常实际的问题欺诈检测Fraud Detection
什么是广告欺诈
广告欺诈是一个多大规模的问题呢?
根据一个统计数字[1]到2015年的时候就因为广告欺诈全美的市场营销和媒体业每年的耗费约为82亿美元。这个数字中大约有56%也就是46亿多美元的耗费来自于“非法流量”Invalid Traffic。我们把这个数字和全美每年596亿的广告支出进行对比就可以看出这是一个惊人的数字。当然因为各种欺诈手段层出不穷并不是所有的欺诈都能够被甄别出来。因此我们其实有理由相信真实的数字会更高。
那么,怎么来定义广告欺诈呢?什么样的行为算是广告欺诈呢?
我们这里主要讨论三种形式的广告欺诈。这三种广告欺诈模式其实对应着三种流行的广告计费模式。
第一种欺诈叫“展示欺诈”Impression Fraud也就是造假者产生虚假的竞价信息然后把这些竞价展示放到广告交易平台上去贩卖并且在广告商购买了这些展示后获利。
第二种欺诈叫“点击欺诈”Click Fraud也就是造假者在广告商产生虚假的点击行为。
第三种欺诈叫“转化欺诈”Conversion Fraud也就是造假者完成某种虚假的动作例如填写表格下载某个应用等来虚拟真实的转化事件。
在真实的场景中,这三种欺诈手段经常混合出现。例如点击欺诈和展示欺诈可能同时出现,这样就能在报表中展示一个看似合理的点击率。
广告欺诈的产生源
了解了广告欺诈的基本形式之后,我们来看一下这些欺诈产生的源头都在什么地方。因为广告产业的有利可图,产生欺诈的途径也是多种多样的,我们这里就看一些经典的形式。
首先有一种欺诈来源途径叫PPVPay-Per-View网络。
利用PPV进行欺诈的主要流程就是尝试通过购买流量然后在一些合法的展示机会中插入用户肉眼看不见的0像素的标签Tag诱导广告商让广告商以为产生了更多的合法流量。
对于这样的欺诈一般来说广告商必须去检测展示机会用户是不是看不见或者是否是由0像素产生的。然后还可以采用黑名单的方式对屡次利用PPV来进行欺诈的IP地址进行屏蔽。
另外一种欺诈手段是通过“僵尸网络”Botnets
这种方法主要是试图直接控制用户的终端电脑或者其他的移动设备从而进行很多方面的攻击。在过去僵尸网络的一大应用主要是来产生拒接服务的DDoSDistributed Denial of Service攻击和发送垃圾信息。
近年来因为其灵活性很多僵尸网络也被用于广告欺诈。僵尸网络的一大作用就是产生浏览信息而这些浏览的行为是宿主电脑的用户所无法得知的。因此对付僵尸网络的一大方法就是检测从某些IP地址或者DNS产生的流量行为是否发生了突然的根本性的变化。
第三类欺诈手段是“竞者攻击”Competitor Attack
正常的广告商设立预算参与竞价购买广告位。而竞争对手可以利用“点击欺诈”的方式产生虚假无效的点击信息,从而消耗广告商的预算。当把竞争对手的预算消耗光以后,攻击者反而可以用比较小的成本拿到这些广告位,因为竞争减少了。
另外,还有一种情况是仅仅大量调入竞争对手的广告而不点击。在这样的情况下,就容易产生非常低的点击率。而很多广告平台依赖点击率来进行排序,因此,如果点击率很低,那代价就是难以赢得竞价,通过这种方式也就间接打压了竞争对手。
欺诈检测
了解了什么是广告欺诈以及不同的广告欺诈来源之后,我们来看一看如何利用机器学习技术,来对各种不同的欺诈行为进行检测和挖掘。
首先介绍一个研究[2],作者们提出了一种技术,利用“同访问”图来分析异常的浏览行为。这里面有一个最基本的假设:对于大多数用户来说,对两个不同的网站并不具有相同的喜好程度,除非这些网站非常流行。也就是说,对于绝大多数的网站来说,其用户群体是不一样的。
如果用户和这些网站的相互关系发生了变化,那可能就是出现了一些异常的情况。当然,利用图分析的方法,就是把异常发掘当成了一种无监督学习的任务,自然也就会有无标签的困难。
还有一个研究[3]作者们提出了一种方法来分析用户到底需要花多少时间来浏览显示的像素。这个方法其实就是来检测是否是0像素的展示欺诈。作者们通过研究发现对于50%以上的像素绝大多数用户至少需要1~3秒时间来观看。于是广告商或者平台就可以用这种停留时间来作为一个最基本的检测手段。
当然,一种最普遍的做法就是把广告欺诈当做一个监督学习任务。通过产生各种格样的特性以及把过去已知的欺诈数据当做训练数据来进行学习。这种做法的难点是,欺诈数据在真实世界中毕竟是少数。于是,我们就有了数据不足以及需要训练和不平衡的分类问题。正是因为存在这些问题,欺诈检测依然是一个非常前沿的研究领域。
总结
今天我为你介绍了在线计算广告的最后一个高级话题:欺诈检测。
一起来回顾下要点第一我们讲了三种形式的广告欺诈分别是展示欺诈、点击欺诈和转化欺诈在真实场景中这三种欺诈手段经常混合出现第二产生欺诈的源头很多我们简单介绍了三种不同类型的广告欺诈来源分别是PPV网络、僵尸网络和“竞者攻击第三我们讨论了欺诈检测的一些基本思路比如利用图分析、利用停留时间的方法等等。
最后,给你留一个思考题,如何来检测转化欺诈,也就是我们怎么知道广告转化中哪些是虚假的呢?
参考文献
Interactive Advertising Bureau (2015). What is an untrustworthy supply chain costing the us digital advertising industry?
Stitelman, O., Perlich, C., Dalessandro, B., Hook, R., Raeder, T., and Provost, F. Using co-visitation networks for detecting large scale online display advertising exchange fraud. In Proceedings of the 19th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, pages 12401248. ACM, 2013.
Zhang, W., Pan, Y., Zhou, T., and Wang, J. An empirical study on display ad impression viewability measurements. arXiv preprint arXiv:1505.05788, 2015.

View File

@@ -0,0 +1,79 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
097 LDA模型的前世今生
在文本挖掘中有一项重要的工作就是分析和挖掘出文本中隐含的结构信息而不依赖任何提前标注的信息。今天我要介绍的是一个叫做LDALatent Dirichlet Allocation的模型它在过去十年里开启了一个领域叫主题模型。
从LDA提出后不少学者都利用它来分析各式各样的文档数据从新闻数据到医药文档从考古文献到政府公文。一段时间内LDA成了分析文本信息的标准工具。从最原始的LDA发展出来的各类模型变种则被应用到了多种数据类型上包括图像、音频、混合信息、推荐系统、文档检索等等各类主题模型变种层出不穷。下面我来简单剖析一下LDA这个模型聊聊它的模型描述以及训练方法等基础知识。
LDA的背景介绍
LDA的论文作者是戴维·布雷David Blei、吴恩达和迈克尔·乔丹Michael Jordan。这三位都是今天机器学习界炙手可热的人物。论文最早发表在2002年的神经信息处理系统大会Neural Information Processing Systems简称NIPS然后长文章Long Paper于2003年在机器学习顶级期刊《机器学习研究杂志》Journal of Machine Learning Research上发表。迄今为止这篇论文已经有超过1万9千次的引用数也成了机器学习史上的重要文献之一。
论文发表的时候,戴维·布雷还在加州大学伯克利分校迈克尔手下攻读博士。吴恩达当时刚刚从迈克尔手下博士毕业来到斯坦福大学任教。戴维 2004年从伯克利毕业后先到卡内基梅隆大学跟随统计学权威教授约翰·拉弗蒂John Lafferty做了两年的博士后学者然后又到东部普林斯顿大学任教职先后担任助理教授和副教授。2014年转到纽约哥伦比亚大学任统计系和计算机系的正教授。戴维在2010年获得斯隆奖Alfred P. Sloan Fellowship美国声誉极高的奖励研究人员的奖项不少诺贝尔奖获得者均在获得诺贝尔奖多年之前获得过此奖紧接着又在2011年获得总统青年科学家和工程师早期成就奖Presidential Early Career Award for Scientists and Engineers简称PECASE。目前他所有论文的引用数超过了4万9千次 。
吴恩达在斯坦福晋升到副教授后2011年到2012年在Google工作开启了谷歌大脑Google Brain的项目来训练大规模的深度学习模型是深度学习的重要人物和推动者之一。2012年他合作创建了在线学习平台Coursera可以说是打开了慕课Massive Open Online Course简称MOOC运动的大门。之后吴恩达从2014年到2017年间担任百度首席科学家并创建和运行了百度在北美的研究机构。目前他所有论文的引用数超过8万3千次。
文章的第三作者迈克尔·乔丹是机器学习界的泰斗人物。他自1998年在加州大学伯克利任教至今是美国三个科学院院士American Academy of Arts and Sciences、National Academy of Engineering以及National Academy of Sciences是诸多学术和专业组织的院士比如ACM、IEEE、AAAI、SIAM等。迈克尔可以说是桃李满天下而且其徒子徒孙也已经遍布整个机器学习领域不少都是学术权威。他的所有论文有多达12万次以上的引用量。
值得注意的是对于三位作者来说LDA论文都是他们单篇论文引用次数最多的文章。
LDA模型
要描述LDA模型就要说一下LDA模型所属的产生式模型Generative Model的背景。产生式模型是相对于判别式模型Discriminative Model而说的。这里我们假设需要建模的数据有特征信息也就是通常说的X以及标签信息也就是通常所说的Y。
判别式模型常常直接对Y的产生过程Generative Process)进行描述而对特征信息本身不予建模。这使得判别式模型天生就成为构建分类器或者回归分析的有利工具。而产生式模型则要同时对X和Y建模这使得产生式模型更适合做无标签的数据分析比如聚类。当然因为产生式模型要对比较多的信息进行建模所以一般认为对于同一个数据而言产生式模型要比判别式模型更难以学习。
一般来说产生式模型希望通过一个产生过程来帮助读者理解一个模型。注意这个产生过程本质是描述一个联合概率分布Joint Distribution的分解过程。也就是说这个过程是一个虚拟过程真实的数据往往并不是这样产生的。这样的产生过程是模型的一个假设一种描述。任何一个产生过程都可以在数学上完全等价一个联合概率分布。
LDA的产生过程描述了文档以及文档中文字的生成过程。在原始的LDA论文中作者们描述了对于每一个文档而言有这么一种生成过程
首先从一个全局的泊松Poisson参数为β的分布中生成一个文档的长度N
从一个全局的狄利克雷Dirichlet参数为α的分布中生成一个当前文档的θ
然后对于当前文档长度N的每一个字执行以下两步一是从以θ为参数的多项Multinomial分布中生成一个主题Topic的下标Indexz_n二是从以φ和z共同为参数的多项分布中产生一个字Wordw_n。
从这个描述我们可以马上得到这些重要的模型信息。第一我们有一个维度是K乘以V的主题矩阵Topic Matrix。其中每一行都是一个φ也就是某一个生成字的多项分布。当然这个主题矩阵我们在事先并不知道是需要学习得到的。另外对每一个文档而言θ是一个长度为K的向量用于描述当前文档在K个主题上的分布。产生过程告诉我们我们对于文档中的每一个字都先从这个θ向量中产生一个下标用于告诉我们现在要从主题矩阵中的哪一行去生成当前的字。
这个产生模型是原论文最初提出的,有两点值得注意。
第一,原始论文为了完整性,提出了使用一个泊松分布来描述文档的长度这一变化信息。然而,从模型的参数和隐变量的角度来说,这个假设并不影响整个模型,最终作者在文章中去除了这个信息的讨论。在主题模型的研究中,也较少有文献专注这个信息。
第二原始论文并没有在主题矩阵上放置全局的狄利克雷分布作为先验概率分布。这一缺失在后续所有的主题模型文献中得到修正。于是今天标准的LDA模型有两类狄利克雷的先验信息一类是文档主题分布的先验参数是α一类是主题矩阵的先验参数是β。
文章作者们把这个模型和当时的一系列其他模型进行了对比。比如说LDA并不是所谓的狄利克雷-多项Dirichlet-Multinomial聚类模型。这里LDA对于每个文档的每一个字都有一个主题下标。也就是说从文档聚类的角度来看LDA是没有一个文档统一的聚类标签而是每个字有一个聚类标签在这里就是主题。这也是LDA是Mixed-Membership模型的原因——每个字有可能属于不同的类别、每个文档也有可能属于不同的类别。
LDA很类似在2000年初提出的另外一类更简单的主题模型——概率隐形语义索引Probabilistic Latent Semantic Indexing简称PLSI。其实从本质上来说LDA借用了PLSI的基本架构只不过在每个文档的主题分布向量上放置了狄利克雷的先验概率以及在主题矩阵上放置了另外一个狄利克雷的先验概率。
尽管看上去这是一个非常小的改动但是这样做的结果则是LDA的参数个数并不随着文档数目的增加而增加。那么相对于PLSI来说LDA并不容易对训练数据过度拟合Overfitting
值得注意的原始文章说过度拟合主要是指对于PLSI而言文档的主题分布向量是必须需要学习的而这个向量对于LDA是可以被忽略或者说是并不需要保存的中间变量。然而在实际的应用中我们其实常常也需要这个向量的信息因此这部分对于过度拟合的讨论在后来的应用中并没有特别体现。
LDA模型的训练和结果
LDA虽然从某种意义上来说仅仅是在PLSI上增加了先验信息。然而这一个改动为整个模型的训练学习带来了非常大的挑战。应该说整个LDA的学习直到模型提出后近10年才随着随机变分推理Stochastic Variational Inference的提出以及基于别名方法Alias Method的抽样算法Sampling Method而得以真正的大规模化。一直以来LDA的训练学习都是一件很困难的事情。
不像PLSI可以依靠最大期望EM算法得以比较完美的解决传统上LDA的学习属于贝叶斯推理Bayesian Inference而在2000年代初期只有马尔科夫蒙特卡洛Markov chain Monte Carlo简称MCMC以及迈克尔·乔丹等人推崇的变分推理Variational Inference简称VI作为工具可以解决。这篇文章因为出自迈克尔的实验室当仁不让地选择了VI。比较有意思的是后续大多数LDA相关的论文都选择了MCMC为主的吉布斯Gibbs采样来作为学习算法。
VI的完整讲解无法在本文涵盖。从最高的层次上来理解VI是选取一整组简单的、可以优化的所谓变分分布Variational Distribution来逼近整个模型的后验概率分布。当然由于这组分布的选取有可能会为模型带来不小的误差。不过好处则是这样就把贝叶斯推理的问题转化成了优化问题。
从LDA的角度来讲就是要为θ以及z选取一组等价的分布只不过更加简单更不依赖其他的信息。在VI进行更新θ以及z的时候算法可以根据当前的θ以及z的最新值更新α的值这里的讨论依照原始的LDA论文忽略了β的信息。整个流程俗称变分最大期望Variational EM算法。
文章在TREC AP的文档数据中做了实验。首先作者们使用了一个叫困惑度Perplexity的评估值来衡量文档的建模有效程度这个值越低越好。LDA在好几个数据集中都明显好于PLSI以及其他更加简单的模型。从这篇文章之后主题模型的发展和对比都离不开困惑度的比较也算是开启了一个新时代。
然后作者们展示了利用LDA来做文档分类也就是利用文档主题向量来作为文档的特征从而放入分类器中加以分类。作者们展示了LDA作为文档分类特征的有力证据在数据比较少的情况下优于文本本身的特征。不过总体说来在原始的LDA论文中作者们并没有特别多地展现出LDA的所有可能性。
小结
今天我为你梳理了LDA提出的背景以及这篇论文所引领的整个领域的情况。你需要掌握的核心要点第一论文作者们目前的状态第二LDA模型本身和它的一些特点第三LDA的训练流程概况以及在原始文章中的实验结果。
最后我为你留一个思考题LDA的产生过程决定了对于一个文本而言每个字都可能来自不同的主题那么如果你希望对于某一个段落所有的文字都来自同一个主题你需要对LDA这个模型进行怎么样的修改呢

View File

@@ -0,0 +1,69 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
098 LDA变种模型知多少
我们在之前的分享中曾经介绍过文本挖掘Text Mining中的重要工具LDALatent Diriclet Allocation的基本原理。在文本挖掘中有一项重要的工作就是分析和挖掘出文本中隐含的结构信息而不依赖任何提前标注Labeled的信息。也就是说我们希望能够利用文本挖掘技术来对无标签的数据进行挖掘这是典型的无监督学习。
LDA就是一个出色的无监督学习的文本挖掘模型。这个模型在过去的十年里开启了主题模型Topic Model这个领域。不少学者都利用LDA来分析各式各样的文档数据从新闻数据到医药文档从考古文献到政府公文。在一段时间内LDA成为了分析文本信息的标准工具。而从最原始的LDA发展出来的各类模型变种则被应用到了多种数据类型上包括图像、音频、混合信息、推荐系统、文档检索等等可以说各类主题模型变种层出不穷。
今天我们就结合几篇经典论文来看一看LDA的各种扩展模型。当然在介绍今天的内容之前我们首先来回顾一下LDA模型的一些基本信息。
LDA模型的回顾
LDA模型是一个典型的产生式模型Generative Model。产生式模型的一大特点就是通过一组概率语言对数据的产生过程进行描述从而对现实数据建立一个模型。注意这个产生过程的本质是描述的一个联合概率分布Joint Distribution的分解过程。也就是说这个过程是一个虚拟的过程真实的数据往往并不是这样产生的。这样的产生过程是模型的一个假设一种描述。任何一个产生过程都可以在数学上完全等价一个联合概率分布。
LDA的产生过程描述了文档以及文档中文字的产生过程。在原始的LDA论文中作者们描述了对于每一个文档而言的产生过程。
[LDA模型的前世今生]
相比于传统的文本聚类方法LDA对于每个文档的每一个字都有一个主题下标也就是说LDA是没有一个文档统一的聚类标签而是每个字有一个聚类标签在这里就是主题。
LDA模型的训练一直是一个难点。传统上LDA的学习属于贝叶斯推断Bayesian Inference而在2000年初期只有MCMC算法Markov chain Monte Carlo马尔科夫链蒙特卡洛以及 VIVariational Inference变分推断作为工具可以解决。在最初的LDA论文里作者们采用了VI后续大多数LDA相关的论文都选择了MCMC为主的吉布斯采样Gibbs Sampling来作为学习算法。
LDA的扩展
当LDA被提出以后不少学者看到了这个模型的潜力于是开始思考怎么把更多的信息融入到LDA里面去。通过我们上面的讲解你可以看到LDA只是对文档的文字信息本身进行建模。但是绝大多数的文档数据集还有很多额外的信息如何利用这些额外信息就成为了日后对LDA扩展的最重要的工作。
第一个很容易想到的需要扩展的信息就是作者信息。特别是LDA最早期的应用对于一般的文档来说比如科学文档或者新闻文档都有作者信息。很多时候我们希望借用作者在写文档时的遣词造句风格来分析作者的一些写作信息。那么如何让LDA能够分析作者的信息呢
这里我们分享一篇论文《用于作者和文档信息的作者主题模型》The author-topic model for authors and documents[1]这是最早利用额外信息到LDA模型中的扩展模型。文章提出的模型叫作“作者LDA”Author LDA。这个模型的主要思想是每篇文档都会有一些作者信息我们可以把这些作者编码成为一组下标Index。对于每一个文档来说我们首先从这组作者数组中选出一个当前的作者然后假定这个作者有一组相对应的主题。这样文档的主题就不是每个文档随机产生了而是每个作者有一套主题。这个时候我们从作者相对应的主题分布中取出当前的主题然后再到相应的语言模型中采样到当前的单词。
可以看到作者LDA和普通的LDA相比最大的不同就是主题分布不是每个文档有一个而是每个作者有一个。这个主题分布决定着当前的单词是从哪一个语言模型中采样的单词。作者LDA也采用吉布斯采样的方法学习并且通过模型的学习之后能够看得出不同作者对于文档的影响。
从作者LDA之后大家看出了一种扩展LDA的思路那就是依靠额外的信息去影响主题分布进而影响文档字句的选择。这种扩展的方法叫作“上游扩展法”Upstream。什么意思呢就是说把希望对模型有影响的信息放到主题分布的上游去主动影响主题分布的变化。这其实是概率图模型的一种基本的思路那就是把变量放到这个产生式模型的上游使得下游的变量受到影响。
那你可能要问有没有把需要依赖的变量放到下游的情况呢答案是肯定的。我们再来看一篇论文《同时进行图像分类和注释》Simultaneous image classification and annotation[2]这篇文章就发明了一种方法。具体来说文章希望利用LDA到多模数据领域Multiple Modal。也就是数据中可能有文字也可能有图像还可能有其他信息。在这样的多模数据的情况下如何让LDA能够对多种不同的数据进行建模呢
这里面的基本思路就是认为所有的这些数据都是通过主题分布产生的。也就是说,一个数据点,我们一旦知道了这个数据点内涵的主题(比如到底是关于体育的,还是关于金融的),那么我们就可以产生出和这个数据点相关的所有信息,包括文字、图像、影音等。
具体到这篇文章提出的思路那就是这组数据的图像标签以及图像所属的类别都是主题产生的。我们可以看到和之前的作者LDA的区别那就是其他信息都是放在主题变量的下游的希望通过主题变量来施加影响。
这两种模型代表了一系列丰富的关于LDA的扩展思路那就是如何把扩展的变量设置在上游或者是下游从而能够对主题信息产生影响或者是受到主题信息的影响。
除此以外LDA的另外一大扩展就是把文档放到时间的尺度上希望去分析和了解文档在时间轴上的变化。这就要看经典的论文《动态主题模型》Dynamic topic models[3]。这篇论文最后获得了ICML 2010年的最佳贡献奖。那么我们怎么修改LDA使其能够理解时间的变化呢很明显还是需要从主题分布入手因为主题分布控制了究竟什么文字会被产生出来。因此我们可以认为主题分布会随着时间的变化而变化。
在之前的模型中我们已经介绍了每个文档的主题分布其实来自一个全局的狄利克雷Diriclet 先验分布。那么我们可以认为不同时间的先验分布是不一样的而这些先验分布会随着时间变化而变化。怎么能够表达这个思想呢作者们用到了一个叫“状态空间”State-Space的模型。简而言之状态空间模型就是把不同时间点的狄利克雷分布的参数给串起来使得这些分布的参数会随着时间的变化而变化。把一堆静态的参数用状态空间模型串接起来可以说是这篇文章开创的一个新的思维。
总结
今天我为你梳理了LDA的扩展模型。LDA的扩展当然还有很多我们今天讨论了几个非常经典的扩展思路分别是基于上游、下游和时间序列的LDA扩展模型。
一起来回顾下要点第一我们回顾了LDA这个模型的核心思想第二我们聊了如何把文档的其他信息融入到LDA模型中去以及如何对时间信息进行建模。
最后给你留一个思考题如果我们希望利用LDA来对“用户对商品的喜好”进行建模应该怎么对模型进行更改呢
参考文献
Michal Rosen-Zvi, Thomas Griffiths, Mark Steyvers, and Padhraic Smyth. The author-topic model for authors and documents. Proceedings of the 20th conference on Uncertainty in artificial intelligence (UAI 04). AUAI Press, Arlington, Virginia, United States, 487-494, 2004.
C. Wang, D. Blei., and L. Fei-Fei. Simultaneous image classification and annotation. Computer Vision and Pattern Recognition, 2009.
D.Blei and J.Lafferty. Dynamic topic models. Proceedings of the 23rd International Conference on Machine Learning, 2006.

View File

@@ -0,0 +1,69 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
099 针对大规模数据如何优化LDA算法
周一我们分享了LDALatent Diriclet Allocation的各种扩展模型介绍了基于上游的和下游的两种把额外信息融入到LDA模型中的方法。同时我们也讨论了在时间尺度上如何把LDA模型扩展到可以“感知”不同的时间段对于模型的影响。以LDA为代表的主题模型在过去的十年间发展出了一整套的扩展为各式各样的应用场景提供了有力的工具。
尽管LDA在模型的表达力上给研究者们提供了把各种场景和模型结合的可能性但是LDA的训练过程比较复杂而且速度也比较慢。因此如何能够把LDA真正应用到工业级的场景中对于很多人来说都是一件煞费苦心的事情。今天我们就来聊聊LDA的算法优化问题。
LDA模型训练
我们首先来回顾一下LDA模型的训练过程从高维度上为你分析一下为什么这个过程很困难。
LDA模型中最重要的未知变量就是每个单词对应的主题下标Index或者说是主题“赋值”Assignment。这个主题下标是从每个文档对应的主题分布中“采样”得来的。每个文档的主题分布本身也是一个未知的多项式分布用来表达当前这个文档的所属主题比如有多少百分比属于运动、有多少百分比属于金融等等。这个分布是从一个全局的狄利克雷Diriclet分布中产生的。狄利克雷分布在这里起到了超参数的作用其参数的取值往往也是未知的。但是我们可以根据一些经验值对其进行设置。除了每个文档的主题分布和主题赋值以外我们还需要对全局的主题语言模型进行估计。这些语言模型直接决定了各类词语出现的概率是多少。
流行的LDA训练方法有两个一个是基于吉布斯采样Gibbs Sampling的随机方法一个是基于变分推断Variational Inference的确定性方法Deterministic。这两种方法的初始形态都无法应对大型数据。这里我们来简要介绍一下这两种方法。
吉布斯采样主要是针对主题赋值进行采样最开始是完全随机的结果但是慢慢会收敛到参数的后验概率的真值。这里面比较慢的一个原因是这个收敛过程可能需要几百到几千个不等的迭代。同时吉布斯采样只能一个文档一个文档进行所有的数据结构都需要在采样的过程中进行更改。这个过程比较慢的另外一个原因是吉布斯采样的核心是如何对一个离散分布进行采样。而离散分布采样本身如果在分布的参数变化的情况下最好能够达到OKlogK这里K是主题的数目。因此从原理上来说这也是阻碍吉布斯采样能够扩展到大型数据的一个原因。
变分推断的思路则和吉布斯采样很不一样。它是把对隐含参数的估计问题变成一个确定性的优化问题,这样我们就可以利用种种优化算法来解决贝叶斯推断的问题。不过和吉布斯采样相比,变分推断存在一个问题,因为这种方法并不是解决原来的优化问题,因此新的优化问题可能并不能带来原来问题的解。同时,变分推断也需要一个文档一个文档单独处理,因此推广到大规模数据上有其局限性。
LDA的大规模优化算法
顺着我们刚才提到的问题,为了把吉布斯采样和变分推断扩大到大规模数据上,学者们有针对性地做了很多探索。我们下面就分别对这两种思路展开简要的介绍。
首先,我们来看吉布斯采样。吉布斯采样慢的一个核心就是我们刚才说的,需要从一个离散分布中采样出一个样本,在我们这个例子中也就是每个单词的主题赋值。那么,有没有什么方法让这个步骤加速呢?答案是,有的。
在KDD 2009上发表了一篇论文《应用于流文档集合的主题模型推断的高效方法》Efficient methods for topic model inference on streaming document collections[1],算是在这方面取得突出成绩的一个重要参考文献。这篇论文的主要贡献就是,对原有的采样公式进行了一个比较仔细的分析。
作者们发现,原来的吉布斯采样公式可以被分解为几个部分:和全局的语言模型有关、和文档有关以及和当前需要采样的单词有关。这是一个非常有价值的观察,之后很多加速吉布斯采样的工作基本上都采用了类似的思路,也就是试图把原始的吉布斯采样公式拆分成好几个组成部分,并且每一个部分所代表数据的变化率是不一样的。
以这篇文章提出的方法来说,全局语言模型在每个文档的采样过程中是不变的,于是这部分的计算不需要每个单词都重算。同理,只与文档相关的部分,也可以每个单词的采样过程中,只算一次,而不需要每个主题算一次。在这样一个简化了的流程里,采样速度得到了极大的提升。
在这篇文章之后通过吉布斯采样这个方法LDA的采样速度还是没有得到明确的提升直到《降低主题模型的采样复杂度》Reducing the sampling complexity of topic models[2]这篇论文的出现。这篇论文获得了KDD 2014年的最佳论文奖。文章的思想还是针对吉布斯采样的公式不过这一次拆分的方法略不一样。作者们把采样的公式拆分成了与当前文档有关系的一部分以及和当前文档没关系的全局语言模型的部分。
同时作者们提出了一个“Alias方法”Alias Method简称A算法来加速采样。这个A算法其实并不是作者们为了LDA发明的而是一个普遍的可以对离散分布采样的一个算法。A算法的核心思想是如果我们要针对一个分布进行反复采样那么就可以建立一种数据结构使得这种采样只有在第一遍的时候有一定的计算成本而后都会以O(1)的成本进行采样。这个方法极大地加速了LDA通过吉布斯采样的效率。值得一提的是在这篇论文之后很多研究者发布了一系列的后续工作。
那么在变分推断的道路上,有没有什么方法能够加速呢?答案依然是肯定的。
这方面的代表作无疑就是论文《LDA的在线学习》Online learning for Latent Dirichlet Allocation[3]。
我们回到变分推断的场景中,把一个贝叶斯推断的问题变成了优化的问题。那么,在优化的场景里,是怎么针对大规模数据的呢?
在优化的场景里特别是基于梯度Gradient的优化方法中大数据的应用往往需要SGDStochastic Gradient Descent随机梯度下降的方法。通俗地讲就是在计算梯度的时候我们不需要处理完所有的数据之后才计算一次梯度而是针对每一个文档都可以计算一次梯度的估计值。
作者们其实就是把这个思想给搬到了变分推断里。总的来说新发明出来的变分推断其实就是希望能够推演出一种类似SGD的变分方法这种方法在后来的很多论文中都有所应用。
总结
今天我为你梳理了LDA优化算法的相关知识。
一起来回顾下要点第一我们聊了聊LDA这个模型的优化算法为什么会有难度特别是针对吉布斯采样和变分推断这两种思路来说难点在哪里第二我们分享了当前加速LDA算法的两种思路主要讨论了两种思路的一些核心思想希望能够起到抛砖引玉的作用。
最后给你留一个思考题除了在算法层面希望能够加速LDA以外我们能否利用并行化对LDA进行加速呢
参考文献
Limin Yao, David Mimno, and Andrew McCallum. Efficient methods for topic model inference on streaming document collections. Proceedings of the 15th ACM SIGKDD international conference on Knowledge discovery and data mining (KDD 09). ACM, New York, NY, USA, 937-946, 2009.
Aaron Q. Li, Amr Ahmed, Sujith Ravi, and Alexander J. Smola. Reducing the sampling complexity of topic models. Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining (KDD 14). ACM, New York, NY, USA, 891-900, 2014.
Matthew D. Hoffman, David M. Blei, and Francis Bach. Online learning for Latent Dirichlet Allocation. Proceedings of the 23rd International Conference on Neural Information Processing Systems - Volume 1 (NIPS10), 2010.

View File

@@ -0,0 +1,57 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
100 基础文本分析模型之一:隐语义分析
本周我们分享了文本挖掘中的一个重要工具LDALatent Diriclet Allocation这是一个出色的无监督学习的文本挖掘模型。
今天,我们沿着文本分析这一方向继续展开。我们首先回到一个最基础的问题,那就是文本分析的基础模型都有哪些,这些最早的模型对后面的发展都有哪些贡献和启发?
带着这些问题我们一起来看一个叫“隐语义分析”Latent Semantic Indexing的技术。
隐语义分析的背景
为什么需要隐语义分析呢?隐语义分析到底发挥了怎样的历史性作用呢?
对于数据挖掘而言,文本数据算是大规模数据中,研究人员最早接触到的一类数据了。长久以来,大家都有一种直观的想法,那就是在这些看似没有头绪的文字中,究竟有没有隐含着某些规律呢?我们到底能不能从文字中提取出一些更加有用的结构性的内容呢?
对于文本分析,有一类是基于“显式”的标签来进行的。也就是说,我们可以把文本分析当作是监督学习的任务来看待。这一类文本分析的一大特点,往往是针对某一种任务建立分类器,然后对不同类别的文本进行鉴别,从而达到更加深入理解文本的目的。比如,我们需要理解不同情感的文字的时候,通常情况下,我们需要有一个数据集,能够告诉我们哪些文档是“正面情绪”的,哪些是“负面情绪”的。
然而,并不是所有的文本分析任务都是建立在有数据标签的基础之上。实际上,对于绝大多数文本数据而言,我们事先是并没有标签信息的。那么,在没有标签信息的场景下,如何对文本提取关键信息就成为了研究人员长期面对的一个关键挑战。
如果我们用今天的眼光来看,隐语义分析的核心其实就是用无监督的方法从文本中提取特性,而这些特性可能会对原文本的深层关系有着更好的解释。
其实从20世纪80年代发展出来的隐语义分析一直到今天利用深度学习技术来对文本的内涵进行分析其实质都是一样的都是看如何能够用无监督的方法提取文本特性一个重要的区别当然是在提取办法的差异上。
隐语义分析
对隐语义分析的一个简单直白的解释就是:利用矩阵分解的概念对“词-文档矩阵”Term-Document Matrix进行分解。
在前面介绍推荐系统的时候,我们已经看到了矩阵分解可以认为是最直接的一种针对矩阵数据的分析方式。
那么,为什么我们需要对矩阵进行分解呢?
这里面的一个隐含的假设就是,“词-文档矩阵”是一个稀疏矩阵。什么意思意思就是从大规模的文字信息来说文字服从一个叫“幂定律”Power Law Distribution的规律。那就是绝大多数的单词仅出现很少的次数而少数的单词会出现在很多文档中。我们也可以理解成一种变形的“20/80”原理也就是20%的单词出现在80%的文档中。当然,文字的幂定理规则的一个直接结果就是“词-文档矩阵”是稀疏矩阵。这个矩阵里面有大量的零,代表很多单词都没有出现在那些文档中。
对一个稀疏矩阵我们往往假设原有的矩阵并不能真正表示数据内部的信息。也就是说我们认为可能会有一个结构存在于这个矩阵之中。而这个假设就是我们经常会在矩阵分解这个语境中提到的“低维假设”Low-rank Approximation。你不必去担心这个低维假设的本质意义我们只需要理解这个低维假设的核心就是我们可以用比较少的维度来表达原来的这个稀疏的矩阵。
试想我们拥有一个N乘M的“词-文档矩阵”也就是说我们有N个单词M个文档。在这个稀疏矩阵的数据中矩阵分解的基本思想是希望得到一个N乘以K的单词矩阵以及一个K乘以M的文档矩阵。K是一个事先指定好的参数这也是矩阵分解的一个核心问题那就是如何选择这个K。我们可以看到这种分解能够还原之前的N乘以M的“词-文档矩阵”。
那么这两个新的矩阵有什么“含义”呢人们通过对很多数据的分解以后发现单词矩阵往往能够把一些在某种语境下的单词给聚拢。比如我们会发现很多和体育相关的词会聚拢在某个维度下而很多和金融相关的词会聚拢在另外一个维度下。慢慢地大家就开始把每一个维度认定为一个“主题”。那么基于矩阵分解的隐语义分析其实就是最早的主题模型。而文档矩阵则描述了不同文档在我们K个主题下的强度。
值得注意的是我们这里为了介绍隐语义模型的实际意义而隐藏了一些实际的技术细节。从历史上看比较流行的隐语义模型其实是基于“奇异值分解”Singular Value Decomposition也就是我们常常听到的SVD分解。由于篇幅有限我们这里就不针对SVD分解展开讨论了。即便是SVD分解其核心思想依然是我们刚才讲到的分解出来的主题矩阵。
基于矩阵分解的隐语义模型也有其局限性最大的一个问题就是分解出来的矩阵本身都是实数也就是有负数和正数这也限制了我们真正用这些数来进行一些含义的推断。然而即便如此在很长的一段时间里基于SVD的隐语义模型可以说是标准的无监督文本挖掘的核心算法。
总结
今天我为你介绍了基于矩阵分解的隐语义模型的相关知识。
一起来回顾下要点:第一,我们聊了聊为什么需要隐语义模型;第二,我们聊了一下基于矩阵分解的隐语义模型的核心思想及其局限。
最后,给你留一个思考题,如果我们要限制矩阵分解的结果是非负数,我们应该怎么做呢?

View File

@@ -0,0 +1,51 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
101 基础文本分析模型之二:概率隐语义分析
在上一篇的分享里我们展开了文本分析这个方向讨论了“隐语义分析”Latent Semantic Indexing这个模型。隐语义分析的核心是基于矩阵分解的代数方法。这种方法的好处自然是能够直接利用代数计算方法对文本进行分析而短板则是无法很好地解释结果。而“解释性”是很多概率模型的一大优势因此自然就有很多研究者想到是否能够把概率的语言移植到隐语义分析上。
今天我们就来分享“概率隐语义分析”Probabilistic Latent Semantic Indexing的一些基本内容。概率隐语义分析有时候又被简称为 PLSAProbability Latent Semantic Analysis
隐语义分析核心思想
上周我们介绍过隐语义分析的核心思想,首先来简要回顾一下。
隐语义分析的核心其实就是用无监督的方法从文本中提取特性,而这些特性可能会对原来文本的深层关系有着更好的解释。
简单来说,隐语义分析就是利用了“矩阵分解”的概念,从而对“词-文档矩阵”Term-Document Matrix进行分解。
概率隐语义分析
既然概率隐语义分析是利用概率的语言,那么我们就来看看概率隐语义分析是如何对文档进行建模的。
首先PLSA是对文档和里面单词的联合分布进行建模。这个文档和单词的联合分布其实就是类似隐语义分析中的那个文档和单词的矩阵。只不过在PLSA里我们不是直接对数据进行建模而是认为数据是从某个分布中产生的结果。那么对于这个联合分布该如何建模呢
一种方法就是对这个联合分布直接进行建模,但是这往往会遇到数据不足的情况,或者无法找到一个合适的已知参数的分布来直接描述我们需要建模的这个联合分布。另外一种经常使用的方法就是简化这个联合分布,从而找到我们可以建模的形式。
那么,如何简化联合分布呢?一种方法就是把一个联合分布进行分解。
一种分解分布的方法就是假定一些隐含的变量然后数据又是从这些隐含变量中产生而来。在我们现在的情况里我们从文档和单词的联合分布入手可以做出这样的假设这个文档和单词的联合分布是我们首先从文档出发产生了当前所需要的主题比如金融、运动等然后再从主题出发产生相应的单词。很明显这里的主题是我们并不知道的隐含变量是需要我们从数据中估计出来的。这就是PLSA模型的基本假设。
PLSA还有一个等价的模型描述也是对文档单词联合分布的另外一种分解那就是我们首先假设有一个主题的先验概率然后根据这个主题的分布产生了一个文档同时也产生了这个文档里面的所有单词。这种假设观点非常类似我们之前在介绍高级的主题模型时谈到的“下游方法”Down-Stream。这里文档变量和单词变量都成为了隐变量也就是主题变量的下游变量。
通过一定的代数变形,我们可以得到这两种方法其实就是等价的。
如果我们按照第一种分解方法来认识文档单词分布有一种更加通俗的解释我们其实是给每一个单词都联系了一个未知的主题变量这个主题变量是从一个文档级别的主题分布得来的实际上这是一个多项分布Multinomial Distribution然后根据这个主题变量我们又从相应的一个语言模型中抽取出了当前的单词这又是另外的一个多项分布。如果从这个角度来看待这个模型你会发现PLSA其实和LDA非常相似。
实际上从模型的根本特征上来说PLSA和LDA都是对文档单词分布的一种分解或者叫作产生解释。只不过LDA针对刚才我们所说的两个多项分布一个是每个文档的主题分布另外一个是K个语言模型都外加了先验分布使得整个模型更加符合贝叶斯统计的观点。然而在建模的核心思想上PLSA和LDA是一样的。
关于如何学习PLSA这样的隐变量模型我将会在后面的分享中和你详细讨论。
总结
今天我为你介绍了基于概率模型的隐语义模型的相关知识。
一起来回顾下要点第一我们简要回顾了隐语义模型的重要性第二我们讨论了基于概率语言的隐语义模型的核心思想以及PLSA和LDA的联系和区别。
最后给你留一个思考题PLSA的建模流程有没有什么局限性

View File

@@ -0,0 +1,59 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
102 基础文本分析模型之三EM算法
周一我们分享的模型是“概率隐语义分析”Probabilistic Latent Semantic Indexing或者简称为PLSA这类模型有效地弥补了隐语义分析的不足在LDA兴起之前成为了有力的文本分析工具。
不管是PLSA还是LDA其模型的训练过程都直接或者间接地依赖一个算法这个算法叫作“期望最大化”Expectation Maximization或简称为 EM算法。实际上EM算法是针对隐参数模型Latent Variable Model最直接有效的训练方法之一。既然这些模型都需要EM算法我们今天就来谈一谈这个算法的一些核心思想。
EM和MLE的关系
EM算法深深根植于一种更加传统的统计参数方法最大似然估计Maximum Likelihood Estimation有时候简称为 MLE。绝大多数的机器学习都可以表达成为某种概率模型的MLE求解过程。
具体来说MLE是这样构造的。首先我们通过概率模型写出当前数据的“似然表达”。所谓的“似然”表达其实也就是在当前模型的参数值的情况下看整个数据出现的可能性有多少。可能性越低表明参数越无法解释当前的数据。反之如果可能性非常高则表明参数可以比较准确地解释当前的数据。因此MLE的思想其实就是找到一组参数的取值使其可以最好地解释现在的数据。
针对某一个模型写出这个MLE以后就是一个具体的式子然后看我们能否找到这个式子最大值下的参数取值。这个时候整个问题往往就已经变成了一个优化问题。从优化的角度来说那就是针对参数求导然后尝试把整个式子置零从而求出在这个时候的参数值。
对绝大多数相对比较简单的模型来说我们都可以根据这个流程求出参数的取值。比如我们熟悉的利用高斯分布来对数据进行建模其实就可以通过MLE的形式写出用高斯建模的似然表达式然后通过求解最优函数解的方式得到最佳的参数表达。而正好这个最优的参数就是样本的均值和样本的方差。
然而并不是所有的MLE表达都能够得到一个“解析解”Closed Form Solution有不少的模型甚至无法优化MLE的表达式那么这个时候我们就需要一个新的工具来求解MLE。
EM算法的提出就是为了简化那些求解相对比较困难模型的MLE解。
有一点需要说明的是EM算法并不能直接求到MLE而只能提供一种近似。多数无法直接求解的MLE问题都属于非凸Non-Convex问题。因此EM能够提供的仅仅是一个局部的最优解而不是全局的最优解。
EM算法的核心思想
理解了EM和MLE的关系后我们来看一看EM的一些核心思想。因为EM算法是技术性比较强的算法我建议你一定要亲自去推演公式从而能够真正理解算法的精髓。我们在这里主要提供一种大体的思路。
EM算法的一种解释是这样的。首先我们可以通过代数变形为每一个数据点的似然公式找到一个新的概率分布而这个概率分布是通过一个隐含变量来达到的。很明显在理论上我们可以通过把这个隐含变量积分掉来达到恢复原始的MLE公式的目的。
然而这里遇到的一个大的阻碍就是在MLE公式里面有一个求对数函数log在这个积分符号外面。这就导致整个式子无法进行操作。通俗地讲EM就是要针对这样的情况试图把这个在积分符号之外的求对数函数拿到积分符号里面。能够这么做是因为有一个不等式叫“杨森不等式”。你不需要去理解杨森不等式的细节大体上这个不等式是说函数的期望值要大于或等于先对函数的变量求期望然后再对其作用函数。
于是在这样的一个不等式的引领下我们刚才所说的积分其实就可以被看作是对某一个函数求期望值。而这个函数恰好就是模型的似然表达。通过杨森不等式我们可以把对数函数拿到积分符号里面这样当然就无法保持等号了也就是说这一步的操作不是一个等值操作。利用杨森不等式之后的式子其实是原来的式子也就是含有隐含变量的MLE式的一个“下限”Lower Bound
利用杨森不等式从而写出一个原始的MLE的下限是标准的EM算法以及一系列基于变分EMVariational EM算法的核心思想。这么做的目的其实就是把对数函数从积分的外面给拿到里面。
当我们有了这个下限之后我们就可以套用MLE的一切流程了。注意这时候我们有两组未知数。一组未知数是我们模型的参数另外一组未知数就是模型的隐含变量。于是当得到下限之后我们就需要对这两组未知数分别求导并且得到他们的最优表达。
当我们按照当前的模型参数对模型的隐含变量所对应的概率分布求解后最优的隐含变量的概率分布就等于隐含变量基于数据的后验概率。什么意思呢意思就是说如果我们把隐含变量的取值直接等于其后验概率分布就得到了当前的最优解。这个步骤常常被叫作“E步”。
在进行了E步之后我们再按照当前的隐含变量求解这个时候最佳的模型参数。这常常被认为是“M步”。一次E步一次M步则被认为是EM算法的一个迭代轮回。
EM算法貌似很神秘但如果我们理解了整个流程的精髓就可以把这个算法总结为EM算法是利用杨森不等式得到MLE的一个下限并且优化求解模型参数和模型的隐含变量的一个过程。
掌握了这个精髓我们就可以看到为什么LDA和PLSA等隐变量模型需要利用EM或者类似EM的步骤进行求解。第一这些模型的MLE都有一个对数函数在积分符号外面使得这个过程无法直接求解。第二这些模型本身就有隐含变量因此不需要额外制造新的隐含变量。
总结
今天我为你介绍了一个经常用于求解概率图模型的EM算法。
一起来回顾下要点第一我们回顾了EM算法和MLE算法的关系第二我们讨论了EM算法的核心思想。
最后给你留一个思考题EM算法在实际应用中有哪些问题呢

View File

@@ -0,0 +1,57 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
103 为什么需要Word2Vec算法
至此,关于文本分析这个方向,我们已经介绍了 LDALatent Diriclet Allocation这是一个出色的无监督学习的文本挖掘模型。还有“隐语义分析”Latent Semantic Indexing其核心是基于矩阵分解的代数方法。接着我们分享了“概率隐语义分析”Probabilistic Latent Semantic Indexing这类模型有效地弥补了隐语义分析的不足成为了在LDA兴起之前的有力的文本分析工具。我们还介绍了EMExpectation Maximization算法这是针对隐参数模型最直接有效的训练方法之一。
今天我们进入文本分析的另外一个环节介绍一个最近几年兴起的重要文本模型Word2Vec。可以说这个模型对文本挖掘、自然语言处理、乃至很多其他领域比如网络结构分析Network Analysis等都有很重要的影响。
我们先来看Word2Vec的一个最基本的形式。
Word2Vec背景
了解任何一种模型或者算法都需要了解这种方法背后被提出的动机,这是一种能够拨开繁复的数学公式从而了解模型本质的方法。
那么Word2Vec的提出有什么背景呢我们从两个方面来进行解读。
首先我们之前在介绍LDA和PLSA等隐变量模型的时候就提到过这些模型的一大优势就是在文档信息没有任何监督标签的情况下能够学习到文档的“隐含特性”。这也是文档领域“表征学习”Representation Learning的重要工具。遗憾的是不管是LDA还是PLSA其实都是把文档当作“词包”Bag Of Word然后从中学习到语言的特征。
这样做当然可以产生不小的效果,不过,从自然语言处理,或者是文档建模的角度来说,人们一直都在探讨,如何能够把单词的顺序利用到学习表征里。什么意思呢?文档中很重要的信息是单词的顺序,某一个特定单词组合代表了一个词组或者是一个句子,然后句子自然也就代表着某种语义。词包的表达方式打破了所有词组顺序以及高维度的语义表达,因此长期以来被认为并不能真正学习到语言的精华。
然而,在主题模型这个大旗帜下,已经有不少学者和研究员试图把词序和语义给加入到模型中,这些尝试都没有得到很好的效果,或者模型过于复杂变得不适用。于是,大家都期待着新的工具能够解决这方面的问题。
另外一个思路也是从词包发展来的。词包本身要求把一个词表达成为一个向量。这个向量里只有一个维度是1其他的维度都是0。因为每个词都表达成为这样离散的向量因此词与词之间没有任何的重叠。既然两个离散的向量没有重叠我们自然也就无法从这个离散的词包表达来推断任何词语的高维度语义。这也是为什么大家会利用主题模型从这个离散的词包中抽取主题信息从而达到理解高维度语义的目的。
既然我们的目的是从离散的词包中获取更加丰富的信息那有没有另外的方法或者途径能够达到这个目的呢一种基本的假设是这样的如果我们能够从离散的向量里面抽取出每个词组的“连续”Continuous信息向量假设两个词有相近的意思那么这两个词的联系向量势必就会比较相近这样我们就能够通过词向量只不过是连续向量来得到词汇的高级语义信息。这个假设常常被叫作词的“分布假设”Distributed Assumption
了解了以上这两个方面后我们再来理解Word2Vec可能就比较容易明白这个模型究竟想要干什么了。
Word2Vec模型摘要
首先我们需要说明的是Word2Vec是一种语言模型主要是根据当前的语境来预测下一个单词出现的概率也就是和我们之前所说的产生式模型相似看是否能够从模型中产生单词。这和我们介绍的主题模型是不一样的在这个模型里我们并没有假定数据也就是单词是从某几个主题中产生的。
Word2Vec的核心思想是当前的单词是从周边单词的隐含表达或者说是词向量中产生的。也就是说每一个单词都依赖于上下文而这个单词的产生并不是直接依赖周围单词的离散表达而是依赖周边单词的连续表达。这个连续表达自然是事先不知道的因此这就是Word2Vec模型需要学习的未知参数。
在具体的操作上Word2Vec有两个不太一样的模型但是经常被同等程度地使用。我们这里做一个简单的介绍。
第一种模型叫作Skip-Gram或者简称SG模型。这种模型的输入是一个词输出是这个词周围的词。这样做的目的是看我们能否用当前的词来预测周围的词。要想让这个任务有很好的表现当前词的表征必须能够抓住某种语义的信息。具体来说我们就是用当前词的表征向量和所有其他词的表征向量做点积然后再重新归一。这个过程就能够保证当前词的表征向量和周围词的表征向量相似。这样也就解决了我们之前提到的如何能够把词序影响到词的表征向量中。
另外一种模型叫作Continuous-Bag-of-Word有时候简称CBOW模型。这种模型刚好和SG是相反的也就是输入是一组词汇而希望能够通过这组词汇得到中间某个词的预测。和我们刚才所说的一样这个模型也是基于我们并不知道的表征向量来达到模型学习的目的。
不管是SG还是CBOW本质上就是希望能够利用文章的上下文信息学习到连续空间的词表达这是Word2Vec所有模型的核心。
SG和CBOW在具体的应用中常常需要比较复杂的训练算法我们这里就不展开讨论了。如果你有兴趣可以进一步阅读一些论文。
总结
今天我为你介绍了Word2Vec模型的基本含义。
一起来回顾下要点第一我们介绍了Word2Vec这个模型是怎么被开发出来的它背后有哪些原理第二我们讨论了SG和CBOW这两种非常典型的Word2Vec模型。
最后给你留一个思考题和LDA相比Word2Vec好在哪里又有什么不足的地方

View File

@@ -0,0 +1,63 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
104 Word2Vec算法有哪些扩展模型
从上一期的分享开始我们进入到文本分析的另外一个环节那就是介绍一个最近几年兴起的重要文本模型Word2Vec。这个模型对文本挖掘、自然语言处理等很多领域都有重要影响。我们讨论了Word2Vec模型的基本假设主要是如何从离散的词包输入获得连续的词的表达以及如何能够利用上下文从而学习到词的隐含特性。我们还聊了两个Word2Vec模型SGSkipGram模型和CBOWContinuous-Bag-of-Word模型讨论了它们都有什么特性以及如何实现。
今天我们就来看一看Word2Vec的一些扩展模型。
Word2Vec的扩展思路
在列举几个比较知名的Word2Vec扩展模型之前我们首先来看看这个模型怎么进行扩展。
首先我们来回忆一下Word2Vec的一个基本的性质那就是这是一个语言模型。而语言模型本身其实是一个离散分布模型。我们一起来想一想什么是语言模型语言模型就是针对某一个词库这里其实就是一个语言的所有单词然后在某种语境下产生下一个单词的模型。也就是说语言模型是一个产生式模型而且这个产生式模型是产生单词这一离散数据的。
既然是这样如果我们更改这个词库变成任何的离散数据那么Word2Vec这个模型依然能够输出在新词库下的离散数据。比如如果我们把词汇库从英语单词换成物品的下标那Word2Vec就变成了一个对物品的序列进行建模的工具。这其实就是扩展Word2Vec的一大思路那就是如何把Word2Vec应用到其他的离散数据上。
扩展Word2Vec的第二大思路则是从Word2Vec的另外一个特性入手上下文的语境信息。我们在之前的介绍中也讲过这个上下文信息是Word2Vec成功的一个关键因素因为这样就使得我们学习到的词向量能够表达上下文的关联所带来的语义信息。这也是传统的主题模型Topic Model例如LDA或者PLSA所不具备的。那么我们能不能对这个上下文进行更换从而使得Word2Vec能够产生完全不一样的词向量呢答案是肯定的这也是Word2Vec扩展的重要思路。
除此以外还有一个重要的分支那就是很多研究者都希望往Word2Vec里增加更多的信息比如文档本身的信息段落的信息以及其他的辅助信息。如何能够让Word2Vec对更多信息建模也是一个重要的扩展思路。
Word2Vec的三个扩展
我们要介绍的第一个扩展是由Word2Vec作者本人提出的就是把学习词向量的工作推广到句子和文章里在论文《句子和文档的分布表示》Distributed representations of sentences and documents[1]里进行了详细的阐述。这个扩展主要是解决如何能够更加“自然”地学习到比词这个单位更大的单位(比如段落或者文档)的隐含向量。
当Word2Vec被发明之后很多研究者都发现这是一个能够把离散的词表达成连续向量的利器。然而一个应用场景很快就成为了大家的拦路虎那就是Word2Vec仅仅是在词一级数据上进行建模却无法直接得到文档一级的隐含信息。
有一种做法是这样的,比如针对一个句子或者一个段落,我们就把这个句子里的词所使用的词向量加权平均,认为这个加权平均过的结果就是段落的向量了。很明显,这是一种非常不精确的处理方法。
那么这篇文章的核心则是如何能够在模型本身上进行修改从而可以学习到比词更加高一层级单元的隐含向量。具体的做法就是修改原始Word2Vec的上下文信息。我们回忆一下SG模型和CBOW模型都有一个关键的信息那就是利用上下文也就是一个句子周围的词来预测这个句子或者上下文中间的一个词。这就是Word2Vec能够利用上下文信息的原因。那么这里的修改就是让这个上下文始终都有一个特殊的字符也就是当前段落或者文章的下标从而这个下标所对应的隐含向量就是我们所要学习到的段落或者文档的向量。在这样的情况下作者们通过实验发现学到的段落向量要比单独用加权平均的效果好得多。
我们要看的第二个扩展来自论文《线大规模信息网络嵌入》LINE: Large-scale Information Network Embedding[2]就是把Word2Vec的思想扩展到了另外一种离散数据图Graph的表达上。
刚才我们提到只要是离散的数据Word2Vec都有可能被应用上。那么图的数据建模的场景是什么呢我们设想一个社交网络Social Network的数据。每一个用户都有可能和其他用户相连而两两相连的用户所组成的整个网络就是社交网络的庞大的用户信息。很明显如果我们把用户看作单词那么整个社交网络就是一个单词和单词的网络。如果我们把两个单词在这里是用户之间的连线看成是单词出现在一起的上下文那么我们其实就可以利用Word2Vec这样的模型对社交网络所表达图进行建模。这就是这篇文章里作者们利用Word2Vec对社交网络建模的核心思想。
当然,和在文档中不同,在图里面,上下文这一关系其实是比较难以定义的。因此,很多后续的工作都是关于如何更加有效地定义这一上下文关系。
最后我们结合论文《用于支持搜索中查询重写的上下文和内容感知嵌入》Context- and Content-aware Embeddings for Query Rewriting in Sponsored Search[3]来看另一个Word2Vec的扩展。这个扩展是尝试在查询关键词和用户点击的网页之间建立上下文关系使得Word2Vec模型可以学习到查询关键词以及网页的隐含向量。
这也就是我们提到的巧妙地搭建上下文关系使得模型可以学习到离散数据的隐含表达。你可能比较好奇这里的离散数据是什么呢这里有两组离散数据第一组就是每一个查询关键词这完全可以按照Word2Vec原本的定义来走第二组离散数据就是每一个网页。注意这里不是网页的内容而是某一个网页作为一个下标。那么从模型的角度上来说这里我们要做的就是利用查询关键词来预测网页出现的概率。
总结
今天我为你介绍了Word2Vec模型扩展的一些基本思路和一些实际的案例。
一起来回顾下要点第一我们讨论了Word2Vec这个模型需要扩展的思路比如从离散数据入手或者从上下文入手第二我们分享了三个比较经典的Word2Vec扩展。
最后给你留一个思考题Word2Vec能否扩展到连续数据中呢
参考文献
Quoc Le and Tomas Mikolov. Distributed representations of sentences and documents. Proceedings of the 31st International Conference on International Conference on Machine Learning - Volume 32 (ICML14), Eric P. Xing and Tony Jebara (Eds.), Vol. 32. JMLR.org II-1188-II-1196, 2014.
Jian Tang, Meng Qu, Mingzhe Wang, Ming Zhang, Jun Yan, and Qiaozhu Mei. LINE: Large-scale Information Network Embedding. Proceedings of the 24th International Conference on World Wide Web (WWW 15). International World Wide Web Conferences Steering Committee, Republic and Canton of Geneva, Switzerland, 1067-1077, 2015.
Mihajlo Grbovic, Nemanja Djuric, Vladan Radosavljevic, Fabrizio Silvestri, and Narayan Bhamidipati. Context- and Content-aware Embeddings for Query Rewriting in Sponsored Search. Proceedings of the 38th International ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR 15). ACM, New York, NY, USA, 383-392, 2015.

View File

@@ -0,0 +1,45 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
105 Word2Vec算法有哪些应用
周一我们分享了三个比较有代表意义的Word2Vec的扩展模型主要有两种思路从词的上下文入手重新定义上下文或者对完全不同的离散数据进行建模。
今天我们来看一看Word2Vec在自然语言处理领域的应用。如果我们已经通过SG模型、CBOW模型或者其他的算法获得了词向量接下来我们可以把这些词向量用于什么样的任务中呢
Word2Vec的简单应用
最直接的也是最常见的Word2Vec应用就是去计算词与词之间的相似度。当我们的数据还是原始的“词包”Bag of Word这时候是没法计算词与词之间的相似度的因为每个词都被表示为某个元素为1其余元素都为0 的离散向量。按照定义两个离散向量之间的相似度都是0。因此从词包出发我们无法直接计算词与词之间的相似度这是从定义上就被限制了的。
Word2Vec就是为了跨越这个障碍而被发明的这一点我们在前面就已经提到过了。所以当我们可以用Word2Vec的词向量来表示每一个单词的时候我们就可以用“余弦相关度”Cosine Similarity来对两个词向量进行计算。余弦相关度其实就是计算两个向量的点积然后再归一化。如果针对已经归一化了的向量我们就可以直接采用点积来表达两个向量的相关度。不管是余弦相关度还是点积我们都假设计算结果的值越大两个词越相关反之则不相关。
既然我们可以计算两个词的相关度那么很多依赖相关度的任务就都能够轻松完成。比如我们希望把词进行聚类也就是说把相关的词都聚合在一起。通常的聚类算法都可以直接使用比如我们熟悉的“K均值”算法。这些算法的核心是计算两个数据点的距离就可以利用我们刚刚讲的余弦相关度来实现。
我们在谈Word2Vec扩展模型的时候曾经提到了一些扩展模型可以用于表达比词这个单位更大的文本单元比如段落和文档向量的获取。其实当时我们就提到了一种可以得到这些单元向量的简单方法那就是直接利用Word2Vec来进行加权平均。在获得了词向量之后我们就可以用一个文档里所有词的加权平均甚至是简单的叠加来达到表达文档的目的。这个时候我们也就可以利用诸如余弦相关度来计算文档之间的相关度了。
另外一个随着Word2Vec的推出而大放异彩的应用则是“词语的类比”。Word2Vec的原作者们用类比来表达这种词向量能够完成一些与众不同的任务。词向量本质上就是一个连续空间的向量因此从数学上来说这种向量其实可以进行任何“合规”的运算比如加、减、乘、除。于是作者们就利用向量的加减关系来看能否得到有意义的结果而得到的结果令人吃惊。
比如如果我们把“国王”King这个单词的向量减去“男人”Man这个向量然后加上“女人”Woman这个向量得到的结果竟然和“王后”Queen这个向量非常相近。类似的结果还有“法国”France减去“巴黎”Paris加上“伦敦”London等于“英格兰”England等。对于传统的方法来说这样的行为是无法实现的。因此Word2Vec的流行也让这种词语的类比工作变得更加普遍起来。
Word2Vec的其他使用
在自然语言处理中有一系列的任务之前都是依靠着“词包”这个输入来执行的。当我们有了Word2Vec之后这些任务都可以相对比较容易地用“词向量”来替代。
一类任务就是利用词来进行某种分类任务。比如,我们希望知道某些文档是属于什么类别,或者某些文档是不是有什么感情色彩,也就是通常所说的“基于监督学习的任务”。词向量会成为很多文本监督学习任务的重要特性。在诸多的实验结果中,得到的效果要么好于单独使用词包,要么在和词包一起使用的情况下要好于只使用词包。
在进行监督学习的任务中词向量的重要性还体现于其对深度学习架构的支持。众所周知即便是最简单的深度学习架构比如多层感知器都需要输入的数据是连续的。如果我们直接面对离散的文本数据常常需要把这些离散的文本数据学习成为连续的向量其实就是在学习Word2Vec。经过了这一层的转换之后我们往往再利用多层的神经网络结果对这些信号进行处理。
在很多实践中人们发现与其利用不同的任务来学习相应的词向量还不如直接拿在别的地方学好的词向量当做输入省却学习词向量这一个步骤而结果其实往往会有效果上的提升。这种使用词向量的方法叫作“提前训练”Pre-trained的词向量。其实不仅仅是在简单的多层感知器中甚至是在RNN等更加复杂的深度架构中也都更加频繁地利用提前训练的词向量。
总结
今天我为你介绍了Word2Vec模型在各种实际任务中的应用。
一起来回顾下要点第一我们聊了Word2Vec这个模型的一些简单应用比如如何计算词与词之间的相关度以及如何进行词的类比计算第二我们讨论了如何利用词向量进行更加复杂的自然语言任务的处理。
最后给你留一个思考题Word2Vec和主题模型提供的向量是互补的还是可以相互替换的呢

View File

@@ -0,0 +1,65 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
106 序列建模的深度学习利器RNN基础架构
前面我们介绍了一个重要的文本模型Word2Vec我们聊了这个模型的基本假设模型实现一些重要的扩展以及其在自然语言处理各个领域的应用。
接下来,我们来讨论更加复杂的基于深度学习的文本分析模型。这些模型的一大特点就是更加丰富地利用了文字的序列信息,从而能够对文本进行大规模建模。
今天,我们首先来看一看,序列建模的深度学习利器 RNNRecurrent Neural Network递归神经网络的基本架构。
文本信息中的序列数据
我们在之前介绍Word2Vec的时候讲了为什么希望能够把上下文信息给融入到模型当中去。一个非常重要的原因就是在最早的利用“词包”Bag of Word的形式下离散的词向量无法表达更多的语义信息。那么从文本的角度来讲很多研究人员都面对的困扰是如何对有序列信息的文本进行有效的建模同时对于广大文本挖掘的科研工作者来说这也是大家心中一直深信不疑的一个假设那就是对文字的深层次的理解一定是建立在对序列、对上下文的建模之中。
你可能有一个疑问,文字信息中真的有那么多序列数据吗?
其实从最简单的语义单元“句子”出发到“段落”到“章节”再到整个“文章”。这些文字的组成部分都依赖于对更小单元的序列组合。例如句子就是词语的序列段落就是句子的序列章节就是段落的序列等等。不仅是“词包假设”无法对这样的序列进行建模就算是我们之前提到的Word2Vec等一系列学习词向量或者段落向量的方法也仅仅能考虑到一部分的上下文信息。
还有更加复杂的文字序列,比如对话。人与人的对话很明显是有顺序的。两个人之间进行对话,当前所说的字句都是根据对方的回应以及整个对话的上下文所做出的选择。如果要对这样复杂的文字序列进行建模,传统的不考虑序列的模型方法是肯定不能奏效的。
那么,传统的机器学习领域,有没有能够对时序信息建模的工具或者模型呢?
传统机器学习中的序列模型
在传统的机器学习领域当然有不少模型是针对序列进行建模的。最经典的要数“隐马尔科夫模型”Hidden Markov Model有时候又简称为 HMM。在比较长的一段时间里HMM都是常用的对序列建模的缺省Default模型。我们今天的分享不是专门针对HMM模型但是对HMM的一个简单介绍有助于我们理解为什么需要RNN。
HMM的一个最基本的假设是当前的序列数据是根据一些隐含的状态产生的。具体来说HMM的架构是这样的。我们认为每个时间点都有一个对应的隐含状态。这个隐含状态只与当前这个时间点之前的时间点所对应的隐含状态有关联。更加简单的假设也是经常使用的假设则认为当前时间点的隐含状态仅仅与之前最直接相邻的一个时间点的隐含状态有关而和之前所有时间点的隐含状态都没有关系了。这类似于说今天的天气仅仅与昨天有关和昨天之前的天气状态都没有任何关系显然这是一个很强的假设。
从时间轴这个角度来说HMM是构建了一个隐含状态的一阶马尔科夫链条。这里“一阶”是指每个状态仅与当前最邻近的状态有关。当我们构建好了隐含状态以后就可以在这个基础上对数据进行建模了。
HMM假定每个时间点的数据都是从这个时间点的隐含状态产生的而时间点所对应的数据之间并不直接产生关系。也就是说我们假定产生数据的原因是隐含状态而隐含状态已经通过一个链条给串联起来了这样我们就不需要针对数据进行串联了。
HMM虽然理解起来相对比较直观但在实际应用中存在不少问题。比如这个模型的表现力有限。我们刚才说了一个普通的HMM假定了隐含状态的一阶性质使得我们不能对比较长的序列进行建模因为模型无法对其中所有的隐含状态的转换进行建模一阶无法表达这样的关系。当然HMM有一阶以上的表达但这也就带来了HMM的一个普遍的问题就是训练方法比较复杂。对于一个现实问题而言HMM的建模会相对比较复杂从而让训练方法更加繁复。这也就是为什么HMM不能适用于大规模问题的一个主要的原因。
RNN的基本架构
在HMM的基础上我们再来看一下RNN的基本思想。
首先我们需要指出的是RNN并不是一个模型的称呼而是一个框架。具体在这个框架内部根据不同的需求我们可以构造出非常不一样的模型。
第二RNN的一大优势是它根植于深度学习的大范畴中。RNN的模型都可以算是特殊的深度学习模型。所以深度学习模型的很多优化算法或者整体的计算方式也都可以无缝嫁接到RNN上。从这一点来看RNN比传统的HMM就有很大的相对优势。
通常来说一个RNN有一个输入序列X和输出序列Y这两个序列都随着时间的变化而变化。也就是说每一个时间点我们都对应这一个X和一个Y。和HMM类似的是RNN也假定X和Y都不独立发生变化而他们的变化和关系都是通过一组隐含状态来控制的。
具体来说时间T时刻的隐含状态有两个输入一个输入是时间T时刻之前所有的隐含状态一个输入是当前时刻也就是时间T时刻的输入变量X。时间T时刻的隐含状态根据这两个输入会产生一个输出这个输出就是T时刻的Y值。也就是说T时刻的输出是根据之前所有的隐含状态和这个时刻的输入决定的。
在一些简化的情况下并不是每一个时刻都有输出的信息。比如我们需要对一个句子进行分类这个时候一个输出变量只在整个句子结束的时候出现。那么在这样的情况下Y仅仅在最后的一个时刻出现。
这个RNN的参数也就是这些隐含状态。从原理上来说可以根据标准的深度学习框架的流程加以学习。
RNN的整个框架还可以看作是一个加码解码的过程。从已知的序列到中间隐含状态这是一个加码的流程而从隐含状态到最后的输出序列这是一个解码的过程。具体的RNN针对这个加码解码的过程有更加详细的分工我会在今后的分享中为你慢慢解读。
总结
今天我为你介绍了文本序列建模利器RNN的一个概况。
一起来回顾下要点第一我们讨论了为什么需要对文本的序列数据进行建模第二我们聊了聊传统机器学习模型是如何对序列进行建模的第三我们分享了RNN的基本的加码解码的框架。
最后给你留一个思考题对比HMMRNN的优势有哪些

View File

@@ -0,0 +1,59 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
107 基于门机制的RNN架构LSTM与GRU
这周我们继续来讨论基于深度学习的文本分析模型。这些模型的一大特点就是更加丰富地利用了文字的序列信息从而能够对文本进行大规模的建模。在上一次的分享里我们聊了对序列建模的深度学习利器“递归神经网络”或简称RNN。我们分析了文本信息中的序列数据了解了如何对文本信息中最复杂的一部分进行建模同时还讲了在传统机器学习中非常有代表性的“隐马尔科夫模型”HMM的基本原理以及RNN和HMM的异同。
今天我们进一步展开RNN这个基本框架看一看在当下都有哪些流行的RNN模型实现。
简单的RNN模型
为了能让你对今天要进一步介绍的RNN模型有更加深入的了解我们先来回顾一下RNN的基本框架。
一个RNN通常有一个输入序列X和一个输出序列Y这两个序列都随着时间的变化而变化。也就是说每一个时间点我们都对应着一个X和一个Y。RNN假定X和Y都不独立发生变化它们的变化和关系都是通过一组隐含状态来控制的。具体来说时间T时刻的隐含状态有两个输入一个输入是时间T时刻之前的所有隐含状态一个输入是当前时刻也就是时间T时刻的输入变量X。时间T时刻的隐含状态根据这两个输入会产生一个输出这个输出就是T时刻的Y值。
那么在这样的一个框架下一个最简单的RNN模型是什么样子的呢我们需要确定两个元素。第一个元素就是在时刻T究竟如何处理过去的隐含状态和现在的输入从而得到当前时刻的隐含状态这是一个需要建模的元素。第二如何从当前的隐含状态到输出变量Y这是另外一个需要建模的元素。
最简单的RNN模型对这两个建模元素是这样选择的。通常情况下在时间T-1时刻的隐含状态是一个向量我们假设叫St-1那么这个时候我们有两种选择。
第一种选择是用一个线性模型来表达对当前时刻的隐含状态St的建模也就是把St-1和Xt当作特性串联起来然后用一个矩阵W当作是线性变换的参数。有时候我们还会加上一个“偏差项”Bias Term比如用b来表示。那么在这样的情况下当前的隐含状态可以认为是“所有过去隐含状态以及输入”的一阶线性变换结果。可以说这基本上就是最简单直观的建模选择了。
第二种选择是如何从St变换成为Y。这一步可以更加简化那就是认为St直接就是输出的变量Y。这也就是选择了隐含状态和输出变量的一种一一对应的情况。
在这个最简单的RNN模型基础上我们可以把第一个转换从线性转换变为任何的深度模型的非线性转换这就构成了更加标准的RNN模型。
LSTM与GRU模型
我们刚刚介绍的RNN模型看上去简单直观但在实际应用中这类模型有一个致命的缺陷那就是实践者们发现在现实数据面前根本没法有效地学习这类模型。什么意思呢
所有的深度学习模型都依赖一个叫作“反向传播”Back-Propagation的算法来计算参数的“梯度”从而用于优化算法。但是RNN的基本架构存在一个叫作“梯度爆炸”或者“梯度消失”的问题。对于初学者而言你不需要去细究这两种梯度异常的细节只需要知道在传统的RNN模型下这两种梯度异常都会造成优化算法的迭代无法进行从而导致我们无法学习到模型的参数这一结局。
想要在现实的数据中使用RNN我们就必须解决梯度异常这一问题。而在解决梯度异常这个问题的多种途径中有一类途径现在变得很流行那就是尝试在框架里设计“门机制”Gated Mechanism
这个门机制的由来主要是着眼于一个问题那就是在我们刚才介绍的简单的RNN模型中隐含变量从一个时间点到另一个时间点的变化是“整个向量”变换为另外的“整个向量”。研究人员发现我们可以限制这个向量的变化也就是说我们通过某种方法不是让整个向量进行复制而是让这个隐含向量的部分单元发生变化。
如果要达到这样的效果,我们就必须设计一种机制,使得这个模型知道当前需要对隐含向量的哪些单元进行复制,哪些单元不进行复制而进行变化。我们可以认为,进行复制的单元是它们被屏蔽了“进行转换”这一操作,也可以认为它们被“门”阻挡了,这就是“门机制”的来源。
从逻辑上思考如何设计“门机制”从而起到这样的作用呢一种方式就是为隐含变量引入一个伴随变量G。这个伴随变量拥有和隐含变量一样的单元个数只不过这个伴随变量的取值范围是0或者10代表不允许通过1代表可以通过。这其实就是门机制的一个简单实现。我们只需要利用这个向量和隐含向量相应单元相乘就能实现控制这些单元的目的。当然这只是一个逻辑上的门机制实际的门机制要有更多细节也更加复杂。
基于门机制的RNN架构都有哪些呢这里介绍两个比较流行的分别是LSTM和GRU。我们这里不对这些模型展开详细的讨论而是给你一个直观的介绍帮助你从宏观上把握这些模型的核心思想。
LSTM的思路是把隐含状态分为两个部分。一部分用来当作“存储单元”Memory Cells另外一部分当作“工作单元”Working Memory。存储单元用来保留信息并且用来保留梯度跨越多个时间点。这个存储单元是被一系列的门控制这些门其实是数学函数用来模拟刚才我们说的门的机制。对于每一步来说这些门都要决定到底需要多少信息继续保留到下一个时间点。
总体来说LSTM模型的细节很多也很复杂。虽然LSTM已经成为了一种典型而且成功的RNN模型但是实践者们还是觉得这个模型可以简化于是就催生了GRU模型。
GRU模型的核心思想其实就是利用两套门机制来决定隐含单元的变化。一个门用于决定哪些单元会从上一个时间点的单元里复制过来并且形成一个临时的隐含状态另外一个门则控制这个临时状态和过去状态的融合。GRU在结构上大大简化了LSTM的繁复在效果上依然能够有不错的表现。
总结
今天我为你介绍了文本序列建模利器RNN的几个实例。
一起来回顾下要点第一我们复习了RNN的基本概念和框架第二我们聊了两个带有门机制的经典的RNN模型分别是LSTM和GRU。
最后给你留一个思考题RNN需要门机制你认为到底是建模的需要还是需要解决梯度异常的问题从而能够让优化算法工作

View File

@@ -0,0 +1,53 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
108 RNN在自然语言处理中有哪些应用场景
周一我们进一步展开了RNN这个基本框架讨论了几个流行的RNN模型实现从最简单的RNN模型到为什么需要“门机制”再到流行的LSTM和GRU框架的核心思想。
今天我们就来看一看RNN究竟在自然语言处理的哪些任务和场景中有所应用。
简单分类场景
我们首先来聊一种简单的分类场景。在这种场景下RNN输入一个序列的文字然后根据所有这些文字做一个决策或者叫作输出一个符号。这类应用是文本挖掘和分析中最基本的一个场景。
在绝大多数的“简单分类”任务中传统的文字表达例如“词包”Bag of Word或者“N元语法”Ngram经常都能有不错的表现。也就是说在很多这类任务中文字的顺序其实并不是很重要或者说词序并没有携带更多的语义信息。
然而实践者们发现在一些场景中如果利用RNN来对文字序列进行建模会获得额外的效果提升。比如有一类任务叫作“句子级别的情感分类”Sentence-Level Sentiment Classification这类任务常常出现在分析商品的评论文本Review这个场景。这时候我们需要对每一个句子输出至少两种感情色彩的判断褒义或者贬义正面或者负面。比如我们在分析电影评价的时候就希望知道用户在某一个句子中是否表达了对电影“喜爱”或者“不喜爱”的情绪。
面对这样句子级别的情感分析一种比较通行的利用RNN建模的方式是把每一个单词作为一个输入单元然后把一个句子当作一个序列输入到一个RNN中去RNN来维持一个隐含的状态。
对于这类应用,不是每一个隐含状态都有一个输出,而是在句子结束的时候,利用最后的隐含状态来产生输出。对于这类任务而言,输出的状态就是一个二元判断,那么我们需要利用最后的隐含状态来实现这个目的。一般来说,在深度模型的架构中,这个步骤是利用最后的隐含状态,然后经过多层感知网络,最后进行一个二元或者多元的分类。这其实是一个标准的分类问题的构建。
在有的应用中研究者们发现可以利用两个RNN建立起来的链条从而能够更进一步地提升最后的分类效果。在我们刚才描述的建模步骤里RNN把一个句子从头到尾按照正常顺序进行了输入并归纳。另外一种建模方式是利用RNN去建模句子的逆序也就是把整个句子倒过来学习到一个逆序的隐含状态。接下来我们把顺序的最后隐含状态和逆序的最后隐含状态串联起来成为最终放入分类器需要学习的特性。这种架构有时候被称作“双向模型”。
当我们从句子这个层级到文档这个层级时比如希望对文档进行情感分类仅仅利用我们刚才讲的RNN的结构就会显得有点“捉襟见肘”了。一个重要的阻碍就是RNN很难针对特别长的序列直接建模。这个时候就需要我们把整个文档拆分成比较小的单元然后针对小的单元利用RNN进行建模再把这些小单元的RNN结果当作新的输入串联起来。
在实际拆分的时候我们可以把文章分成一个一个的句子然后每个句子可以用刚才我们在句子层级的建模方式进行建模在句子的层级下还可能再把句子拆分成比如短语这样的单元。这种把一个比较大的文档进行拆分并且通过RNN对不同级别的数据进行建模的形式就叫作“层次式”HierarchicalRNN建模。
特性提取器
在更多的场景中RNN其实已经扮演了文本信息特性提取器的角色特别是在很多监督学习任务中隐含状态常常被用来当作特性处理。尤其要说明的是如果你的任务对文字的顺序有一定要求RNN往往就能成为这方面任务的利器我们这里举几个例子。
首先可以想到的一个任务就是在自然语言处理中很常见的“词类标注”Part-Of-Speech Tagging或者简称POS标注。简单来说POS标注就是针对某一个输入句子把句子里的词性进行分析和标注让大家知道哪些是动词哪些是名词哪些是形容词等等。我们可以很容易地想到在这样的标注任务中一个词到底是名词还是动词在很多的语言场景中是需要对整个句子的语境进行分析的也就是说整个句子的顺序和词序是有意义的。
针对POS标注这类任务一种已经尝试过的架构就是利用我们刚才介绍过的双向RNN来对句子进行建模。双向RNN的好处是我们可以构建的隐含信息是包含上下文的这样就更加有助于我们来分析每个词的词性。
和句子分类的任务类似的是利用双向RNN对句子进行扫描之后我们依然需要建立分类器对每一个位置上的词语进行分类。这个时候依然是同样的思路我们把当前的隐含状态当作是特性利用多层感知网络构建多类分类器从而对当前位置的词性进行决策。
除了POS标注这样的任务以外针对普通的文档分类RNN也有一定的效果。这里我们所说的文档分类一般是指类似把文档分为“艺术”、“体育”或“时政”等主题类别。人们从实践中发现在这样的通用文档分类任务中RNN和另外一类重要的深度模型“卷积神经网络”CNN结合起来使用效果最好。我们这里不展开对CNN的原理进行讲解只是从大的逻辑上为你讲一下这种分类方法的核心思路。
在计算机视觉中通常认为CNN可以抓住图像的“位置”特征。也就是说CNN非常善于挖掘一个二维数据结构中局部的很多变化特征从而能够有效形成对这些数据点的总结。那么如果我们把文档的文字排列也看作是某种情况下的一种图案CNN就可以发挥其作用来对文字的上下文进行信息提取。然后当CNN对文字的局部信息进行提取之后我们再把这些局部信息当作输入放入RNN中这样就能更好地利用RNN去对文章的高维度的特征进行建模。
总结
今天我为你介绍了文本序列建模利器RNN的几个应用场景。
一起来回顾下要点第一我们讲了用RNN对句子层级进行分类任务的处理第二我们聊了如何把RNN当作普遍使用的特性提取器来进行分类任务的训练特别是POS标签任务。
最后给你留一个思考题利用RNN提取的信息能否完整捕捉文档里的内容这一点我们怎么来判断呢

View File

@@ -0,0 +1,61 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
109 对话系统之经典的对话模型
在文本分析这个重要的环节里我们已经分享了Word2Vec模型包括模型的基本假设、模型实现以及一些比较有代表意义的扩展模型。我们还讨论了基于深度学习的文本分析模型特别是对序列建模的深度学习利器RNN包括RNN的基本框架流行的RNN模型实现以及RNN在自然语言处理中的应用场景。
今天,我们要来看另外一类和文字相关的人工智能系统——对话系统的一些基础知识。
浅析对话系统
对话系统在整个人工智能领域、甚至是计算机科学领域都占据着举足轻重的地位。著名的人工智能测试,“图灵测试”,其实就是建立在某种意义的对话系统上的。在经典的图灵测试场景中,一个最主要的论述就是:看一个人和一个机器进行对话,在和这个机器系统的问答过程中,能否猜出这个系统是一个真人还是一个计算机程序系统。从这一点可以看出,即便是在计算机科学的早期,对话系统或者说是智能的对话能力,就已经成为了计算机科学家衡量智能水平的一个重要标准。
实际上从上个世纪50~60年代开始研究人员就致力于研发早期的对话系统。即便是在今天看来在一些简单的应用中早期的对话系统也表现出了惊人的“智能”。比如麻省理工大学的约瑟夫·维森鲍姆Joseph Weizenbaum教授研发了一款叫“伊丽莎”Eliza的早期对话系统。尽管这个对话系统只能对语言进行最肤浅的反馈但是在“伊丽莎”系统的使用者中有人真的产生了这个系统有智能的幻觉。这说明对于如何界定“智能”如何理解对话以及语言能力这些的确是非常深邃的计算机科学乃至哲学问题。
早期的对话系统多是基于“规则”Rule的系统。这些系统的一大特征就是并不只是真正的去“理解”对话“理解”文字而是针对某一种模式或者说是预定好的模板对对话进行简单的模仿。不过如果你认为这样基于规则的系统在今天的对话系统中毫无用武之地的话那就大错特错了。实际上通过机器学习的手段辅以规则的方式这样的系统能够在绝大多数的场景下表现出惊人的水平。很多机器学习背景的工程师在接触对话系统研发的时候其实往往有轻视规则系统的这种情况。
从基于统计学习的机器学习崛起以后,研发人员就开始希望利用自然语言处理和机器学习的一系列方法,从根本上来改变对话系统的构建方式,其中有一个核心的想法,就是真正理解对话的内容,从而达到真正的智能。在实际的应用中,真正基于机器学习的系统在很长时间里都并不能完全代替基于规则的系统,直到最近几年出现了更加复杂的基于深度学习的模型,我们也会在之后的分享中对这样的系统进行一些介绍。
对话系统的类别
从方法上,对话系统可以大致分为“基于规则的系统”和“基于机器学习的系统”。除此之外,从应用场景上,对话系统也可以分为“基于任务的对话系统”和“非任务的对话系统”。
基于任务的对话系统其实很容易理解比如我们打电话到航空公司查询订票打电话到酒店查询订房信息抑或打电话到餐厅预定晚餐等。这样的对话系统有一大特点就是我们的对话基本上都有一个明确的目的或者说我们要完成一个“任务”Task。比如对于查询机票而言通常情况下我们的任务可以是成功查询到机票信息或者成功预订了到某个目的地的机票。
对于基于任务的对话系统而言,整个对话的“范畴”是限定好的,很多任务其实都有流程或者叫作“套路”可以参考。因此,从本质上来说,基于任务的对话系统还是相对比较容易的场景。在对话系统发展的历史中,很长时间里,基于规则的系统其实就已经可以对于基于任务的对话系统提供很高质量的服务了。很多用户针对基于规则的系统来应对任务型对话系统,往往会觉得系统缺乏一定的灵活度,但其实已经可以完成任务了。实际上,即便是今天的各类智能对话系统,对于任务型对话系统的支持依然是这些智能系统的核心业务能力。
另外一类对话系统就是非任务型对话系统这类系统的一个代表就是“聊天机器人”Chatbot。聊天机器人取决于我们构建这类系统的目的可以非常接近于任务型的对话系统也可以是非常难以模仿的真正具有一定语言理解能力的系统。
典型的聊天机器人,需要对一定的知识库进行建模。比如,当用户问到今天的天气,喜马拉雅山的高度,现在美国的总统是谁等问题,聊天系统要能从某种先前存储的知识库中提取信息。这一部分的功能其实和数据库信息查询很类似。
更加复杂的模式无疑是我们不仅需要对已经有的信息进行直接的查询还需要进行“推论”Inference。这就是“智能”的某种体现往往是能对现有的数据进行简单推导。比如如果用户问这样的问题比纽约现在气温高的美国西海岸城市有哪些这时就需要理解比较词“高”的含义并能够把这个词汇的含义转换成对气温数值的比较。从这些林林总总的情况来看非任务型的对话系统更加难以建模对研发者的挑战也更加艰巨。
对话系统的基本架构
尽管不同的对话系统有不同的目的,但是从大的架构上来看,所有的对话系统都有一些基本共同的组件。
首先一个对话系统需要有一个模块对人的语音进行识别转换成计算机能理解的信号。这个模块常常叫作“自动语音识别器”Automatic Speech Recognition简称ASR。比如现在很多手机终端、或者是智能家居都有一些简单的对话系统可以根据你的指令来进行回应。
第二在通过了语音识别之后就是一个“自然语言理解器”也简称为NLU。在这个组件里我们主要是针对已经文字化了的输入进行理解比如提取文字中的关键字对文字中的信息例如数字、比较词等进行理解。
第三对话系统往往有一个叫“对话管理器”简称是DM的组件。这个组件的意义是能够管理对话的上下文从而能够对指代信息上下文的简称以及上下文的内容进行跟踪和监测。
第四在任务型的对话系统中我们还需要一个叫“任务管理器”简称是TM的模块用于管理我们需要完成的任务的状态比如预定的机票信息是否完备酒店的房间预定是不是已经完成等等。
第五我们需要从管理器的这些中间状态中产生输出的文本也简称是NLG。这个部分是需要我们能够产生语言连贯、符合语法的有意义的自然语言。
最后在一些产品中我们还需要把自然语言能够用语音的方法回馈给用户这个组件往往简称为TTS。
总结
今天我为你介绍了对话系统的一些基础的背景信息。
一起来回顾下要点:第一,我们讲了什么是对话系统,对话系统从方法论上来说有什么流派;第二,我们聊了对话系统的分类;第三,我们分析了对话系统的基本架构。
最后,给你留一个思考题,你认为,让对话系统能够真正智能的最大挑战是什么?

View File

@@ -0,0 +1,63 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
110 任务型对话系统有哪些技术要点?
在上一期的分享中,我为你开启了另外一种和文字相关的人工智能系统——对话系统的一些基础知识。我重点和你分享了对话系统的由来,以及对话系统分为“任务型”和“非任务型”两种类型的概况。同时,我们也聊了聊早期的基于规则的对话系统的构建,以及这样的系统对后来各式系统的影响。最后,我为你简单介绍了对话系统的各个基本组件以及这些组件的主要目标。
在今天的分享里,我们就来看一看任务型对话系统的一些技术要点。
任务型对话系统的基本架构
首先,我们来回顾一下任务型对话系统的一些基本架构。尽管不同的对话系统有着不同的目的,但是从大的架构上来看,所有的任务型对话系统都有一些基本共同的组件。
第一个组件是“自动语音识别器”ASR这个组件是把人的语音进行识别转换成为计算机能够理解的信号。
第二个组件是“自然语言理解器”NLU。在这个组件里我们主要是针对已经文字化了的输入进行理解比如提取文字中的关键字对文字中的信息进行理解等。
第三个组件是“对话管理器”DM。这个组件的意义是能够管理对话的上下文从而能够对指代信息上下文的简称以及上下文的内容进行跟踪和监测。
第四个组件是“任务管理器”TM用于管理我们需要完成的任务的状态。
第五个组件是NLG既从管理器的这些中间状态中产生输出的文本也就是自然和连贯的语言。
最后一个组件是TTS。在一些产品中我们还需要把自然语言能够用语音的方法回馈给用户。
在我们今天的分享里因为ASR和TTS都并不是对话系统的特殊组件我们就不对这两个部分进行更加深入的探讨了。
任务型对话系统组件详解
我们先来看一下NLU这个组件。这个组件的目的是把用户输入的文字信息给转换成为任务型对话系统可以理解的内部的表征Representation形式。
我们试想一个餐馆的对话系统当用户输入了一个句子“看一下北京西单附近今晚7点左右的西餐厅”这个时候我们都需要了解哪些信息呢
首先我们需要知道这个输入的“意图”Intent。作为一个餐馆的对话系统来说我们有可能需要处理好几种不同的意图比如“订餐”的意图“查询菜品”的意图等。那么对于我们刚才的这个句子来说很有可能是一个订餐的意图。也就是说我们针对一个输入的句子来判断当前的意图而意图其实就是一个离散的输出结果。这其实就是一个多类的分类问题或者可以看作是句子的分类问题。
当我们知道了整个句子的意图之后我们就需要进一步理解这个输入句子的细节。而进一步的理解其实就是希望能够从输入的句子中获得可以“执行”Execution的信息。
当我们真实进行餐馆预定的时候餐馆的名字预定的时间用餐人数等信息就显得尤为重要。我们可能需要这样的操作能够提取出餐馆名字、预定时间、用餐人数等信息执行餐馆预定的动作并且能够在餐馆的后台系统中记录下来。于是我们需要对刚才的语句进行这样的分析。这种分析有时候也被叫作“填空”Slot Filling
“填空”其实也可以看作是一个分类问题。比如需要知道“北京西单”是一个地点要把这个地点给识别出来而且能够知道我们已经填了一个叫“地点”的空。再比如“今晚7点”也需要被识别出来让我们知道时间的空也被填好了。在这方面有很多方法有基于传统模型比如“条件随机场”Conditional Random Field简称CRF的也有基于“递归神经网络”RNN的。
经过了NLU这个组件之后我们就来到了对话系统的中枢大脑的位置就是DM这个组件。这个组件重点的是对对话进行跟踪和管理。从整个对话的角度来看DM的主要职责就是监控整个对话的状态目前到达了一个什么情况下一步还需要进行什么样的操作。
还是以刚才我们的输入句子为例通过NLU的分析我们知道已经有地点和时间两个“空”Slot被补齐了但是很明显有一些最核心的信息依然缺失比如就餐的人数订餐人的联系电话等。DM的一大作用就是对所有的“空”都进行管理并且决定下面还有哪些“空”需要填写。在传统的系统中DM大多是基于规则的不过在最近的发展中DM逐渐变成了基于分类问题的利用CRF或者RNN来对DM进行建模的也越来越多。
下一个模块就是TM。这其实是整个任务型对话系统中执行任务的部分。对于一个“订单”意图的餐馆对话系统来说当必要的“空”都已全部填齐的时候TM就会去触发当前需要进行动作比如真正对数据库进行操作从而完成订餐的流程。
在很多现在的系统中DM和TM都是结合在一起进行构建的。在此之上往往有一个叫作“协议学习”Policy Learning的步骤。总体来说协议学习的目的是让对话系统能够更加巧妙和智能地学习到如何补全所有的“空”并且能够完成模块动作。比如有没有最简化的对话方法能够让用户更加快捷地回答各种信息这都是协议学习需要考虑的方面。目前来说在协议学习方面比较热门的方法是利用深度强化学习来对DM和TM进行统一管理。
最后一个组件叫作NLG也就是希望对话系统可以产生自然和连贯的语言。比较传统的方法当然就是利用“填写模板”的形式事先生成一些语句的半成品。目前比较流行的办法是使用RNN特别是RNN中的LSTM来对NLG进行建模。
总结
今天我为你介绍了任务型对话系统的基本技术要点。
一起来回顾下要点:第一,我们复习了任务型对话系统的基本组件;第二,我们进一步聊了这些组件的一些最基础的技术要点和背后的模型思想。
最后,给你留一个思考题,任务型对话系统需要每个组件单独进行学习还是尽可能把所有组件连在一起进行训练?这两种方法的优劣在什么地方呢?

View File

@@ -0,0 +1,61 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
111 聊天机器人有哪些核心技术要点?
对话系统分为“任务型”和“非任务型”两种基本类型。周一的分享里,我们讨论了任务型对话系统的一些技术要点,重点介绍了任务型对话系统的各个组件及其背后的模型支撑。
今天,我们就来看一看非任务型对话系统的主要技术要点。非任务型的对话系统有时候又会被称作是“聊天机器人”。
基于信息检索的对话系统
我们前面讲过,对话系统,特别是非任务型对话系统,也就是聊天机器人,有一个很重要的功能,就是在一个知识库的基础上和用户进行对话。这个知识库可以是海量的已经存在的人机对话,也可以是某种形式的知识信息。
比如,一个关于篮球的聊天机器人,那就需要这个系统能够访问有关篮球球队、运动员、比赛、新闻等有关篮球信息的知识库。同时,在这个对话系统运行了一段时间之后,我们就会慢慢积累很多有关篮球的对话。这些对话就成为了系统针对当前输入进行反应的基础。
针对当前的输入,利用之前已经有过的对话进行回馈,这就是基于信息检索技术的对话系统的核心假设。一种最基本的做法就是,找到和当前输入最相近的已有对话中的某一个语句,然后回复之前已经回复过的内容。
比如,当前的问话是“迈克尔·乔丹在职业生涯中一共得过多少分?”如果在过去的对话中,已经有人问过“迈克尔·乔丹为芝加哥公牛队一共得过多少分?”。那么,我们就可以根据这两句话在词组上的相似性,返回已经回答过的答案来应对当前的输入。
当然,上面这种对话系统可能会显得比较原始。但是,一旦我们把整个问题抽象成广义的搜索问题,其实就可以建立非常复杂的检索系统,来对我们究竟需要回复什么样的内容进行建模。
比如,我们可以把输入当作查询关键词,只不过从性质上来说,当前的输入语句往往要长于传统的查询关键词,但是在技术上依然可以使用各种搜索技术,例如通常的排序学习等方法都适用于这样的场景。
从理论上来讲基于检索的对话系统有很多先天的问题。比如从根本上搜索系统就是一个“无状态”Stateless的系统。特别是传统意义上的搜索系统一般没有办法对上下文进行跟踪其实从整个流程上讲这并不是真正意义上的对话当然也就谈不上是“智能”系统。
基于深度学习的对话系统
那么,如何能够让对话系统真正对状态进行管理,从而能够对上下文的信息进行回馈呢?
最近一段时间以来,基于深度学习的对话系统逐渐成为了对话系统建模的主流,就是因为这些模型都能够比较有效地对状态进行管理。
那么在这么多的深度对话系统中首当其冲的一个经典模型就是“序列到序列”Sequence To Sequence模型简称S2S模型。S2S模型认为从本质上对话系统是某种程度上的“翻译”问题也就是说我们需要把回应输入的句子这个问题看作是把某种语言的语句翻译成目标语言语句的一个过程。S2S模型也广泛应用在机器翻译的场景中。
具体来说S2S把一串输入语句的字符通过学习转换成为一个中间的状态。这其实就是一个“编码”Encode的过程。这个中间状态可以结合之前字句的中间状态从而实现对上下文进行跟踪的目的。这个部分其实就成为很多具体模型各具特色的地方。总的来说中间状态需要随着对话的演变而产生变化。然后我们需要一个“解码”Decode的过程把中间的状态转换成为最后输出的字句。
从整个流程上来说S2S其实非常像我们已经介绍过的深度序列模型例如RNN和LSTM。从实现上来说很多S2S模型其实都是直接利用RNN或者LSTM而得以实现的。因此很多深度序列模型的技术都可以直接应用到对话系统中来。
另外我们可以看到相比于基于信息检索的系统来说S2S模型并没有一个“显式”的搜索过去信息的步骤因此可以更加灵活地处理语言上的多样性以及不是完全匹配的问题。因此从实际的效果中来看S2S模型在对话系统中取得了不小的成功。
实际系统的一些问题
在实际的开发中,非任务型对话系统会有一系列的实际问题需要解决。
首先,因为是开放性的对话系统,其实并没有一个标准来衡量这些聊天机器人式的系统的好坏。究竟什么样的系统是一个好的聊天系统,依旧是一个非常具有争议的领域。
其次人们在实际的应用中发现基于深度学习的序列模型虽然常常能够给出比较“人性化”的语句回答但是很多回答都没有过多的“意义”更像是已经出现过的语句的“深层次”的“翻译”。因此在最近的一些系统中人们又开始尝试把信息检索系统和S2S模型结合起来使用。
最后,我们需要提出的就是,非任务型对话系统和任务型对话系统有时候常常需要混合使用。比如,在一个订票系统中,可能也需要掺杂一般性的对话。如何能够有效地进行两种系统的混合,肯定又是一种新的挑战。
总结
今天我为你介绍了非任务型对话系统的基本技术要点。
一起来回顾下要点第一我们讲了基于信息检索也就是搜索技术的对话系统第二我们聊了聊如何利用RNN或者是序列模型对对话系统进行建模。
最后,给你留一个思考题,你觉得在什么样的条件下,非任务型聊天机器人可以展现出真正的“人工智能”呢?

View File

@@ -0,0 +1,59 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
112 什么是文档情感分类?
到目前为止,我们讲完了对话系统的基础知识。一般来说,对话系统分为“任务型”和“非任务型”这两种基本类型。针对任务型对话系统,我们重点介绍了其各个组件的任务,以及这些组件都有哪些模型给予支撑。针对非任务型对话系统,也就是“聊天机器人”,我们主要介绍了如何利用深度学习技术来对一个聊天机器人进行建模,以及非任务型对话系统所面临的挑战都有哪些。
今天我们转入文本分析的另外一个领域同时也是在实际系统中经常会使用的一个子领域那就是文本“情感分析”Sentiment Analysis。所谓情感分析就是指我们要针对一段文本来判断这段文本的文字“色彩”到底是褒义还是贬义到底是抒发了什么情感。
文本情感分析是一个非常实用的工具,比如,我们需要分析用户对于商品的评价带有什么样的情感,从而能够更好地为商品的推荐和搜索结果服务。再比如,通过文本的情感分析,我们可以了解到用户针对某一个时事的观点异同,以及观点分歧在什么地方,从而能够更加清晰地了解新闻的舆情动态。
今天我们首先从最基础的文档情感分类Document Sentiment Classification这个问题说起。
基于监督学习的文档情感分类
文档情感分类属于文本情感分析中最基本的一种任务。这种任务的假设是一段文本的作者通过这段文本是想对某一个“实体”Entity表达一种情绪。这里的实体其实包括很多种类型的对象比如可能是商品某个事件也可能是某个人物。我们这里讨论的文本单元可以是一个文档也可以是一个句子等其他的文本段落。
值得注意的是,我们在这一类任务中,限制一个文本单元只表达,或者主要表达一种情感。很明显,这种假设是比较局限的。一般来说,在实际的应用中,一个文本单元,特别是比较长的单元例如文章,则往往包含多于一种的情绪。因此,我们可以看到文档情感分类其实是一种简化了的情感分析任务。
同时,一个文本单元还可能对多个“实体”进行情感表达。比如一个用户针对某种款式相机的多个方面进行了评价,那么每一个方面都可以作为一个实体,而这种时候,用户的情感可能就更难仅以一种情感来加以概括了。
在最基本的文档情感分类的情况下我们往往把这类任务转化成为一种监督学习任务也就是说我们希望通过一个有标签的训练集学习到一个分类器Classifier或者回归模型Regression从而能够在未知的数据上预测用户的情感。
这里往往有两种形式的监督学习任务。一种是把文档分类为几种最简单的情况下是两种情感。这就是二分或者多类分类问题。另外一种则是认为文档会有一种情感但是每一种情感之间有好坏的顺序区分比如评分“好”就比“一般”要好也就是说这些评分之间有一个次序问题。那么很多时候这种问题会被归结为一种“次序回归”Ordinal Regression问题。
在明确了我们需要构建什么样的监督学习任务以后对于这些任务而言如何选取“特性”Feature就是一个很重要的工作了。诚然对于每一个具体的任务而言我们往往需要选取不同的特性但是在过去的很多实践中经过反复验证有一些特性可能会有比较好的效果。我在这里做一个简单的总结。
首先我们曾经多次提到过的“词频”Term Frequency以及更加复杂一些的TF-IDF词权重法都是经常使用的文字特性。在文档情感分类中这一类特性被认为非常有效。
另外一种使用得比较频繁的特性就是“词类”Part of Speech。词类提供了句子中每个词的成分比如哪些词是动词哪些词是名词等等。这些词性可以跟某种特定的情感有很密切的联系。
还有一种很直观的特性就是“情感词汇”。比如,我们已经知道了“好”、“不错”等词表达了正向的情感,而“差”、“不好”、“不尽人意”等词表达了负向的情感。我们可以事先收集一个这类情感词汇的集合。这个集合里的词汇可以跟最后文档的情感有很直接的联系。
最后,需要指出的是,如何开发一个合适的特性往往是文档分类的重点工作。
除了特性以外在文档情感分类这个任务中传统上经常使用的文字分类器有“朴素贝叶斯”Naïve Bayes分类器、“支持向量机”Support Vector Machines等。
基于非监督学习的文档情感分类
情感词汇已经为我们对大段文字乃至整个文档的分类有了很强的指导意义,因此,也有一些方法寻求利用非监督学习的方式来对文档进行情感分类。注意,这里所谓的非监督学习,是指我们并不显式地学习一个分类器,也就是说,不存在一个训练数据集,不需要我们提前收集数据的标签。
这一类思想的核心其实就是设计一套“打分机制”Scoring Heuristics来对整个文档做一种粗浅的判断。当然这种打分机制背后都有一种理论来支撑。
比如,有一种打分模式依靠首先识别的“词类”进行分析,特别是大量的相邻的两个词的词性,诸如“特别好”。这里,“特别”是副词,“好”是形容词,然后就可以得出在某些情况下,副词和形容词的这种搭配特别多的时候,并且在正向的情感词比较多的时候,整个文档也许就是比较偏向正向的情感。
我们需要指出的是,这种方法虽然听上去比较“山寨”,但是对于很多产品和项目来说,获取大量高质量的标签信息往往是非常耗时,甚至是不可能的,例如上百万的用户对产品的评价数据。因此,在没有训练数据的情况下,利用某种打分机制,可以通过最简单的一些情感词库开发出文档情感分类的算法,这其实也不失为一种快速迭代的方式。
总结
今天我为你介绍了一类基础的文字情感分析任务——文档情感分类的基本技术要点。
一起来回顾下要点:第一,我们讲了基于监督学习的文档情感分类任务以及这类任务下的重要特性和模型;第二,我们聊了如何在没有大规模训练数据的基础上进行非监督的文档情感分类。
最后,给你留一个思考题,如何把文档情感分类任务扩展到可以针对多种实体多种情感的分析呢?

View File

@@ -0,0 +1,55 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
113 如何来提取情感实体和方面呢?
从上一篇分享开始我们转入文本分析的另外一个领域文本“情感分析”Sentiment Analysis也就是指我们要针对一段文本来判断其文字“色彩”。文本情感分析是一个非常实用的工具。我们从最基础的文档情感分类这个问题说起这个任务是把一个单独的文档给分类为某种情感。在绝大多数情况下我们可以把这个任务看作监督学习的问题。另外我们也聊了聊如何通过建立情感词来进行简单的非监督学习的步骤。
今天,我们来看文本情感分析中的另一个关键技术,情感“实体”和“方面”的提取。
“实体”和“方面”的提取
对于文本情感分析而言“实体”Entity和“方面”Aspect是两个非常重要的概念。很多情感分析的任务都是围绕着这两个概念而产生的。在谈论如何对这两个概念提取之前我们先来看看这两个概念的意义。
“实体”其实就是文本中的某一个对象,比如产品的名字、公司的名字、服务的名字、个人、事件名字等。而“方面”则是实体的某种属性和组建。
比如这么一个句子:“我买了一部三星手机,它的通话质量很不错”。在这里,“三星手机”就是一个实体,而“通话质量”则是一个方面。更进一步,“很不错”则是一个情感表达,这里是针对“三星手机”这个实体的“通话质量”这个方面。很明显,如果我们想要精准地对文本的情感进行分析,就一定得能够对实体和方面进行有效提取。
从广义的范围来说实体和方面的提取都属于“信息提取”Information Extraction的工作。这是一个非常大的任务类别用于从大量的非结构化文本中提取出有价值的信息。实体和方面的提取可以利用一般性的信息提取技术当然往往也可以利用句子中的一些特殊结构。
常用的提取技术
接下来,我们来聊一聊有哪些最直观最简单的提取技术。
第一种最简单的技术是基于“频率”Frequency的提取。在这样的技术中我们先对文本进行“词类”Part Of Speech分析分析出每个词的词性。然后主要针对句子中的“名词”计算这些“名词”出现的频率。当这些频率达到某一个阈值的时候我们就认为这些名词是一个实体或者方面。
这里的假设是在一个例如产品评论的文本集合中如果一个名词反复出现在这个集合的很多文档中那么这个名词很有可能就是一个独立的实体或者方面。为了达到更好的效果更加复杂的词频技术例如TF-IDF也经常被用在计算名词的频率上从而提取它们作为实体和方面的候选词。
另一种比较常见的针对情感分析开发的技术,就是利用句子中的一些特殊的结构从而达到信息提取的目的。
比如,回到刚才的那句话:“我买了一部三星手机,它的通话质量很不错”。在这句话中,“很不错”作为一个情感词汇,一定和某一个方面,甚至是某一个实体成对出现的。那么这个成对出现的情况就是我们可以利用的情感句子的有利特征。
比如“很不错”这个词汇,在一个描述产品情感的文档中,这个词汇很少单独出现。这类不管是褒义还是贬义的词汇出现后,在绝大多数情况下,他们都会描述一个对象。而从句法结构上来说,这个对象往往又离这个情感词汇很近,因为这个情感词需要对这个对象进行描述。因此,我们就可以利用这种配对结果,来计算这样的结构是否大量出现。
这种结构其实可以被反复利用。例如在刚才的句子中,“三星手机”这个实体,一定会和很多不同的方面反复同时出现,如“通话质量”、“操作”、“售后服务”等。我们可以利用这两种不同的配对结构,实体和方面之间的,方面和情感词之间的,更好地提取这些词汇。
刚才我们说的不管是基于词频的还是利用配对关系的方法,都可以算是无监督的学习方法。这些方法的本质,其实就是利用某种之前定义好的规则或者是某种洞察来针对文本进行提取。另外一种思维其实就是把信息提取转换成为监督学习任务。
回到例子“我买了一部三星手机,它的通话质量很不错”这句话。这句话的文本作为输入,我们需要的输出是“三星手机—实体”、“通话质量—方面”这样的标签信息。那么,一个基本的想法就是,我们其实可以针对这句话构建一些特征,然后学习出一个分类器,从而可以得到这样的标签。
值得注意的是这一类的监督学习任务和我们常见的例如分类一个文档是不是垃圾信息不一样这里我们需要输出多个标签。这种需要输出多个标签的任务特别是这些标签之间可能还有一定关系的情况往往被称作是“结构化预测”Structural Prediction任务。
在结构化预测这个领域“条件随机场”Conditional Random Field或者简称是CRF的模型是对这方面任务进行运作的一个经典模型。然而需要指出的是把实体和方面提取当作监督任务以后很明显我们就需要有一个训练集和标签这个训练集的匮乏常常成为CRF产生理想效果的瓶颈。
总结
今天,我为你介绍了一类基础的文字情感分析任务——情感“实体”和“方面”的提取。
一起来回顾下要点:第一,我们介绍了什么是情感“实体”和“方面”;第二,我们聊了目前在这个方向上比较通行的一些方法,比如基于“频率”的提取,利用句子的一些特殊结构等。
最后,给你留一个思考题,除了我们介绍的这些方法,你还能想到其他方法来提取实体和方面的关键词吗?

View File

@@ -0,0 +1,69 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
114 复盘 3 自然语言处理及文本处理核心技术模块
到目前为止,我们讲完了人工智能核心技术的第三个模块——自然语言处理及文本处理核心技术。
整个模块共18期6大主题希望通过这些内容能让你对自然语言处理及文本处理核心技术有一个全面系统的认识和理解为自己进一步学习和提升打下基础。今天我准备了 18 张知识卡,和你一起来对这一模块的内容做一个复盘。
点击知识卡跳转到你最想看的那篇文章温故而知新。如不能正常跳转请先将App更新到最新版本。
LDA模型
基础文本分析
Word2Vec
基于深度学习的语言序列模型
基于深度学习的聊天对话模型
文本情感分析
积跬步以至千里
最后恭喜你在这个模块中已经阅读了37690字听了120分钟的音频获得一张新的通关卡这是一个不小的成就。在人工智能领域的千里之行我们又往前迈出了一步。

View File

@@ -0,0 +1,59 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
114 文本情感分析中如何做意见总结和搜索?
在文本“情感分析”Sentiment Analysis这个领域我们首先介绍了最基础的文档情感分类这个问题。在绝大多数情况下这是一个监督学习的问题。当然我们也可以通过建立情感词库来进行简单的非监督学习的步骤。紧接着我们讨论了文本情感分析中的另一个关键技术即情感“实体”和“方面”的提取。这个任务可以说是很多情感分析的根基我们需要从无结构的文本中提取实体和方面等结构信息便于进一步的分析。我们讲了如何通过词频、挖掘配对信息以及利用监督学习来对实体和方面进行挖掘。
今天我们来看文本情感分析的另外一个主题——意见总结Opinion Summarization和意见搜索Opinion Search
意见总结
为什么“意见总结”这个任务会很重要的呢?
假如你希望在电商网站上购买一款数码相机。这个时候,你可能需要打开好几款相机的页面进行比较。对于相机的硬件指标,能够从这些页面上相对容易地直接得到,除此以外,你可能还比较关心对这些相机的评价。
在这个场景下,“意见总结”的重要性就凸显出来了。因为优秀的相机款式往往有上百甚至上千的用户评价,这些评价包括了用户对产品很多方面的评价,有褒义和贬义的情绪。如果对这些评价逐一进行浏览,很明显是一种非常低效的做法。因此,从购物网站的角度来说,如果能够为用户把这些评论进行总结,从而让用户看到总体的有代表性的评论,无疑能够帮助用户节省不少时间和精力,让用户获得更好的体验。
简单来说意见总结就是从无结构的文本中提取出来的各种情感信息的综合表达。我们这里聊的意见总结主要是指“基于方面的意见总结”Aspect-based Opinion Summarization。也就是说意见的总结主要是围绕着产品的种种方面来产生的。
概括一下,基于方面的意见总结有两个特点。第一,这样的总结主要是针对物体的实体以及对应的方面来进行的。第二,意见总结需要提供数量化的总结。什么是数量化的总结?就是总结里需要指出,持有某种意见的用户占多少百分比,又有多少百分比的用户有其他意见。很明显,这里还牵涉到如何表达和显示这些意见总结的步骤。
可以说,基于方面的意见总结成为了意见总结的主要任务。另外,基于方面的意见总结还可以与其他文本技术相结合,从而能够延展这个技术的效果。比如,总结语句的生成可以分为“句子选择”和“人工句子生成”这两种方案。
首先来说一下句子选择这个想法。句子选择的思路是,我们希望在最后的意见总结里,能够利用已有的非常有代表性的句子,这样用户看到的最后的总结会显得更加真实。那么这里有两个问题:一个问题是如何对所有的句子进行筛选;第二个问题是如果有重复多余的字句,又如何进行进一步的选择。
通常情况下,我们通过对句子打分来筛选,这个时候,一般需要设计一个打分机制,这个机制往往是看这个句子对某一个实体的方面是否进行了有情感的评价。然后,对所有句子进行聚类,这样所有评价类似的句子就可以被聚集到一起,从而能够过滤掉重复多余的字句。
那么,人工句子生成又是怎么运作的呢?首先,我们必须知道这个物品的哪些方面得到了用户的评价,而且都是什么样的评价,比如是正面评价还是负面评价。然后,把这些信息和一个语言模型,也就是语句生成器相连接,从而能够“生成”最后的总结语句。值得注意的是,这样生成的总结语句并不会出现在所有用户的原始评价中,因此也可能会对用户的最终体验有一定的影响。
除了基于方面的意见总结以外还有一些类似的但是并不完全一样的总结方案。比如有一种总结方案叫“针对性观点总结”Contrastive View Summarization。这个任务更加突出针对同一个主题的两种截然相反的观点。这种意见总结不仅可以针对商品也针对新闻事件比如某一个政策法规、选举结果等往往比较有争议的话题事件“针对性观点总结”往往会有比较好的用户体验。
意见搜索
我们可以认为“意见搜索”是建立在意见总结之上的一个任务。通常情况下,意见搜索需要完成的任务是用户输入一个主体的名字,我们需要返回和这个主体相关的意见信息,这些意见信息有可能是通过意见总结而呈现给用户的。
意见搜索的难点,或者说是和传统搜索不一样的地方主要还是在于针对意见信息的索引和检索。
第一,我们需要在索引库中找到有哪些文档和字句包含了我们所需要查询的主体。可以说,这一点和传统的搜索是非常类似的。
第二,我们需要在找到的文档和字句中检查是否包含主体的某种意见,以及其褒义或者贬义的评价。这就是有别于传统搜索的地方。在找到了所有关于某个主体的情感评价以后,我们需要设计一个评分机制从而返回最有说服力的文档,并且还需要在这些文档的基础上进行意见总结。很显然,这些步骤都是传统的搜索中并没有的。
按照上面所说的这两点,我们可以把意见搜索分为两个阶段。
第一个阶段,就是利用现有的搜索技术,比如我们介绍过的文本搜索或者基于排序学习的搜索等方法,得到最初的一个文档的备选集。然后进入下一个阶段,就是通过一个模型,针对所有的文档进行基于意见的打分。这个模型可以是简单的分类器,用于分析当前的字句和主体的意见究竟有没有关系,也可以是一个更加复杂的模型,输出当前的文档和主体的哪一个方面有关系。在这里,任何一种文本分类器都可以被利用起来。
总体来说,意见搜索可以算是对于意见分析和总结的一个综合体现。
总结
今天,我为你介绍了一类比较高级的文本情感分析技术:意见的总结和搜索。至此,我们对于文本情感分析的分享就告一段落了。
一起来回顾下要点:第一,我们讲了意见总结的的重要性,基本概念和技术;第二,我们分享了意见搜索的基本概念和两个阶段的技术。
最后,给你留一个思考题,除了常见的观点和评分以外,用户对于产品的评价一般还在意哪些信息呢?

View File

@@ -0,0 +1,65 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
115 什么是计算机视觉?
在之前的一系列分享中,我们详细讲解了人工智能核心技术中的搜索、推荐系统、计算广告以及自然语言处理和文本处理技术。从今天开始,我们来分享专栏里人工智能核心技术模块的最后一部分内容:计算机视觉技术。
可以说,计算机视觉技术是人工智能技术的核心方向,特别是深度学习技术在计算机视觉中的应用,在最近五六年的人工智能浪潮中担当了先锋者的角色。甚至可以说,如果没有深度学习技术在过去几年对计算机视觉一些核心领域的推动和促进,就很可能没有这一波的人工智能技术浪潮。
我们可以这么来看待人工智能技术,它可以说是利用计算机技术来对人的感官,例如视觉、听觉、触觉以及思维进行模拟,从而建立起逻辑推断等智能才具备的能力。其中,计算机视觉技术无疑是至关重要的,也是非常困难的。
今天我会带你先来看看究竟什么是计算机视觉,以及这个方向的研发都需要解决哪些核心问题。
计算机视觉的定义
关于计算机视觉Computer VisionCV有两种人们普遍接受的定义。
第一种定义认为计算机视觉是从数字图像Digital Images中提取信息。这些信息可以是图像中的物品识别Identification、导航系统的位置测量Space Measurement以及增强现实Augmented Reality的应用。
计算机视觉的第二种定义主要是从应用的角度出发,认为计算机视觉是为了构建可以理解数字图像内容的算法,从而有多种应用。
那到底什么是计算机视觉呢?主要解决哪些问题?我们可以拿人类视觉的主要功能来做类比,就比较容易理解了。
当人类面对一个现实中的场景时,我们有一个感官器官来收集信号,那就是“眼睛”。眼睛收集的原始信号转换为人可以处理的信息之后,这些信息就来到了“大脑”这一个人类信息处理中心,进行分析和处理。
这个过程中最主要的一个处理模块就是对信号产生“语义”Semantic解释或者进行逻辑上的理解。比如当我们看到一个公园的一角以后需要识别这个场景里的桥梁、水、树等物体并且在头脑中形成这些物体的概念。可以说这就是人类视觉系统的一个简单的框架眼睛收集信息大脑处理信息。
那么在整体的框架上计算机视觉其实就是希望模仿人类的视觉系统构架。输入依然是一个现实中的场景但是我们需要借助其他的感知仪器Sensing Device来从中获取原始信息。最常见的感知仪器包括照相机、摄像机以及现在广泛普及的手机摄像头。从这些感知仪器中获取了最初级的信息之后计算机视觉的“大脑”就是计算机。这里的“计算机”其实是指计算机算法通过算法理解原始数据构建语义信息。
这么理解起来计算机视觉技术好像挺简单的。就像1966年麻省理工大学的一个本科生想做这样一个暑期项目并且认为这个项目可以在一个暑假里解决。这或许就是计算机视觉的一个起源了。但是令人感慨的是计算机视觉绝不是可以在一个假期内解决的项目整整半个多世纪已经过去了计算机视觉依然有很多值得挑战的课题也依然还在高速发展中。
计算机视觉的领域特点
了解了计算机视觉的定义之后,我们来进一步聊一聊这个领域的一些特点。
首先,计算机视觉是一个“跨学科领域”。正如刚才所说,对人类视觉的研究给计算机视觉带来了重要的启发。那这里就涉及到生物领域的研究,包括对人的眼睛以及视觉神经的研究。一方面,我们需要感知器来从现实世界中获取信息。那么,对于感知仪器来说,设备越是精确,就越能完整地捕捉外界世界的信息。这里就涉及到物理,特别是光学的研究。另一方面,人脑是处理所有信号并且形成语义概念的器官,理解人脑的信息处理机制就会对计算机视觉的发展有重要的作用,这就涉及到脑科学和认知科学等领域。
除此以外,计算机视觉毕竟是一个和计算机结合得很紧密的学科方向。因此,要想设计高效的计算机视觉算法,就必须和计算机科学的很多其他方向结合并借鉴,例如信息检索、计算机体系结构、机器学习等。
计算机视觉的另外一个特点,就是这个领域包含了很多非常深刻的困难问题。我们说,从计算机视觉被当作一个暑假项目到现在,五十多年已经过去了,这个领域依然在蓬勃发展着。时至今日,我们依然不能说计算机视觉是一个已经被完全解决的问题。
那计算机视觉任务“难”在哪里呢我认为根本原因在于计算机视觉算法处理的输入也就是数字化了的图像信息和我们需要理解的语义信息之间存在巨大的鸿沟。举例来说一个200乘以200的RGB图像其实就是一个由12万个数字组成的矩阵但是这个矩阵可能代表一个非常复杂的图像。从数字到具体的图像中的物体再到去理解这个图像的语义这中间有很长的距离。
一直以来计算机视觉也在尝试去构造和逼近一些人类视觉系统的特点但是困难重重。比如人类视觉系统的反应很快。有实验表明从一幅普通场景的图像中人类只需要150毫秒就能够识别出里面的物体。另外人类视觉系统的复杂性还来自于对世界认知的理解。例如人可以依靠过去的记忆或者经验还可以依靠其他外界知识来对图像中的物体进行判断。这些都是计算机视觉系统难以企及的。
当然,在经历了半个世纪的研究之后,也有不少学者提出怀疑的观点,计算机视觉研究是否要对人类视觉系统进行完全的模仿呢?一种观点是,计算机视觉系统并不需要亦步亦趋地完全照搬人类视觉系统,这可能也并不是一条切实有效的道路。有一种观点认为,计算机视觉系统可以从人类视觉或者其他领域得到灵感,但是究竟应该如何搭建一个有效的系统,还是需要开辟新的研究道路。
计算机视觉的应用
计算机视觉技术的领用非常广泛可以说是深入到了普通人生活的方方面面。在这些应用中除了我们日常比较容易接触到的例如面部识别、光学字符识别OCR、电影特效、视觉搜索以外还包括最近几年飞速兴起的自动驾驶、自动无人商店、虚拟现实、增强现实等等。
可以说计算机视觉的应用任务领域众多。近几年都受到深度学习的影响,绝大多数领域都得到了高速发展,但是依然需要领域知识来构建更加有效的模型。
小结
今天我和你讲了计算机视觉技术的一个,是我们计算机视觉基础知识系列的第一篇,帮助你对计算机视觉有一个最基本的概念性的了解。
一起来回顾下要点:第一,我们聊了什么是计算机视觉;第二,我们讲了计算机视觉的特点;第三,我们简要提及了一些计算机视觉的应用。
最后,给你留一个思考题,我们说计算机视觉的核心挑战是从数字到语义的理解,那么理解图像数据有什么特殊的地方吗?

View File

@@ -0,0 +1,63 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
116 掌握计算机视觉任务的基础模型和操作
今天,我们来聊一聊计算机视觉的一些最基础的操作和任务,包括像素表达、过滤器和边界探测。基于这些内容,我们一起讨论利用计算机来处理视觉问题的核心思路。很多时候,越是基础的内容就越重要,因为只有掌握了基础的思路,我们才能在今后复杂的任务中灵活应用。
像素表达
我们在上一次的分享中谈到了计算机视觉任务中一个非常重要的步骤那就是把现实世界的信号通过感知仪器Sensing Device收集起来然后在计算机系统中加以表达。那么在所有的表达中最基础的就是“像素表达”Pixel。我们这里就展开说一说这种表达的思路。
把图像信息利用像素来进行表达是一种非常直观简单的表达方式。
对于黑白图像来说图像就被转换为了0或者1的二元矩阵。这个矩阵的每一个元素就是一个像素0代表黑1则代表白。
对于灰度图像来说每一个像素或者说是矩阵的每一个元素代表灰度的“强度”Intensity从0到2550代表黑255代表白。
对于彩色的图像来说我们一般要先选择一种模型来表示不同的颜色。一种较为流行的表达方式是RGB红、绿、蓝模型。在这样的模型中任何一个彩色图像都能够转化成为RGB这三种颜色表达的叠加。具体来说就是RGB分别代表三种不同的“通道”Channel。每一种通道都是原始图像在这个通道也就是这个原始颜色下的表达。每一个通道都是一个矩阵像素表达。每一个像素代表着从0到255的值。换句话说一个彩色图像在RGB模型下是一个“张量”Tensor也就是三个矩阵叠加在一起的结果。
针对像素你需要建立一种概念那就是像素本身是对真实世界中的“采样”Sample。每一个像素是一个整数整个像素表达并不是一个“连续”Continuous表达。因此在把世界上的连续信号采样到离散像素的这一过程中难免会有失真。而不同的“分辨率”会带来失真程度不同的像素表达。
过滤器
既然已经把图像表达成为了像素也就是某种矩阵的形式那么我们就可以利用线性代数等工具在这个矩阵上进行变换从而能够对图像进行某种操作。这就是“过滤器”Filter的一个基本思想。
很多计算机视觉的操作本质上都是过滤器操作。除了把过滤器想成某种线性代数变换之外,更普遍的一种思路是把在矩阵上的操作想成某种函数的操作。因此,我们也可以认为过滤器是函数在某一个特定区间内的操作。
举一个最简单的过滤器的例子就是“移动平均”Moving Average。这个过滤器的本质就是针对每一个像素点计算它周围9个像素点的平均值。如果我们针对每一个像素进行这样的操作就会得到一个新的矩阵。然后我们把这个矩阵当作新的像素表达进行视觉化就会发现是在原有图像基础上进行了“柔化”处理。反过来如果我们需要对某一个图像进行柔化处理就需要对其进行“移动平均”过滤操作。
有了这个直观的例子,你一定能够想到,很多我们熟知的图像特效处理,其实都对应着某种过滤器操作。
这里我们提及一种比较特殊的过滤处理那就是“卷积”Convolution。这个概念我们在深度学习中经常接触到。
刚才我们说到“移动平均”这个过滤器。如果我们把图像看作是一个函数F在某一个区域的取值那么“移动平均”这个过滤器是针对函数在某一点的取值也就是某一个像素的取值通过利用同样的函数F在周围的取值从而得到一个新的计算值。
那卷积操作的思想是怎样的呢卷积是针对F在某一个点的取值除了需要利用F在周围的点以外还需要利用另外一个函数这里称作是H的取值。也就是说我们要利用H来针对F进行操作。
边界探测
除了通过过滤器对图像进行简单操作之外,还有一些图像的基本操作蕴含了计算机视觉的基本原理。我们这里也稍微做一些介绍。
例如我们通常需要了解图像的边界。有研究表明图像的边界对于人类认知图像的内涵有着特殊的意义。因此从一个完整的图像中找到不同物体的边界是一个很有现实意义的任务并且通常被称作是“边界探测”Edge Detection
那么,怎么来认识图像中的物体边界呢?我们先从直观上来想一想,在图像中,“边界”都有什么特征?一般来说,如果我们遇到了色彩、景深、照明的突然变化,或者是其他某种图像特质上的突然变化,我们就有可能遇到了边界。现在的问题是,在像素或者函数表达的情况下,如何来描述和检测这些“突然变化”?
在数学分析中我们学过描述函数值变化的概念叫“导数”或者“梯度”Gradient。梯度大小Gradient Magnitude和梯度方向Gradient Direction都包含了函数变化的重要信息。
虽然梯度从数学的角度来说刻画了函数的变化但是这对于设计一个实际的边界探测器依然是不够的。一个好的边界探测器需要真正能够探测到边界也就是要尽可能少地出现错误能够对边界进行定位Location的同时还需要尽量使边界平滑和链接。
在真实的边界探测中我们往往先让图像变得更加平滑比如利用“高斯柔化”Gaussian Blur的办法然后在这个基础上计算梯度大小和方向有了这些之后再进行一些后期处理。
小结
今天我和分享了计算机视觉的一些基本数学模型和操作。
一起来回顾下要点:第一,像素是对真实世界的采样,我们分别讲了对黑白、灰度和彩色图像的像素表达;第二,我们讲了在像素表达之上的过滤器,介绍了移动平均和卷积两种方式;第三,我们简要提及了利用函数的梯度计算来进行边界检测的任务。
最后,给你留一个思考题,从边界检测的任务中,如何知道检测到的像素是真正属于边界呢?

View File

@@ -0,0 +1,65 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
117 计算机视觉中的特征提取难在哪里?
在上一次的分享中,我们聊了计算机视觉的一些最基础的操作和任务,包括像素表达和过滤器这两个视觉问题。我们还简单介绍了边界探测这个任务,了解如何从计算机视觉的角度来对这个任务进行建模。
今天我们来看计算机视觉基础问题中的另一个核心任务那就是特征Feature提取。
特征提取的目的
在深入讨论特征提取之前,我们先来了解一下特征提取的目的,或者说是研究特征提取的必要性。
从大的方面来说,计算机视觉的一部分任务是实现对图像的智能理解。那么,理解图像的语义就是其中一个非常重要的任务。
我们提到的边界检测或者是颜色检测,虽然都是理解图像的任务,但是这些任务并不理解图像中具体的物体,比如哪里是一只动物、哪里是行人等。那么,怎样才能理解图像中具体的物体呢?或者更进一步,整个图像表达了怎样的社会关系或者说是场景关系?例如一张会议室的图像,我们不仅关心里面的陈设和人物,还关心会议室的整体气氛,以及这样的气氛是不是传递出了更复杂的人物之间的社会关系。
那么,如何实现这种更高维度的语义理解呢?这往往需要我们对底层的一些图像先进行抽象,然后再在抽象出来的特征基础上,进一步来建模。
除了我们这里提到的对图像本身的理解以外,在很多任务中,我们还需要对图像和其他信息结合起来进行理解和分析。一种常见的形式是图像和一段文字结合起来,对某一个物品或者某一个事件进行描述。例如电商网站的商品信息,一般都有精美的图片和详细的介绍,这些信息组合起来完整地描述了整个商品的信息。
这个时候,我们就要同时理解图像和文字信息。很明显,在这样的任务中,一种比较容易想到的模式是先从图像和文字中分别抽取一定的抽象特征,有了高度概括的图像特征和文字特征之后,我们再在这个基础上进行建模。
从比较小的计算机视觉的任务来说,很多时候,一个任务会涉及到两个步骤:把任务抽象为提取特征,然后转换为一个普通的机器学习任务。这个流程的第二步可以是一个监督学习任务,例如回归或者分类;也可以是一个非监督学习任务。需要注意的是,我们这里提到的两个步骤,并不一定是绝对地把建模过程当作两个完全独立的步骤,而是从逻辑上对这两个步骤进行区分。事实上,在现代的深度学习架构中,这两个步骤往往都在统一的一个架构下进行训练,从而能够得到更好的效果。
今天,我们就从传统的计算机视觉的角度,来看看特征提取有哪些难点和经典方法。
特征提取的难点及基本思路
图像数据的特征提取为什么有难度呢?原因在于图像信息本身的复杂性。
试想我们有两张人民大会堂的建筑物照片,一张是从地面拍摄的,一张是从空中拍摄的。虽然这两张照片可能在角度、色彩、位置等方面有很多的不同,但是因为这两张照片本身所描述的对象是一致的,都是人民大会堂,因此我们希望从这两个图片中提取的特征有一些相似性。也就是说,我们需要找到在诸多变化因素中不变的成分。
一个经典的思路是从局部信息Local Information入手从图像中提取相应的特征。从实际的效果来看局部特征Local Feature比全局特征更加稳固。
回到上面的例子如何构造一个能够匹配两个图片的普遍的局部特征呢过程如下第一找到一组关键的点或者是像素第二在关键点周围定义一个区域第三抽取并且归一化这个区域第四从归一化后的区域提取“局部描述子”Local Descriptor。得到局部描述子之后我们就可以利用它来进行匹配了。
从上面这个流程来看,整体的思路其实就是希望从局部找到具有代表性的特征,然后把所有因为各种因素造成的特征变化归一化掉。
当然,这个简单的流程是有一些问题的。比如,如果我们针对两幅不同的图像分别进行上述的流程,那么很有可能最后得到的关键点和局部描述子都不一样。所以我们需要一种更具普适性的方法。
其实从70年代开始就有一大部分的计算机视觉工作是在研究如何构建局部特征描述子。在这30多年的发展历程中很多研究工作者提出了不少既有理论基础又有实用价值的特征提取方法。甚至是最近的深度学习热潮从某种程度上来说也是一个重要的特征提取成果。
在这些研究成果中比较有代表性的局部描述子包括SIFTScale-invariant feature transform描述子和HOGHistogram of oriented gradient描述子。关于这两个描述子我在这里不展开介绍它们的细节因为在深度学习浪潮中大部分利用描述子来对特征进行提取的方法都被淘汰了但是这些方法的思路我们在很多类似的工作中依然可以借鉴。所以如果你有兴趣继续了解可以阅读我在文末提供的两个参考文献。
小结
今天我为你讲了计算机视觉中的又一个核心任务:特征提取。帮助你对计算机视觉的一些基本特征提取有一个了解。
一起来回顾下要点:第一,在图像理解任务中,高维度的语义理解,以及理解图像和其他信息的组合形式,都需要特征提取这个关键步骤;第二,特征提取的难点在于图像信息本身的复杂性,一个经典的思路是从局部信息入手,提取局部特征。
最后,给你留一个思考题,除了图像数据以外,还有没有其他形式的数据,也需要我们先对数据的不同形态(例如图像中的颜色、方位、角度等)进行处理,从而识别出相同的物体或者数据个体?
参考文献
David G. Lowe, “Distinctive image features from scale-invariant keypoints,” International Journal of Computer Vision, 60, 2 (2004), pp. 91-110.
N. Dalal and B. Triggs. Histograms of Oriented Gradients for Human Detection. In CVPR, pages 886-893, 2005.

View File

@@ -0,0 +1,71 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
118 基于深度学习的计算机视觉技术(一):深度神经网络入门
在最近几年的人工智能发展中,深度学习技术成为了一个强劲的推动力。对于计算机视觉来讲,深度学习在过去几年重新改写了这个领域的核心方法论。时至今日,深度学习已经深入到了计算机视觉技术的方方面面,成为解决各类视觉问题的有力工具。
从今天开始,我们将介绍一系列以深度学习为背景的计算机视觉技术。那么在这个环节的第一篇分享中,我们首先来了解一下什么是深度学习。
为什么是深度学习
在了解一些深度学习技术细节之前,我们首先要来看一下为什么需要深度学习技术。
初学者经常会有一个误区那就是认为和“深度学习”相对的就是“浅层学习”Shallow Learning。这种看法也对也不对。
“对”的地方在于“深度学习”的确强调从数据或者说是特征Feature中构造多层或深度的变换从而能够得到非线性的表征Representation。显然这种效果是线性模型所达不到的。
“不对”的地方是,在所谓的“深度学习”,或者准确地讲是深度神经网络技术发展之前,就已经有了很多构造复杂非线性表征的尝试和技术。这些技术在机器学习和人工智能的发展中都起到了举足轻重的作用。
说到这里,我们就要从线性模型聊起了。从线性模型发展到非线性模型,这一步貌似理所当然,但其实这里面有一个非常重要的思路,那就是线性模型并不是不能处理数据中的非线性关系,这一点很容易被忽视。很多时候,我们其实是可以构造非线性的特征,然后利用线性模型来把所有的非线性特征给串联起来。
举个例子在网页搜索中我们经常利用类似PageRank来表征一个网页的重要性。这个模型本身就是非线性的对网页图Graph的一种表征。所以即便在此之上构建线性模型整个模型其实也是包含了非线性的表征转换。
其实,对于很多深度学习模型而言,即便进行了复杂的表征转换,在最后一层对最终的输出进行建模的时候依然是一个线性模型。所以,线性模型在非线性特征的帮助下,依然能够满足整体的非线性建模的需求。
那么,这种非线性特征外加线性模型的方法有什么问题呢?
这类方法的主要问题是如何才能系统性地找到这些非线性特征呢其实传统的机器学习中的特征工程Feature Engineering主要就是在做特征寻找这个事情也就是要消耗人力和物力去寻找这些特征。有时候找到一个好的特征可能还需要灵感和其他领域特定的知识。
那么,有没有办法让模型自身就能从现有的数据中发现这些非线性关系,从而不需要额外的特征工程呢?
其实在机器学习发展的早期,研发人员就意识到了这个方向的重要性,这样就发展出了各种各样的非线性模型。
这里面比较有代表性的模型是“决策树”Decision Tree以及在此基础上发展出来的一系列“树模型”Tree Models。我们在专栏里介绍过树模型在搜索和推荐的一些场景中都有不错的性能表现。在很大程度上树模型可以表达非线性的关系但是它的困难之处在于无法表达过于深层次的数据关系。一般来说3到4层的树已经算是比较深的结构了如果一个树模型有特别多层次还能被训练成功这样的例子是比较少见的。
除了树模型之外还有一类模型用来挖掘数据中间的隐含关系特别是非线性关系这就是“概率图模型”Probabilistic Graphical Model。例如在文本挖掘领域非常流行的LDALatent Dirichlet Allocation以及在推荐领域流行的矩阵分解Matrix Factorization都可以被看作是概率图模型中的佼佼者。
概率图模型的一大优势是可以融入众多对于数据以及所需要处理问题的直觉从而能够让模型具有一定的可解释性甚至是“因果性”Causality。但是概率图模型的最大挑战就是每一个模型都需要单独计算训练算法。也就是说算法无法做到普适通用。这就极大地限制了概率图模型在实际问题特别是大数据问题中的应用。
综合来看,我们急需一种方法,能够自动挖掘数据中的非线性关系,而且最好能够找到数据中的隐含规律,这种隐含的规律可能是非常多层次的非线性转换;并且,这种方法还需要在计算上直接通用,不同模型可以共用一个计算框架。
所有这些因素如何囊括在一个方法里呢?答案就是深度学习技术。
深度学习的特点
深度学习技术慢慢成为了主流的非线性模型。接下来我们来看一看深度学习技术的一些特点。
首先,深度学习技术是一个非常大的外延,这里面包含了很多不同的模型和模型的计算框架技术。这两者都是深度学习成功必不可少的组成部分。
深度学习中有一种最简单也是最基础的模型就是“深度神经网络”Deep Neural Networks。这种模型其实很早就已经被提出了。
从形式上来说,深度神经网络就是把多层简单的非线性操作叠加起来,希望能够发现更加复杂的非线性关系。实际上,有理论研究表明,在有足够的内部隐含变量的情况下,深度神经网络可以表达任意复杂的函数关系。也就是说,深度神经网络有希望能够对现实世界中的复杂现象进行建模。这一点对于我们刚才提到的树模型和概率图模型来说,有相当大的难度或者说几乎是不可能的。
另外,回到我们刚才说的特征工程的需求,深度神经网络的确可以减轻这方面的压力。虽然并不如很多人预期的那样,深度神经网络依然需要依赖一定的初始数据,但是已经有实验表明,通过深度神经网络学习的特征在很多时候相比于研发人员手动挖掘的特征要更加健壮。
实际上,在计算机视觉这样的领域里,利用深度神经网络来挖掘特征基本上已经完全代替了手动的特征挖掘。
深度神经网络还有一个特点就是计算的普适性。刚才我们讲到概率图模型有一个“死穴”,就是计算无法做到模型普适,或者说在不牺牲性能的前提下,计算无法做到普适性。那么这一点来说,以深度神经网络为代表的深度学习,依赖简单的梯度下降就能对非常复杂的网络进行计算。而这种计算是可以针对不同的模型的,因此这就极大地降低了深度学习在实际工程应用中的代价。
小结
今天我为你讲了基于深度学习的计算机视觉技术的第一篇分享,帮助你对深度学习有一个更加明确的认识。
一起来回顾下要点:第一,深度学习技术能够自动挖掘数据中的非线性关系;第二,在计算机视觉领域里,利用深度神经网络来挖掘特征已经基本代替了手动的特征挖掘,而且,深度神经网络还具有计算的普适性。
最后,给你留一个思考题,和树模型或者概率图模型相比较,深度学习有什么劣势吗?如果有,你认为它最大的劣势是什么?

View File

@@ -0,0 +1,65 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
119 基于深度学习的计算机视觉技术(二):基本的深度学习模型
在上一期的介绍里,我们讨论了以深度学习为背景的计算机视觉技术,重点讲解了为什么需要深度学习,特别是从传统模型的眼光来看深度学习模型的特点。
今天,我们来聊一聊应用到图像上的一些最基本的深度学习模型。
前馈神经网络
前馈神经网络Feedforward Networks应该算是最基本的神经网络架构了。这种架构是理解其他神经网络结构的基础。
我们可以从最基本的线性模型Linear Model入手来理解前馈神经网络。线性模型说的是有一组输入x然后有一个输出y我们学习到一组向量有的时候也叫作系数w来通过x预测y。这种线性模型可以算是最简单的机器学习模型了。在图像的情况下输入往往是一个向量输出也是一个向量这个时候我们需要学习的系数就从一个向量变为一个矩阵了。
那么,试想一下,如果我们把多层的线性模型进行叠加,能否得到多层的神经网络结构呢?答案是否定的。即便是多层的线性模型,只要每一层的变换是线性的,那么最后的结果一定也是线性的。因此,要想构建多层的非线性模型,每一层的变换也一定要是非线性的。
那么,如何在线性模型的基础上,我们只进行一些最小的改动,就能引入非线性的因素呢?
在这里我们引入一个叫“激活函数”Activation Function的概念。直观地理解激活函数就是在线性模型输出的基础上进行非线性变换。一个最简单的激活函数就是Sigmoid函数也就是把负无穷到正无穷的实数给映射到01这个范围内。我们经常提到的对数几率回归其实就是对这种变换的另一种称呼。
利用了Sigmoid激活函数的线性模型本质上就是在做二元分类。在神经网络发展的早期Sigmoid激活函数是一种普遍使用的非线性变换方式。遗憾的是在之后的发展中研究人员发现了Sigmoid函数在数值稳定性上存在严重的问题。
具体来说在很多机器学习的优化算法中我们都需要依赖“梯度下降”Gradient Descent的方法来优化目标函数。在前馈神经网络中梯度下降也是一种简单的优化神经网络并且学习到系数矩阵的方法。但是因为有Sigmoid函数的存在计算的梯度有可能会溢出或者归零。在这样的情况下模型就无法得到正常的学习。
为了解决Sigmoid激活函数的问题研究人员发明了“线性整流函数”Rectified Linear Unit或简称ReLu函数。和Sigmoid函数相比ReLu函数直接留下大于0的数值把小于0的数值统统归0。在ReLu函数的帮助下我们能够更容易地训练多层的前馈神经网络。
有了非线性的转换之后,前馈神经网络往往可以把多个非线性的转换给叠加在一起,形成多层的结构。有了这个多层的转换之后,最后一层往往是是把已经有的信息再映射到最终需要的输出上。这可以是一个回归问题,也可以是一个分类问题。
从我们之前提到的特征提取的角度来讲,前馈神经网络的中间层次就是利用最原始的信息来提取数据的特征,而最后一层可以当作是我们之前讲过的线性模型层。只不过和手动构造复杂特征有一个不同的地方,前馈神经网络是自动学习这样的特征。
卷积神经网络
了解了最基本的前馈神经网络之后,我们来看一看它是怎么应用到图像处理中的。我们在之前的计算机视觉基础知识中讲到过,一种最直观的表达图像数据的方法就是把图像看成矩阵数据。
比如有一个长32像素、宽32像素并且有3个颜色通道Channel或者简称为“32乘32乘3”的图像如果我们采用前馈神经网络来对这个图像进行建模需要学习的系数或者说权重是多少呢就是把这3个数乘起来一共有3072个系数需要学习。如果说这还是一种可以接受的方案的话那么一个长宽为200像素也是3个颜色通道的图片就需要12万个系数。很显然直接采用前馈神经网络来表达图想信息需要大量待学习的参数。那么我们在这里就需要有一种方法能够更加简洁地表达数据。
卷积神经网络Convolutional Neural Networks简称为CNN就是来解决这类问题的一种神经网络架构。其实CNN最初就是专门为视觉问题而提出的。那么如何利用CNN来解决这个问题呢
首先卷积神经网络试图用向量来描述一个矩阵的信息。从工具的角度来讲卷积神经网络利用两个特殊的架构来对图像数据进行总结一个叫“卷积层”Convolutional Layer一个叫“池化层”Pooling Layer
在简单理解卷积层和池化层之前我们先来看一下卷积神经网络是采用怎样的架构来处理图像的。一般来说图像的输入要先经过一个卷积层再经过一个线性整流函数然后经过一个池化层再经过一个全联通层也就是前馈神经网络最后得到一个向量的表达。需要注意的是卷积神经网络的优势就是直接处理3维数据进行3维的变换。
现在我们来看卷积层是如何工作的。卷积层直接作用在3维的输入上利用另外一个3维的“过滤器”Filter来对原始的数据进行卷积操作。例如对于一个“32乘32乘3”的图像来说我们可以使用一个“5乘5乘3”的过滤器来对其进行卷积。
在这里,我不展开来讲卷积操作,如果你有兴趣可以在网上找到卷积操作的数学定义。在这里,我们只需要理解卷积操作是利用一个小的过滤器来对原始的更大的图像进行函数变换,从而希望能够提取图像的局部特征。
在刚才这个例子中可以看到,因为有了卷积层,我们就不需要针对原始大小的图像进行表达了,而仅仅需要学习过滤器上的参数,这种方法就大大减少了参数的数目。
池化层的目的是对数据进行进一步的高度总结和概括。对于一个矩阵来说池化层针对某一个矩阵的局部采用平均值、最大值来总结这个区域的矩阵数值。例如我们有一个“4乘4”一共16个单元的矩阵如果我们针对每个“2乘2”的区域加以最大值Max Pooling池化那么我们就可以把16个单元的数据总结为“2乘2”也就是一共4个单元的数据。每个单元是原来矩阵中“2乘2”区域中的最大值。
当一个图像经过了卷积和池化等一系列的操作以后,我们就说已经提取了这个图像的关键特征。这个时候,我们往往会把数据经过基本的前馈神经网络来进一步融合,最后能够完整地总结数据信息。在前馈神经网络之后,这就又是一个线性的决策层,可以是回归,也可以是分类。
小结
今天我为你讲了基于深度学习的计算机视觉技术的第二篇分享,帮助你对深度学习的基本模型,包括前馈神经网络和卷积神经网络有一个基本的认识。
一起来回顾下要点:第一,我们从线性模型入手讨论了前馈神经网络架构,重点介绍了激活函数和线性整流函数;第二,我们讲了在前馈神经网络基础之上的卷积神经网络,核心是用向量来描述一个矩阵的信息。
最后,给你留一个思考题,卷积神经网络中池化层的必要性是什么?为什么需要总结周围的单元到一个单元?这难道不是丢失了很多信息吗?

View File

@@ -0,0 +1,69 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
120 基于深度学习的计算机视觉技术(三):深度学习模型的优化
在上一讲的分享里,我们聊了应用到图像上的一些最基本的深度学习模型,主要讨论了前馈神经网络和卷积神经网络的定义,以及它们在图像处理上的应用。
今天,我们从优化的角度来讨论,如何对深度学习模型进行训练。可以说,模型优化是成功利用深度学习模型的关键步骤。
一般机器学习模型的优化
要想了解深度学习模型的优化,我们首先得来看一看一般机器学习模型的优化。先了解一些基本的步骤,我们在讨论深度学习模型优化的时候就能更容易地看清事物的本质。
在开始说模型优化之前,要说一点需要注意的问题,我觉得这一点对于初学者来说尤为重要,那就是要区分开模型、目标函数和优化过程。这三个实体相互关联而且相互影响,我们需要对每一个实体都有一个清晰的理解。
我们以线性模型作为例子,来感受下这三个实体的关系。
我们说一个模型是线性模型是指我们期望利用一组特征Feature来对一个输出反馈进行线性预测。这里的线性其实主要是指参数针对于反馈变量而言是线性的。
需要注意的是,线性模型是一个数学模型。线性模型的设置本身并没有限定这个模型的参数(也就是模型的系数)是如何得来的,也就是数学模型本身的设置和得到参数的过程往往是互相独立的。我们把得到参数的过程叫作模型训练或者简称为模型优化过程。
对于线性模型而言我们常常利用最小二乘法来构造参数学习的目标函数。在最小二乘法的目标函数下一般情况下我们既可以得到一个“解析解”Closed Form Solution也能通过例如梯度下降的方法来进行数值优化。
对模型、目标函数和优化过程这几个概念有了清晰的认识后,那具体的模型优化过程是怎样的呢?
这里,我们就总结一下一般机器学习模型,主要是简单模型的优化过程。
模型优化的第一步就是选择目标函数。总的来说简单的机器学习模型主要有两类目的回归和分类。对于回归而言我们选择最小二乘法也就是“平方损失”Squared Loss作为目标函数对于分类而言我们选择“对数几率损失”Logistic Loss。这两种损失和模型是否是线性并没有直接的关系。当然对于简单模型来说模型往往是线性的。那么当模型是线性的而目标函数又是我们刚才所说的这两类这种情况下我们找到的其实就是线性回归和对数几率回归这两大基本模型。
当我们选择好了目标函数之后,下面一个步骤一般是尝试根据目标函数寻找参数的最优解。这一个步骤我们往往需要根据参数尝试写出参数的梯度。对于简单的线性模型来说,这一步往往相对比较容易。但是有一些模型,包括深度学习模型,梯度并不是那么直观就能够得到的。这也就直接导致下面的步骤变得更加复杂。
得到梯度以后,一般来说,我们首先尝试有没有可能得到一个解析解。
有解析解,往往就意味着我们并不需要通过迭代的方法来得到一个数值优化的解。解析解往往也不是近似解,而是一个确切的答案。当然,在真实的数据中,一些理论上的解析解因为数值稳定性的因素依然无法得到。对于解析解来说,我们需要写出参数的梯度,然后尝试把等式置零,然后看是否能够解出参数的表达式。这个过程并不一定对于每一个模型都适用。
如果我们没法得到解析解,就需要另外一个方法了,那就是利用数值计算来取得一个近似解。在有了梯度信息以后,一种最普遍的数值计算方法就是梯度下降法。从原则上来说,梯度下降是求一个函数最小值的数值流程。如果你需要求一个函数最大值的流程,那就需要梯度上升。
怎样才能保证梯度下降一定能够得到最优解呢一般来说梯度下降并不能保证找到函数参数的最优解往往只能找到一个局部最优解。对于凸问题Convex Problem而言局部最优也就是全局最优。因此从理论上说梯度下降能够找到凸问题的全局最优解。当然到底多快能够找到这个最优解也就是算法的收敛速度是怎样的就又是另外一个问题了。
但是对于非凸Non Convex Problem问题而言梯度下降仅仅能够收敛到一个局部最优解这个解是否能够被接受还有待考证。
深度学习模型的优化
在这里,我们从普通的模型衍生出来,看一看深度学习模型的优化问题。
和普通模型一样,深度学习模型也需要一个目标函数来对参数进行有效学习。我们前面在介绍深度学习模型的时候提到过,很多时候,深度模型都充当了更加复杂的特征提取器的角色。而在最后一层的表达中,我们可以认为是在复杂特征后的线性模型。因此,我们依然可以使用回归(或者说平方损失),抑或分类(或者说是对数几率损失),来对不同的问题进行建模。
遗憾的是,深度模型的特点就是多层。而进行优化的流程中,第一个步骤就是梯度的计算,这一步因为模型的多层变得复杂起来。从概念上来说,我们需要得到在当前迭代下,针对模型参数的梯度,这些梯度包括每一个隐含层的参数。我们之所以能够计算深度模型,第一个重要发展就是能够计算这些梯度。
在深度学习的语境中计算梯度的方法叫作“反向传播”Back Propagation。关于如何计算反向传播网络上有很多教程我们在这里就不赘述了。你需要记住的是反向传播是为了有效快速地计算梯度。
那么,有了梯度之后,我们是不是就能够得到深度模型参数的解析解呢?
很可惜,我们无法得到一个解析解。原因是深度模型的复杂性以及其高度的非凸性。我们不仅无法得到一个解析解,也没有办法轻易得到一个全局最优解。能够采用的一种办法就是使用梯度下降来对问题进行近似求解。而如何利用梯度下降的办法来对深度模型有效求解,一直都是深度学习研究领域的一个重心。
在过去将近10年的研究中大家发现一个好的初始值往往能够让优化过程变得容易一些。而在梯度下降的过程中有一些下降方法也要好于其他的方法。一些小技巧比如Dropout批量归一化Batch Normalization已经变成了深度模型优化的标准流程之一目的就是能够有效地计算梯度而且有较好的数值稳定性。
小结
今天我为你讲了机器学习模型,包括传统模型和深度学习模型的优化流程。
一起来回顾下要点:第一,我们聊了什么是模型、目标函数和优化过程这三个概念,清晰理解这三个概念之间的关系非常重要;第二,我们从一般机器学习模型的优化过程入手,讲了深度模型的优化。
最后,给你留一个思考题,有哪些因素造成了深度模型优化的困难?

View File

@@ -0,0 +1,69 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
121 计算机视觉领域的深度学习模型AlexNet
我们继续来讨论基于深度学习的计算机视觉技术。从今天开始,我们进入一个新的模块,我会结合几篇经典的论文,给你介绍几个专门为计算机视觉而提出来的深度学习模型。这些模型都在最近几年的深度学习发展中,起到了至关重要的作用。
我们这个系列要分享的第一篇论文题目是《基于深度卷积神经网络的图像网络分类》ImageNet Classification with Deep Convolutional Neural Network[1]。因为这篇文章的第一作者名字叫Alex所以文章提出的模型也经常被称为AlexNet。
那接下来我们就先介绍一下这篇论文的作者群。
第一作者就是亚力克斯·克里切夫斯基Alex Krizhevsky。发表这篇论文的时候他在多伦多大学计算机系攻读博士学位之后的2013~2017年间在谷歌任职继续从事深度学习的研究。
第二作者叫伊利亚·苏兹克维Ilya Sutskever。发表这篇论文的时候苏兹克维也在多伦多大学计算机系攻读博士学位之后到斯坦福大学跟随吴恩达做博士后研究。2013~2015年间他在谷歌担任研究科学家一职。2016年之后他参与共同创立了OpenAI并且担任研究总监这一职位。苏兹克维在深度学习方面已经发表了很多篇论文目前论文的引用数已经超过7万次。
最后一位作者是杰弗里·辛顿Geoffrey Hinton。对于辛顿我们就比较熟悉了他是多伦多大学计算机系的教授是机器学习特别是深度学习的学术权威。可以说几十年来辛顿都在以神经网络为代表的深度学习领域深耕即便是在其他学术思潮涌动的时候他都能够坚持在深度学习这一领域继续钻研这种精神让我们钦佩。
论文的主要贡献
如何来描述这篇论文的主要贡献呢?简而言之,这篇论文开启了深度学习在计算机视觉领域广泛应用的大门。通过这篇论文,我们看到了深度学习模型在重要的计算机视觉任务上取得了非常显著的效果。
具体来说在ImageNet 2012年的比赛中文章提到的模型比第二名方法的准确度要高出十多个百分点。能够达到这个效果得益于在模型训练时的一系列重要技巧。这篇论文训练了到当时为止最大的卷积神经网络而这些技巧使得训练大规模实用级别的神经网络成为可能。
论文的核心方法
要了解AlexNet的一些核心方法我们就需要简单提一下ImageNet竞赛的数据集。这个数据集在当时有大约120万张训练图片5万张验证图片和15万张测试图片。这些图片属于1000个类别。这个数据集在当时来说应该算是无可争议的大型数据集。为了能够方便地处理这些图片作者们把所有图片的分辨率都重新调整到了“256*256”。AlexNet直接在这些图片的RGB像素点上进行建模。
整个模型的架构是怎样的呢AlexNet一共包含8层网络结构5层全联通层也就是前馈神经网络。这8层网络架构总体来说是逐渐变小的一个趋势也就是说每一层提取的信息越来越呈现高度的概括性。
那么在整个架构中,这篇文章提出的模型有哪些独到之处呢?
第一AlexNet采用了“线性整流函数”ReLu来作为激活函数。虽然这个选择在今天看来可以说是非常平常甚至已经成为了神经网络建模的默认选项。但这个选择在当时还是很大胆的一种创新。这个创新带来了训练时间的大幅度减少同时还能保持甚至提升了模型性能。
第二整个模型的训练大量采用了GPU并且使用了多个GPU来进行计算。这一点就在速度上和模型的大小上彻底解放了模型的选择。以前仅仅利用单个GPU的方式没办法把所有的训练数据都放入一个GPU上。
第三作者们介绍了一种叫作“局部响应归一化”Local Response Normalization的方法来对每层之间的单元进行归一。
如何进行最有效的归一,以及这些归一化有什么作用,这些问题一直都是深度学习研究面临的重要课题。从实际的使用上来看,这种局部响应归一化的方法在几年之后让位给了其他更为主流的归一方法。但是从这一个技术要点来看,我们要想把深度学习模型真正应用到实际场景任务中,归一化是一个必不可少的组件。
第四作者们在AlexNet里面使用了所谓的“重叠池化”Overlapping Pooling这种方法。在普通的卷积神经网络中“池化”的作用是从周围的单元中总结出必要的信息。一般来说池化的过程中并不重复覆盖相同的单元。也就是说池化不会重叠。而在这篇论文中作者们发现重叠池化能够降低错误率虽然非常微量但是很重要。这个组件在之后的发展中并不多见。
除了在网络架构上的一些创新之外AlexNet的训练过程中最需要注意的是防止“过拟合”Overfitting。在很长的一段时间里我们没有办法把深度神经网络模型应用在实际场景中一个很重要的原因就是过拟合。可以说如何防止神经网络模型过拟合这个问题让研究人员伤透了脑筋。
所谓过拟合就是说模型在训练集上工作得很好但是无法“泛化”Generalization到测试集也就是没有出现过的数据上。无法泛化其实也就证明训练的模型对未知数据的预测能力很差。
这篇论文中主要提到了两种防止过拟合的方法。
第一种思路叫“数据增强”Data Augmentation。简单来说这里的思路其实就是增加“虚拟数据”来增加数据的多样性从而能够让模型更加健壮。那虚拟数据是怎么来的虚拟数据其实来源于真实数据的变形。
第二种思路就是 Dropout。这种方法在当时看显得很随便就是在训练的时候随机把一些单元置零。作者们发现在这样随机置零的过程后模型会变得更加稳定。值得一提的是Dropout已经成为了这几年深度学习的一个标配。
小结
今天我为你讲了第一篇基于深度学习的经典论文讨论了AlexNet这个模型这个模型开启了深度学习全面进军计算机视觉领域的时代。
一起来回顾下要点第一AlexNet模型在ImageNet 2012竞赛中胜出让我们看到了深度学习模型在计算机视觉领域中所取得的显著效果第二我们讨论了AlexNet模型的四大创新之处以及论文提出的两种防止过拟合的方法。
最后给你留一个思考题站在现在的立场AlexNet在当时的成功是否给你一些启发呢
参考文献
ImageNet Classification with Deep Convolutional Neural Networks, Alex Krizhevsky, Ilya Sutskever, and Geoffrey Hinton, NIPS, 2012.

View File

@@ -0,0 +1,63 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
123 计算机视觉领域的深度学习模型ResNet
今天我们继续来讨论经典的深度学习模型在计算机视觉领域应用。今天和你分享的论文是《用于图像识别的深度残差学习》Deep Residual Learning for Image Recognition[1]。这篇论文获得了CVPR 2016的最佳论文在发表之后的两年间里获得了超过1万2千次的论文引用。
论文的主要贡献
我们前面介绍VGG和GoogleNet的时候就已经提到过在深度学习模型的前进道路上一个重要的研究课题就是神经网络结构究竟能够搭建多深。
这个课题要从两个方面来看:第一个是现实层面,那就是如何构建更深的网络,如何能够训练更深的网络,以及如何才能展示出更深网络的更好性能;第二个是理论层面,那就是如何真正把网络深度,或者说是层次度,以及网络的宽度和模型整体的泛化性能直接联系起来。
在很长的一段时间里,研究人员对神经网络结构有一个大胆的预测,那就是更深的网络架构能够带来更好的泛化能力。但是要想真正实现这样的结果其实并不容易,我们都会遇到哪些挑战呢?
一个长期的挑战就是模型训练时的梯度“爆炸”Exploding或者“消失”Vanishing。为了解决这个问题在深度学习研究刚刚开始的一段时间就如雨后春笋般爆发出了很多技术手段比如“线性整流函数”ReLu“批量归一化”Batch Normalization“预先训练”Pre-Training等等。
另外一个挑战是在VGG和GoogleNet的创新之后大家慢慢发现单纯加入更多的网络层次其实并不能带来性能的提升。研究人员有这样一个发现当一个模型加入到50多层后模型的性能不但没有提升反而还有下降也就是模型的准确度变差了。这样看好像模型的性能到了一个“瓶颈”。那是不是说深度模型的深度其实是有一个限度的呢
我们从GoogleNet的思路可以看出网络结构是可以加深的比如对网络结构的局部进行创新。而这篇论文就是追随GoogleNet的方法在网络结构上提出了一个新的结构叫“残差网络”Residual Network简称为 ResNet从而能够把模型的规模从几层、十几层或者几十层一直推到了上百层的结构。这就是这篇文章的最大贡献。
从模型在实际数据集中的表现效果来看ResNet的错误率只有VGG和GoogleNet的一半模型的泛化能力随着层数的增多而逐渐增加。这其实是一件非常值得深度学习学者振奋的事情因为它意味着深度学习解决了一个重要问题突破了一个瓶颈。
论文的核心方法
那这篇论文的核心思想是怎样的呢?我们一起来看。
我们先假设有一个隐含的基于输入x的函数H。这个函数可以根据x来进行复杂的变换比如多层的神经网络。然而在实际中我们并不知道这个H到底是什么样的。那么传统的解决方式就是我们需要一个函数F去逼近H。
而这篇文章提出的“残差学习”的方式就是不用F去逼近H而是去逼近H(x)减去x的差值。在机器学习中我们就把这个差值叫作“残差”也就是表明目标函数和输入之间的差距。当然我们依然无法知道函数H在实际中我们是用F去进行残差逼近。
F(x)=H(x)-x当我们把x移动到F的一边这个时候就得到了残差学习的最终形式也就是F(x)+x去逼近未知的H。
我们引用论文中的插图来看这个问题就会更加直观。图片来源https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/He_Deep_Residual_Learning_CVPR_2016_paper.pdf
在这个公式里外面的这个x往往也被称作是“捷径”Shortcuts。什么意思呢有学者发现在一个深度神经网络结构中有一些连接或者说层与层之间的关联其实是不必要的。我们关注的是什么样的输入就应当映射到什么样的输出也就是所谓的“等值映射”Identity Mapping
遗憾的是如果不对网络结构进行改进模型无法学习到这些结构。那么构建一个从输入到输出的捷径也就是说从x可以直接到H或者叫y而不用经过F(x)在必要的时候可以强迫F(x)变0。也就是说捷径或者是残差这样的网络架构在理论上可以帮助整个网络变得更加有效率我们希望算法能够找到哪些部分是可以被忽略掉的哪些部分需要保留下来。
在真实的网络架构中作者们选择了在每两层卷积网络层之间就加入一个捷径然后叠加了34层这样的架构。从效果上看在34层的时候ResNet的确依然能够降低训练错误率。于是作者们进一步尝试了50多层再到110层一直到1202层的网络。最终发现在110层的时候能够达到最优的结果。而对于这样的网络所有的参数达到了170万个。
为了训练ResNet作者们依然使用了批量归一化以及一系列初始化的技巧。值得一提的是到了这个阶段之后作者们就放弃了Dropout不再使用了。
小结
今天我为你讲了一篇经典论文提出了ResNet残差网络这个概念是继VGG和GoogleNet之后一个能够大幅度提升网络层次的深度学习模型。
一起来回顾下要点:第一,我们总结归纳了加深网络层次的思路以及遇到的挑战;第二,我们讲了讲残差网络的概念和这样做背后的思考以及在实际应用中的一些方法。
最后给你留一个思考题从AlexNet到VGG、GoogleNet再到ResNet除了网络深度加深以外模型进化过程中是否还有一些地方也让你有所感触
参考文献
Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun. Deep Residual Learning for Image Recognition. The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pp. 770-778, 2016.

View File

@@ -0,0 +1,62 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
124 计算机视觉高级话题(一):图像物体识别和分割
从今天开始,我们讨论几个相对比较高级的计算机视觉话题。这些话题都不是简单的分类或者回归任务,而是需要在一些现有的模型上进行改进。
我们聊的第一个话题就是图像中的物体识别Object Recognition和分割Segmentation。我们前面介绍过物体识别和分割。通俗地讲就是给定一个输入的图像我们希望模型可以分析这个图像里究竟有哪些物体并能够定位这些物体在整个图像中的位置对于图像中的每一个像素能够分析其属于哪一个物体。
这一类型任务的目的是更加仔细地理解图像中的物体,包括图片分类、对图像里面的物体位置进行分析,以及在像素级别进行分割,这无疑是一个充满挑战的任务。
R-CNN
深度模型特别是卷积神经网络CNN在AlexNet中的成功应用很大程度上开启了神经网络在图像分类问题上的应用。这之后不少学者就开始考虑把这样的思想利用到物体识别上。第一个比较成功的早期工作来自加州大学伯克利分校[1]这就是我们接下来要介绍的R-CNN模型。
首先R-CNN的输入是一个图片输出是一个“选定框”Bounding Box和对应的标签。R-CNN采用了一种直观的方法来生成选定框尽可能多地生成选定框然后来看究竟哪一个选定框对应了一个物体。
具体来说针对图像R-CNN先用不同大小的选定框来扫描并且尝试把临近的具有相似色块、类型、密度的像素都划归到一起去。然后再利用一个AlexNet的变形来对这些待定Proposal的选定框进行特征提取Feature Extraction。在模型的最后一层R-CNN加入了一个支持向量机Support Vector Machine来判断待选定框是否是某个物体。判断好了选定框以后R-CNN再运行一个线性回归来对选定框的坐标进行微调。
R-CNN虽然证明了在物体识别这样的任务中CNN的确可以超越传统的模型但整个模型由多个模块组成相对比较繁琐。
Fast R-CNN
意识到了R-CNN的问题以后一些学者开始考虑如何在这个模型上进行改进。第一个重大改进来自于R-CNN原文中的第一作者罗斯·吉尔什克Ross Girshick。吉尔什克这个时候已经来到了微软研究院他把自己改进的模型叫作Fast R-CNN[2]。
Fast R-CNN的一个重要特点就是观察到我们刚才介绍R-CNN中的第二步骤也就是每一个待定的选定框都需要进行特征提取。这里的特征提取其实就是一个神经网络往往非常消耗资源。而且很多待定的选定框有很多重叠的部分可以想象就会有很多神经网络的计算是重复多余的。
那么有没有什么办法我们可以针对一个图片仅仅运行一次神经网络但是又可以针对不同的待选定框共享呢这其实就是Fast R-CNN的核心思想。Fast R-CNN的另外一个特点就是尝试用一个神经网络架构去替代R-CNN中间的四个模块。这样两个改进的结果是怎样的呢Fast R-CNN和R-CNN相比在效果上差不多但是训练时间快了9倍以上。
Faster R-CNN和Mask R-CNN
在Fast R-CNN的技术上一群当时在微软研究院的学者们把对R-CNN的加速往前推进了一步这就是模型Faster R-CNN[3]。Faster R-CNN是在如何提出待定的选定框上做了进一步的改进使得这部分不依赖一个单独的步骤而依赖我们已经训练的CNN网络。这在速度上比Fast R-CNN又快了不少。
在Faster R-CNN的基础上Mask R-CNN不仅能够做到对图像中的物体进行判别而且还能够做到像素级的抽取[4]。前面我们在讲2017年ICCV最佳研究论文的时候介绍过这部分内容。这里我带你做一个简单的回顾。
Faster R-CNN分为两个阶段。第一个阶段是“区域提交网络”Region Proposal Network目的是从图像中提出可能存在候选矩形框。第二个阶段从这些候选框中使用“RoIPool”这个技术来提取特征从而进行标签分类和矩形框位置定位这两个任务。这两个阶段的一些特征可以共享。
区域提交网络的大体流程是什么样的?大体来说,最原始的输入图像经过经典的卷积层变换之后形成了一个图像特征层。在这个新的图像特征层上,模型使用了一个移动的小窗口来对区域进行建模。
这个移动小窗口有这么三个任务需要考虑。首先移动小窗口所覆盖的特征经过一个变换达到一个中间层,然后经过这个中间层,直接串联到两个任务,也就是物体的分类和位置的定位。其次,移动的小窗口用于提出一个候选区域,也就是矩形框。而这个矩形框也参与刚才所说的定位信息的预测。当区域提交网络“框”出了物体的大致区域和类别之后,模型再使用一个“物体检测”的网络来对物体进行最终的检测。
Mask R-CNN的第一部分完全使用Faster R-CNN所提出的区域提交网络模型对第二部分进行了更改。那Mask R-CNN的第二部分都输出什么呢不仅仅输出区域的类别和框的相对位置同时还输出具体的像素分割。和很多类似工作的区别是像素分割、类别判断、位置预测是三个独立的任务并没有互相的依赖这是作者们认为Mask R-CNN能够成功的一个重要的关键。
小结
今天我为你讲了计算机视觉高级话题之一的物体识别和分割技术。我们总结了从最早的R-CNN到加速的Fast R-CNN和更快的Faster R-CNN以及最后能够进行像素分割的Mask R-CNN。
最后,给你留一个思考题,从这一系列模型的发展中,你能总结出一些心得体会吗?
参考文献
Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik. Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation. The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pp. 580-587, 2014.
Ross Girshick. Fast R-CNN. The IEEE International Conference on Computer Vision (ICCV), pp. 1440-1448, 2015.
Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks. Conference on Neural Information Processing Systems (NIPS), 2015.
K. He, G. Gkioxari, P. Dollar and R. Girshick. Mask R-CNN. In IEEE Transactions on Pattern Analysis and Machine Intelligence.

View File

@@ -0,0 +1,67 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
125 计算机视觉高级话题(二):视觉问答
今天我们继续分享计算机视觉领域的高级话题聊一聊“视觉问答”Visual Question Answering这个话题。
我们在前面曾经提到过“问答系统”Question Answering可以说这是人工智能领域最核心的问题之一。传统的问答系统主要是针对文字而言的问题和答案都是以文字的形式表达的。当然问答所针对的内容有可能来自一个外在的知识库例如维基百科。
我们今天要讨论的视觉问答特别是“自由形式”Free-Form或者“开放形式”Open Ended的视觉问答主要指的是根据一个图片进行自由的基于自然语言的问答。例如我们可以问一个图片中是否存在一只猫或者可以问图片里的天气是不是阴天等等。
视觉问答的挑战
那么,为什么视觉问答会在最近几年里得到很多学者的关注呢?我们有必要先来分析一下视觉问答所面临的挑战。
首先,视觉问答需要对图片中的细节加以理解。例如,我们问图片中的匹萨用了哪种奶酪,那就代表着我们的系统必须能够识别匹萨中的奶酪,而这往往意味着非常微观的一些细节的物体的识别。
其次,视觉问答还需要我们对图片的上下文进行理解。例如,我们可以问图片中有几辆自行车。这个问题其实不仅需要我们对图片中的自行车进行理解,还需要能够计数,这显然是一种更加复杂的理解任务。
除此以外,我们还需要对图片中的物体进行推理。例如,我们问图片中的匹萨是不是素食匹萨。那这个问题就需要对匹萨的种类进行分类,这是一个最基本的推理。
当然,视觉问答的挑战还远远不止这些。但从这些例子我们已经可以看出,视觉问题是一个综合性的人工智能问题。
不少视觉问答的数据集除了纯粹的图片作为输入以外还有一个图片的“标题”Caption。这个图片标题往往提供了不少的信息也算是帮助研究者在一定程度上降低了任务的难度。
如果需要对视觉问答的总体情况有一个更加深入的理解,推荐你阅读我在文末列出的参考文献[1]。
视觉问答建模
接下来我们来聊一个视觉问答的基础模型[1]。这个模型需要对问题、图片以及图片标题分别进行建模,从而能够进行问答。
针对问题模型利用所有问题中的重要词进行了“词包”Bag of Words的表达并且得到了一个1030维度的输入表征。类似地针对图片标题模型也进行了词包表达得到了一个1000维度最高频词的表征。最后作者们利用了VGG网络来提取图片的特征得到了一个4096维度的图像表征。一种更加简单的方法则是先利用神经网络的隐含层针对每一种特征单独训练然后把第一层中间层给串联起来。串联起来之后这就是所有特征的一种联合的表达了。那么我们可以再经过一层隐含层学习到各个表征之间的相互关系。
文章中还讨论了另外一种模型那就是利用LSTM来把问题和图像结合到一起来最后对回答进行预测。
在这样的模型架构下回答的准确度大概在55%左右。如何来理解这个准确度呢在同样的一个数据集中如果针对所有的问题回答都是“是”Yes所达到的准确度大概是20%多。
在最初的模型被开发出来以后的几年时间里针对视觉问答的各类模型如雨后春笋般爆发式地增长。其中一个大类的模型利用了“关注”Attention机制。在深度模型中关注机制是一种相对来说复杂一些的“加权”模式。也就是说我们希望对某一些神经元或者是隐含变量更加关注一些。这个机制在视觉问答中的一种应用就是针对不同的问题我们希望让模型学习到图片的哪一部分来负责回答。
在一篇论文中[2]作者们提出了一种更加高级的“关注”机制那就是“层次同关注”Hierarchical Co-Attention
这个机制是什么样的呢?针对某一个回答,我们不仅要学习到究竟需要模型“看到”图片的某一个局部,这也就是我们刚才说到的“加权”,还需要针对问题,也就是文字,进行“加权”。这里的一个观察是,有时候一个问题中的核心其实就是几个关键词,这些关键词直接影响了回答。这就是“同关注”这一概念。
文章中还提出了另外一个概念,那就是“层次关注”,是指问题的文字,在单词、短语以及整个提问三个层次来进行建模。可以说,这种方法在语义的局部以及整体上更能找到问题的核心所在。
最后需要提及一点最近的一些研究又把视觉问答和“推理”Reasoning特别是“神经编程”Neural Programming联系起来让回答问题变成自动生成程序的某种特殊形式[3]。
小结
今天我为你讲了计算机视觉高级话题之一的视觉问答的概念。
一起来回顾下要点:第一,我们讲了视觉问答所面临的三大主要挑战;第二,我们讨论了对视觉问答进行建模的一些基本思路。
最后,给你留一个思考题,你觉得当前视觉问答的主要瓶颈是什么?
参考文献
Stanislaw Antol, Aishwarya Agrawal, Jiasen Lu, Margaret Mitchell, Dhruv Batra, C. Lawrence Zitnick, Devi Parikh. VQA: Visual Question Answering. The IEEE International Conference on Computer Vision (ICCV), pp. 2425-2433, 2015.
Jiasen Lu, Jianwei Yang, Dhruv Batra, and Devi Parikh. Hierarchical question-image co-attention for visual question answering. Proceedings of the 30th International Conference on Neural Information Processing Systems (NIPS16), Daniel D. Lee, Ulrike von Luxburg, Roman Garnett, Masashi Sugiyama, and Isabelle Guyon (Eds.). Curran Associates Inc., USA, 289-297, 2016.
Justin Johnson, Bharath Hariharan, Laurens van der Maaten, Judy Hoffman, Li Fei-Fei, C. Lawrence Zitnick, Ross B. Girshick. Inferring and Executing Programs for Visual Reasoning. ICCV 2017: 3008-3017.

View File

@@ -0,0 +1,53 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
126复盘 5 计算机视觉核心技术模块
复盘 5 计算机视觉核心技术模块
今天我们来对计算机视觉核心技术模块做一个复盘。在这个模块里我们一起学习了12期内容讨论了四个话题这些话题主要围绕计算机视觉的基础知识和深度学习技术在这个领域的应用。
之所以这么安排,是因为没有深度学习技术,就不会有现在计算机视觉的发展。我们站得稍微高一点就可以看到,正是因为深度学习技术在计算机视觉中的成功应用,才有了近几年的人工智能浪潮。
提示:点击知识卡跳转到你最想看的那篇文章,温故而知新。
图像技术基础
基于深度学习的计算机视觉技术
计算机视觉领域的深度学习模型
计算机视觉高级话题
积跬步以至千里
最后,恭喜你学完了这个模块中的内容。今日记一事,明日悟一理,积久而成学。每一个收获都是一个不小的成就。

View File

@@ -0,0 +1,78 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
126 计算机视觉高级话题(三):产生式模型
今天我们来讨论计算机视觉高级话题中的“产生式模型”Generative Model
我们前面讲到的计算机视觉问题绝大多数场景都是去学习一个“判别式模型”Discriminative Model也就是我们希望构建机器学习模型来完成这样的任务比如判断某一件事情或一个图片的特征或者识别图片里面的物体等这些任务都不需要回答“数据是如何产生的”这一问题。简言之针对判断类型的任务不管是回归还是分类我们都不需要对数据直接进行建模。
然而,判别式模型并不能解决所有的机器学习任务。有一些任务的核心其实需要我们针对数据进行有效的建模,这就催生了“产生式模型”。
产生式模型的一些基础概念
那么,针对数据建模的产生式模型都有哪些基本思想呢?
首先,产生式模型的一个核心思想就是模型要能够产生数据。也就是说,产生式模型不仅需要针对已有的数据建模,还需要有能力产生新的数据。产生出的这些新数据当然需要和已有的数据有一定的相似度。换句话说,新产生的数据要能够“以假乱真”。
那么,有哪些能够产生数据的工具呢?
在比较简单的模型中,概率分布其实就起了产生数据的作用。例如,在离散概率分布的世界里,如果我们知道了一个伯努利分布的参数,也就是某一个事件发生的概率,那么,从理论上来说,我们就可以模拟出这个事件的发生。
比如我们利用伯努利分布来对掷硬币产生的正反面建模。一旦我们知道了这个分布的概率是0.5或者说是50%),那么,我们从这个分布中产生的数据就可以形成和掷一枚没有偏差的硬币一样的效果。
同样的道理,如果我们利用正态(或者叫高斯)分布来针对一个连续变量建模,例如某一个地区的温度,那么一旦我们知道了这个正态分布的均值和方差这两个参数,我们就可以产生所有温度的可能值。假设温度完全服从这个正态分布,那么就可以认为这些可能值就是以后这个地区可能出现温度的真实情况。
当然,我们可以看到,简单概率分布无法对真实世界的绝大多数场景进行建模。这也不断激发研究人员来开发各种更加复杂的概率模型来对真实世界进行描述。
在过去十多年的时间里,一类机器学习思想逐渐成为主流的产生式模型,那就是概率图模型。顾名思义,概率图模型就是概率论和图论的巧妙结合,以此来对复杂的联合概率分布来进行描述。
我们今天就不针对概率图模型展开讨论了。你需要了解概率图模型的一个重要特点,那就是能够利用一个“显示的”表达式来写出这个联合概率分布,不管这个式子本身有多复杂。也就是说,概率图模型期望能够通过构建复杂的、显示的表达式来完成对真实场景的模拟。
产生式对抗网络
显然,构造一个概率图模型是一个极具挑战的任务,面对复杂的情况,我们都需要写出一个显示的表达式,或者是针对这种场景的数据来进行模拟。例如,图像和音频信息就是比较复杂的数据,很难用一个公式(不管这个公式多么复杂)来表达。
那究竟该怎么办针对这种复杂的数据研究人员提出了一种新的产生式模型这就是“产生式对抗网络”Generative Adversarial Nets简称为 GAN[1]。在过去的几年里,这种模型因其概念简单而备受青睐。
GAN的基本思想是怎样的呢
首先我们有一个数据的“产生器”Generator。这个产生器的作用是从一个我们可以控制的模型中产生数据。最终我们的期望是这个产生器能够产生和真实数据一样的数据。
其次我们有一个数据的“判别器”Discriminator其目的是区分数据究竟是真实的数据还是产生器产生的数据。
GAN的模型训练是一个迭代的过程。最开始产生器肯定无法真正产生有效的数据这个时候判别器能够很轻松地对产生的数据进行一个评判哪些是真实数据哪些不是。但是产生器会根据这个判别结果逐渐调整自己产生数据的过程慢慢地让自己产生的数据趋于真实。一直到最后判别器无法分别出数据的真伪。
GAN其实代表了这么一类模型那就是不再对数据的产生过程进行显式建模因为这个太过于困难而是想办法定义一个流程通过这个流程产生数据从而能够直接去对真实数据进行模拟。
GAN和深度学习的结合点在哪里呢就是产生器和判别器可以分别是多层的神经网络甚至可以是更加复杂的深度学习模型。这样GAN的学习过程其实也就是两个不同的各司其职的深度学习模型参数学习的过程。
在近几年的发展中基于GAN的各类模型层出不穷而且能够产生的图片质量也越来越高甚至有的真的达到了能以假乱真的程度。
就在很多人都对这类模型充满了信心的时候一些理论界的研究再次让大家对产生式模型特别是GAN的前景萌生了怀疑。GAN能够彻底解决产生式模型的所有问题吗
最新的论文[2]论证了GAN在一些限定情况下并不是对数据的整个分布进行建模。一个通俗的例子是如果我们训练了一个可以产生猫的图片的GAN那么在理想状态下这个模型是不是应该可以产生各式各样不同种类的猫的图片呢答案是经过某种训练的GAN并不能做到这一点。相反GAN只能产生有限的猫的图片。这肯定是不太理想的一种情况。
那么研究者究竟是应该修改GAN来克服这个问题还是能够找到更好的方法来产生数据目前这还是一个未知答案的研究课题。
小结
今天我为你讲了计算机视觉高级话题之一的产生式模型。
一起来回顾下要点第一我们来讲了为什么需要产生式模型和简单的基于概率分布的数据产生器第二我们讨论了基于GAN的产生模型和最新研究的GAN的一些局限。
最后,给你留一个思考题,有了能够以假乱真的产生式模型,我们可以有哪些应用呢?
欢迎你给我留言,我们一起讨论。
参考文献
Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, and Yoshua Bengio. Generative adversarial nets. Proceedings of the 27th International Conference on Neural Information Processing Systems - Volume 2 (NIPS14), Z. Ghahramani, M. Welling, C. Cortes, N. D. Lawrence, and K. Q. Weinberger (Eds.), Vol. 2. MIT Press, Cambridge, MA, USA, 2672-2680, 2014.
Sanjeev Arora and Yi Zhang. Do GANs learn the distribution? Some theory and empirics. ICLR. 2018

View File

@@ -0,0 +1,73 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
127 数据科学家基础能力之概率统计
学习人工智能的工程师,甚至是在人工智能相关领域从业的数据科学家,往往都不重视概率统计知识的学习和培养。有人认为概率统计知识已经过时了,现在是拥抱复杂的机器学习模型的时候了。实际上,概率统计知识和数据科学家的日常工作,以及一个人工智能项目的正常运作都密切相关,概率统计知识正在人工智能中发挥着越来越重要的作用。
和机器学习一样,概率统计各个领域的知识以及研究成果浩如烟海。今天我就和你聊一聊,如何从这么繁多的信息中,掌握能够立即应用到实际问题中的概率统计知识,以及如何快速入手一些核心知识,并能触类旁通学习到更多的内容。
使用概率的语言
概率统计中的“概率”,对于学习和掌握人工智能的诸多方面都有着举足轻重的作用。这里面最重要的,恐怕要数概率论中各种分布的定义。初学者往往会觉得这部分内容过于枯燥乏味,实际上,概率论中的各种分布就像是一门语言的基本单词,掌握了这些基本的“建模语言”单词,才能在机器学习的各个领域游刃有余。
值得注意的是目前火热的深度学习模型以及在之前一段时间占领机器学习统治地位的概率图模型Probabilistic Graphical Models都依赖于概率分布作为这些框架的基本建模语言。因此能够真正掌握这些分布就显得尤为重要。
对于分布的掌握其实可以很容易。只要对少量几个分布有一定的认识后,就能够很容易地扩展开来。首先,当你遇到一个实际场景的时候,你要问自己的第一个问题是,这个场景是针对离散结果建模还是针对连续数值建模?这是一个最重要的分支决策,让你选择正确的建模工具。
当面对离散结果的时候,最需要掌握的分布其实就是三个:
伯努利分布
多项分布
泊松分布
这三种分布是其他离散分布的重要基础。对于这三种分布,记忆其实也相对容易。比如,任何时候,如果你的场景是一个二元问题(例如用户是否点击,是否购买),伯努利分布都是最直接的选择。当你遇到的场景需要有多于两种选择的时候,那自然就用多项分布。另外,文本建模常常可以看做这样一个问题,那就是在特定语境下,如何从上千甚至上万的可能性中选择出最恰当的字词,因此多项分布也广泛应用在文本建模领域。泊松分布则常常用在对可数的整数进行建模,比如一些物品的总个数。
了解应用场景和他们所对应的分布之间的联系,是掌握这些“语言”的重要环节。当你面临的问题是连续数值的时候,绝大多数情况下,你需要掌握和理解正态分布,有时候称为高斯分布。正态分布的重要性是再怎么强调都不为过的。任何你可以想到的场景,几乎都可以用正态分布来建模。由于中心极限定理的存在,在大规模数据的情况下,很多其他分布都可以用正态分布来近似或者模拟。因此,如果说学习概率知识中你只需要掌握一种分布的话,那无疑就是正态分布。
在理解概率分布的过程中还需要逐渐建立起关于“随机数”和“参数”的概念。衡量一个分布是离散还是连续指的是它产生的“随机数”是离散还是连续和这个分布的“参数”没有关系。比如伯努利分布是一个离散分布但是伯努利分布的参数则是一个介于0和1之间的实数。理解这一点常常是初学者的障碍。另外建立起参数的概念以后所有的分布就有了模型也就是分布本身和参数的估计过程两个方面。这对理解机器学习中模型和算法的分离有很直接的帮助。
当理解了这些概率最基础的语言以后,下面需要做的就是,了解贝叶斯统计中,怎么针对概率分布定义先验概率,又怎么推导后验概率。
了解贝叶斯统计不是说一定要做比较困难的贝叶斯估计,而是说,怎么利用先验概率去对复杂的现实情况进行建模。比如说,针对用户是否购买某一件商品而言,这个问题可以用一个伯努利分布来建模。假如我们又想描述男性和女性可能先天上就对这个商品有不同的偏好,这个时候,我们就可以在伯努利分布的参数上做文章。也就是说,我们可以认为男性和女性拥有不同的参数,然而这两个参数都来自一个共同的先验概率分布(也可以认为是全部人群的购买偏好)。那么这个时候,我们就建立起了一个具有先验的模型来描述数据。这个思维过程是需要初学者去琢磨和掌握的。
假设检验
如果说概率基础是一般学习人工智能技术工程师和数据科学家的薄弱环节,假设检验往往就是被彻底遗忘的角落。我接触过的很多统计背景毕业的研究生甚至博士生,都不能对假设检验完全理解吃透。实际上,假设检验是现实数据分析和数据产品得以演化的核心步骤。
对于一款数据产品特别是已经上线的产品来说能够持续地做线上A/B测试通过A/B测试检测重要的产品指标从而指导产品迭代已经成为产品成败的关键因素。这里面通过A/B测试衡量产品指标或多或少就是做某种形式的假设检验。
你期望提高产品性能那么如何理解假设检验选取合适的工具理解P值等一系列细节就至关重要这些细节决定了你辛辛苦苦使用的复杂人工智能模型算法是否有实际作用。
首先我们要熟悉假设检验的基本设定。比如我们往往把现在的系统情况比方说用户的点击率、购买率等当做零假设或者通常叫做H0。然后把我们改进的系统情况或者算法产生的结果叫做备择假设或者叫做H1。
接下来一个重要的步骤就是检验目前的实验环境看是否满足一些标准检验的假设环境比如T检验、Z检验等。这一步往往会困扰初学者甚至是有经验的数据科学家。一个非常粗略的窍门则是因为中心极限定理的存在Z检验通常是一个可以缺省使用的检验也就是说在绝大多数情况下如果我们拥有大量数据可供使用一般会选择Z检验。当然对于初学者而言最常规的也是最需要的就是掌握T检验和Z检验然后会灵活使用。
在选择了需要的检验以后就要计算相应的统计量。然后根据相应的统计量以及我们选好的检验就可以得到一系列的数值比如P值。然后利用P值以及我们预先设定的一个范围值比如经常设置的0.95或者说95%我们往往就可以确定H1是否在统计意义上和H0不同。如果H1代表着新算法、新模型也就意味着新结果比老系统、老算法有可能要好。
需要你注意的是这里说的是“有可能”而不是“一定”、“确定”。从本质上来说假设检验并不是金科玉律。假设检验本身就是一个统计推断的过程。我们在假设检验的流程中计算的其实是统计量在H0假设下的分布中出现的可能性。可能性低只能说我们观测到的现象或者数值并不支持我们的H0但这个流程并没有去验证这些现象或者数值是不是更加支持H1。
另外,即便“可能性”低,也并不代表绝对不出现。这也是初学者常常过度相信假设检验所带来的问题。比较正确的对待假设检验的态度,就是把这个流程提供的结果当做工具,与更加复杂的决策过程结合起来,从而对目前的系统、目前的产品有一个综合的分析。
值得注意的是和假设检验有关联的一个概念“置信区间”往往也很容易被忽视。尽管初看没有太大作用置信区间其实被广泛应用在推荐系统的“利用和探索”Exploitation & Exploration策略中。因此明白置信区间的概念很有益处对实际的计算有很大帮助。
因果推论
最后我想提一下因果推论Causal Inference。因果推论不是一般的统计教科书或者工程类学生接触到的统计教科书里的基本内容。然而最近几年这个领域在机器学习界获得了越来越多的关注。对于学习机器学习前沿知识的朋友来说了解因果推论十分必要。
同时对于工程产品而言并不是所有情况都能通过A/B测试来对一个希望测试的内容、模型、产品设计进行测试并在一定时间内找到合理的结果。在很多情况下是不能进行测试的。因此如何在不能进行测试的情况下还能通过数据研究得出期望的结果这就是因果推论的核心价值。基于此越来越多的互联网公司开始关注这个技术。
对于多数人工智能工程师而言,因果推论所需要的场景其实无时无刻不陪伴着我们。一个常见的情况是,我们需要用数据来训练新的模型或者算法。这里面的数据采集自目前线上的系统,比如一个新闻推荐系统。然而,现在的线上系统是有一定偏差的,例如比较偏好推荐娱乐新闻。那么,这个偏差就会被记录到数据里,我们收集的数据就侧重于娱乐新闻。那么,要想在一个有偏差的数据中,依然能够对模型和算法进行无偏差的训练和评测,就可以运用因果推论为机器学习带来的一系列工具。
小结
今天我为你讲了掌握概率统计基础知识的一些核心思路。一起来回顾下要点:第一,学习概率分布的语言对于理解、甚至是创造新的机器学习模型和算法都有着重要作用。第二,假设检验是常常被人工智能工程师和数据科学家遗忘的知识。然而,它对我们做产品开发却至关重要。第三,因果推论是一个新兴的统计和机器学习结合的领域,希望你能有所了解。
最后给你留一个思考题我们之前说到假设检验约等于我们计算统计量在H0里发生的可能性那么为什么我们不直接计算在H1里发生的可能性呢

View File

@@ -0,0 +1,109 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
128 数据科学家基础能力之机器学习
想要成为合格的,或者更进一步成为优秀的人工智能工程师或数据科学家,机器学习的各种基础知识是必不可少的。然而,机器学习领域浩如烟海,各类教材和入门课程层出不穷。特别是机器学习基础需要不少的数学知识,这对于想进入这一领域的工程师而言,无疑是一个比较高的门槛。
今天,我来和你聊一聊如何学习和掌握机器学习基础知识,又如何通过核心的知识脉络快速掌握更多的机器学习算法和模型。
监督学习和无监督学习
要问机器学习主要能解决什么问题,抛开各式各样的机器学习流派和层出不穷的算法模型不谈,机器学习主要解决的是两类问题:监督学习和无监督学习。掌握机器学习,主要就是学习这两类问题,掌握解决这两类问题的基本思路。
什么是解决这两类问题的基本思路呢?基本思路,简而言之就是“套路”。放在这里的语境,那就是指:
如何把现实场景中的问题抽象成相应的数学模型,并知道在这个抽象过程中,数学模型有怎样的假设。
如何利用数学工具,对相应的数学模型参数进行求解。
如何根据实际问题提出评估方案,对应用的数学模型进行评估,看是否解决了实际问题。
这三步就是我们学习监督学习和无监督学习,乃至所有的机器学习算法的核心思路。机器学习中不同模型、不同算法都是围绕这三步来展开的,我们不妨把这个思路叫作“三步套路”。
那什么是监督学习呢监督学习是指这么一个过程我们通过外部的响应变量Response Variable来指导模型学习我们关心的任务并达到我们需要的目的。这也就是“监督学习”中“监督”两字的由来。
也就是说,监督学习的最终目标,是使模型可以更准确地对我们所需要的响应变量建模。比如,我们希望通过一系列特征来预测某个地区的房屋销售价格,希望预测电影的票房,或者希望预测用户可能购买的商品。这里的“销售价格”、“电影票房”以及“可能购买的商品”都是监督学习中的响应变量。
那什么是无监督学习呢?通常情况下,无监督学习并没有明显的响应变量。无监督学习的核心,往往是希望发现数据内部的潜在结构和规律,为我们进行下一步决断提供参考。典型的无监督学习就是希望能够利用数据特征来把数据分组,机器学习语境下叫作“聚类”。
根据不同的应用场景,聚类又有很多变种,比如认为某一个数据点属于一个类别,或者认为某一个数据点同时属于好几个类别,只是属于每个类别的概率不同等等。
无监督学习的另外一个作用是为监督学习提供更加有力的特征。通常情况下,无监督学习能够挖掘出数据内部的结构,而这些结构可能会比我们提供的数据特征更能抓住数据的本质联系,因此监督学习中往往也需要无监督学习来进行辅助。
我们简要回顾了机器学习中两大类问题的定义。在学习这两大类模型和算法的时候,有这么一个技巧,就是要不断地回归到上面提到的基本思路上去,就是这个“三步套路”,反复用这三个方面来审视当前的模型。另外,我们也可以慢慢地体会到,任何新的模型或者算法的诞生,往往都是基于旧有的模型算法,在以上三个方面中的某一个或几个方向有所创新。
监督学习的基础
监督学习的基础是三类模型:
线性模型
决策树模型
神经网络模型
掌握这三类模型就掌握了监督学习的主干。利用监督学习来解决的问题占所有机器学习或者人工智能任务的绝大多数。这里面有90%甚至更多的监督学习问题,都可以用这三类模型得到比较好的解决。
这三类监督学习模型又可以细分为处理两类问题:
分类问题
回归问题
分类问题的核心是如何利用模型来判别一个数据点的类别。这个类别一般是离散的,比如两类或者多类。回归问题的核心则是利用模型来输出一个预测的数值。这个数值一般是一个实数,是连续的。
有了这个基本的认识以后,我们利用前面的思路来看一下如何梳理监督学习的思路。这里用线性模型的回归问题来做例子。但整个思路可以推广到所有的监督学习模型。
线性回归模型Linear Regression是所有回归模型中最简单也是最核心的一个模型。我们依次来看上面所讲的“三步套路”。
首先第一步,我们需要回答的问题是,线性回归对现实场景是如何抽象的。顾名思义,线性回归认为现实场景中的响应变量(比如房价、比如票房)和数据特征之间存在线性关系。而线性回归的数学假设有两个部分:
响应变量的预测值是数据特征的线性变换。这里的参数是一组系数。而预测值是系数和数据特征的线性组合。
响应变量的预测值和真实值之间有一个误差。这个误差服从一个正态高斯分布分布的期望值是0方差是σ的平方。
有了这样的假设以后。第二步就要看线性回归模型的参数是如何求解的。这里从历史上就衍生出了很多方法。比如在教科书中一般会介绍线性回归的解析解Closed-form Solution。线性回归的解析解虽然简单优美但是在现实计算中一般不直接采用因为需要对矩阵进行逆运算而矩阵求逆运算量很大。解析解主要用于各种理论分析中。
线性回归的参数还可以用数值计算的办法比如梯度下降Gradient Descent的方法求得近似结果。然而梯度下降需要对所有的数据点进行扫描。当数据量很多的时候梯度下降会变得很慢。于是随机梯度下降Stochastic Gradient Descent算法就应运而生。随机梯度下降并不需要对所有的数据点扫描后才对参数进行更新而可以对一部分数据有时甚至是一个数据点进行更新。
从这里我们也可以看到,对于同一个模型而言,可以用不同的算法来求解模型的参数。这是机器学习的一个核心特点。
最后第三步,我们来看如何评估线性回归模型。由于线性回归是对问题的响应变量进行一个实数预测。那么,最简单的评估方式就是看这个预测值和真实值之间的绝对误差。如果对于每一个数据点我们都可以计算这么一个误差,那么对于所有的数据点而言,我们就可以计算一个平均误差。
上述对于线性回归的讨论可以扩展到监督学习的三类基本模型。这样你就可以很快掌握这些模型的特点和这些模型算法之间的联系。
无监督学习的基础
现实中绝大多数的应用场景并不需要无监督学习。然而无监督学习中很多有价值的思想非常值得初学者掌握。另外,无监督学习,特别是深度学习支持下的无监督学习,是目前机器学习乃至深度学习的前沿研究方向。所以从长远来看,了解无监督学习是非常必要的。
我们前面说到,无监督学习的主要目的就是挖掘出数据内在的联系。这里的根本问题是,不同的无监督学习方法对数据内部的结构有不同的假设。因此,无监督学习不同模型之间常常有很大的差别。在众多无监督学习模型中,聚类模型无疑是重要的代表。了解和熟悉聚类模型有助于我们了解数据的一些基本信息。
聚类模型也有很多种类。这里我们就用最常见的、非常重要的K均值算法K-means来看看如何通过前面讲过的“三步套路”来掌握其核心思路。
首先K均值算法认为数据由K个类别组成。每个类别内部的数据相距比较近而距离所有其他类别中的数据都比较遥远。这里面的数学假设需要定义数据到一个类别的距离以及距离函数本身。在K均值算法中数据到一个类别的距离被定义为到这个类别的平均点的距离。这也是K均值名字的由来。而距离函数则采用了欧几里得距离来衡量两个数据点之间的远近。
直接求解K均值的目标函数是一个NP难NP-hard的问题。于是大多数现有的方法都是用迭代的贪心算法来求解。
一直以来,对聚类问题、对无监督学习任务的评估都是机器学习的一个难点。无监督学习没有一个真正的目标,或者是我们之前提到的响应变量,因此无法真正客观地衡量模型或者算法的好坏。
对于K均值算法而言比较简单的衡量指标就是看所有类别内部的数据点的平均距离和类别两两之间的所有点的平均距离的大小。如果聚类成功则类别内部的数据点会相距较近而类别两两之间的所有点的平均距离则比较远。
以上我们通过“三步套路”的三个方面讨论了K均值算法的核心思路这种讨论方法也适用所有的聚类模型和算法。
小结
当你可以熟练使用我今天介绍的“三步套路”,去分析更多监督学习和无监督学习的模型算法以后,对于基础的内容,也就是教科书上经常讲到的内容,你就可以去看这些内容究竟是在讲解这三个方面的哪个方面。
对于绝大多数模型来说,第一部分往往是最重要的,也就是说,这个模型究竟和现实问题的联系是什么。第二部分,也就是模型的求解,取决于模型本身的复杂度和成熟度,现在很多模型往往都有现成的软件包提供求解过程。而第三部分,模型的评估则在现实生产中至关重要。牢牢把握这三个方面,来对机器学习模型算法进行讨论,是成长为成熟数据科学家必不可少的过程。
今天我为你讲了掌握机器学习基础知识的一些核心思路。一起来回顾下要点第一机器学习主要的任务有监督学习和无监督学习。这两种机器学习任务的很多模型和算法都可以用一个“三步套路”的思路来进行分析。第二我们用线性回归作为例子探讨了如何用这个“三步套路”来分析监督学习的模型和算法。第三我们用K均值聚类算法作为例子探讨了如何用“三步套路”来分析无监督学习的模型和算法。
最后,给你留一个思考题,在现实场景中,当你发现一个模型并没有很好地解决你的问题时,从这个“三步套路”的角度来看,究竟哪个方面最容易出问题?

View File

@@ -0,0 +1,71 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
129 数据科学家基础能力之系统
对于初学人工智能的工程师或者数据科学家来说,在知识积累的过程中,“系统”往往是一个很容易被忽视的环节。特别是非计算机科学专业出身的朋友,一般都没有真正地建立过“系统”的概念,在今后从事人工智能的相关工作时,很可能会遇到一些障碍。
今天我想给你分享一下,作为人工智能工程师和数据科学家,需要建立的关于“系统”的最基本认知。这些认知能够帮助你把书本的理论知识和现实的应用场景快速结合起来。
理解管道Pipeline
在很多人工智能初学者的认知中,机器学习的流程是这样的。有一个已经准备好的数据集,这个数据集里面已经有了各种特征以及所对应的标签或者响应变量。这个时候,你需要做的就是利用这个数据集和一些现成的机器学习工具包,来训练一些机器学习模型。模型训练好以后,就可以计算一些已知的评估指标了,比如准确度、精度等等。
这是一般教科书和课程上介绍的标准机器学习流程,也是很多机器学习论文中的实验环境。遗憾的是,这个静态的流程并不适用于工业级的数据产品。
要支持工业级的人工智能产品,一个最基本的概念就是,你需要搭建一个管道让你的环境是动态的、闭环的。在英文的语言背景里,“管道”这个词很形象地说明了这个环境的特点。我们把数据想象成“管道”里的水,这里面的一个核心思想,就是数据从一个环节到下一个环节,源源不断。我们再把最终的产品,也就是这个管道的末端,和最开始的数据采集部分,也就是这个管道的开始端,结合起来思考,这就是一个闭合的环路。
理解数据产品的核心,就要理解它是一个闭合环路。几乎关于数据产品的一切难点、问题以及解决方案都可以从这个闭合环路中产生。从一个静态的机器学习流程到一个动态的管道似的闭合环路,这是一个质变,对整个环节上的所有步骤都有全新的要求。
我这里就拿数据集来举个例子。静态的流程中,我们不需要太过关注这个数据集的来源。甚至采集数据集的代码或者脚本都可以是一次性的,可以不具备重复使用的价值。但是这种情况在管道的环境中是不可能的。
在管道中,采集数据的可靠性和可重复性是非常重要的步骤,这就对采集数据所采用的代码有不一样的要求。这部分代码需要被反复检验,每一步都需要人工智能工程师和数据科学家进行检验。如果我们把这个例子扩展到数据管道的其他部分,就可以很清楚地看到,数据管道对于构建一个机器学习流程所带来的根本变化。
管道的另外一个重要特性是自动化,一个不能自动化的管道是不能被称为管道的。这里的自动化有两层意思,一层意思是指数据本身可以被自动采集、整理、分析,然后自动流入机器学习部分,有结果后自动输出并能被线上的系统使用;另一层意思是指,每一个环节本身都不需要人工干预,或者仅需极少数的人工,自身可以高可靠地运行。由此可见,管道的自动化对每个环节的技术选择和实现都有非常高的要求。
现代互联网公司中,每个团队,甚至成立专门的团队,一般都会针对机器学习管道开发工具平台,使管道的灵活度、自动化、可靠性有足够保障。对于初学者而言,尝试从管道的角度去理解问题,从整个系统的角度来认识产品开发过程,认识机器学习流程,才有可能设计出能真正满足线上需求的技术方案。
理解线上和线下的区别
了解了一个数据系统的闭合回路以后,很自然地,就会出现下一个问题,这也是一个核心的系统级问题,在这个管道中,哪些部分是在“线上”,哪些部分又在“线下”呢?
这里我们先来理清“线上”这个概念。“线上”往往是说,对于交互性很强的互联网产品(包括电商、搜索引擎、社交媒体等),从用户来到某一个页面,到我们为这个页面准备好所需内容(例如推荐的商品或者搜索的结果),这中间的响应时间对应的就是“线上”,这部分时间非常短暂,往往只有几百毫秒。如何在这几百毫秒的时间内进行复杂的运算就非常有讲究了。
“线下”的概念是相对于“线上”而言的。通常情况下,不能在这几百毫秒之内完成的运算,都是某种程度的“线下”运算。
理解线上和线下的区别是初学者迈向工业级应用的又一个重要的步骤。哪些计算可以放到线上,哪些可以放到线下,就成了种种机器学习架构的核心区别。
初学者还需要注意的一个问题是,线上和线下都是相对的概念。今天放在线下计算的某些部分,明天可能就会放到线上进行计算。所以,慢慢学会把握两者之间的转换之道,对于初学者进阶至关重要。
我这里举一个简单的线上和线下分割的例子。比方说,我们要构建一个检测垃圾邮件的系统。对于这样一个系统而言,哪些部分是线上,哪些部分是线下呢?
初看,我们在这里讨论的是一个比较容易的架构,但并不代表实现这个架构的难度也很小。在最简单的情况下,检测垃圾邮件需要一个二分分类器。如何训练这个分类器的参数就是一个关键。
假设我们训练一个逻辑回归二分分类器。那么,逻辑回归的参数,也就是一组线性系数究竟应该在什么环境中得到呢?很明显,训练一个逻辑回归肯定需要大量的训练数据。在有一定量(大于几千的垃圾邮件和非垃圾邮件)的训练数据时,训练逻辑回归的参数就不可能在几百毫秒内完成。在这样的思路下,训练逻辑回归就不得不放到线下来计算。一旦这个决定做出以后,一系列的模块就都必须放在线下计算了。
另外,数据的收集肯定也得放到线下,这样才能保证可以把训练数据传输到后面的管道模块中。还有特征的生成,至少是训练数据特征的生成,很自然地也就需要放在线下。
训练逻辑回归本身,刚才我们提到了,需要放在线下。而放在线下这个决定(从某种意义上来说,无所谓时间多了一点还是少了一点,总之无法满足几百毫秒的线上计算就需要放在线下),又可以让训练逻辑回归本身,采用更加复杂的二阶算法,使参数能够得到更好的收敛。
你可以看到,因为一个决定,带来了关于整个管道的一系列决定。而这些决定又影响了模型算法的选择,比如可以选用相对耗时的更复杂的算法。
那么在这个架构下,线上的部分是什么呢?首先,训练完一个模型之后,要想使用这个模型,我们必须把模型的参数存放到某个地方(也许是一个数据库或者是一个存储系统),线上的系统可以在几百毫秒的时间内马上得到这些参数。仅仅得到参数是不够的,还需要对当前的邮件进行判断。
这一步就有一些问题了。一种选择是,线上的部分拿到模型参数,然后实时动态产生这个邮件的特征,再实时计算出一个分数,并且判断是否是垃圾邮件。整个过程的这三个步骤需要在几百毫秒内进行完毕。
实际上,这里面的第二步往往比较耗时,甚至有的特征并不能在线上进行计算。比如,也许有一个特征需要查询这个邮件的来源是否可靠,这里就可能需要数据库操作,这一步也许就会非常耗时(在几百毫秒的场景中而言)。因此,动态产生特征,除非特征都非常简单,很有可能并不能完全在线上完成。
我们可以对框架进行简单的修改。所有的邮件首先输送到一个特征产生的模块中,这里并不是一个完全线上的环境,运算的需求可能超过几百毫秒,但总体只是几秒,最多十多秒。所有的特征产生以后,对邮件的判断也在这里完成,最终将邮件是否是垃圾邮件这个简单的选项保存下来。在线上的系统,也就是用户来到这个邮件系统界面的时候,我们只是从保存的结果中,直接读出一个标签,速度非常快。
如上,我们通过检测垃圾邮件系统的例子,分析了线上和线下的分割情况。现在来做一个思考,刚才描述的这个架构有什么问题吗?问题就是,线上的结果是一个事先计算好的结果,模型本身也是事先计算好的。因此,当有大量突发数据(比如一大批新的垃圾邮件)来临的时候,这个架构可能无法很快反应,更新模型。可见,如何理解线上和线下是一个需要慢慢琢磨的学习过程。
小结
今天我为你讲了数据科学家和人工智能工程师需要掌握的关于系统基础的两个核心概念。一起来回顾下要点:第一,现代数据流程不是一个静态的数据集,而是一个动态的闭环管道。 第二,理解什么计算可以放到线上,什么计算可以放到线下至关重要。
最后,给你留一个思考题,如果让你设计一个商品的推荐系统,哪些部分放到线下,哪些部分放到线上呢?

View File

@@ -0,0 +1,89 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
130 数据科学家高阶能力之分析产品
人工智能工程师和数据科学家的主要工作是什么?很多人认为,他们的主要工作是利用复杂的机器学习模型和算法来解决产品中的难题。这样的认识既“对”也“不对”。“对”的地方是说,机器学习模型和算法的确是人工智能技术在产品上落地的核心步骤。“不对”的地方是说,这种认识往往片面地总结了人工智能从业人员的工作范畴。
实际上,要想真正地提出一个好的人工智能解决方案,分析产品的能力是必需的。从较高的层次来讲,就是分析一个产品目前遇到的难题是什么,为什么需要用人工智能技术去解决,哪些是可以用人工智能技术解决的,哪些不能。
今天,我就来分享一下,站在人工智能工程师和数据科学家的角度,我们如何理解并提升分析产品的能力,学会了解产品的需求。
产品需求的庖丁解牛
一个数据驱动的产品往往是一个复杂的复合体。这里面当然有很多数据、人工智能的元素,也有不少其他元素,比如设计、人机交互、商业规则、心理学等等。那么,如何在这么一个综合复杂的体系中找到人工智能技术的合适位置,以及技术究竟要扮演什么样的角色,其实是一个数据驱动型产品能否成功的核心问题。
想要对这个问题有一个比较全面的认识,我们首先需要回答这么一个问题,那就是人工智能技术到底能够给产品带来什么?
很多朋友可能觉得这个问题不言自明。人工智能技术难道不是解决产品的核心算法难题吗?
这种看法其实不够全面。人工智能技术给产品带来的其实不仅是一些核心的模型和算法,更重要的是,带给产品一项根本性的能力:数据驱动的决策过程。
什么叫作“数据驱动的决策过程”呢?我们还是要从人工智能技术的特点说起。
人工智能技术的特点有两个方面:第一,数据驱动。第二,在不确定的因素下智能决策。
数据驱动
我们先来谈谈第一个方面,数据驱动。这里其实是两个部分,“数据”和“驱动”。
一个产品要想利用人工智能,第一步,也是非常重要的一个步骤,就是要有“数据”的概念。什么是“数据”的概念?就是一个产品需要有数据收集的意识,并有数据收集的机制。然后,一个有“数据”的产品需要慢慢建立数据管道,并开始建立数据的检测系统。这些都是人工智能介入的先决条件和基础设施。
没有数据,没有流畅的数据链条,是无法构建一个健康的人工智能决策环境的。这一点说起来容易,要真正做到其实需要很扎实的技术基础。很多团队、很多产品最终无法利用人工智能技术的方方面面,一个关键原因就是在数据链条上出了各种问题。
有了数据以后,第二个环节就是“驱动”。也就是说,只有数据是不行的,还必须有一个意识,主动利用这些数据来驱动产品的发展,驱动产品方方面面的进化。这个步骤其实不仅是针对产品的决策人员,比如产品经理、项目负责人,也是针对这个产品的所有参与人员的。
参与产品的各方面人员,包括工程方面的、设计方面的、市场方面的,大家有没有意识,在有了数据链条之后,通过数据检测、数据分析不断加深对产品的认识,提出更好的想法。当产品遇到各种问题时,大家有没有一个意识,那就是先到数据中去找答案,先去看数据是不是出了什么问题,去理解数据中显示出来的内容。
如果说数据驱动的第一部分是有关“硬件”的,是数据链条的技术以及实现,那么第二部分就是有关“软件”的,是项目人员的意识和责任。
智能决策
当一个产品有了数据驱动的基础以后,下一步,就需要建立“智能决策”的理念。
“智能决策”是什么意思?
要想明白“智能决策”的意义,我们首先要来想一想“非智能决策”是什么样的。
很多传统的产品或者不是数据驱动的科技产品都是非智能决策的产物。非智能决策主要是指,不依靠数据,或者依靠很少量的数据,由产品经理或产品负责人人工地进行决策。注意,非智能决策并不一定无法带来好的产品。实际上,在历史的很长时间里,各行各业都是依靠非智能决策在进行演化。
非智能决策的一大特点是决策的主观性。通俗地讲,就是决策者依靠自我的认识,主观“拍板”决策关于产品的方方面面。因为没有一个系统的方法论,或者说是没有一整套机制给决策者相应的信息,来帮助决策者完成决策,非智能决策所带来的产品结果往往有很大的偶然性。
这种偶然性来自于决策者本人的各种能力,来自于执行者的能力。由于这样的偶然性和主观性,非智能决策的另外一个特点,或者说是结果,就是不可复制性。这是因为决策的方法和方式都不能动态地随着时间、随着数据的变化而变化。
非智能决策在什么时候会变得比较困难呢?数据量太大的时候,需要做选择的可能性太多的时候,需要做的选择本身复杂度变高的时候。这些特征也正是新时期下互联网产品或者人工智能产品的特点。因此,在将来非智能决策会越来越多地让位给智能决策。
简单来说,智能决策就是产品的决策者依据产品的特点,把一些复杂的、需要依靠大量数据、选择面太广的决策交给人工智能模型和算法,并且建立起一整套体系,利用人工智能手段依靠数据来对整个产品进行快速迭代。
如果给这种产品决策找一些典型的类比,就像现代搜索引擎技术,代替了传统的图书馆管理员的角色;现代的电子商务网站为用户推荐各类商品,代替了传统商店里的导购;智能自动驾驶汽车,代替了人类的手工驾驶。
智能决策不仅仅是某一项任务的智能化,更重要的是一种理念的提升。也就是说,一旦产品的决策中出现了有需要大量数据、有复杂选项的时候,作为产品的决策者就需要马上意识到,这部分决策任务应该逐渐从人转移到智能模型和算法上,依靠数据驱动流程来加快迭代。这一点是智能决策的关键。
我们可以接着之前的电子商务网站的例子来说明智能决策的理念。最开始的时候,也许这个网站只有一个简单的界面,可以根据用户的一些历史信息来推荐商店的商品。这个时候,智能决策的部分还仅限于推荐模块这一部分。紧接着,越来越多的用户开始使用这个网站,于是任务就变得越来越多,也越来越困难。
比如,如何设计下一版的网站界面?设计师、前端工程师、用户体验工程师、甚至产品经理都会有自己的看法。这个任务本身就很困难,怎么能让上百万的用户满意?怎么能体现出不同用户的不同选择偏好?怎么能体现出这个产品自身的美学价值?你看,这就是一个需要基于数据的复杂的决策任务。
很多团队能够意识到推荐模块需要智能决策,却意识不到“下一版的界面”问题可能也需要智能决策。其实,一旦一个问题变成智能决策问题,我们反而有章可循。
比如这个界面问题所有人的意见、想法或者创意依据一定的规则可以用一些人工智能模型和算法来表达。然后通过现代的A/B在线测试手段可以针对不同的人群展示不同的界面。随后通过数据链条来对测试进行监控和分析。
这时候,决策反而变得简单。因为我们不需要为数百万用户拿一个主意,而需要做的是为智能决策提供足够多的创意,然后由智能模型和算法以及实验流程来选择用户喜欢的界面。最后,下一版的网站,不只有一个界面,而是有几十甚至是几百种不同的界面,为百万千万的用户服务。
小结
我们之前提到了数据驱动,提到了智能决策。那么回到我们今天最开始的主题,作为人工智能工程师或者数据科学家的一个高阶技能,就是能够培养这样一种理念,对产品进行持续分析,检测产品是否遵循了数据驱动的理念,挖掘产品有哪些需求可以进行智能决策。
一旦有了这个分析产品的能力以后,我们可以发现人工智能技术将成为产品进化的驱动器和核心机制,而不仅仅是锦上添花的一种噱头。这就是对产品的一种完全革新式的思维。
同时,我这里需要指出的是,今天在这里提到的数据驱动也好、智能决策也好,你可以认为这些都不是什么新思想。但是,如何把这些思想真正地应用到产品实践中却是一件非常困难的事情。
另外一点需要注意的是,这些理念本身也不是教条,也是一个与时俱进的过程。并不是所有的产品在所有的阶段都需要做数据驱动,都需要做智能决策。我们之前提到了,有很多没有真正数据驱动的产品也依然获得了成功。所以,对产品的分析能力,其实需要你在产品的迭代过程中逐步提升。
今天我为你讲了数据科学家和人工智能工程师如何提升产品分析能力。一起来回顾下要点:第一,产品分析的能力其实就是对产品需求的一个分解,而分解之后的产品迭代很大程度上依赖于数据驱动和智能决策。 第二,我详细地阐述了什么是数据驱动,什么是智能决策,究竟怎样可以为产品带来这两项核心能力。
最后,给你留一个思考题,什么样的产品不太适合数据驱动和智能决策呢?

View File

@@ -0,0 +1,71 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
131 数据科学家高阶能力之评估产品
“如果你无法衡量它你就无法改进它。”If you cant measure it you cant improve it.)这是一句你可能会经常听到的话,这句话也被应用到很多不同的场景中。那么,对于人工智能工程师和数据科学家来说,这句话其实是他们工作核心的核心。不管是模型和算法,还是产品迭代,都离不开“指标”和“评估”这两个方面。
评估一个产品的好坏,是一项说起来最容易但做起来最困难的工作。任何人,从用户到产品经理,对某一个产品都可能有自己的主观意见。然而对一个产品,特别是要面对成千上万用户的产品来说,依靠主观感觉是很难有一个完整、全面的评价的。同时,有一个成熟的产品评价体系可以成为产品不断迭代的领航标。
今天,我就来聊一聊如何评估一个数据驱动型产品,又如何从评估产品的角度来推动产品的迭代。我们需要建立层次化的评估体系,需要一个衡量产品好坏的框架。这个框架要从宏观到微观,能够对你的产品进行全方位的检测,并且这种检测能够帮助你更容易地进行决策。
产品的经济收益
你可能要问,是的,我们需要评估一个产品,但是如何找到衡量产品的这些指标呢?
比方说你要做一个社交网络的网站,怎么来制定检测指标呢?首先,你要问自己,我做这个社交网络的最终目的是什么?很明显,一个商业网站的终极目标是赚钱,也就是说,你最终的指标是你网站的经济收益。知道了这一点远远不够,你至少还需要思考两个问题。第一,如何衡量你的经济收益;第二,你能否用经济收益来直接指导你的产品构建。
我们先谈谈第一个问题。衡量经济收益看似简单其实不易。从比较大的维度上来说,你可以衡量总收入,你也可以衡量利润,你可以衡量收入的年增长率,还可以衡量季度增长率。从比较具体的维度来说,很多社交网站依靠广告收入,对广告收入的衡量本身就是一个非常复杂的问题。
总体来看,衡量经济收益,有两点值得你思考。其一,如何衡量你收入的现状。其二,如何衡量你收入的增长。今天,关于收入的指标我就不展开讨论了。
刚才讲的第二个问题就更加复杂。衡量经济收入的指标往往太过宏观,而且衡量起来有难度,因此用经济指标来指导产品的发展是很困难的。我刚才说了一些经济收益指标,比如年收入、年增长率、季度增长率,这些指标的衡量需要至少等待一个季度以上,甚至一年的时间。这些有时间间隔的指标,无法给产品的快速迭代带来很大的指导意义。
另一方面,很多产品并不直接产生经济结果。也就是说,经济收益是一个“副产品”。这个时候,如果我们只看经济收益,就无法真正指导我们构建更好的产品。比如,我刚才提到,对于一个社交网站来说,广告收入是一个“副产品”,绝大多数用户来到这个网站的主要目的不是点击广告。因此,仅仅衡量广告有可能让社交网络产品的迭代误入歧途。
层次化的评估体系
如果单从经济指标无法对产品有全面的指导作用,那怎么才能更加有效地建立评估体系呢?这里就引出下一个话题,那就是多层次的评估体系。
接下来,我就由低到高依次从五个层面来说明一下,这个层次化的评估到底是什么意思。
最低层次的评估主要围绕着产品的最小组成单元。比如我们刚才用的社交网络的例子,社交网络的各个页面上的模块就可以是最小的被评估的单元。
为什么要用这个概念呢?原因是这样的,每一个模块往往是产品的一个逻辑单元,一个最小的承载产品理念的单元。不管是工程团队还是产品团队的运作,基本上都是为这些模块而工作。因此,观察最小单元的效果对产品和工程团队都有直接的指导意义。如果团队目前对这个模块做了一些更改,那么最直接的效果就是这个模块的一些指标会发生变化。这是产品迭代的一个重要组成部分。
在这个层次,衡量模块的指标主要是模块的直接效果指标。比如,模块本身的点击率,模块本身的驻留时间,模块上一些其他的用户活跃指标等。这些都是最低层次的模块级别的指标,和产品、工程团队的运作有密切联系。
第二个层次的指标是从单个模块上升到一个页面。这个时候,就不仅需要理解单个模块的情况,还需要对整个页面上所有模块产生的功能群进行深入研究。在这个层次,产品功能群的思考可能会涉及到多个产品团队,也可能会出现模块间冲突的情况。
比如不少现代搜索引擎的搜索页面往往都有广告模块。长期的经验告诉我们,广告模块的效果和普通搜索模块的效果往往有相反关系的耦合。也就是说,普通搜索模块的效果提高了,广告模块的某些指标反而可能下降。反过来,广告模块的效果提高了,也很有可能是因为普通搜索模块的质量突然变差。因此,在有经验的产品团队面前,广告效果有意想不到的提高,可能并不意味着是件好事情。
第二个层次的指标比第一个层次变得复杂起来。不过这个层次的指标依然是可以直接测量的。比如页面的点击率,页面的驻留时间,页面上其他的用户指标等等。这些指标虽然可以直接测量,但是分析时需要对页面上的所有模块有全面了解。
前两个层次的指标主要是测量用户在某一个模块或者页面上的表现,核心是看产品的更改对用户的直接影响。而且,第一层次和第二层次的指标非常易于检测。通常情况下,如果页面和模块发生了什么问题,这些指标就能很快地反映出页面的情况。然后通过排查,我们就能快速发现问题,这也就是通常所说的,这些指标都比较“敏感”。
“敏感”指标的第一个好处是,这些指标具有非常强的指导意义,能够帮助产品团队快速认识问题并提出解决方案。“敏感”指标的第二个好处无疑就是,产品团队的绝大多数改动都能够比较容易地反应到这些指标上。因此,这是一个容易建立的、良性循环的指标体系。当然,仅有这两个层次的指标还是远远不够的,我们可以看到,这两个层次的指标和一个产品最终目标的衡量还有一定距离。
第三个层次的指标就从某一个模块、某一个页面上升到了用户这个层级主要是检测用户在一个会话Session中的表现。这个时候用户往往在一个会话中和多个模块、多个页面进行非常复杂的互动。在这个层次上我们已经很难仅凭观测就能琢磨出用户在这个会话中是否真正感觉满意。这个时候我们往往就需要建立用户模型User Model以及通过一些统计的方法建模从而实现真正理解用户行为的目的。
举一个例子如果我们构建一个电子商务网站在一个用户会话中检测用户是否购买了一些商品这些商品的总价值又是多少。这个监测指标有时候被称作GMVGross Merchandise Value也就是通常所说的网站成交金额。GMV还是比较容易计算的就是计算每个会话之后用户购买的商品价值然后对所有会话的结果求和。但是要真正理解用户会话行为对GMV的影响就是一个比较困难的任务了。
我们可以想象,即便是同一个用户,是否在一个会话中购买商品,这是一个非常复杂的决策过程。在一个会话中,用户可能会接触到搜索页面,可能会接触到各种推荐的模块,也可能会跳转某个商品的页面,还可能会跳转首页。并且,每个用户的用户轨迹不同,接触各个页面和模块的流程也是不一样的。可以肯定地说,任何一个流程中的每一个环节,都有可能对用户是否购买商品、以及购买多少价钱的商品有或多或少的影响。而如何来测量和建模这样的影响,就是第三层次指标的核心挑战。
第四个层次的指标是从一个用户会话上升到多个用户会话。这个时候我们关心的是用户较长时间的体验问题。对于一些复杂的任务用户需要多个会话才能完成。套用我们刚才举的电商GMV的例子很多用户购买比较贵重或者是一些有特定需求的商品比如婚纱往往无法在一个用户会话中完成决策。
那么这种情况下,检测指标的复杂性又进一步提高。比如说,用户可能先在电商网站上搜索了关于婚纱的信息,但在这一次会话中并没有完成交易。用户之后可能又从其他途径了解了一些更多的信息,然后又重新到电商网站开始一个新的会话。在这个会话中,用户也许重点比较了好几个婚纱,然后决定购买其中一件。这个例子还是一个比较简单的情况了。
第三和第四层次的指标有两个特点。第一相对于第一、第二层次的指标而言这些指标已经不那么“敏感”了。也就是说仅改变某一个模块甚至某一个页面是很难在短时间内改变第三特别是第四层次的指标的。从上面的例子可以看出用户的购买行为是非常复杂的仅仅因为提高了某个推荐模块是不是就能让用户多买贵的东西答案是不确定的。第二个特点就是第三和第四层次的指标依然可以用传统的A/B测试来进行观测只不过需要很仔细地设计实验。
第五个层次的指标就是用户和产品的长期指标。我们最开始提到的经济指标其实就是第五层次的指标。类似的指标还包括月活跃用户、年度活跃用户等等。这些指标有两个特点。第一这些指标往往是产品的终极目标一般极其难以撼动特别是对于成熟的产品而言。第二个特点是这些指标往往无法通过A/B测试进行衡量。也就是说我们往往无法通过常规的实验就能够观测到这些长期指标的变化这也是为什么这些指标被称为“长期”的原因。
小结
今天我为你讲了数据科学家和人工智能工程师如何评估产品的能力,这属于比较高阶的分析问题的能力。一起来回顾下要点:第一,我们如何来认识衡量产品经济收益这件事情。第二,我们很详细地阐述了什么是五个层次的评估体系,以及这个评估体系每个层次的特点。
最后给你留一个思考题如果第五个层次无法直接通过A/B测试进行观测那我们如何在平时进行A/B测试的时候就能确保是在优化第五个层次的指标也就是我们产品的终极目标呢

View File

@@ -0,0 +1,77 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
132 数据科学家高阶能力之如何系统提升产品性能
人工智能工程师和数据科学家的一个核心任务,就是依靠人工智能、机器学习这样的工具来帮助产品不断提升品质,吸引更多用户,以实现既定的长期目标。这里有一个关键点,就是我们如何开发出一套方法论,让提升产品性能的过程可以“有章可循”,并成为一个系统性的流程。
初入门槛的工程师和数据科学家,容易把精力和眼光都集中在具体的算法模型上面。这固然是短期内的重要工作,但是,如何能够持续不断地为产品提供前进的动力,才是让人工智能技术有别于之前多次技术浪潮的根本因素。今天,我就来为你剖析一下,持续不断地、系统性提升产品性能的一些关键步骤。
优化长期目标
一个产品如果需要利用数据驱动的人工智能技术来提升品质,第一件事情一定不是专注于部署某一个模型或者算法。或者说,如果已经急迫地上线了第一个简单的算法,接下来最重要的事情一定是停下来,看一看我们是否已经弄明白,这个产品到底需要“优化”什么目标,是否有一个指标检测体系,来指导我们的优化过程。
我们利用人工智能技术手段一定要优化产品的长期目标,这是系统性提升产品性能的一个关键。乍一听这是一句废话,难道算法和模型还有不优化产品长期目标的时候?你心中一定有这样的疑问。其实,确定你所制定的技术方案一定能够优化产品的长期目标,是一件比较困难的事情。
设想一下这些例子。比如你为一个在线视频的网站设计推荐系统你根据很多教科书上的推荐系统案例优化某一个视频的评分Rating这是在优化这个产品的长期目标吗
比如你为一个电子商务网站设计搜索系统你根据传统的信息检索以及搜索的案例优化查询关键词和产品的相关度Relevance这是在优化这个产品的长期目标吗
再比如,你为一个新闻网站设计新闻流系统,你根据产品的基本特点,希望提高新闻的点击率,是在优化这个产品的长期目标吗?
针对上面这些问题,答案或许都是——不确定。或者说,你正在优化的可能会、也可能不会对这个产品的长期目标有影响,这就需要我们建立一个系统性的方法论,来引导我们回答这个问题。
因此,知道我们是否在优化产品的长期目标需要一个前提,那就是我们必须要建立产品的指标检测体系。在专栏的上一期内容里,我们已经介绍了五个层次的产品评估体系。对于提升产品来说,建立这些层次是关键的一步。然而,要想真正系统性地提升产品,还有一个至关重要的步骤,那就是打通这五个层次,建立一个立体的产品提升流程,从而实现优化产品的长期目标。
我们先来简单回顾一下这五个层次的指标。从最高层次说起,第五层次的指标主要是产品的长期指标,比如季度利润的增长、年利润、月活跃人数等。这些指标和产品的最终目的息息相关,却非常难直接衡量,也就是这些指标对产品的一般变化不是很敏感。
第四层次的指标主要是用户在多个会话的交互表现。第三层次的指标是指用户在单一会话的交互表现。这两个层次的指标比较容易在A/B测试的范畴内测量。这些指标能比较宏观地检测一个产品的高维度表现了解用户一般是如何和这个产品进行交互的。
第二层次是页面层级的指标,这个时候,我们观测到的基本上已经是产品团队可以直接控制的因素了。第一个层次的指标是模块级别的指标,这是产品团队直接运作的结果。
这五个层次的指标从宏观到微观,构成了一个检测的体系。如果我们要优化产品的长期目标,也就是说第五层次的指标,而我们能够直接掌握的产品决策,往往只能带来第一、第二层次指标的显著变化,这两者之间的差距如何来弥补呢?
我们前面举了好几个例子,比如视频推荐、产品搜索、新闻流产品等等。之前提到的技术方案大多数直接针对第一或者第二层次的指标,这些方案是不是能够对第五层次的指标奏效,其实是一个不确定的问题。
那么,问题的核心就变成了,如何在只能运作第一或者第二层次指标的情况下,对第三、第四甚至五层次的指标有间接的控制和影响呢?
建立层级指标之间的联系
上面我们提到了,要想持续地提高产品,最重要的就是要一直优化产品的长期目标。但是,如果我们只能控制产品的短期指标,如何才能优化产品的长期目标呢?
答案其实很简单,就是我们必须在所有层级的指标之间建立联系。这些联系因产品而异,但核心思想却是一致的。
回到之前的一个例子,那就是构建一个视频推荐系统。如果我们希望直接优化用户对视频的评分,就必需回答一个问题,能够给用户推荐打高分的视频,和产品的长期指标之间有什么联系?假设这里产品的长期指标是月活跃用户数目,那么问题就是,给用户推荐打高分的视频,和月活跃用户数目之间的联系是什么?
注意,这里说的建立联系不仅是逻辑联系,而且也是数据链联系。也就是说,我们不仅需要尽可能地在逻辑上理清,为什么推荐高分视频有利于帮助月活跃用户数的增长,还需要用数据来为这样的观点提供证据,这才是最重要的一个环节。
简单说来,我们可以这么做。首先,从所有的用户群体中找到用户样本。然后,通过数据来研究,用户的活跃程度和被推荐的视频评分之间的关系。从最高的维度上说,那就是建立一个回归问题,比如用户的月活跃程度作为响应变量,被推荐视频的评分用作一个特征变量。
当然,这个时候我们还可以引入其他的重要变量,比如性别、年龄组、地区等等,用来排除这些因素的干扰。直接研究这两者之间的关系一般来说是一个有难度的工作。比如你很可能并没有那么全面的数据,也有可能这两个变量都需要做一些变形,还可能负例太多(也就是说有大量的用户并没有因为评分的高低而改变他们的行为)等等。
如何具体地建立这个模型我今天先不讲,但有一点是可以肯定的,那就是这样做一个分析,可以很好地帮助你了解优化对象和长期目标之间的联系。
我们不仅需要了解第一层级和第五层级指标之间的关系,每一个层级之间的关系也是需要去研究的,这样才能更加全面地了解自己的产品。这一步就是把之前分散的五个层级打通的重要步骤,也就是如何建立一个立体体系的关键。
那么,如果出现了这样的情况,长期运作的第一层级指标和自己的长期目标没有联系,该怎么办呢?第一,祝贺你,你进入了真实的产品运作环境。从很多产品的长期运作经验来看,很多传统的指标特别是教科书上的指标,都和真实的长期指标有很弱的关系,甚至根本没有太大的联系。第二,这会帮你早日抛弃错误的优化目标,转向更加正确的道路。
寻找一个正确的第一、第二层级的指标,让这个指标和最后第五层次的长期目标之间有正向联系,就是能够持续不断地推动产品前进的一个重要动力。因为这个因素,产品团队才能够不断地试错,但不会失去大方向。
然而,说起来貌似很容易的事情,做起来其实是很困难的。我刚才说了,很可能有一些指标,看上去有一定的意义,但并不一定和长期目标有任何正相关。怎么才能找到恰当的指标呢?
一个简单的方法是尽可能多地记录指标,然后根据后期的实验数据和分析来确定指标之间的联系。回到刚才那个例子,就是说,我们对于一个视频网站,可以记录很多第一、第二层级的指标,有可能有上百上千个。然后我们根据数据,从这么些指标中,和最终的长期目标做回归分析,建立一些备选集。
这里需要数据、也需要经验。我们还可能发现,最终的长期目标和好多第一或者第二层级的指标都有关系,这也是很正常的。这就说明,优化长期目标是一件复杂的事情,很多短期目标和长期目标并不是只有简单的线性关系。
当确定好了第一、第二层级的指标后,那就可以开始用机器学习的手段,把指标当做算法模型的目标函数,从而重新设计算法,使其能够开始优化新的指标。这一步也需要很高的机器学习技巧和丰富的经验,因为并不是所有的指标,都能很容易地转换成机器学习可以优化的对象。
小结
今天我为你讲了,人工智能工程师和数据科学家的一个高阶能力技巧,如何才能不断提升产品的品质。一起来回顾下要点:第一,我们要专注产品的长期目标。第二,一定要建立产品短期目标和长期目标之间的关系,从而能够在直接优化短期目标的同时间接优化长期目标。
最后,给你留一个思考题,请你认真想一想,对于我们上面举例的推荐视频网站来说,有哪些第一或者第二层级的指标和用户的活跃程度有关呢?

View File

@@ -0,0 +1,66 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
133 职场话题:当数据科学家遇见产品团队
我们在之前的分享中已经聊了数据科学家应该具备的基本能力,主要是希望从机器学习、统计知识、系统知识等方面给你一个完整的基本知识框架。然后我们聊了一些数据科学家的高阶能力,主要是能够通过分析产品、建立产品的评估体系以及对产品的长短期目标进行建模来系统性地提升产品性能。
今天我们就把话题从数据科学家和人工智能算法工程师自身的修养和提升,扩展到一个更大的范围,那就是在职场中必然会遇到的发展和协作问题,我们来聊聊数据科学家和产品团队的关系这个话题。
作为数据科学家或者算法专家,不知道你有没有遇到过这样的场景:
你正在开发最新的推荐算法,产品经理找到你说,希望给在北京的女性用户推荐一款红色的高跟鞋;
你正在研究如何使用最新的深度学习技术来提高搜索结果,产品的设计师告诉你,产品团队现在决定在近期做一个推广,需要在搜索结果上方展示一个很大的条幅,使得整个搜索页面往下移动了不少;
你正在给公司的广告系统设计新的模型产品的营销人员告诉你这周需要展示给用户的折扣信息广告位从以前的6个变成了3个。
相信类似的场景你应该不陌生。这也就是我们今天要探讨的问题,数据科学家如何在一个更加广阔的环境中协作。
数据科学家和产品团队的关系会出问题吗?
数据科学家和产品团队究竟有着怎样的关系呢?先理清楚这个问题,我们才能去探讨这样的关系会有怎样的互相依赖以及可能存在的问题。
在很多数据驱动的互联网公司产品团队Product Team和工程团队Engineering Team往往是实施一个具体产品的两个关键的力量。
产品团队通常情况下是产品经理领军拥有各类不同的产品负责人、设计师、UI设计师等人员对整个产品的设计、理念进行把关和掌控。
工程团队则主要是工程经理领军,各类架构师、算法工程师、前端工程师、数据库工程师等人员对整个产品的工程技术甚至运行维护进行把关和掌控。
在这个产品的图谱里,数据科学家所组成的“人工智能”团队有可能是独立于产品团队和工程团队的第三方力量,也可能是属于工程团队的一部分。这两种情况其实也略有不同。我们在这里就简化讨论一种情况,那就是数据科学家所在的团队和产品团队并不完全是一个团队的情况。
从大的格局来说,不管是什么团队,产品人员也好,工程师人员也好,都是为了产品的进步和提高出谋划策的,都是希望产品能够越做越好的。这一点毋容置疑。
然而,由于不同的团队分工以及各类人员不同的专业背景,在如何能够让产品做得越来越好这一点上可能就会存在不同的意见,甚至是严重分歧。设计人员可能认为产品下一步最大的可能性来自于更加简洁明亮的设计风格;产品营销人员可能认为用户应该会对下一场促销更感兴趣;工程师可能认为下一步需要整个团队重写一个重要框架代码,让页面渲染速度得到提升从而使得用户体验得到改善;数据科学家或者算法工程师正在考虑开发一个更加复杂的机器学习模型,来提升产品的智能响应;产品经理也许在想着如何做一个全新的手机界面,来体现一种新的用户生活体验。
这些想法也许都对产品有益,甚至都能让产品或多或少有所进步。但是,我们经常看到的是,不同背景的人员都对自己的专业很自信,有时候甚至是“过度”自信,从而只相信自己所处岗位所能发挥的作用。从数据科学家这个角度来说,因为大数据、机器学习以及其他人工智能技术手段的不断进步,可能就会导致我们过分强调算法和模型对产品带来的影响,而忽略了产品是一个非常有机的整体。
在这样的情况下,作为数据科学家或者人工智能工程师,往往会遇到我们今天开始提及的情景。一方面你在做着自己认为能让产品有最大收益的事情,而另一方面,整个产品有机整体的各个部分都在运作着,有可能会“破坏”掉你所做过的或者正在做的努力。如果这时候数据科学家以一种算法第一的心态看待产品,就会发现自己的工作非常难以展开,也会和产品的其他部门产生矛盾。
另外一种情形是,产品经理或者产品部门对机器学习或人工智能抱有不切实际的幻想,认为这是解决一切问题的灵丹妙药。于是所有和产品进步相关的想法都希望通过人工智能来得以实现,这无疑给数据科学家和工程师增加了很大的压力。
然而不管处在哪种场景中,我们都可以看到,数据科学作为一个技术工程范畴和其所从事的人,数据科学家,无疑都是在一个复杂的环境中对产品起着作用。要想充分发挥出数据科学的作用,我们必须深入理解数据科学家和产品团队的关系,从而打造一个有机的产品团队生态体,使得处于各个职能的人员都能够在一个和谐竞争的状态下对产品有所贡献。
如何把握数据科学家和产品团队的关系
既然我们聊到了数据科学家或者人工智能工程师和产品团队之间的微妙关系,那么,有没有什么方法能够让这种关系变得更加明朗,更有利于数据科学发挥出更大的作用呢?
首先有一点很重要,也是整个团队需要先明确的是,数据科学、人工智能在现阶段来说,依然是大多数产品的“奢侈品”。什么意思呢?也就是说,没有很多基础设施的建设,没有一些最基本的产品功能,没有最简单的数据链路,就不可能应用最基本的数据科学,也不可能对产品进行持续提高。正因为此,数据科学家其实应该和产品经理建立好关系,从而能够从一开始就心系整个产品的发展,能够有一颗包容的心,为产品能够快速达到这个最基本的状态出谋划策,同时也要让整个产品时刻都处于这个状态。
这里面涉及到一个“教育”和“再教育”的问题。不是所有的产品人员都对人工智能有所了解也不是所有的产品人员对数据链条的概念都有所耳闻。比方说产品的数据是通过前端的一段JavaScript代码进行数据传输的而这段代码可能和某一个产品的界面设计有紧耦合。当设计人员“突然”对现在的设计进行了更改满心希望这样的更改可以改进产品哪知道这也许反而“破坏”了这段收集数据的代码从而使得数据链条断裂而机器学习的某些代码可能就无法正常运行或者模型接收到的是垃圾数据。在传统的观念里一位设计师可能很难理解为什么自己的工作会和机器学习紧密结合。所以这就需要数据科学家和各个岗位的人员去交流、去沟通让更多的人能够理解数据产品的涵义。
其次,数据科学和人工智能让产品成为一个有机整体。我们一定要去理解产品效果的复杂性和组合性。比方说,在很多互联网产品中,通过经验我们经常能够发现,产品外观设计的改变,常常能够带来比纯算法改变好得多的效果提升,而很多营销手段又常常能够几倍地提高用户对产品的转化率,也使得产品的效果得以提升。当然了,这并不是说,夸大任何一方面就能够让产品有更大的提高。实际上,产品的最优情况往往是各个方面的一个复杂的协调平衡状态。因此,理解数据科学在整个大环境中的位置就十分重要。
最后还有一个可以去做的,那就是看如何利用人工智能和数据科学去帮助产品团队的其他人员,比如能否帮助设计师和前端找到更好的创意,能否帮助产品经理找到更好的产品迭代方法等等,让人工智能和数据科学融入到整个产品完整的图谱中,要比提高单个算法更有意义。
小结
今天我为你讲了人工智能工程师和数据科学家所面临的一个重要的职场话题,那就是如何把握和产品部门的其他人员的关系。
一起来回顾下要点:第一,我们简要剖析了数据科学家和产品团队之间可能产生问题的原因和一些经典的情况。第二,我们分析了要去更好地推动这个关系,有哪些需要注意的地方,有哪些可以做的事情。
最后,给你留一个思考题,如果营销人员告诉你一个他们的方案,但这会影响你所负责的产品算法的呈现,这个时候你会怎么做呢?

View File

@@ -0,0 +1,99 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
134 职场话题:数据科学家应聘要具备哪些能力?
周一,我们探讨了在公司内部,数据科学家和产品团队的其他职能人员在协作中都会遇到哪些问题,以及如何看待数据科学家或者人工智能工程师所做的算法性工作在一个产品发展中的位置。
那么,今天我们稍微换一个方向,来讨论数据科学家和算法工程师在应聘方面的问题。一起来看看,作为数据科学家,在面试一家公司时,究竟应该怎么准备,有哪些信息是需要了解的。
希望今天的内容对正在思考进入这个行业的年轻学者、工程师有所帮助,从大的方向上为你的应聘提供一些可借鉴的内容。
数据科学家应聘的“硬”实力
对于数据科学家或者人工智能工程师来说,最核心的竞争力无疑是他们对人工智能、机器学习等技术的知识积累以及融会贯通的能力。
我们之前的一系列分享中已经提到了这些“硬”实力的大范畴,这里我做一个简单的归纳。
首先,我们需要理解和掌握一些机器学习的基本概念和理论。
第一个重点无疑就是监督学习。
什么是监督学习呢监督学习就是指我们通过外部的响应变量Response Variable来指导模型学习我们关心的任务从而达到我们需要的目的这一过程。监督学习中需要彻底掌握三个最基础的模型包括线性回归Linear Regression、对数几率回归Logistic Regression和决策树Decision Trees
怎么理解我说的“彻底掌握”呢?这里的彻底掌握有三层含义。
第一,需要了解这些模型的数学含义,能够理解这些模型的假设和解法。比如,线性回归或者对数几率回归的目标函数是什么;写好了目标函数之后,如何求解最优解的过程。对于这些核心模型,必须能够做到完全没有差错地理解。
第二,需要了解什么场景下使用这些模型是最合适的,以及怎样把一个实际问题转化成为这些模型的应用,如果不能直接转换还有什么差距。
第三,能不能写实际的代码或者伪代码来描述这些模型的算法,真正达到对这些算法的掌握。
监督学习当然不限于这三个算法,但是这三个算法是绝大多数机器学习任务在工业界应用的起点,也是学习其他算法模型的支点,可以按照这个思路去了解更多的算法。在面试中,能够对这些基本算法的理解有扎实的基本功,这一点很重要。
了解机器学习的第二个重点就是无监督学习。
无监督学习并没有明显的响应变量,其核心往往是希望发现数据内部潜在的结构和规律,从而为我们进行下一步决断提供参考。
从面试角度来说“K均值算法”往往是考察数据科学家整个无监督学习能力的一个核心点。因此对于这个算法有必要认真学习做到真正的、彻底的理解。
怎么学习呢和前面我们提到的监督学习一样也需要从编程实现和算法本身两个方面入手对K均值进行把握。在掌握了K均值之后还可以进一步去了解一些基于概率模型的聚类方法扩宽视野比如“高斯混合模型”Gaussian Mixture Model
其次,虽然机器学习和统计学习有不少的重合部分,但是对于合格的数据科学家和人工智能工程师来说,一些机器学习方向不太容易覆盖到的统计题目也是需要掌握的。
第一,我们必须去理解和掌握一些核心的概率分布,包括离散分布和连续分布。这里的重点不仅仅是能够理解概念,而且是能够使用这些概率分布去描述一个真实的场景,并且能够去对这个场景进行抽象建模。
第二,那就是要理解假设检验。这往往是被数据科学家和算法工程师彻底遗忘的一个内容。我们要熟悉假设检验的基本设定和它们背后的假设,清楚这些假设在什么情况下可以使用,如果假设被违背了的话,又需要做哪些工作去弥补。
第三那就是去学习和理解因果推断Casual Inference。这虽然不是经典的统计内容但是近年来受到越来越多的关注。很多学者和工程师正在利用因果推断来研究机器学习模型所得结果的原因。
再次,还有一个很重要的“硬”技能,就是要对系统有一个基本了解。
第一就是具备最基本的编程能力对数据结构和基础算法有一定的掌握。编程语言上近年来Python可以说受到了诸多数据相关从业人员的青睐。因为其语言的自身特点相对于其他语言而言比如C++或者JavaPython对于从业人员来说是降低了学习和掌握的难度。但另一方面我们也要意识到大多数人工智能产品是一个复杂的产品链路。整个链路上通常是需要对多个语言环境都有所了解的。因此掌握Python再学习一两个其他的语言这时候选择Java或者C++是十分必要的。另外很多公司都采用大数据环境比如Hadoop、Spark等来对数据进行整合和挖掘了解这些技术对于应聘者来常常说是一个让用人单位觉得不错的“加分项”。
第二,就是对于搭建一个人工智能系统(比如搜索系统、人脸识别系统、图像检索系统、推荐系统等)有最基本的认识。机器学习算法能够真正应用到现实的产品中去,必须要依靠一个完整的系统链路,这里面有数据链路的设计、整体系统的架构、甚至前后端的衔接等多方面的知识。考察候选人这方面的能力是查看候选人能否把算法落地的一个最简单的方式。因此,从我们准备面试的角度来说,这部分的内容往往就是初学者需要花更多时间了解和进阶的地方。
数据科学家应聘的“软”实力
前面我们聊了数据科学家应聘的“硬”技能,下面,我们再来看看候选人还需要注意和培养哪些“软”技能。
数据科学家的第一“软”技能就是如何把一个业务需求转化成机器学习设置的“翻译”能力。
什么意思呢?和纯理论学习的情况有所不同,大多数真实的业务场景都是非常复杂的。当产品经理提到一个产品构思的时候,当设计人员想到一个业务创新的时候,没有人能够告诉你,作为一个数据科学家而言,这个问题是监督学习的问题还是无监督学习问题,这个问题是可以转换成一个分类问题还是一个回归问题。有时候,你会发现好像几条路都走得通。因此,如何能够从逻辑上,从这些不同的设置所依赖的假设上来对业务场景进行分析,就成了数据科学家必不可少的一个核心能力。
分析业务场景这个“软”技能的确非常依赖工作经验。这里不仅仅是一个机器学习问题的“翻译”,还需要对整个系统搭建有所了解,因为真正合适的场景“翻译”往往是机器学习的问题设置和系统局限性的一个平衡和结合。举一个例子,一个推荐系统需要在百毫秒级给一个用户进行推荐,那么相应的方案就必然有一个计算复杂度的限制。
因此,场景的“翻译”其实是考察数据科学家和人工智能工程师的一个非常重要的步骤,也是看候选人是否真正能够学以致用的有效手段。
说到这里,你是不是会有疑问:如果我没有相关的从业经验,那如何来锻炼这种“翻译”能力呢?
其实,现在丰富的互联网产品已经为我们提供了一个无形的平台。当你在现实中看到一个真实产品的时候,比如京东的产品搜索、科大讯飞的语音识别系统等等,你设想一下,如果你是设计者,如果你是需要实现这个产品功能的数据科学家,你会怎么做?
实际上,很多面试问题,都是面试官直接询问你对某一个现成产品的设计思路,比如谷歌的面试官可能会询问你如何设计一个搜索查询关键字拼写检查组件。这个方法一方面是帮助你“开脑洞”,另一方面也是一种非常好的思维锻炼。
另外一个很重要的“软”技能就是数据科学家的沟通表达能力。
这可能会让有一些人感到意外,因为大家也许认为数据科学家和人工智能工程师完全是技术岗位,并不需要与人打交道。其实,这个理解是片面的。就像刚才提到的,数据科学家的一个重要职责就是把现实的业务场景“翻译”成机器学习的设置,那么在这个过程中,会和业务人员、其他工程师、科学家进行高频的沟通和交流。如何把你的思路、方案清晰地表达给同事和团队成员是非常重要的职责。
实际上,数据科学家不仅在公司内部承载着的这样的沟通任务,我们往往还需要在社区中做演讲、参与讲座等活动,成为社区中的一份子,都离不开沟通表达能力的磨练。
如何锻炼沟通表达能力呢?这里,我给初学者一个简单而实用的方法,那就是用一两句话来总结你的方案。你尝试用一小段话,但是不夹带任何专业术语,把你的方案说给不懂机器学习的人听。这个训练方法可以让你反复思考,直到找到一个最简洁有力的表达。
小结
今天我为你讲了人工智能工程师和数据科学家的一个重要的职场话题,那就是作为数据科学家应聘时需具备的“硬”实力和“软”实力。
一起来回顾下要点:第一,我们讨论了机器学习、统计知识和系统这三大“硬”实力。第二,我们分析了场景翻译和沟通能力这两个“软”实力。
最后,给你留一个思考题,当下深度学习框架大行其道,那么对于应聘来说,你觉得了解和掌握各种深度学习框架会让你更有优势吗?

View File

@@ -0,0 +1,73 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
135 职场话题:聊聊数据科学家的职场规划
今天,我们继续来聊数据科学家或者人工智能工程师的职场话题。我们更进一步,来聊聊数据科学家的职场规划。
当然,说到职场规划,这确实是一个非常宽泛的主题。我们今天要探讨的不是数据科学家“应该”怎么发展,而是说,有哪些职业发展的“可能性”,希望能够为你规划自己的职业生涯起到一个抛砖引玉的作用。
数据科学家的“垂直发展”
数据科学家一个最直接的职场规划,就是在技术线上持续发展,逐渐成为一个技术专家。目前,不同公司对数据科学家类型,这里包括研究科学家、算法专家、人工智能工程师等职位的职业生涯设置并没有完全统一的模式。但是,数据科学家类型的职位在技术线上大体有这么几个台阶可以发展。
第一个台阶是“初级数据科学家”。
这个台阶对应很多公司入门级别的数据科学家并且大概是对应博士生毕业直接入职或者硕士生有2-3年工作经验后入职这样的情况。这个阶段的数据科学家其主要职能是在一个比较大型的产品解决方案中完成一个小的模块或者任务。当然也可以是在一个比较小型的产品解决方案中完成较大的模块或者任务。
初级数据科学家对机器学习和人工智能的掌握程度主要集中于单独的算法。因为对业务需求接触不多,在如何利用模型和算法来对整个业务提供解决方案,也就是我们之前说的“翻译”业务的能力上,存在着比较大的挑战。这也是初级数据科学家在这个阶段最需要积累和进阶的部分。
下一个台阶就是“中级数据科学家”。
这个台阶对应很多公司的“高级数据科学家”Senior Data Scientist、“主管数据科学家”Staff Data Scientist。一般来说“初级数据科学家”有1-3年工作经验之后就有机会晋升到“高级数据科学家”然后再有1-3年工作经验之后就有机会晋升到“主管数据科学家”。“主管数据科学家”平均应该有5年左右的从业经验。
对于这个台阶的数据科学家而言,已经可以承担一个比较大型的产品解决方案的绝大部分甚至全部的模块和任务。并且在团队内部,这个台阶的数据科学家已经可以指导绝大多数的初级数据科学家。同时,这个级别的数据科学家对公司的整个宏观产品线有了更多的认识,对业务需求的“翻译”能力有很大幅度的提升。在纯技术层面,“中级数据科学家”对于机器学习和人工智能算法模型的把握已经跳出了单独一个算法或者模型的层面,可以比较好地去把握一个方向,特别是有可能的新的研究方向。
最后一个台阶,我称之为“高级数据科学家”。
这个台阶对应很多公司的“资深主管数据科学家”Senior Staff Data Scientist、“主任数据科学家”Principal Data Scientist以及其他更高的职位。一般来说成为“中级数据科学家”后再有1-3年的工作经验可以晋升到这个台阶。“高级数据科学家”平均应该有5-7年的从业经验。
对于这个台阶的数据科学家而言基本上已经算是行业的专家对某一个类型或者某几个类型的产品解决方案有深刻洞察。另外一个能力就是这个台阶的数据科学家相对比较容易举一反三能够对新的产品或者新场景下的解决方案有相对快速和成熟的理解。在团队内部这个台阶的数据科学家处于整个团队的核心的位置对“中级数据科学家”和“初级数据科学家”都能够起到很好的指导作用。在纯技术层面可以针对机器学习和人工智能过去20年的大部分算法融会贯通能够带领团队对一系列新的研究方向有比较好的把握。
数据科学家的“升级发展”
数据科学家的另外一种职场规划,其实也和众多工程师的规划类似,那就是转到“管理线”或者叫“技术管理”的岗位,特别是管理和数据科学、人工智能直接相关的团队。
数据科学家对于管理职位的优势是,他们有着在这样团队中工作和运行的第一手经验和资料。这些也为数据科学家转到管理职位提供了一些先天的背景优势。
因为人工智能团队或者数据科学团队具有高度专业化和技术化的特点,没有相关技术背景的管理人员,会非常难以胜任这样的角色。主要表现在以下几个方面。
第一,这些团队往往意味着需要招聘、管理和拓展一个由硕士和博士背景为主体的团队,完全理解和体会这个人群的需求以及这种团队对于工程、技术等方面的独特需求,对于一般背景的技术管理人才来说可能会比较困难。
第二,这个技术管理职位往往需要和技术社区,特别是人工智能社区有一个积极的交互。完全没有相关技术背景,在这样的社区立足并且作为一个领导者得以发展,相对比较困难。
第三当然还是在技术方案上因为专业性过强如果技术管理人员没有背景就无法对方案进行评估然后就变成了完全的“人事经理”People Manager
除了从人工智能团队管理岗位入手以外,数据科学家还可以挑战和人工智能有关的一些管理岗位,比如数据,或者有时候叫大数据部门。这些部门和人工智能部门经常紧密合作,所以数据科学家也算是对这些部门耳濡目染,相对来说有着比较清晰的认识。
毋容置疑,数据科学家从纯技术岗位到管理岗位的转换过程中,肯定会面临不少困难。对于有志转岗的数据科学家来说,他们往往在纯技术岗位上工作得比较优秀,一些管理的机会自然出现,于是也就顺理成章地转了过去。然而,对于这些优秀的纯技术人员来说,比如“中级”或者“高级”数据科学家,真正的挑战在于,如何能够去领导一个团队去完成一个使命。一些优秀的数据科学家因为自身条件优异,往往存在大包大揽的情况,希望靠自己的能力做出比整个团队还要好的成绩,反而在管理岗上无法施展应有的水平。其实,如何做一个优秀的人工智能技术管理者,这还是一个非常有新意和挑战的话题,篇幅有限,今天就不展开了。
数据科学家的“跨界发展”
除了我们刚才说的在纯技术岗位的发展以及往管理职位发展以外,数据科学家其实还有一些横向发展的机会。
比如,最“无缝”发展的就是在工程团队或者数据分析类团队之间进行转换。因为数据科学家的工作性质,这两类团队的工作或多或少都已经包含在了数据科学家的日常工作中了。因此,数据科学家可以比较自然地转换到这些团队中。当然,这里还是需要对一些技能进行加强培训。
另外,数据科学家其实比较适合转移到产品经理岗位。在“中级数据科学家”之后,这些技术人员需要对业务、对整个产品有比较深入的理解,包括需求、数据、工程技术等,才能对一个产品提出比较合适和成熟的解决方案。另外,数据科学家还需要不断提升产品的质量水平,这里面其实就有不少产品经理的角色。因此,数据科学家算是具备成为一个产品经理的一些条件。不过,我们这里要指出的是,数据科学家的整个背景训练主要是以纯技术为主,特别是人工智能算法,因此转换到产品经理的时候,可能往往过分强调算法的力量,而忽视整个产品的其他方面。所以,即便是一个成熟的数据科学家依然需要一段时间的培养和培训,才能够转换到产品经理的角色。
小结
今天我为你讲了人工智能工程师和数据科学家的职场规划问题。一起来回顾下要点:第一,我们简单介绍了最为自然的一条发展途径,走纯技术的路子,数据科学家可以有怎样的一条道路向前发展。第二,我们分析了从技术岗位到管理岗位的一个转换,数据科学家又有什么优势。第三,我们简单讲了从数据科学家到其他类型职位一个转换的问题。
最后,给你留一个思考题,你有没有什么方法,可以知道自己比较适合什么样的职业发展规划呢?

View File

@@ -0,0 +1,10 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
136 如何组建一个数据科学团队?

View File

@@ -0,0 +1,97 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
137 数据科学团队养成:电话面试指南
眼下,数据科学或者人工智能团队已经成了很多数据驱动公司的标准配置团队,数据科学家或者人工智能工程师也成为了最“性感”的职业。不少公司都在想办法建立或者扩展自己的数据科学团队。那么,对于一个公司来说,究竟需要什么样的数据科学团队呢?这就成了很多公司在发展过程中都会遇到的棘手的问题。
我们在之前的一篇分享里已经剖析过,作为一个工程团队的负责人,你该如何招聘自己的数据科学家团队。在那篇分享里,我们探讨了目前人才市场上大致有两类数据科学家,一类偏数据分析,一类偏算法模型。并且我们详细探聊了聊这两类数据科学家所需的技能和在不同团队(比如大团队和小团队)中起到的作用。
今天,我们来聊一聊组建数据科学家团队所必不可少的一个步骤:电话面试。
筛选简历
在电话面试之前,有一个步骤是必不可少的,那就是筛选简历。因为人工智能和数据科学家的职业背景的原因,我来分享一下如何筛选具有博士学历,特别是计算机专业相关毕业生的简历。筛选简历的过程需要很细心,对于普通的博士毕业生,我们会快速看以下两个方面的信息。
第一,候选人是否有高水平的论文发表。关于论文发表,首先需要看的是论文档次,也就是论文是否发表在高质量的会议上或者高水平的期刊上。对于计算机专业的博士生来说,会议一般比期刊更重要。其次,我们也要看候选人的论文是专注一个问题或者一个小领域还是很多领域都有涉猎。同时,对于这些论文,要关注候选人是第几作者。然后,我们需要关注的是论文发表频率,看论文工作是否都是一年做出来的。最后,我们可以去看一看这些论文的引用数。一般来说,博士刚毕业不会有很高的论文引用量,但也不乏水平比较高的候选人,论文会有惊人的引用量。
第二,我们需要看一看候选人是否有工业界实习经历,是研究实习还是工程实习。这里面,我们可能关注的是实习的公司。而且,我们可以关注是否是同一家公司还是多个公司。如果是研究实习的话,我们还需要去看一看候选人是否有相应的论文发表。
在看了这两个因素之后我们心中对于这个候选人就有一个很基本的认识。在需要高标准的情况下一个博士毕业生需要有3-4篇第一作者的高水平论文发表在毕业的时候引用数在70-100左右然后有1-2次工业界实习经验。
除了这两个硬指标以外,我们还会关注下面这些内容:
简历里是否有一些信息不完整的部分。比如有一些明显断档的经历,没有本科学校,没有说明博士生导师;
会什么编程语言和开发工具。是否只熟悉Matlab或者R是否有开源项目贡献
是否已经有审稿经验;
是否已经有组织会议的经验。
所有这些因素都没有明显问题之后,我们已经定位到了比较靠谱的候选人(通常,只有少数人能够通过上面这轮简历筛选)。我们可以根据实际情况来调整在筛选简历这里的标准线从而让候选人能够和我们直接交流证明自己的实力。
这里再说几个比较细的准则:
博士生的论文中,非第一作者的一般不算数;
已经发表的会议论文和同一内容的期刊文章算一篇;
可以有非第一档次会议或者期刊的论文,但没有第一档次就很难说明问题;
如果有单一作者的论文,是一个比较大的问题,电话面试的时候一定要问清楚原因;
课程项目原则上也不算数(注意,这是对博士毕业生而言);
简历是LaTex生成还是Word
毕业学校和GPA一般不是很侧重要考虑的问题。
再说几个对于已经有工作经验的候选人的简历筛选要素:
如果有教职经验或者博士后经验,原则上是一个大问题,需要电话面试问清楚;
一两年左右频繁换公司是一个大问题,需要电话面试问清楚。
这里要多说一句的是,上面这些标准是对计算机相关专业比较适用的准则。而对于数学、应用数学、统计、物理等专业的人来说,可能有些标准需要重新设定(比如发表论文的标准需要降低)。总之,这里说的是一些比较大的方向,不过在把握了这些原则之后,我们就可以安排少量的候选人电话面试了。
这里我们简单说一下对于硕士阶段的候选人的简历筛选。一般来说,硕士和博士有不同的培养目标,因此上面所说的很多标准和原则对硕士毕业生并没有完全的指导意义。对于硕士毕业生来说,公司实习经验是很重要的。不排除一些优秀的硕士毕业生已经有论文发表,因此这方面也可以降低一些标准来衡量。对于硕士毕业生来说,学科项目可以作为一些参考,不过因为大多数学科项目都没有真正的应用性,我们只能从一个侧面了解这个候选人可能具备的一些技能。
电话面试
筛简历的过程之后就是电话面试了。电话面试的目的是要验证这个候选人是不是像简历里所说的那样有相应的经历。当然有一些公司在电话面试的时候也会考察候选人解决问题的能力这个内容也会经常出现在电话面试的安排中。对于科学家的职位我们一般需要1-3轮电话面试来了解下面这些信息
了解候选人简历上的基本信息,如果对简历上的内容有疑点,需要在这个阶段问清楚;
考察候选人是否具备基本的专业知识,并对相关领域有一定的见解,考察候选人是否有其他领域的知识;
考察候选人是否有基本的专业相关的编写代码能力;
初步感知候选人的表达能力。
在询问候选人简历信息的时候,以下这些内容是需要弄明白的:
对于候选人是第一作者的论文,候选人是否能够很清晰地说出这些论文所解决的问题及解决思路。在进一步的沟通里,候选人是否能够讲清楚模型细节甚至是公式细节。候选人能否把实验的目的、数据、比较算法讲清楚。当然,这需要面试官提前做好准备。同时,询问候选人其他作者在这篇论文中的贡献;
对于候选人是非第一作者的论文,询问候选人在这个工作中起到了什么作用。看候选人是否诚实可信,也可以看出候选人的学术道德水平;
对于单一作者的文章,需要候选人解释为什么这个工作没有合作人,博士生导师为什么不是合作者,这个论文的研究时间如何而来;
对于有博士后经验或者教职经验的候选人,要询问候选人是否了解工业界研究和学术界研究的区别,如果以后有机会,是否还考虑学术界教职;
对于有工作经验的候选人,要询问候选人反复换工作的原因,询问清楚候选人在项目里的具体贡献,候选人的职业规划,看职业规划和简历经历是否相吻合。对于在某一个公司待了很长时间没有升职的候选人,也需要询问一下为何在原公司里没有其他机会。
在考察候选人专业知识的时候,需要弄明白以下这些内容:
对于某一专业最基础的一些概念和知识,候选人是否能够清晰地讲解出来。这一条其实很多人很难做到,不少人能够做复杂的工作,却往往在最基础的内容上含混不清。而在一些跨领域的工作中,基础知识往往是一个科学家所能够依赖的,提供解决方案的最初的工具。所以,基础很重要;
候选人是否能诚实地说明自己懂什么,不懂什么。在广泛的领域里,科学家应该有足够的自信说自己的专长是什么,自己的局限在哪里;
候选人是否对跨领域知识一窍不通,还是略有知晓,界限在哪里;
在考察编程水平方面,虽然很多公司已经有比较完备的方案考察软件工程师,但这些题目和考察目的其实不太适合科学家,这需要公司专门针对科学家制定一些考察题目。
在上述考察候选人各个方面的过程中,一个贯穿始终的主题就是要看候选人是不是能和面试人员进行有效的沟通。当然,也要考虑到,有人可能不太适应电话面试,而在面对面的交流时则毫无问题。
小结
今天我们分析了组建一个数据科学或者人工智能工程师团队,你需要招聘什么样的数据科学家。我们重点讲了讲如何筛选博士阶段候选人的简历以及电话面试的问题,我们是从招聘的角度来讲这个问题,那么从应聘的角度来看,也希望能给你一些启发和借鉴。
最后,给你留一个思考题,如果一个候选人并没有什么论文,但是有多年的企业经验,如何来衡量这样的候选人呢?

View File

@@ -0,0 +1,77 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
138 数据科学团队养成Onsite面试面面观
本周我们来聊数据科学或者人工智能团队的招聘话题。周一的分享里,我们聊了聊组建数据科学家团队所必不可少的两个步骤,筛选简历和电话面试。我们着重从招聘博士毕业生的角度对这两个环节进行了剖析,梳理了如何看简历,以及在电话面试时需要考察哪些内容。
今天我们来聊一聊电话面试后面的一个环节也就是邀请候选人到公司面试俗称Onsite面试。
从电话面试到Onsite面试
电话面试之后,如何判断是否要邀请候选人到公司来面试呢?一般来说,有这么两种情况是需要邀请候选人到公司来面试的,从而进一步判断候选人的水平。
第一候选人的简历以及其在电话面试中表现的水平很高的确是公司需要的人才。这样的候选人进入Onsite面试的通道是水到渠成的要加快速度实施公司招聘流水线的后面步骤。对于这样的候选人来说Onsite面试主要是要考察候选人有没有其他特殊情况导致其无法胜任工作。
第二,候选人的简历或电话面试中的表现存在争议。可能在好几轮的电话面试中,候选人在其中有些轮的表现要明显好于其他轮;或者候选人得到了很多好评,但是也有一些比较负面的评价。这个时候,我们采取不“一棒子打死”的态度,往往希望能够邀请候选人到公司来仔细考察。
Onsite面试
在经历了简历筛选和电话面试的流程之后,我们已经对候选人有了一个初步的了解:他(她)的背景、熟悉以及不熟悉的领域、编程能力和沟通能力。对于各方面都表现不错的候选人,我们一般就会安排到公司来进行现场面试。对于科学家岗位,现场面试一般包括下面这些环节:
一场一个小时左右的学术报告会;
和招聘经理讨论可能的项目方向;
和其他科学家、工程师讨论技术和研究问题;
在白板上展示基本的编程开发能力;
和人事讨论职位的其他问题。
学术报告会是考察候选人学术水平的一个非常重要的环节。因为简历和电话面试都无法系统地看出候选人的整个学术生涯的特征,比如是偏理论还是偏应用?是蜻蜓点水似的研究,还是专注某几个问题?这样我们能够看到候选人的整个学术生涯的清晰明确的线条。
同时,报告会还是观察候选人语言能力的好机会,看候选人是否有较强的语言组织能力,能够清晰地表达自己。这一点之所以关键是因为有一些候选人连自己的工作都讲不清楚。
另外一个需要考察的就是看候选人能否在公开场合接受各种质疑和对自己工作的挑战包括候选人是否能够承认自己工作的局限和不足是否能够礼貌且“一语中的”To-The-Point地回答技术问题。
和招聘经理讨论可能的项目方向,很多候选人显得很随意,觉得这就是闲聊。其实这也是考察候选人的一个很重要的机会。
首先,招聘经理可以说一些公司的产品或是项目,看看候选人是否有兴趣,是否能够通过一些简单的产品介绍,问出一些有科学价值的问题。会问问题,其实是一个非常重要的技能。
招聘经理也可以稍微深入地讨论一两个产品具体的现实问题看候选人能否快速说出一些解决方案或者是一些思路。在整个谈话中可以体会出候选人是否只有学术的经验而没有任何产品和产业的“感觉”Sense。有一些候选人在这个阶段会显得没法把谈话进行下去完全是倾听问不出任何问题。这就需要招聘经理仔细控制谈话来看候选人是否对新事物有好奇心是否能够跟上思路是否对新领域新问题有快速的思考。
和参加面试的科学家以及工程师讨论研究问题,主要考察的是候选人在一个类似工作的环境里能否“半”独立地完成科研解决方案的设计和实现。为什么说“半”独立,是因为这个环节里,沟通也是很重要的,很多条件、约束和限制都需要候选人和面试人员进行有效沟通来理解清楚。因此,候选人面对的并不完全是“应用题”似的独立解决问题的场景。
通常的形式是,面试人员针对某个具体的问题,询问候选人如何提供一个有效的科学解决方案。这里面需要注意下面这些环节。
1.候选人能否问出有效的问题,这些问题是不是在帮助候选人自己减少问题的不确定性,帮助候选人自己寻找答案,还是漫无目的地问各种问题。
2.候选人是不是不假思索地就提供一些思路,然后也没有认真思考,又反反复复更换思路。这是候选人没有系统思维能力的一个体现。
3.候选人的整体思维模式是怎样的?
一般说来,有两种思维模式。第一种是先提出一个可能的多步骤解决方案,然后看是否能够简化步骤,再看能否提出比较规范的数学模型;第二种思维模式是先提出比较完整的数学模型,然后根据实际情况简化,提出更加快速的算法。
这两种思维模式都是行之有效的思维方式。但是也有候选人在两者之间踌躇,一方面提不出基本的解决方案,一方面也写不出完整的数学模型来。
4.候选人能否在提出基本方案或者是数学模型之后,用自己掌握的方法把问题的细节算法写出来,并且能够分析算法的各方面特征。这考察的是候选人解决问题的连贯性和独立性。有一些候选人的确能够写出漂亮的数学模型,但是很可能完全没办法把模型算法化,写出来的程序惨不忍睹。
5.还有一个需要考察的维度就是,候选人遇到领域之外的问题,是如何思考的。有的候选人就彻底懵了,完全不能理性地提出方案。而有的候选人则会小心翼翼地利用基础知识,尝试解决问题,或者是把新领域的问题转化成自己熟悉的问题。
值得注意的是,在这个环节中表现不好的候选人,不管过去在论文、学校方面有多么优秀的经历,都要打一个大问号。事实证明,在这个阶段不那么令人满意的候选人,在现实工作中往往也很难胜任实际的工作。
对于有经验的候选人,除了重点考察能否提出优秀的解决方案外,还可以看候选人是否具有“全局观”,比如对这些问题的考量:如何设计更加有效的数据通路,没有数据怎么办,上线以后系统表现不好怎么办等。
对候选人在白板上进行基本的编程能力的测试是整个Onsite考察中的另外一个核心内容。总的说来数据科学家或者人工智能工程师的编程能力需要和普通工程师的基本相当有些时候甚至要更高。这里面除了考察基本的算法问题以外还需要考察能否对普通的机器学习算法进行编程也就是说看候选人是否真正能够把模型或者一些算法用程序实现出来。关于候选人的编程能力问题这是一个单独的话题今天我们就不在这里展开了。
有一点需要留意观察,候选人的表现是否在有压力或者劳累(毕竟一天的现场面试是很累的)的情况下有重大波动。优秀的候选人能够通过沟通来缓解自己的压力。
小结
今天我们讨论了Onsite面试总结一下要点第一我们讲了如何决定一个候选人可以从电话面试过度到Onsite面试第二我们详细梳理了Onsite面试方方面面的问题。希望这些内容能给你一些启发和借鉴。
最后给你留一个思考题Onsite面试之后如何来决定是否录用这个候选人呢是不是需要所有的人都赞同 如果不是所有人都赞同,怎么综合意见做出最后的决定呢?

View File

@@ -0,0 +1,75 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
139 成为香饽饽的数据科学家,如何衡量他们的工作呢?
本周我们聊了在构建一个数据科学家团队时从筛选简历入手到电话面试再到Onsite面试这一系列的流程。从无到有建立一个数据科学家或者人工智能团队的确是一件煞费苦心的事情。
那么今天我们来聊一聊数据科学家团队管理的下一个重要的步骤那就是如何来衡量数据科学家或者人工智能工程师在团队中的业绩有时候也被称为是绩效评定Performance Review。绩效评定的种种规则必须在团队建立的初期就明确否则就会出现一些不定因素对于招聘、培训以及留住人才都有着不可估量的影响。
数据科学家的价值
如何对数据科学家团队进行绩效评定呢?这个问题的核心其实是要回答,数据科学家或者人工智能工程师究竟应该(以及实际)为你的公司或者组织带来什么核心价值?只有梳理清楚这个核心问题,才能真正建立起衡量数据科学家团队的价值体系,从而达到为公司和组织赋能的目的。
那么,数据科学家团队或者人工智能工程师团队应该为企业或组织带来什么样的价值呢?
对于这类相对来说比较抽象的问题,其实很难有一个标准答案。每一个组织或者公司都有自己一套衡量价值的方式。这里我们并不追求一个统一的答案,而是希望能够为这个问题提供一些参考。
关于这个问题,在我们前面的一些分享中,其实已经提到过,那就是数据科学团队最重要的一部分价值来自于为企业或者团队引入数据驱动的决策过程,这是数据科学团队或者人工智能团队的一个核心价值。很多企业或者组织,在没有这些团队之前是无法真正做到数据驱动、持续决策的。
也就是说,“数据驱动”和“持续决策”这两点可以看作是数据科学家团队的主要价值体现。那么,怎么衡量数据科学家团队这个问题,也就变成了如何来衡量这些团队在围绕这两方面的工作中做得怎么样。
注意,我在这里其实并没有明确提及数据科学团队和人工智能团队对产品直接带来的效果,比如点击率升高了多少,用户存留增加了多少,什么产品又上线了等等。主要是出于以下两点考虑。
第一,每一个公司、每一个组织甚至是每一个产品在这些价值上都有不一样的需求,没有一个统一的模式。
第二,如果数据科学团队为组织建立起了数据驱动的持续决策过程,那么很多产品级别的性能提高或者核心功能的实现就会成为顺理成章、水到渠成的结果。相反,如果仅仅强调某一个产品性能的提升或者某一个单点技术的突破,很可能无法真正建立有效的人工智能团队,并且团队的“战斗力”也无法真正得到最大程度的发挥。
数据科学家团队的评价误区
刚才我们从一个比较大的概念上做了一个讨论,看数据科学家团队的价值应该如何来评价。但在实际操作中,往往存在两种比较明显的误区。
第一种误区是“唯技术论”。那就是觉得人工智能团队能够快速帮助公司、组织甚至是项目很快打开突破口,希望人工智能技术能够给公司业务带来突破性的发展,从而对人工智能团队有过高的预期。
在这种思路的指导下,在前期往往可能有一个比较大的热情,能够招聘到不少的人才或者能够拉起团队开始一些不错的项目。但很快,由于急功近利的心态和不切合实际的需求,常常又让人工智能团队身陷绝境。而这个时候,最容易产生的一种情绪是走另外一个极端,那就是从“唯技术论”到“技术无用论”。在这样的背景下,产品遇到的任何困难、任何失败都有可能归因到人工智能团队上。
第二种误区是对人工智能团队或者数据科学家团队心存怀疑,本质上觉得这些团队都无法真正能够帮助到团队。因此从一开始就不信任这些团队,蹑手蹑脚,在政策和发展上限制这些团队。由于这种不信任,使得人工智能团队不能真正发挥作用,因此催生了进一步的不信任,恶性循环,最终得出这样的结论,“人工智能是花瓶,没有用”。
这两种误区的核心其实是一种行为,那就是忽略了人工智能团队需要一个“生态环境”。什么生态环境?比如产品部门、数据部门以及其他的工程部门,必须协调发展。
绝大多数数据科学团队和人工智能团队都需要依赖一个比较强有力的数据部门的支持。同时,产品上,如果人工智能的算法或者模型并不能和产品有机结合,那无论如何,都是无法真正帮助产品,为产品赋能的。我们之前也提过,其实在很多时候,人工智能都是锦上添花的部分,而产品的整体呈现才是最为重要、做需要认真思考的问题。
数据科学家的评定
有了前面这些思路作为基础,我们现在来看一看数据科学家的评定的问题。
第一,对于数据科学家或者人工智能工程师来说,我们需要看他们是否对于建立、完善、和推动“数据驱动的持续决策”这一长期任务有不间断的贡献。
具体来说,那就是数据科学家或者工程师是不是在帮助建立和推动数据驱动的链路,是不是在思考如何能够更快、更好地解决数据的问题。这里的数据包括获取数据、整理数据、分析数据以及利用数据的整个流程。我们的数据科学家或者人工智能工程师应该持续在这几个方面有所贡献。
你可能会有疑问,这不是数据工程师的责任吗?没错,这确实是数据工程师的职责。但是,如果我们的科学家并不清楚数据的情况,并不了解如何进一步推动数据链路的进步,那产品线将来肯定会出问题。
同理,数据科学家也需要在帮助“持续决策”上不断做出贡献。这里主要指的是实验的平台,以及围绕着实验平台进行决策的工具,比如图表,比如更加复杂的假设检验工具,比如因果推断的工具等等。数据科学家和人工智能工程师必须要具备这样的敏感度。
第二,那就是考察数据科学家和人工智能工程师本身的职责和专长,针对某一个产品能否提出切实可行的机器学习解决方案,能否和产品部门以及其他工程部门一起,让解决方案落地。
这一点检验的就是解决方案的落地能力。当然,这里不仅仅依赖于解决方案本身,还依赖于其他的因素,比如数据,比如产品。这里面有一部分是第一点的内容,主要是评定数据科学家或者人工智能工程师对于跨部门合作以及共同构建一个人工智能生态系统的能力。这一条的重点是评定在一个较小范围内落地解决方案的能力。
第三,那就是数据科学家和人工智能工程师必须能够不断提高自我修养,能够持续学习不断进步。
这一点,可能是在所有的工程团队和产品团队里面都比较突出的。虽然所有的团队都需要不断进步,然而人工智能这个领域实在是变化太快。因此,在这个方面,人工智能相关的工作都必须要有比较不一样的评价标准。
在一些企业中,数据科学家的持续学习主要体现为参加会议、发表论文、参与学术讨论、发表开源软件等形式。如果在一些初创公司或者是暂时没有这些能力的组织中,我们也要思考如何来评价员工是不是在积极地持续学习。
小结
今天我们分析了组建一个数据科学家或人工智能团队后,你怎样来认识这个团队的价值,怎么来评价员工的工作。
简单地做个总结:第一,我们讲了数据科学家团队对于推动“数据驱动持续决策”这一目标的作用;第二,我们梳理了面对人工智能团队上可能存在的两个误区;第三,我们简单聊了聊如何在大的方面来评定数据科学家的工作。希望这些内容能给你带来一些启发和借鉴。
最后给你留一个思考题需不需要把人工智能团队的工作和企业的KPI挂钩如果需要该怎么挂如果你觉得不需要又是什么理由呢

View File

@@ -0,0 +1,55 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
140 人工智能领域知识体系更新周期只有56年数据科学家如何培养
在上一期的分享里,我们聊了数据科学家团队管理的一个重要步骤,那就是如何来衡量数据科学家或者人工智能工程师在团队中的业绩,我们重点讲了如何看待数据科学家团队的价值和数据科学家评定的一些误区。
今天,我们来聊另一个数据科学家团队的高级话题,那就是数据科学家的培养的问题。
为什么要培养数据科学家
为什么要培养数据科学家?这个问题看上似乎是显而易见的,但实际上,如果不了解数据科学家或者人工智能团队的一个重要性质,你很可能无法很好地运营这样一个团队。究竟是什么性质这么重要呢?那就是数据科学家或者人工智能工程师有强烈的持续学习和不断更新自我的需要,这是数据科学家培养的一个非常重要的理念。
那么,数据科学家为什么需要不断学习?简单来说,是因为数据科学家所需要的技能和知识处在一个快速变化的环境中。如果数据科学家不能对这些快速变化的技能和知识加以学习,就很可能被迅速淘汰。
我们这里所说的技能有知识性的技能也有实际的工具性质的技能。
从知识性的来看,机器学习和人工智能技术每隔一段时间就会有一些重要的发展,了解和掌握这些更新的技术需要一定的门槛。因此,持续学习是为了能够迈过这些门槛。从过去的经验来看,每一次这样的重要发展所带来的新门槛都不可避免地让一些工程师和数据科学家落伍。
比如在过去不到20年的时间里机器学习就经历了“支持向量机”Support Vector Machine、“概率图模型”Probabilistic Graphical Model以及“深度学习”Deep Learning这三股大的思潮。也就是平均56年数据科学家和人工智能工程师就需要面对一些完全不同的建模思想和工具。更不要说在这些大的思潮之下每年出现的新模型也是层数不穷。这还没有提及应用的领域比如推荐系统、搜索、广告系统、计算机视觉、自然语言处理等等。如果不能在这些领域知识的快速变化中取得主动很可能就无法胜任未来的工作。
在实际工具技能层面则更是日新月异。比如近日如火如荼的深度学习框架TensorFlow仅有3年多的历史五六年前还根本就不存在。而如今借助机器学习迅速崛起的编程语言Python在五六年前也没有近日的火爆。而在支持向量机年代非常受欢迎的LibSVM和SVMLight工具可能今天已经很少听到。知识框架的变化相比工具技能层面的变化更加琐碎更加细节这也为人工智能科学家提出了更高的挑战。
那么,在知识结构和工具技能都快速变化的情况下,团队的负责人就需要针对这样的特点进行有远见的管理安排。
第一需要为学习这些技能和知识提供时间。任何数据科学家现有的知识体系都不能保证永不过时。事实上就像我们刚才提到的现在每56年就有一个比较大的知识体系更新这个更新速度在未来还有可能会更快。那么花费了非常大的代价招聘来的整个团队就有可能面临着短时间内过时的危机所以要能够利用平时的时间把持续学习的内容安排进团队的日常运作中可以有效降低团队遭遇知识鸿沟Gap的风险。
第二,需要团队里的资深数据科学家能够战略性的挖掘接下来有可能进入主流视野的技术,从而早作准备。尽管这可能显得有一点过于超前,但是对于大多数的互联网或者高科技企业来说,技术实力上的领先无疑是最强大的生产力。因此,在日常的安排中,如果在团队人手富裕的情况下,能够有一些数据科学家专注比较“面向未来”的技术,从而为今后的技术积累以及整个团队的“技术纵深”打下基础。
其实谷歌的DeepMind或者Facebook的人工智能研究院都有着这样的性质。这些机构研发的技术未必能够马上应用到这些公司的主流产品上但是这些技术有可能让这些公司或者团队能够在未来35年内有一个比较舒适的纵深这些公司的其他团队需要做的就是沿着这个纵深前进。
除了从一个团队以及数据科学家本身的不断更新换代的这个思路来看待培训以外,还有一个方面,那就是绝大多数公司和团队的数据科学家都不可能是在招聘的时候就已经是最一流的数据科学家或者人工智能工程师了。
你往往只能招聘到博士毕业生、硕士毕业生。他们的知识面和技能在刚进入公司的时候还非常稚嫩。对于一些博士毕业生而言,以前做的一些研究都是在一个非常窄的领域,还没有形成一个完整的体系。对于一些硕士毕业生而言,很可能完全没有真正接触过现实的问题,之前的学习主要是课堂项目。因此,对于团队中的年轻成员,学习和培养就成为了一个非常必要的环节,让他们能够真正融入到工业级人工智能解决方案的研究和部署中。
全方位的培养计划
刚才我们简单聊了聊从技术层面培养数据科学家的一个思路。其实,我们之前反复强调的一个思想就是,人工智能团队并不是单独存在的。一个能够真正运转并且能够为公司或者组织带来价值的人工智能团队一定是整个组织中的一个有机部分,并且能够为公司和组织带来数据驱动的持续决策的能力。因此,在这样的一个目标下,数据科学家的培养不应该仅仅是技术层面上的,还应该是更加全方位的。
如果说简单一点,对于一个数据科学家的全方位培养中,很重要的一条,那就是团队协作的能力,特别是跨团队的组织、协调和沟通的能力。我们在之前的分享中已经提到过,数据科学家的工作需要和数据工程、设计师、前端工程师、后端工程师、产品经理等角色的人员打交道。而在这个过程中,任何一个环节的沟通出了问题,都有可能造成项目的失败。因此,有没有聆听的能力、有没有表达的能力、有没有了解需求的能力、有没有分清主次的能力等等,这些软实力就成为了数据科学家培养计划中的一个重点。
从过程上来说,一个新入职的数据科学家的核心目标还是从技术上慢慢从学生或者初级工程师逐渐成熟起来。最开始,年轻的数据科学家应该“多听”、“多看”、“多想”,但“少发表意见”。从和资深的员工一起参与项目开始,逐渐学习怎么和其他的部门一起工作,甚至从熟悉其他部门的词汇、语言入手。
最后,我想说的是,除了团队之间的沟通能力以外,数据科学家上台演讲的能力也很重要。能够把自己的解决方案说清楚,能够用通俗的语言来解释复杂的问题,能够不使用数学符号依然可以把解决方案的主要思想梳理明白并且能够传递出足够多的信息,这些都是数据科学家进阶必不可少的技能。
小结
今天我们分析了数据科学家或者人工智能工程师团队的培养问题。进行一个简单的总结:第一,我们讲了数据科学家为什么需要培养。在主要的技术技能培养的道路上,有什么样的情况;第二,我们详细梳理了数据科学家全方位培养中的重点是什么。希望这些内容能给你一些启发和借鉴。
最后,给你留一个思考题,怎么能够把数据科学家的持续学习纳入绩效考核呢?或者到底应不应该纳入考核?

View File

@@ -0,0 +1,59 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
141 数据科学家团队组织架构:水平还是垂直,这是个问题
周一我们聊了数据科学家培养的话题,我们分析了数据科学家培养的重要性,要从技术的提高和整体的团队协作几个角度来进行培养。
今天我们来讨论数据科学家团队高级话题中的最后一个,也是非常现实的一个问题,那就是对于一个组织来说,究竟应该形成怎样的组织架构呢?是选择一个集中式的数据科学家团队或者叫水平式的组织架构?还是成立一个分散式的、每个产品部门都有数据科学家的垂直式的组织架构呢?对于很多公司或组织来说,在构建一个数据科学家团队的时候都会遇到这个棘手的问题。
水平架构的数据科学家团队
什么是水平架构的数据科学家团队呢?简单来说,那就是一个公司或者组织的所有数据科学家都在一个团队中,有一个统一架构管理,比如一个数据科学家总监或者一个首席科学家。这个团队负责和公司所有的其他团队合作,提供数据科学以及人工智能解决方案。
例如大家熟悉的微软研究院、谷歌DeepMind、雅虎研究院、IBM研究院、Facebook人工智能研究院都是水平架构团队的卓越代表。
水平架构的团队有哪些好处呢?
第一,便于管理。这些团队有统一的招聘标准、业绩评价标准、员工晋升标准和内部的运作模式。这些管理体系的建立是需要时间和经验的。统一的管理常常意味着高效,大家对这些管理上的细节有统一的认识,因此整个团队对内管理上能够更加方便快捷。对于希望快速发展壮大的一些组织来说,这一点尤为重要。
关于这一点,很多管理者其实并没有完全理解,难免出现因多个相似团队存在而造成一些不必要的内耗。比如说,如果一个组织内部在没有协调的情况下出现了两个人工智能团队,而这两个团队各自有一套招聘方法、人员评定的方法以及项目管理的模式。如果没有足够重视,那很快就会演变为激烈的摩擦,从而无法让团队真正有效地运行。在很多公司的发展中都有这样的例子,因为有多个类似的人工智能团队而无法集中资源。
第二品牌效益。刚才提到的类似微软研究院、雅虎研究院以及IBM研究院都是卓越的品牌。一个组织一旦形成了品牌那就可以相对比较容易地收获一些品牌红利比如说招聘的便利。很多年轻的研究员或者硕博毕业生的首选都还是进入知名的机构或者团队。甚至有很多时候年轻的工程师或者科学家都希望追随某一位在这些组织获得成功的学者或者前辈于是就考虑加入这些团队。还有一些优势比如在社区里的话语权效应典型的例子就是谷歌的TensorFlow框架这个框架就是凭借着谷歌以及DeepMind的品牌优势从而能够在众多深度学习框架中后发制人迅猛发展。
第三,团队对外协作变得更加清晰简单。这里主要是说和公司其他部门之间的协作会变得更加明了。试想公司现在有一个新的产品部门,希望能够利用人工智能的一些技术来构建自己的产品,那么如果公司内部有三个不同的人工智能团队,有几套差不多的系统框架,对于这个新的产品部门来说,该如何选择合作呢?这势必又会引发我们刚才提到的团队之间恶性竞争的问题。
垂直架构的数据科学家团队
刚才我们主要分析了水平架构团队的一些优势,中间提到了垂直架构团队的一些问题。那是不是垂直架构的团队就没有任何优势了呢?
凡事肯定都有正反两面。
垂直架构的团队往往是从不同产品线的需求中慢慢演变而来的。举个例子在类似Facebook、谷歌、雅虎等公司的内部搜索、推荐以及广告部门往往由于各自的需求不同在历史的进程中都分别组建了自己的具有人工智能性质的团队。这些团队在发展过中也都形成了一些自己的软件框架以及成熟的算法模型。由于这些产品线细节的复杂性对于很大的公司来说这些差异性所带来的麻烦就需要不同的团队来支持。同时因为有不同的团队来做人工智能的研发从整个公司的层面来看公司会更加“坚韧”也更容易有不同的创新点。
如果仅有一个集中的水平团队来支持公司所有的产品线,随着公司产品的增多,这个水平团队的任务将会越来越重。并且,这个水平团队将不可避免地开始选择那些这个团队认为更加重要的功能加以支持,这必然就难以满足所有团队的需求,正所谓“众口难调”。这个情况下,也就给了其他团队一定的“借口”开始发展自己的人工智能团队。这其实也是很多公司里,不同人工智能团队发展的一个轨迹。在某种程度上,这种情况也是“解放”了这个水平团队所承担的重负,让每个产品团队最终能够有比较完整的自主权来发展。
垂直发展模式是大多数公司发展到一定程度所经历的现实阶段,也是超大型公司规避技术风险的一种方式,即不同的团队之间互为“备份”,整个公司的发展存在合适的内部竞争。
混合组织架构
其实你可以想到,在水平结构和垂直架构之间,存在着一种混合的模式。这种混合的模式往往是希望能够汲取水平架构和垂直架构两者之间的优点,从而能够更大地发挥效益。
举例来说谷歌存在DeepMind这样的水平架构人工智能团队但同时各个产品组也有不少人工智能研发人员。这样垂直的架构分布在各个产品组能够保证产品线的正常运作以及不断推陈出新又能够保证有DeepMind这样的相对比较独立的机构拥有较高辨识度形成一个比较完整的实体可以进行更多的创新和尝试而且也能够有一个清晰的品牌吸引人才。类似的情况还有Facebook的人工智能研究院和其他工程产品线内的人工智能团队的关系。简言之就是希望用一个较小的、更加核心、更加精英化的水平团队以及各个产品线中的垂直团队一起相互作用。
当然,从管理的层面而言,这样两者都需要的混合模式对公司的领导智慧和协调能力都是极大的考验。事实上,你可以发现,在上述的区分中,产品团队中的人工智能研发人员和这个更加精英的水平架构的人工智能团队之间可能会产生不信任的摩擦。举例来说,理想状态下,这个核心的团队应该做一些更加超前的创新和思考,而产品的团队做一些更加“接地气”的项目。但是,有的时候产品团队中也会有工程师或者科学家的能力其实不错,也能做超前的研究和创新。慢慢地,就会让人觉得这个核心的研发团队的名声和实际在公司内部的影响力“名不副实”。
在混合模式下,我们现在还不能说业界已经有一个成熟的模型可以供大家参考了。很多在尝试的公司也在水平和垂直的架构中互相摇摆。
小结
今天我们分析了如果要组建一个数据科学家或者人工智能团队,你需要建立的是水平架构的组织还是垂直架构的组织。
我们来进行一个简单的总结:第一,我们讲了什么是水平架构的团队组织,这样的组织有什么优势;第二,我们详细梳理了一下垂直架构组织的由来,并且帮助你理解这种组织架构的现实原因和在大型公司中的好处;第三,我们简单谈了谈对混合架构的摸索。希望这些内容能给你一些启发和借鉴。
最后,给你留一个思考题,对于一个初创公司来说,如果希望建立人工智能团队,应该选取什么样的架构呢?

View File

@@ -0,0 +1,83 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
142 数据科学家必备套路之一:搜索套路
到目前为止,我们已经完整地介绍了搜索、推荐和广告的主流技术,为你呈现了这些产品技术方向的整个生态系统。在这些系列的分享里,我们重点介绍了这些技术方向的基本模型,然后花了不少篇幅讲如何评测模型的好坏,包括如何进行线下评测以及线上评测。同时,我们从传统的经典模型讲到最近几年利用深度学习对这些技术方向的提升,帮助你理顺了这些技术发展的脉络。
尽管我们已经在之前的文章中分享了这些技术的方方面面,但是对于很多经验较少的数据科学家或者人工智能工程师来说,依然会感到无法得心应手地把这些模型和知识给应用到真实场景中。
其实,出现这种情况一方面是个人经验积累的原因,毕竟从初学者到能够熟练应用各种模型工具应对实际产品的需要,是一个长时间磨炼的结果;然而另一方面,也是因为搜索、推荐和广告这些产品场景其实是有一些套路,在没有接触到这些套路的时候往往会觉得不得要领,而在慢慢熟悉了这些套路之后,进步也就会慢慢加快。
那么,在接下来的三篇文章里,我就有针对性地来分享在这三个领域里的一些常见套路。今天,我们首先从搜索产品套路说起。
多轮打分套路
我们前面已经介绍过多轮打分的系统架构了。当我们想要构建任何一个搜索引擎时,都应该立刻想到多轮打分这个架构,这是一个基本套路。
我们先来回顾一下多轮打分最基本的模式:针对一个搜索关键词,我们首先从索引中找到第一批,也是数目相对比较多的相关文档,这就是第一轮打分;然后,我们再根据一个相对比较复杂的模型,对剩余的文档进行打分排序,这是第二轮打分。
很多时候,两轮打分就已经能够满足需求了,可以直接给用户返回结果集。当然了,我们也常常加入第三轮打分,这个时候经常是实现一个商业逻辑层,可以针对最后的搜索结构加上一些商业规则。
多轮打分这个套路之所以关键,是因为它其实影响了一系列的技术决定。
首先,只有第一轮是直接作用在索引上的。这一轮往往可以并行化,并且不需要太多考虑文档之间的顺序。
我来举个例子说明。在一个大型搜索引擎的架构下假设我们有一亿个文档每五百万个文档存放在一个数据节点上。如果我们有一个关键词是“人工智能”那么就要到这20个数据节点上分别查找包含这个关键词的文档。当我们把所有的文档汇集起来以后排序取出前1000个文档这个时候就进入第二轮。最简单的第二轮打分是在一个计算节点上进行的而且这个时候我们只针对1000个文档进行打分对计算时间的要求就大幅度降低了。那么在这样的情况下第二轮打分使用的模型可以是比较复杂的模型。后面每一轮打分所针对的文档往往是越来越少因此模型的复杂度可以越来越高。
从解决问题的角度上来说第一轮在索引上的打分是要解决“召回”Recall的问题。这一步有可能是从非常多甚至是成千上万的文档中返回几百到几千不等的文档因此一旦一些文档没有在这一轮中被返回就无法在后面的轮数中被重新筛选出来。所以我们要理清这么一个思路那就是如果你认定系统有“召回”的问题也就是说本该搜出来的东西完全搜索不出来那肯定是在第一轮打分就出了问题。第二轮以后的打分解决的就是“精度”Precision的问题。
同时,我们可以看到,什么时候解决“召回”问题,什么时候解决“精度”问题,这其实是取决于具体的业务场景。
对于“精度”非常看重的搜索场景比如说网页的信息类关键词例如“特朗普”、“比尔盖茨”人们往往只关注前10位甚至是前3位的搜索结果。那么很明显我们可以先有一个比较简单的第一轮架构比如就是文字匹配而把功夫都下在第二轮以后的打分上。
而对于“召回”比较看重场景,比如说法律文档搜索,那必须要做好的就是第一轮的打分,这个时候可能需要采用简单的文字直接匹配和语义的模糊匹配。
高频和长尾的套路
刚开始接触搜索产品的朋友往往会有一个困惑,那就是不知道该如何提升一个搜索产品,有一种无从下手的感觉。那么,对于搜索产品的提高有没有什么套路可言呢?
一个比较基本的套路,就是把搜索关键词按照某种频率或者是流量分为“高频关键词”和“长尾关键词”,从而为这两类不同的关键词设计排序算法。
为什么要把关键词按照频率分开呢?我来介绍一下最主要的思路。
对于很多搜索网站来说,一些高频的关键词往往占据了相对来说比较大的流量,而很多长尾的关键词,也就是仅仅出现过几次的关键词则并没有太多人搜。因此,如果我们先解决了高频的关键词,也就解决了大部分的搜索问题,从而可以把精力留下来慢慢解决低频的长尾关键词。
而实际上,高频关键词因为有足够多的数据量,反而往往比较容易得以解决,而低频关键词,因为数据的匮乏,往往需要更多的精力和时间。所以说,从投资回报的角度来看,我们也需要做区分,首先来解决高频的搜索关键词。
刚才我们提到了高频关键词的一个特点,就是有足够多的用户数据。那么,这里有一种非常简单的思路,或者说是在没有较好模型的时候可以首先使用的一种方法,那就是每天记录下高频关键词文档的用户点击数据。然后我们可以直接按照点击率,或者是文档的转换率排序,并且把这个排序存在某种存储中。当用户在这一天搜索这些高频关键词的时候,我们甚至可以直接从存储中调出事先算好的排序结果。
更加极端的做法就是手工对高频词进行更频繁的标注这种做法往往也是非常有效的。例如我们刚才说的“特朗普”的例子我们可以手工标注好前10名的结果然后存下来。只需要每几天更新一下这个标注我们甚至不需要使用任何模型就可以提供非常高质量的搜索结果。
当然使用这种方法显然无法对几百万的搜索关键词都这么一一处理。不过我们这里针对的主要是高频关键词所以即便是针对最高频的1千个关键词进行手工标注也会对整体的搜索效果有非常明显的提升。
相反,长尾的关键词往往需要花比较多的心思。对于长尾来说,我们还可以细分。比如对于有一定数据量的关键词,我们可以尝试针对这些关键词单独训练一个模型。之所以要单独训练一个模型,原因也很简单,如果针对所有的关键词只有一个模型的话,高频的关键词因为流量大,往往就会让模型偏重于去解释高频的信息,而忽略了这些中低频的关键词的作用。
因此,先把高频词单独处理了,然后就可以针对依然可以训练的中频关键词再选取一个单独的模型。而针对非常低频的关键词,我们往往需要借助其他的方法来挖掘这些关键词的信息,例如利用同类的其他关键词的数据,或者利用外界的知识库、知识图谱的信息等。
三大模型套路
除了分开处理高频和长尾关键词以外,搜索模型的提升还有一个非常简单的“三大模型套路”。
我们构建一个搜索引擎,从最原始的简单系统,慢慢到比较复杂的以至于到后期非常复杂的系统,从模型上来说要跨越三个台阶。在这里我们主要是针对第二轮的打分系统来进行讨论。
第一个台阶是使用线性模型。当我们设置好了最基本的第一轮打分系统以后首先要做好的是能够利用线性模型对文档进行排序。这一步其实往往是搜索系统从“无人工智能”到“有人工智能”的第一步。这一步对搜索效果性能的提升可能会有10%~20%。
第二个台阶是使用配对法线性模型。一般来说这一步搜索效果会有2%~5%的提升。
第三个台阶是使用树模型特别是GBDT模型。这一步搜效果的提升和第二步相似约有2%~5%的提升。然而,要从第二个台阶到达这个步骤,模型的特性可能会发生不小的变化。这一个台阶可以算是一个比较困难的台阶。
从工程研发的角度来说,可以采用一年一个台阶的做法。在已经穷尽了当前台阶所有可能用到的特性以后,再进入到下一个台阶,也就是说要尽可能地“榨干”当前台阶模型效果的“养分”。
总结
今天我为你介绍了做搜索产品的几个套路。
一起来回顾下要点:第一,我们回顾和总结了多轮打分系统的架构套路;第二,我们介绍了区分高频关键词和长尾关键词的套路;第三,我们简单讨论了“三大模型套路”,跨越三个台阶,逐步提升搜索效果。
最后,给你留一个思考题,为什么不鼓励直接采用深度学习模型呢?

View File

@@ -0,0 +1,75 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
143 数据科学家必备套路之二:推荐套路
在上一期的分享里我们讨论了做搜索产品的套路,给你介绍了多轮打分、高频和长尾以及三大模型套路。你有没有感受到这些高于某一个具体模型的套路的重要性呢?
今天,我们来看看推荐的一些套路。
多轮打分套路
上一篇我们提到,想要构建一个搜索引擎,应该立刻想到基于多轮打分的架构,有这个意识就是一个基本套路。
其实这个套路对于推荐,也是适用的。
把推荐问题构建成一个多轮打分的“类搜索”问题,其实是推荐在工业界应用的一个非常重要的套路。
这个思路的好处是把搜索和推荐问题给归一化了。也就是说,我们可以依靠同样一套软件架构来解决两大类相似的问题。搜索是有关键词的推荐,而推荐则是无关键词的搜索。虽然这是一种相对比较简化的看待这两种问题的方式,但是统一的架构在工程上面可以带来非常多的好处,比如重复构建相似的特征工程的流水线,以及更重要的如何优化索引等工程,这些都可以很快地应用在搜索和推荐这两个重要的场景上。
当然,在工程以外还有其他好处。在学术界,关于推荐系统搭建的方法往往是一种独立的模型,然后搜索系统又是另外一种独立的模型。这些模型之间缺乏能够系统性联系起来的纽带。把推荐问题看成是多轮打分的搜索问题之后,我们就找到了一种简单又自然的方法,能够把很多不同类型的推荐模型给整合到一起。
比如很多之前我们介绍过的推荐模型就可以担任第一轮打分也就是我们常说的“候选集选择”Candidate Selection这一组件的角色。像协同过滤模型就可以是我们为每一个用户或者每一个物品产生最终推荐物品的一个候选集合。
在搜索里,我们是利用索引以及简单的检索方法,从海量的文档中找到几百或者几千个初步相关的文档,然后再根据第二轮的复杂模型来重排序。那么在推荐里,我们其实就可以利用各种不同的协同过滤、矩阵分解等模型来达到第一步的筛选功能。
而对于第二轮打分,我们就完全可以依赖基于特性的排序学习模型来学习推荐的结果。这种方式其实是极大地利用各种搜索算法,特别是排序学习的进步,来提升推荐的效果。
是否把推荐问题看成是多轮打分的搜索问题,是区别工业界和学术界推荐模型的一个重要标志。
高频用户和低频用户套路
既然我们提到了把推荐问题看成是某种意义上的搜索问题,那么,根据用户行为的频率来进行不同的推荐策略,其实就是一个顺理成章的套路了。
这个套路的思路和搜索类似。对于高频用户而言,我们有足够多的数据,所以往往可以学习到一个比较好的模型。而且,对于真正的高频用户来说,提高推荐的质量往往需要个性化,也就是说,我们需要更多地利用这些高频用户他们自己的数据,来提供推荐结果。
一般来说,针对高频用户的个性化推荐有两种比较常见的方法。
一种方法就是构造更多的高频用户的特性。比如,有一个用户点击了某一个物品的信息,或者这个用户购买了某一个物品,这些特性都有助于我们的模型学习到关于这个用户的具体喜好。
另外一种比较常见的方法是为这些高频用户单独构建模型。这个方法其实主要是针对第二轮打分的模型而言的。一般来说,一个比较简单直观的方法是把所有用户的数据收集起来,然后训练一个全局的第二轮打分模型。这样做的好处当然是可以利用所有的数据,并且学习出来的模型往往也比较稳定。但是,一个全局的模型往往并不能为某一个用户提供最优的推荐结果,这一点其实很容易理解,因为一个全局的模型往往是某种“平均结果”。所以,我们可以根据用户的数据来为这些高频用户“定制模型”。
说了针对高频用户的一些思路以后,我们来看看针对低频用户的一些套路。
当我们需要为低频用户进行推荐的时候,因为数据缺乏的关系,这时候的选择就不太多了。一个普遍使用的方法,是对低频用户进行分组。这种分组一般来说是根据用户的人口信息,例如年龄、性别和地理位置。分组之后,我们把这些组别中的用户信息整合起来,统一建立这些组别的模型。
还有一个比较普遍方法,是给低频用户推荐流行的信息。这里的假设是,流行信息之所以是流行的,就是因为这些信息本身可能就有较高的点击率、驻留时间和购买率,因此在不清楚这些低频用户喜好的情况下,推荐这些内容其实是相对比较合理、也是保险的。
批量和实时套路
这个“批量和实时”套路其实和多轮打分以及高频、低频用户都有一些关联,但是有时说的是不太一样的事情。
在设计推荐系统架构的时候,我们刚才讲了多轮打分的思路,那是不是每一个用户到我们的网站或者服务时,系统都需要从第一轮开始一直到最后一轮,完全重新生成一个用户的所有推荐结果?
其实,我们可以这么想一想,如果一些用户,特别是低频用户,每周仅仅光顾几次我们的网站或服务,甚至每个月才光顾一次,我们并不需要针对这些用户来实时更新推荐结果,而可以按照一定的频率,例如每天一次或者每周一次提前生成好所有这些用户的推荐结果,然后存储到某一个地方。等用户访问网站时,我们就可以直接从存储中调出已经生成好的推荐结果。
其实这个思路不仅仅用于低频用户,高频用户也可以采用这样的方式。不过,更新推荐结果的频率可能就不是每天或者每周,而应该是每几个小时、每几十分钟甚至是更短的时间。
对于很多应用来说,推荐的结果其实并不需要是实时的。即便是在很多看似需要实时的应用上,我们依然可以用很多的批量计算来达到推荐的目的。
举个例子,在很多移动场景中,我们可以为一个用户生成一个基本的推荐结果,一两百个物品,然后从服务器端推送到用户的手机上。当用户在手机上产生了新的行为之后,我们可以根据这些行为对用户已经在手机上的这个集合进行模型的微调,然后重新排序。这里用户看到的可能是感觉上已经有更新的推荐结果,但这种实时的效果其实是建立在批量预处理上的。
能够理解什么时候需要利用批量的计算结果,什么时候需要实时的计算结果,是处理好推荐问题的一个关键套路。
总结
今天我为你介绍了做推荐产品的几个套路。
一起来回顾下要点:第一,把推荐问题看成一个多轮打分的“类搜索”问题,是推荐在工业界应用的一个重要套路;第二,对高频用户进行个性化推荐有两种常用的思路,包括构造更多的特性和定制建模;针对低频用户的推荐套路也有两个,一个是分组一个是推荐流行的信息;第三,我们聊了批量处理和实时处理的套路,关键是判断在什么场景下使用哪种套路。
最后,给你留一个思考题,从多轮打分系统的架构看,推荐和搜索又有哪些区别需要注意呢?

View File

@@ -0,0 +1,73 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
144 数据科学家必备套路之三:广告套路
讲完了搜索产品和推荐系统的套路,今天我们继续来看数据科学家应该掌握的广告产品的一些套路。
利用搜索和推荐的套路
前面我们讲过两种普遍使用的互联网广告模式,搜索广告和展示广告。对于搜索广告而言,一个基本套路就是尽量利用现有的搜索系统来推送广告。而对于展示广告而言,一个基本套路就是尽量利用现有的推荐系统来推送广告。
我们在介绍推荐套路时提过,推荐系统和搜索系统的很多方面其实都有重叠,所以做好一套搜索系统是非常有必要的,几乎所有的广告应用其实最终也可以在搜索系统的架构上搭建。因此,我们可以说,搜索系统是很多现代人工智能系统应用的一个核心技术组件。
具体来说,广告其实也和一般的文档一样,首先利用搜索引擎的索引把这些广告都存储起来。对于搜索广告来说,利用关键词的倒排索引,可以轻松地找到相关的广告,这和找到相关文档的原理其实是一样的。
当然,我们前面也提到过,广告的排序和普通文档有一个不一样的地方,那就是竞价。因此,在从索引中提取广告的时候,我们必须要去思考一个问题,如何让广告竞价的赢家能够从索引中被提取出来?
我们知道,广告的竞价常常是以点击率和出价的乘积来作为排序的依据。这就会有一个问题,如果我们从索引中提取广告的时候,仅仅看哪些广告从关键词的角度是相关的,而忽略了点击率和出价,那么,最后提取出来的广告很有可能不是真正能够赢得竞价的广告。
如何来对这个问题进行修正呢?一种做法是在索引里面增加点击率信息。也就是针对每一个关键词,我们不是按照文本的相关度去索引最相关的文档,而是按照点击率去索引点击率最高的一系列文档。
那么,当需要针对某一个关键词提取广告的时候,我们就直接从这个关键词所对应的索引中提取点击率最高的几个广告。这个时候,我们再从某一个存储出价的数据库中读取这些广告的出价,并且进行竞价排序。
从这个流程我们可以看出最终的竞价排名很可能并不是完全依赖点击率和出价的乘积而是在点击率先有了一定的保证下的这个乘积的排序。这种有保障的点击率常常被叫做“质量值”Quality Score用来描述这些广告的点击率高于一个设定的阈值。
接下来,我们来看广告提取的另外一个重要的要求,就是需要满足广告投放的业务逻辑。比如,有一个广告的投放要求是针对男性,现在有一个女性用户,那么,我们就不应该针对这个用户显示这个广告,而不管这个广告的点击率和出价信息是怎样的。
如何实现这样的效果呢?我们依然可以利用索引。在索引中,我们插入广告的各种投放条件作为被索引的对象,然后把在这个投放条件下的各种广告作为文本。这样,我们就可以提取满足任意投放条件的广告了。
针对这些投放条件的组合例如投放条件是“女性、在北京”我们可以认为是在索引上进行“且”操作也就是提取出同时满足两个关键词的操作。事实上针对任意一个关键词的广告我们都是进行了多个“且”操作。例如针对“可乐”这个关键词我们可能是需要提取这个关键词点击率最高的100个广告如果有那么多的话并且这些广告的投放条件都满足“女性、在北京”。当提取出了这些广告之后再进行竞价排名。
当然,在这样的架构下,我们就需要对索引有快速更新的能力,例如某一个广告的点击率或者投放条件都有可能发生变化。
层次建模套路
对于广告系统的建模有一个基本的套路那就是层次建模Hierarchical Modeling。什么是层次建模呢在广告的生态系统中至少有广告商、广告推广计划、单一广告这三个层次的实体。提高广告投放精准度的一个核心问题就是如何能够对这这三种实体进行有效建模。
当我们对当前的广告商一无所知的时候,需要看一看过去有没有其他类似的广告商在平台投放过广告,如果有,那么能否借鉴那些过去的数据。当这个广告商开始投放广告以后,我们就可以积累数据,慢慢就能够增强对这个广告商的建模能力。
类似的,当我们计划推出某一个广告推广计划的时候,我们先看一看同一个广告商有没有类似的推广计划,或者看一看其他类似的广告商有没有相近的推广计划。当某一个广告开始运行的时候,我们看一看同一个推广计划下其他广告的表现,或者是同一个广告商下其他广告的表现。
层次建模的一个重要的特点就是利用可以利用的一切其他信息来进行建模。在计算广告中,经过验证,层级信息往往是最有用的特性。
具体和泛化的套路
这个套路其实并不是完全针对广告的。就像我们之前所说的广告、搜索和推荐之间的关系,这个套路其实也可以应用在搜索中。
前几年Google的工程师发现如果仅仅利用深度学习模型来学习抽象的特性从而寄希望模型的性能得以提升这种方法也许可以很好地解决计算机视觉的一些问题但是对于搜索、广告和推荐的效果则并不好。
下面我们聊聊工程师们发现的这里面的原因[1]。
一个好的模型必须具备两种能力。第一能够对具体的关键词进行匹配。比如我需要匹配“可口可乐”那么任何与“百事可乐”相关的广告其实都是不能显示的。这就要求模型中针对每一个具体的关键词能够进行字对字的匹配而不是模糊匹配。第二那就是具有泛化能力。比如我们要去对“可口可乐”在2018年的广告推广进行建模模型就能够借鉴“可口可乐”在2017年的推广数据以及借鉴“可口可乐”公司其他推广的数据。这里面的借鉴能力其实就是模型的泛化能力。
由此,我们可以得到一个好模型的重要套路:一个好的模型既要能够精确记忆某一种关键词,又要能够在广告层次上进行泛化。
总结
今天我为你介绍了做广告产品的几个套路。
一起来回顾下要点:第一,搜索系统是很多现代人工智能系统应用的一个核心技术组件,广告系统也可以借鉴搜索系统的套路;第二,广告生态中层次建模的套路,就是利用可以利用的一切其他信息来进行建模;第三,一个好模型的套路,关键是模型的具体能力和泛化能力并存。
最后,给你留一个思考题,为什么在计算机视觉中,对于具体匹配的要求没有那么高呢?
参考文献
Heng-Tze Cheng, Levent Koc, Jeremiah Harmsen, Tal Shaked, Tushar Chandra, Hrishi Aradhye, Glen Anderson, Greg Corrado, Wei Chai, Mustafa Ispir, Rohan Anil, Zakaria Haque, Lichan Hong, Vihan Jain, Xiaobing Liu, and Hemal Shah. Wide & Deep Learning for Recommender Systems. Proceedings of the 1st Workshop on Deep Learning for Recommender Systems (DLRS 2016). ACM, New York, NY, USA, 7-10, 2016.

View File

@@ -0,0 +1,61 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
145 如何做好人工智能项目的管理?
关于数据科学团队养成这个主题,在之前的分享中,我们已经聊了数据科学团队招聘以及一些高级话题,主要是围绕如何组建一个高效的团队,包括数据科学家的绩效评定、培养以及如何构建水平和垂直的组织架构这些内容。
在接下来的几篇分享里,我们重新回到数据科学团队的本源,来看一看数据科学团队在整个公司的位置,以及在数据科学团队的发展和运行中,又有哪些至关重要的环节。
今天我们就来聊一聊运行数据科学团队里面的一个核心问题,就是如何针对人工智能项目进行管理,从而保证团队运行的项目能够顺利完成,同时能够真正帮助企业利用人工智能技术来推动产品的发展。
一说到项目管理,很多成熟的工程师或者项目经理可能会不以为然,觉得不需要对人工智能项目进行额外的关注。但是在实际工作中,如何运作数据科学项目关系到整个产品的推进,甚至可能对公司的发展都会有不小的影响。
那么,通常情况下,针对人工智能项目会有哪些项目管理的模式呢?我们先来看看两种极端模式。
把人工智能项目当作“研究项目”
第一种模式是把人工智能项目完全当作是研究项目。很多从学术界转到工业界的研究人员和工程师,在处理人工智能项目时就很容易陷入这种状态。那么研究项目有哪些特点,或者说,如果我们把人工智能项目完全当作是研究项目,会带来什么问题呢?
首先,在很多状态下,研究项目并没有特别明确的目标。有些项目看似是利用一个现成的方法来解决一个实际问题,但是做了一阵子才发现问题的定义并不清晰,而那个现成的方法可能需要重新修改,才能在新的问题上使用。而且,修改这个方法也许还需要进行一些理论推导,即便做了所有这些步骤以后,依然没有人可以保证这个方法对新的问题一定有效。
也就是说,研究项目的每一个步骤都充满了不确定性。这种过程和结果的不确定性,可以说是研究项目最大的特点。不确定的特点带来的结果,往往就是不太好控制整个研究项目的范围。
举一个例子,如果我们要针对一组图像构建一个分类器。这个项目其实可大可小,可快可慢。如果我们直接用现成的模型,然后利用迁移学习的办法,不去重新训练模型,仅仅是把模型直接应用到新数据上,那快则一天,慢则一个星期,可能就完成了这个任务。
然而,这么做对分类精度是没有任何保证的。我们可能会发现分类器的精度比我们想象的要低得多。那么,这个时候就会达到一个比较危险的时刻。原始项目范围内需要做的任务都已经完成了,但是没有达到效果,后面可以做的事情,范围可能就会非常大,也没人能说得清楚,做了这些额外的任务之后,是不是一定能提高分类器的精度。
因此,把人工智能项目完全看作研究项目的弊端就很明显了,我们无法很好地把握整个项目的周期,特别是完成时间。同时,种种的不确定还可能造成项目范围的不可控。显然,这种局面是工程项目中最不愿意看到的。
把人工智能项目当作“软件工程项目”
另外一个人工智能项目管理的极端模式,就是完全按照软件工程的模式来进行管理。我们这里不讨论具体的软件工程管理方法,我们仅从宏观上来讨论软件工程管理模式对于人工智能项目管理的弊端。
软件工程管理的一个核心思想,就是能够把一个大的任务拆分成一些细节的任务,然后假设如果能够完成小的细节任务,那么大的项目也就能顺利完成。同时,软件工程管理还有一个重要的假设,那就是工程的绝大多数步骤都是确定的,没有过多的变数。
遗憾的是,正如我们刚才提到的,人工智能项目的一个特征,就是不确定性。因此,按照软件工程进行管理,就容易做一些看似有意义,但其实对工程进展并没有真正帮助的任务。这些任务往往是数据科学家或者工程师凭空制造出的,目的就是为了符合软件工程的管理流程。过于细节的任务划分,往往就会把整个项目真正的目标给迷失掉,从而无法针对是否达到目标很好地进行控制。
回到上面那个图像分类器项目的例子,如果我们采用纯粹的软件工程管理方式,那步骤很可能是这样的:需要先写一个计划书,再对数据进行描述,然后找责任相关方来探讨是否需要重新训练模型等等。这些步骤耗费了大量时间,但是对于能否构造出高精度的分类器并没有帮助。
人工智能项目的管理
那到底该如何来管理人工智能项目呢?人工智能还处于发展的初期,目前其实并没有一个完全成型的项目管理方法论和一个放之四海而皆准的框架。不过,通过刚才对两种极端情况的讨论,相信我们可以在真实的项目管理过程中想出一些办法。
首先,我们需要有一个迭代的思路。迭代思路是为了能够有效地管理项目的范围。还是回到我们所说的图像分类器项目,如果我们利用迭代的思路来进行项目管理,就不会把一个绝对的模型精度当作是项目的唯一目标,而把提高精度当作目标,但事先不会针对精度有过分苛责的追求,那么每一天每一周需要做的工作就相对比较容易可控。
其次我们需要分清楚项目中哪些部分是相对可控的而哪些部分是比较不容易控制的。当一个模型被训练出来后要把这个训练流程形成一个每天可以更新的工作流Workflow这个任务是相对比较可控的。可控的部分我们就可以利用软件工程的项目管理方法了来对这些任务进行细分。那不可控的任务呢比如希望提高当前模型的精度或者是数据量大了十倍以上依然希望能够进行操作等等。针对这些任务都没有直接的答案寻找解决方法的过程充满了不确定性那就无法真正利用软件工程的项目手段了。
最后是人工智能工程项目管理的一个“小窍门”那就是设置完整的“交工日期”Deadline。不同的交工日期往往意味着完全不同的解决方案甚至这些解决方案之间会有非常大的精度区别。我们的交工日期要建立在迭代思想上这样就能保证我们的项目在每一个交工日期都有一个成型的结果。如果模型的精度还有提升的空间我们就可以依赖下一次迭代去完成精度的提高。
小结
今天我为你讲了数据科学团队的一个核心问题,那就是如何针对人工智能项目进行管理。
一起来回顾下要点:第一,我简单介绍了什么是人工智能项目管理;第二,我们分析了两种极端的项目管理模式以及各自的弊端;第三,我们讨论了如何利用两种极端模式来寻求中间路线的办法。
最后,给你留一个思考题,你自己的经验里,人工智能项目在运行过程中,哪些步骤或者说是流程是最消耗时间的?

View File

@@ -0,0 +1,71 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
146 数据科学团队必备的工程流程三部曲
今天,我们继续来聊一聊数据科学团队的一些基础构建思路,讨论一些日常的在“工程流程”方面所需要注意的问题。和我们上一次分享的项目管理不一样,工程流程没有很多可以直接借鉴的经验,需要从业人员进行更多的思考和创新。
什么是工程流程
我们首先来看一看什么是“工程流程”。一般来说,工程流程指的是我们有什么制度或者说是策略来保障所做的项目能够达到一定的质量标准。
那工程流程和项目管理流程有什么区别呢?我们说,项目管理流程是从宏观上把握项目的进展,而工程流程则主要是在微观上,定义和掌控具体的每一个步骤上的输入、输出和过程。从另外一个角度来说,这两者之间并不存在一个必然的关联关系,一个项目在细节的工程流程上成功与否和一个项目自身的最终成功与否,并不能完全划等号。
你是不是有疑问,既然如此,那我们为什么还要关注工程流程呢?原因是虽然一个好的工程流程并不一定带来项目的成功,但是可以增加成功的可能性或者说是概率。同时,一个好的工程流程可以帮助一个团队在日常的运作中减少问题的发生,从而能够达到事半功倍的效果。
那么,工程流程究竟包含哪些方面呢?
我们在今天的分享里讲三个方面。第一,代码管理的流程;第二,开发部署环境的流程;第三,数据管理的流程。这三个流程可以说是涵盖了一个人工智能项目发展和成功所必不可少的三个重要方面。
代码管理流程
人工智能项目一个很重要的环节就是开发代码。然而,因为数据科学、人工智能项目的一些特殊性,从业人员对于代码的管理普遍存在不够重视的情况。
我们在上一期的分享里提到过,数据科学和人工智能的很多项目,往往会被当作学术界的研究项目来进行开发。如果是研究项目,代码开发有哪些特点呢?我简单归纳了两大特点。第一,代码的主要目的是完成学术文章发表所需要的实验结果;第二,在绝大多数情况下,代码很容易变成无人维护和不能继续更新的情况。如果是当作研究项目来开发,那研究人员很可能并不在意代码的可读性、可维护性以及可扩展性等软件工程非常重视的方面,那么这样开发出来的代码就无法真正扩展为一个大型项目的代码库。
那么,对于一个人工智能项目的代码管理,我们需要去关注哪些因素呢?
第一所有的代码一定要保存在代码版本管理工具中而不是某一个数据科学家或者工程师自己的电脑上这也是一个先决条件。在当今的软件开发的工具中Git或者是企业级的GitHub已经成为了一个标准的工具用于代码版本管理、追踪和分享。任何项目以及任何人只要开始进行开发都需要把所有的代码包括核心的文档存放在代码版本管理工具中。这保证了代码能够被追踪并得到及时的备份。
第二如果我们利用Git或者类似的代码版本管理工具代码的开发一定要尽量遵循这个版本管理工具所提倡的某种流程。比如我们有两个工程师在同一个项目中一起工作在这样的情况下大部分的代码版本管理工具都可以允许这两个工程师在不同的“分支”Branch进行开发。这两个分支和项目当前的“主分支”Master又不同因此项目目前代码的运行不会受到这两个分支的影响而这两个分支之间也不会互相影响。尽管进行分支开发已经算是软件开发的一个标准流程了但是在人工智能项目中依然有很多开发人员不遵循这个方法来进行代码不同开发进度之间的隔离。
开发部署环境流程
了解了代码版本管理的重要性之后,我们来看一看开发环境流程的控制。
从代码到可以被运行和部署的软件包,成为一个大型互联网产品或者人工智能产品中的一个组成部分,往往还有很多路要走。
首先开发部署环境中一个重要的组成就是流畅的从代码到部署软件包的“直通流程”。目前在软件开发领域有诸如“持续集成”CIContinuous Integration和“持续交付”CDContinuous Delivery这样的方法来帮助工程师能够相对方便地对代码进行包装和部署。我们在这里并不去展开讨论CI/CD的内涵但是要意识到对于人工智能项目我们也需要有能够流畅部署的思想。
那么,具体来说,哪个部分需要有流畅部署的思想呢?如果我们从大的角度来看,一个数据科学项目最需要动态更新的部分,往往是模型的产生,也就是说我们希望能够用最新的数据来训练和测试模型,让模型能够考虑到最新的用户行为。因此,就可以说,只要是对模型的产生流程有影响的步骤,都需要能够达到流畅部署。假如我们更新了模型产生的代码,这些代码必须能够快速地反应到生产系统中。
除了快速和持续部署人工智能项目的另外一个重要需求就是可以对代码的不同分支进行测试和运行。也就是说我们不仅仅需要能对“主分支”Master进行部署还需要能够对不同的其他分支进行部署从而能够无缝运行这些不同的分支。
这一点我们在开发环境中往往很容易忽视。举个例子人工智能项目需要做大量的A/B测试而这些测试中的“控制组”Control和“待遇组”Treatment往往就对应着代码中不同分支的开发成果。因此在我们不清楚“待遇组”所对应的代码是不是能够真正带来好处之前最好不要把这个分支和主分支进行合并。我们首先需要在线测试这个分支的效果这就带来了运行不同分支的一个需求。
数据管理流程
最后我们来简单聊一聊数据管理流程。这也是从事数据科学项目我们最容易忽视的一个部分。
对于绝大多数的人工智能产品来说,代码,也就是项目的业务逻辑,是和数据是密不可分的。从某种意义上说,我们应该把对数据的关注程度排在第一位。因为即便有正确的代码,如果数据出现偏差,有时候哪怕是一点点小的偏差,都有可能对最后的结果(例如模型)产生重大的影响。因此,我们需要不断地强调数据质量的重要性。
那么,对于一个项目的数据管理,又有哪些方面需要注意呢?
在绝大多数的项目或者是产品中,数据的产生者、数据的运营者以及数据的使用者往往是不同的团队,这是数据管理的最大挑战。这种角色上的差别往往导致了对于数据质量的忽视。
举一个例子,如果数据的产生者是一个产品团队,在最近的一次软件更新中,一个工程师把旧代码中对数据进行追踪的部分主观臆断地删除了一些字段,或者是为了变量名好看,更改了字段的名字。如果这个更新没有通知数据的运营者或者是使用者,这往往会带来什么后果呢?后果是下游整个软件线的流程中,数据可能发生重大变化。严重的时候,这样的问题会导致模型发生完全异常,产生不可控的后果。
因此从“端到端”的思维来考虑数据链路是非常有必要的。在数据的产生、运行和使用的链条上所有的用户必须达成某种数据的API或者说是“共识”。任何对于数据的改变都需要在满足这种共识的基础上来沟通和进行。同时数据的检测也是非常重要的否则就是“垃圾进入导致垃圾输出”。
小结
今天我为你讲了数据科学团队的另外一个核心问题,那就是如何对工程流程进行管理。
一起来回顾下要点:第一,我们简单介绍了什么是人工智能项目的工程流程,以及这个概念和项目管理流程的区别;第二,我们分析了人工智能项目工程流程的三个主要方面,包括代码管理的要素,如何开发和部署环境,以及数据管理的要素。
最后,给你留一个思考题,除了我们所提及的工程流程的这三个方面,你还能想到什么其他的方面,在工程流程中也是至关重要的,需要我们在开发中注意呢?

View File

@@ -0,0 +1,69 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
147 数据科学团队怎么选择产品和项目?
上一期内容,我们聊了聊数据科学团队在工程流程方面所需要注意的三大问题,分别是代码管理流程,开发部署环境流程和数据管理流程。
今天,我们来继续讨论数据科学团队发展这个话题,来看另外两个关键问题:如何选择合作产品以及如何选择项目。
如何选择合作产品
选择什么样的产品进行合作,对于一个数据科学或者人工智能团队的发展来说,是一个非常重要的问题,是决定工作能否事半功倍的关键步骤。
作为工程技术团队,很多数据科学或者人工智能团队都需要支持多个产品,或者说是有机会选择产品。一个稳定的产品往往可以让一个人工智能团队得到快速健康的发展,并且能够逐渐形成良性循环,发展到可以支持更多的产品。
那么,什么样的产品是值得合作的产品呢?
我先来说一类需要谨慎合作的产品,那就是全新的产品方向。对于全新的产品来说,公司之前在这个方向没有太多的产品积累,也可能完全没有技术积累。对于这一类项目,我们需要格外小心,特别是当你的团队还在发展的初期。
新产品有一个特点,那就是极大的不确定性。产品范围、需求和时间一般都是不确定的,这些都是一个稳定项目的天敌。另外,还有一个比较棘手的问题,那就是新的产品方向,特别是公司以前从来没有研发过的项目,往往缺乏数据。对于机器学习来说,数据匮乏就是“巧妇难为无米之炊”了。
然而从另外一个角度来说新的产品方向往往又能得到公司高层的重视。毕竟新产品往往是公司“新的赌注”New Bet所以很多时候也能够得到不少团队的支持和资源的倾斜。
那么,在这种情况下,如果你是数据科学团队的负责人,你就要对这个新产品的利弊有一个充分的认识。如果你的团队已经相对比较成熟,有好几个稳定的产品支持,还有一些剩余的资源可以分配,那么接受一个全新的产品也不失为一种尝试,虽然有一定的风险。最坏的情况是这个产品方向完全失败,但是不会对团队产生致命的影响。
了解了这种风险比较高的产品之后,我们来看一看什么类型的产品更值得一个人工智能团队来合作。总结来说,这样的产品一般需要满足以下两个方面。
第一,看方向,这个产品最终是需要数据来驱动的。如果一个产品最终会产生大量的数据,而且这些数据能够表征这个产品方方面面的发展,那么,针对这样的项目,人工智能可以起到巨大的推动作用。
第二,看地位,这个产品是公司的核心发展项目。这一点看似容易识别,但是在一个相对比较大的公司里,有时候反而并不那么容易识别。那怎么判断呢?介绍一个相对比较简单的方法,就是看一个产品是否和公司的利润或者说是公司的核心用户数据有关系。因为从公司的层面看,一个团队的投资回报率很关键,很多时候会以此来决定是否继续支持这个团队的发展。
举个例子,有这么一个产品,虽然不直接产生公司的利润,但是能够帮助公司增长用户,那这个项目也可以算是公司的核心项目。能够支持公司的核心项目,是人工智能团队稳定快速成长的基石。
如何选择项目
选择好了合作的产品之后,一个产品的迭代过程中还会产生很多不同的项目。是不是这些项目都值得做呢?接下来我们就来看一看究竟应该选择什么样的项目来做。
关于项目的选择,我们先有这样一个共识。在团队和产品发展的不同时期,对于如何选择项目应该有不同的考虑。
在这里有一种思维模式可以帮助我们来对不同的项目进行筛选那就是“投资组合”Portfolio的思维。通俗地讲投资组合思维的核心就是“不能把所有的鸡蛋都放在一个篮子里”。
简单来说,我们可以利用四象限法,把不同的项目分为“高投入、高回报”、“低投入、高回报”、“高投入、低回报”和“低投入、低回报”这四种类型。那么,针对这四种不同的类型,我们就需要利用投资组合的思路来选择项目。
从理论上来说,我们希望所有的项目都是“低投入、高回报”的,肯定不希望项目是“高投入、低回报”。那么,从表面上看,对于项目的选择,我们其实并没有太多可以争议的地方。但是,实际的情况是,对于绝大多数项目来说,我们并不知道这个项目属于什么类型,最好的情况也无非是对项目有一个估计,而这种估计很有可能会和真实情况相差甚远。
因此,对于投资组合的思路来说,这不仅仅是一种对于投入和回报的估计,还包括对于不同类型项目的选择。这里呢,我就讲一些在以往工作中积累的项目选择经验。
一般来说对于一个人工智能项目来说特征工程Feature Engineering都是属于“高回报”的项目。对于大多数的类似项目来说特征工程往往能够针对项目带来本质上的提升。寻找到好的特征是一个项目能够持续成功的重要途径。
在“高回报”的情况下我们需要考虑的是这个项目是“高投入”的还是“低投入”的如何评价一个特征工程项目的投入成本呢我们问以下三个问题。这个项目可以基于现在的数据链路Pipeline来做吗是否只是计算一些数据的简单统计量是否只是把每天不同的统计量做一些叠加如果三个问题的答案都是“是”那么这种类型的特征工程项目就属于“低投入”。
在一个产品的早期,应该尽量尝试这样的项目,快速发现有用的,特别是那些能够让产品的效果得到迅速提升的特性。而且,因为特征工程“高回报”的特点,在产品迭代的任何一个时期,我们其实都可以关注某一部分的特征工程项目。只是说,也许在产品的初期,找到一系列特征,或者说挖掘出一系列有效的特征,往往会非常容易;但是在产品的中后期,难度就要大一些。
我介绍的另一个经验可能和你想象的不太一样对于核心算法例如搜索、推荐、广告的改进比如改进排序算法属于“高投入”的项目。这类改进算法项目的一个明显特点就是往往需要有较长时间的研发周期。而且这类项目的升级换代往往需要“基础设施”Infrastructure或者平台级别的变化。也就是说这类项目的投入比较大周期比较长。
当然了这类项目的回报如何其实并不是特别容易估算的。例如我们在特征不变的情况下从线性模型更改到树模型可能会有5%~10%的性能提升。但是更改到树模型之后也许我们还能够加入更多适应于树模型的特性带来后面的10%~20%的提升。因此,如果考虑到一个回报的系列性效果,算法的更改升级还是应该引起我们足够的重视的。
小结
今天我为你讲了数据科学团队的两个核心问题,那就是如何选择产品以及如何选择项目。
一起来回顾下要点:第一,我们聊了聊产品的选择,尽量对新产品持谨慎态度,同时尽量支持并开发公司的核心产品;第二,我们分析了如何选择项目,重点是对四种类型的项目进行一个探讨。
最后,给你留一个思考题,如果我们希望从树模型升级到“深度模型”,这种项目属于我们介绍的四种类型项目中的哪一类呢?

View File

@@ -0,0 +1,81 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
148 曾经辉煌的雅虎研究院
雅虎是最早成功的互联网公司之一,也是最早意识到需要把基础研究,特别是机器学习以及人工智能研究,应用到实际产品中的公司。雅虎从很早就开始招聘和培养研究型人才,雅虎研究院就是在这个过程中应运而生的。
今天我就来说一说雅虎研究院的历史,以及过去十多年间取得的成就,聊一聊如何通过引进高级人才,迅速构建起一支世界级的研发团队。当然,也会聊一聊研究院的衰落。高级研发机构对于企业而言往往是锦上添花的事情,在整个公司产品和视野都欠缺的情况下,也往往避免不了最后衰败的结局。
雅虎研究院的创立
雅虎研究院的故事要从一个叫乌萨马·菲亚德Usama Fayyad的人说起。乌萨马出生在北非突尼斯的迦太基Carthage早年在突尼斯以及其他地中海沿岸国家度过包括中东、非洲以及南欧的一些国家。高中时期在约旦的安曼生活后来在美国密歇根大学度过了他的本科1984年、硕士1986年以及博士1991年生涯。毕业之后乌萨马来到了美国加州南部隶属于美国国家航空航天局NASA的喷气推进实验室Jet Propulsion Laboratory工作一直到1996年。之后加入微软研究院从事数据挖掘的研究工作。
早在1994年乌萨马就和拉马萨米Ramasamy Uthurusamy一起组织了最后一届KDD研讨班然后在1995年他们把这个研讨班升级成了会议并在加拿大蒙特利尔举办了第一届KDD大会First International Conference on Knowledge Discovery in Data。从此KDD大会成了数据挖掘、数据科学以及应用机器学习的顶级会议。
1996年乌萨马又创办了一本叫《数据挖掘和知识发现》Data Mining and Knowledge Discovery的学术期刊并亲自担任主编。这本期刊也渐渐成了数据挖掘领域主要的学术期刊之一。乌萨马本人可以说在20世纪90年代中期就已经开始成为数据挖掘领域重要的领军人物。
进入21世纪乌萨马先是在2000年创立了一家叫Audience Science的数据挖掘公司并担任CEO然后又在2003年创立了一家叫DMX Group的数据挖掘咨询公司后者于2004年被雅虎收购。不久后他成为雅虎的执行副总裁以及首席数据官Chief Data Officer这也是互联网历史上的第一位首席数据官。
因为雅虎在搜索以及广告业务上的扩展乌萨马意识到应该成立一个类似于微软研究院但更偏向于互联网业务的研究组织这个想法得到了公司CEO杨致远的支持。乌萨马当时的首要任务是为研究院物色一位院长。
经过一段时间的寻找他成功邀请到普拉巴卡·拉加万Prabhakar Raghavan来担纲。今天回头来看普拉巴卡无疑成功地引领了雅虎研究院并让其一度成为人人向往的互联网研究机构。当然这跟普拉巴卡本人的经历也密切相关。
首先他本人就是知名的学者参与撰写的经典教科书《随机算法》Randomized Algorithms和《信息检索导论》Introduction to Information Retrieval在学术界享有盛誉。他还是ACM、IEEE的院士也是美国工程院院士这为他招纳学术界权威人士和博士生提供了便捷。加入雅虎之前他已经在IBM研究院以及Verity任职多年IBM的从业经历更是让他对企业文化和工业界的研究机构有了很深的了解。
2005年7月雅虎研究院正式成立普拉巴卡担任研究院负责人向乌萨马汇报。2008年雅虎研究院与之前就在搜索与广告事业部存在的应用科学部门合并。在卡罗尔·巴茨Carol Bartz任职CEO期间普拉巴卡直接给她汇报并且普拉巴卡还曾担任首席战略官。
雅虎研究院的蓬勃发展和辉煌
雅虎研究院组建之后,首要任务当然就是吸引工业界和学术界的知名学者,从而能够组建一个有效的团队。普拉巴卡利用他个人和乌萨马的声望,很快就做到了这点。
比如之前和普拉巴卡在IBM共事的安德鲁·汤姆金斯Andrew Tomkins加入团队担任负责搜索的首席科学家以及搜索方面的副总裁安德鲁后于2009年之后加入谷歌担任工程总监。 再比如曾和普拉巴卡在IBM共事的安德烈·布罗德Andrei Broder2005年加入团队担任负责计算广告方面的副总裁。
安德烈本人大有名头。他在斯坦福大学攻读博士期间师从图灵奖得主高德纳Donald Knuth然后在曾经名噪一时的第一代搜索引擎公司AltaVista担任首席科学家之后加入位于纽约的IBM研究院组建企业级搜索平台。和普拉巴卡一样安德烈也是ACM和IEEE的双料院士。2012年安德烈加入谷歌担任杰出科学家 Distinguished Scientist
我们这里简单列举一些曾经在雅虎研究院工作过的知名学者,我们便可一览其盛况:
Ronald J. Brachman哈佛大学计算机科学博士加入雅虎研究院之前长期于贝尔实验室工作曾担任贝尔实验室人工智能研究部的负责人。1996年之后担任AT&T实验室通信服务研究中心副总裁。2005年加入雅虎研究院协助普拉巴卡进行管理并于2012年到2016年间担任雅虎研究院首席科学家以及负责人。Ronald曾任AAAI主席。2016年之后担任纽约康奈尔科技大学的Jacobs Technion-Cornell研究院院长。
Yoelle Maarek以色列理工大学计算机科学博士加入雅虎研究院之前曾任IBM研究院的杰出工程师和谷歌的工程总监。历任雅虎研究院以色列分部的负责人、高级研究总监并在2016年Ronald离开之后任雅虎研究院的负责人。
Jan Pedersen斯坦福大学统计学博士。2002年加入AltaVista担任首席科学家在安德烈之后。2003年加入雅虎研究院担任搜索和广告方面的首席科学家在安德鲁·汤姆金斯之前。2009年加入微软担任Bing核心搜索部门Core Search的首席科学家。2017年加入Twitter担任数据科学副总裁。
Ben Shahshahani普渡大学电气工程博士。曾在Nuance Communications担任工程总监。2005年加入雅虎研究院之后历任负责搜索广告的高级总监以及搜索与媒体科学组的副总裁。2012年加入谷歌任工程总监。2014年回到雅虎任广告科学方面副总裁。
Ricardo Baeza-Yates滑铁卢大学计算机科学博士ACM和IEEE双料院士信息检索和搜索方面的权威著有《现代信息检索》 Modern Information Retrieval一书。他在雅虎研究院担任拉美和欧洲分部的副总裁直至2016年也是智利科学院以及工程院的院士。
Ravi Kumar康奈尔计算机科学博士加入雅虎研究院之前在IBM 研究院从事数据挖掘算法的研究。2005年加入研究院之后担任首席研究科学家。2012年加入谷歌担任高级主任研究科学家Senior Staff Research Scientist。他的论文引用数达3万次以上。
Evgeniy Gabrilovich以色列理工大学博士在雅虎研究院担任首席研究科学家并且担任自然语言处理方向研究的负责人。2012年加入谷歌担任高级主任研究科学家。2012年当选ACM杰出科学家ACM Distinguished Scientist
Deepak Agarwal康涅狄格大学University of Connecticut统计学博士加入雅虎研究院之前在AT&T担任高级研究科学家一职。2006年加入雅虎研究院担任首席研究科学家主要研究推荐系统相关的内容。2012年加入LinkedIn担任人工智能和机器学习方面的副总裁。
Alexander Smola柏林理工大学计算机科学博士加入雅虎研究院之前任澳大利亚国立大学教授。2008年加入雅虎研究院后任首席研究科学家Principal Research Scientist。2013年加入卡内基梅隆大学任教授一职。2016年加入亚马逊担任机器学习方面的总监。他的论文引用数达8万次以上。
Jianchang (JC) Mao密歇根州立大学计算机科学博士加入雅虎研究院之前曾在IBM 研究院任职还曾担任Verity的首席软件架构师。2004年加入雅虎之后任广告科学方面副总裁。2012年加入微软之后先后担任Bing的多个职务并于2016年被提升为公司副总裁。他的论文引用数达1万次以上。
Raghu Ramakrishnan德克萨斯大学奥斯汀分校计算机科学博士加入雅虎研究院之前担任威斯康星大学教授。2006年加入雅虎研究院之后任云计算方面的副总裁。2012年加入微软之后一直担任CTO负责云计算领域。他的论文引用数达3万次以上。
当然,在雅虎研究院工作过的知名人士还有很多,这里无法一一列举。不过我们可以看出,不少人在离开雅虎之后,依然在业界发挥着不小的作用。
除了招揽到一批优秀人才雅虎研究院也发表了一系列有价值的研究成果在很短的时间内建立了学术研究上的威望。在10年间据不完全统计雅虎研究院的学者获得过两次信息检索顶级会议ACM SIGIR的最佳论文、3次数据科学和数据挖掘顶级会议ACM KDD 的最佳论文、两次机器学习顶级会议ICML的最佳论文、两次推荐系统顶级会议ACM RecSys的最佳论文、两次信息检索以及网络信息挖掘的权威会议ACM WSDM的最佳论文、两次信息检索和数据库领域顶级论文ACM CIKM最佳论文以及一系列有影响力的最佳论文奖项涵盖了搜索、广告、推荐系统、数据挖掘、机器学习、人机交互等诸多方面为互联网研究和发展做出了重大贡献。
可以说在非常短的时间内,雅虎研究院就用卓越的研究成果向世人证明了这个团队和组织的实力。曾经在某一段时期内,世界各国的优秀研究人员和博士毕业生都希望跻身雅虎研究院的研发队列。
雅虎研究院逐渐成为历史
2012年是雅虎历史上格外动荡的一年。先是公司CEO卡罗尔·巴茨在上一年的9月份被董事会解雇然后经历了短暂的临时CEO——蒂姆·莫尔斯Tim Morse之后新CEO斯科特·汤普森Scott Thompson在1月上任5月份就因学历造假丑闻离职罗斯·莱文索恩Ross Levinsohn之后担任公司临时CEO直至7月。然后玛丽莎·梅耶尔Marissa Mayer加入公司担任CEO。短短不到一年的时间里共有5个人担当了CEO的职位。
在这个过程中普拉巴卡离职并加入谷歌很多之前追随他的人也先后加入谷歌。普拉巴卡离开后罗纳德·布拉赫曼Ronald J. Brachman接过了研究院领导人的位置并在2012到2016的4年间为玛丽莎重新招募了超过100名博士科学家。
2016年2月雅虎宣布研究院不再作为一个独立实体而存在罗纳德离职所有研究人员被分散到各个工程部门依然保留雅虎研究院的对外旗号耶艾尔·玛瑞克Yoelle Maarek担任负责人。2017年雅虎和Verizon合并雅虎作为一个独立的公司成为历史。
雅虎研究院逐渐淡出历史舞台,这固然有公司高层频繁更换的原因,也有一些更加深层次的原因。研究院的成果往往都需要一定时间才能直接在产品中体现出来,因此,虽然在技术上研究院能够帮助公司提升水平,但是实际产品的效果未必就一定能够受到用户的青睐。
例如,研究院曾经投入了大量人力物力,利用机器学习来提高搜索引擎的搜索品质。可以说,雅虎是最早将人工智能和机器学习技术大规模应用在搜索引擎上的公司。但是搜索引擎的好坏很多时候是一个产品、技术、设计的综合体现,雅虎研究院研发的算法并没有在产品的综合表现中挣得额外加分。
相似的例子还包括雅虎研究院在早期就投入了很多力量研发广告平台,甚至包括安德烈·布罗德本人到斯坦福大学开设了世界历史上第一门计算广告学的课程。然而,雅虎整个平台的产品都在下滑,因此广告平台受到了额外的压力。虽然研究院的科学家们在算法和模型上做出了很多创新,也在一定时间内带来了不小的收益,但都无法改变整个公司产品线运营不佳的情况。于是,雅虎研究院的成果在雅虎整体业绩不理想、公司产品缺乏想象力的大背景下显得杯水车薪,并不能从整体上扭转公司的颓势。在公司进入动荡之后,研究院对于高层领导来说,往往也就不是公司的重点发展对象了,研究院的瓦解也就成了必然。
小结
今天我为你分析了雅虎研究院的兴衰。一起回顾下要点:首先,雅虎研究院曾通过引进高级人才的方式,迅速构建起了一支世界级的研发团队,并发表了一系列有价值的研究成果,建立起在学术研究上的威望,创造了研究院曾经的辉煌;其次,因高层变动以及一些深层次的问题,雅虎研究院没有摆脱最后衰落的结局,一切辉煌终成历史。
最后,给你留一个思考题:到底什么样的企业环境能够最好地发挥研究院的成果,又是怎样的研发流程能够使研究院成为公司新动力的源泉?雅虎研究院在当年并没有找到答案。不知道随着最近一批互联网新贵纷纷成立人工智能研发团队的契机,大家是否能够找到更好的研究院运作模式。

View File

@@ -0,0 +1,63 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
149 微软研究院:工业界研究机构的楷模
随着人工智能的兴起,各大公司纷纷建立起自己的研发团队,来对这一重要技术领域进行探索。一些有一定规模的公司还会成立更加精英的“研究院”或者“实验室”,吸引业界顶尖人才到自己的公司进行基础的和前沿的研发工作。
那如何来组建这样的机构呢?有没有可以参考的类似机构呢?答案是有这样一个机构,甚至很多公司会不惜重金去聘请这个机构的研究和管理人才。今天我们就来聊聊这个机构,那就是“微软研究院”。
微软研究院自1991年成立以来已经走过了接近40年的岁月。依托于微软这个软件时代的巨头微软研究院也和微软公司一起经历了从软件时代到互联网时代、到移动时代、再到人工智能时代的重大变迁见证了这几个时代中前沿科技对公司的影响。
微软研究院的历史有多辉煌呢至少有五位图灵奖得主曾经在微软研究院工作过包括发明了“霍尔逻辑”和快速排序的托尼·霍尔Tony Hoare爵士、在数据库领域有卓越贡献的吉米·格雷Jim Gray、个人计算的先驱巴特勒·兰普森Butler Lampson、个人电脑的先驱查尔斯·萨克尔Charles P. Thacker和在分布式算法方面有突出贡献并发明了LaTeX排版语言的莱斯利·兰波特Leslie Lamport。研究院里的美国科学院院士、工程院院士、IEEE院士以及其他各类最高学术成就获得者可以说是数不胜数。更别提发表了2万多篇论文每年都有各种激动人心的项目的研发。从很多角度来看微软研究院都堪称工业界研究机构的模板。
接下来我们就一起来梳理一下微软研究院这个具有传奇色彩研究机构的传奇故事。
微软研究院的成立
虽然微软研究院在工业界研究机构中有着显赫的地位,但是其最早的发展则鲜为人知。我们了解微软研究院成立的早期历史,也是为了体会一下缔造者们的思想和视野,以及他们是如何一步一步地把一个小的团队发展成为了工业界的典范的。
先介绍第一个关键人物他的名字叫内森·米尔沃德Nathan Myhrvold。1996年他成为了微软历史上首位首席科技官CTO。米尔沃德说服了比尔盖茨等微软高层来建立一个研究性质的机构。这个决定其实让很多人都感到出乎意料那米尔沃德是怎么想的呢
他认为,微软之前的成功是把大型计算机的一些经验移植到了当时方兴未艾的小型计算机,也就是个人电脑上。这样把现成经验进行产品转换的思路迟早会让微软黔驴技穷,应该及早着眼于一条能够“持续造血”的路,所以微软需要有一个长期专注基础研究的部门。
米尔沃德不仅仅只是提出了这样一个洞见,他还为基础研究的一些特性拟定了基调。首先,基础研究或者说是更高级的研发工作和产品开发有本质的区别。其次,有时候基础研究并不一定能给母公司带来足够的好处,但这种失败率其实和普通的产品研发也很类似,因此没有必要因为基础研究的一些失败而过分敏感。
同时,米尔沃德对基础研究能够给公司带来什么样的好处也做了深刻思考,他总结了三点:第一,基础研究能够让公司在时间上获得接触到最新科技的优势;第二,能够帮助公司更广泛地接触先进技术;第三,能够给公司带来知识财产,比如专利等。
当这个在微软建研究机构的想法得到认同后米尔沃德希望为这个新的研究部门找一个领军人他想到了理查德·拉希德Richard Rashid这是我们要介绍的第二个关键人物。
拉希德于1974年从斯坦福大学毕业获得数学和比较文学的学士学位。1980年他在罗杰斯特大学University of Rochester获得计算机科学博士学位然后成为了卡内基梅隆大学计算机系的一名教授。在担任教授期间他在计算机系统、网络系统、人工智能以及编程语言等诸多领域发表了众多论文。除了论文之外他比较有影响的工作还包括一款叫作“Mach”的计算机操作系统微内核。
米尔沃德通过共同的好友找到拉希德那已经是1991年夏天的事情了。拉希德的第一反应是觉得这是一个玩笑。1991年微软还不是今天这样的大公司。一家规模并不大的公司要成立一个研究机构让人感觉不太现实。
拉希德和家人被邀请到微软访问,和比尔盖茨以及其他微软的管理高层见了面。他原以为微软的人并不明白建立一个研究部门要干什么,也不一定真心希望有这么一个研究机构。所以,当发现比尔盖茨非常支持并且非常真诚地理解建立研究机构的需求时,拉希德还是相当吃惊的。然而,即便如此,他还是拒绝了这个邀约,因为他当时觉得对这个职位并不感兴趣。
米尔沃德也没放弃,在接下去的一段时间,他把拉希德的电话打烂了。恰好在这个时候,拉希德也迎来了他职业生涯的一个选择关口,卡内基梅隆大学希望他出任计算机学院的院长。这样,他就需要在两份工作邀约之间做一个抉择。
时间到了1991年的8月31日拉希德决定出任微软研究院的院长。从1991年到2013年拉希德都是微软研究院的领导人。这个研究机构在他带领下的20多年时间里发生了惊天动地的变化。
微软研究院模式
刚刚我们回忆了微软研究院历史中最初的一个片段。但是从这个片段中,我们其实已经体会到了这个组织之所以成功的一些因素,这些因素是在最开始就深深根植到了组织的架构中的。
第一个要素是研究院的领导人一定要有深厚的研究背景。成立研究院的时候,米尔沃德第一时间想到的是到学术界找到一个学术权威。实践告诉我们,正是拉希德的加入,让微软研究院在招收顶级人才方面有着无与伦比的优势。当然,是不是任何一个学术大家都胜任这样的工作呢?这是另外一个值得我们思考的问题。
具体来说拉希德带来的优势有哪些呢一方面他可以借助曾经是卡内基梅隆大学教授这个身份从学校吸引人才另一方面他在学术界的朋友也会因此加入。实际上拉希德决定加入微软研究院后第一个电话就打给了他在IBM研究院的一个好友邀请他加入微软。而拉希德卸任之后接手微软研究院的彼得·李Peter Lee也曾经是卡内基梅隆大学计算机系的主任。
由此看来,虽然米尔沃德在一开始颇费了一番工夫才把拉希德纳入微软,但是后续的招聘工作就相对顺利起来。类似地,李开复到北京建立微软亚洲研究院,基本上也是一样的思路。
第二个要素就是研究院这样的部门必须要有公司最高层的一致支持。这种支持还必须是一种真诚的支持。试想没有米尔沃德和比尔盖茨以及微软高层和拉希德的真挚交流拉希德不可能选择加入微软研究院那这个机构是否还存在可能就是另外一番光景了。微软高层对研究院的支持不是一朝一夕而是30多年来一直如此。并且在最近的人工智能浪潮下这种支持只增不减这也是这个机构能够成功的一个重要因素。
第三个要素也就是公司的高层一定要明确研究院究竟会对公司造成什么样的影响或者说要对研究院的产出有一个合理预期。从这一点来说微软的早期领导人非常明确地认识到基础研究和一般的产品开发是有区别的并且对基础研究的失败率有一个完整的理解。这一点是非常惊人的。对于1991年的微软就能有这样一种非常不容易的状态并且还能够一致保持这样状态这也许就是这个机构和这家公司几经沉浮依然茁壮发展的秘诀。
小结
今天我和你一起简单回顾了微软研究院早期的一些不为人知的历史,并归纳了微软研究院成功的三个要素。
最后给你留一个思考题微软最近又在研究院的基础上成立了一个全新的AI部门你觉得原因是什么这个部门和研究院是不是有重叠呢

View File

@@ -0,0 +1,95 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
150 复盘 6 数据科学家与数据科学团队是怎么养成的?
今天我准备了24张知识卡和你一起复盘数据科学家养成和数据科学团队的养成这两个模块。在这两个模块里我们一共讨论了8个话题从方方面面分享了数据科学家所需具备的技能也从组建一个团队的角度出发让你更了解自己在团队中的角色最后我们还聊了雅虎研究院等知名团队帮你拓展视野。
提示:点击知识卡跳转到你最想看的那篇文章,温故而知新。
数据科学家基础能力
数据科学家高阶能力
数据科学家职场话题
数据科学家套路
数据科学团队基础
数据科学团队招聘
数据科学团队高级话题
著名数据科学人工智能团队漫谈
积跬步以至千里
最后,恭喜你学完了这个模块的所有内容。不管你是一名数据科学或人工智能的初学者,还是已经积累很多宝贵的经验,亦或要组建自己的数据科学或人工智能团队,都希望这一模块的内容对你有所帮助和启发。
学无止境选择了人工智能这条路就意味着我们选择了一种生活方式。今天就让我们以几句诗结尾作者是我很喜欢的美国诗人罗伯特·弗罗斯特Robet Frost
Two roads diverged in a wood, and I—
I took the one less traveled by,
And that has made all the difference.
树林中分出两条路,而我——
我选择了那条少有人走的路,
从此一切与众不同。

View File

@@ -0,0 +1,68 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
150 聊一聊谷歌特立独行的混合型研究
上一讲我们介绍了微软研究院发展早期的一段故事,一起讨论了为什么说微软研究院是工业界研究院的楷模。
今天我们来看另外一种“混合型”的工业界研究机构模式,聊一聊谷歌研究院,一起来讨论这种模式是不是更加适合互联网企业的需求。
研究背景起家的谷歌
谷歌的创立比微软晚了将近20年但两个公司有一些相似的地方其中之一就是创始人都是中断了学业投身到创业的浪潮中。不过拉里·佩奇Larry Page和谢尔盖·布林Sergey Brin当时是在攻读博士学位关于如何进行网页搜索的最初想法是从他们的博士研究课题衍生出来的[1]。由此可见,谷歌从一开始就和研究类项目有着千丝万缕的联系。
佩奇和布林的论文发表在1998年的国际万维网WWW大会上。这篇论文介绍了PageRank算法在当时这简直就是一个石破天惊的算法。那它和当时其他搜索引擎的关键技术相比独特之处在哪里呢计算网页的相关度或者说是重要度完全不依赖文本信息而仅仅依靠由网页之间关系组成的图而且能够得到一种非常稳定的排序。或许就是因为这个独特的算法让两个斯坦福大学的年轻人放弃了继续攻读博士学位的想法转身在硅谷找了一个车库从而演绎了一个传奇的创业故事。
或许就是因为创始人的背景,我们可以看到谷歌对学术界的最新研究成果有一种特殊的青睐,在谷歌发展的路上,屡屡上演收购案例,收购的很多公司都是因为有一些研究成果而成立的小公司。
举几个例子。同样来自斯坦福的博士毕业生塔哈尔·哈维利瓦拉Taher H. Haveliwala改进了PageRank算法[2]他创办的公司在2003年的时候被谷歌收购。2010年达蒙·霍洛维兹Damon Horowitz和瑟潘达·卡姆瓦尔Sepandar D. Kamvar在当年的国际万维网大会上发表了一篇“社交搜索”Social Search的论文论文标题都跟佩奇和布林当年发表的PageRank论文有异曲同工之妙。两个作者所在的公司很快就被谷歌收购了。最近的例子就是我们都熟知的杰弗里·辛顿Geoffrey Hinton所创立的公司以及位于英国的DeepMind公司也都是因为在深度学习方面的重要贡献被谷歌先后收购。
混合型工业界研究
尽管谷歌对于学术研究有一种天然的亲近,然而在很长一段时间里,谷歌其实并没有真正成立完全独立的基础研究部门。所以很多学术圈的研究人员,还有工业界的研究同仁,都对谷歌产生了一种误解。
2012年的时候谷歌的研发总监彼得·诺维格Peter Norvig发表了一篇文章[4]来介绍谷歌的研究模式。
谷歌的研究模式到底是怎样的呢简单来说就是让研究和产品的研发紧密结合起来而不完全建立独立运行的研究院。当然这个模式在收购了DeepMind之后算是被打破了。但是在谷歌20年的发展历史上混合型研究一直是谷歌研发的主流。
诺维格在文章中解释道,谷歌研究工作的一大重要目的就是为终端用户带来重要的和实际的好处。很明显,这一目的和纯粹的学术研究有很大的距离。我们来看微软研究院和雅虎研究院,它们的重要贡献指标就是学术论文发表的质量和数量。
我们再具体来看看这两种道路的差异。
传统的学术研究是这样的:研究人员首先构想一个学术课题,然后在一种比较受限的环境中对这个课题进行研究。这里说的受限的环境,往往是指数据并不是全量数据,而是采样过后的数据,这些数据能够在学者们的笔记本或者小型集群中进行计算。甚至在有的情况下,研究人员会使用完全虚拟的数据。另外,在这种受限的环境中进行研究还会带来这样一个问题,由于开发的代码和软件不需要重复使用,也不需要开发生产环境的代码,所以这些代码质量都相对较低。
那谷歌的研究工作是怎样做的呢?谷歌研究要求从一开始就使用生产环境来编写代码。这些代码和普通的产品代码没有区别,也使用和一般产品线代码相同的数据、相同的流程。这样,一旦有了研究成果就可以无缝接入现在的产品线中。这样的要求对于研究者来说,其实是拔高了研究的难度,但是对于研究成果和产品对接来说就将困难降低到了最小。
总结一下,让工程和研究结合在一起,并且有意模糊这两者的区别,就是谷歌混合型研究的核心思想。工程师和科学家在同样的项目中工作,大家都面临同样的限制,这样就可以让研究的课题不至于完全天马行空,而是能够落到实处。
混合型研究的思考
我们上面介绍了谷歌的研究背景以及基于此慢慢形成的混合型研究模式。为什么这条道路在谷歌就能够落地实施呢?我想这里面有一个非常重要的先决条件,这是诺维格的文章里没有提到的,那就是大量高素质人才的涌入。
在这些人才中,博士生比比皆是,甚至有很多教授。所以,谷歌的工程团队中有很多博士生担任着普通工程师的角色。说得通俗一点,谷歌用博士生在干硕士生甚至是本科生就可以胜任的工作。一个团队中的工程师和科学家并没有本质的区别,这才使得任何一个科研想法都可以很容易地在工程层面得以实现。
由此我们可以看到从某种意义上来说谷歌其实并不需要单独的研究机构自己工程团队的水平就已经非常出色了。我们从TensorFlow、语言翻译等知名项目就可以看出来这些项目都是工程团队达到了很高的研究水平。
当然在这种模式下谷歌的基础研究其实是受限的。在收购了DeepMind后谷歌也开始依靠这样单独的研发机构来推动和产品结合得不那么紧密的研究方向。
小结
今天我为你介绍了谷歌与众不同的混合型研究模式。这种模式对工程团队的水平要求比较高,如果没有高水平的工程团队,研究人员和工程师就会产生隔阂,沟通不畅,研发就会有问题。从这个角度来看,建立单独的研究机构或许更能实现很多公司的初衷。
讲到这里,如果我们要借鉴谷歌的这种混合型模式,你觉得挑战是什么?如果有了高水平工程团队这一保障后,你觉得想要成功还有什么挑战?
欢迎你给我留言,我们一起讨论。
参考文献
Sergey Brin and Lawrence Page. The anatomy of a large-scale hypertextual Web search engine. Proceedings of the seventh international conference on World Wide Web 7 (WWW7), Philip H. Enslow, Jr. and Allen Ellis (Eds.). Elsevier Science Publishers B. V., Amsterdam, The Netherlands, The Netherlands, 107-117, 1998.
Taher H. Haveliwala. Topic-sensitive PageRank. Proceedings of the 11th international conference on World Wide Web (WWW 02). ACM, New York, NY, USA, 517-526, 2002.
Damon Horowitz and Sepandar D. Kamvar. The anatomy of a large-scale social search engine. Proceedings of the 19th international conference on World wide web (WWW 10). ACM, New York, NY, USA, 431-440, 2010.
Alfred Spector, Peter Norvig, and Slav Petrov. Googles hybrid approach to research. Commun. ACM 55, 7 (July 2012), 34-37, 2012.

View File

@@ -0,0 +1,65 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
151 精读AlphaGo Zero论文
长期以来,利用人工智能技术挑战人类的一些富有智慧的项目,例如象棋、围棋、对话等等都被看做人工智能技术前进的重要参照。人工智能技术到底是不是能够带来“拟人”的思维和决策能力,在某种意义上成了衡量人工智能水平以及整个行业发展的试金石。
在这些项目中,围棋可以说是一个难度很大的项目,更是饱受关注。一方面,围棋的走棋可能性非常多,且棋局变化多端,这似乎给计算机算法带来了很大的困难。另一方面,围棋在一些国家和地区(比如中国、日本和韩国)不仅仅是一个智力竞技项目,更有一系列理念、人格等全方位的配套文化概念,使得人们对此产生怀疑,人工智能模型和算法是否能够真正学习到有价值的信息,而不仅仅是模拟人的行为。
2015年来自谷歌DeepMind团队的AlphaGo打败了职业二段樊麾在这之后短短两年的时间里该团队的人工智能技术迅猛发展不仅以4比1击败韩国的李世石九段更是在今年战胜了即时世界排名第一的柯杰可谓战胜了被誉为“人类智慧皇冠”的围棋项目。
前段时间DeepMind团队在《自然》杂志上发表了AlphaGo的最新研究成果AlphaGo Zero这项技术更是把人工智能在围棋上的应用推向了一个新高度可以说是利用计算机算法把围棋的棋艺发展到了一个人类之前无法想象的阶段。
今天我就来带你认真剖析一下这篇发表在《自然》杂志上的名为《不依靠人类知识掌握围棋》Mastering the Game of Go without Human Knowledge的论文 。标题中的不依靠人类知识当然有一点夸张,不过这也正是这篇论文的核心思想,那就是仅用少量甚至不用人类的数据来驱动人工智能算法。在之前的很多人工智能模型和算法来看,这是一个巨大的挑战。
作者群信息介绍
文章共有17位作者都来自伦敦的谷歌DeepMind团队。AlphaGo的第一篇论文也是发表在《自然》杂志当时有20位作者比较起来这篇论文的作者数目减少了。另外虽然两篇论文的主要作者都是三名共同贡献但是这三个人发生了一些变化。下面我就介绍一下本文的三个主要作者。
第一作者大卫·希尔维David Silver目前在DeepMind领导强化学习Reinforcement Learning的多项研究。大卫的经历很传奇早年曾在南非生活和学习1997年从剑桥大学毕业后先到一家名为Elixir Studios的游戏公司工作了好几年。然后到加拿大的阿尔伯塔大学University of Alberta学习机器学习特别是强化学习。他当时就开始尝试开发用计算机算法来进行围棋博弈。大卫2013年全职加入DeepMind之后迅速成了DeepMind在强化学习特别是深度学习和强化学习结合领域的领军人物。
第二作者朱利安·施瑞特维泽Julian Schrittwieser是谷歌的一名工程师他长期对围棋、人工智能感兴趣。值得注意的是朱利安这次成为主要作者而在之前的第一篇文章中还只是普通贡献者可以推断在AlphaGo Zero这个版本里有相当多的工程优化。
第三作者卡伦·西蒙彦Karen Simonyan是DeepMind的一名科学家长期从事计算机视觉和人工智能技术的研究。他来自2014年DeepMind收购的一家名为Vision Factory的人工智能公司。卡伦最近几年的论文都有高达几千的引用量。
论文的主要贡献
首先这篇论文的主要“卖点”就是较少利用、或者说没有利用传统意义上的数据驱动的棋局。第一篇论文里的AlphaGo以及后面的一些版本都是主要利用人类的棋局作为重要的训练数据采用监督学习Supervised Learning和强化学习结合的形式。在AlphaGo Zero这个版本里人类的棋局被彻底放弃而完全依靠了强化学习从完全随机Random的情况开始“进化”出了具有人类经验的各种走法的围棋策略并且达到了非常高的竞技水平。可以说这是本篇论文的核心贡献。
在核心的模型方面也有不少改进比如一个很大的改进就是把策略网络Policy Network和价值网络Value Network合并这样就能更加有效地用简单统一的深度模型来对这两个网络进行建模。另外整个模型的输入特征也有变化从深度模型提取特征外加人工挑选特征到这篇文章提出的完全依靠棋盘的图像信息来自动抓取特征可谓是减少人工干预的一个重要步骤。
文章的另一大看点是实验结果。作者们展示了新的AlphaGo Zero模型能够战胜之前很多版本的模型最令人惊奇的可能莫过于AlphaGo Zero在“自学”的过程中还“悟”到了很多人类在围棋学习过程中领悟的棋局招数。
论文的核心方法
AlphaGo Zero模型的核心起源于一个简单的深度网络模型。这个深度网络的输入是棋盘当前位置的表达Representation以及过去的历史信息输出一个走子的概率以及对应的价值。这个价值是用来描述当前棋手能够赢的概率。刚才我们已经说了这个深度网络集合了策略网络和价值网络形成了这么一个统一的评价整个棋盘的神经网络。在具体的网络架构方面AlphaGo Zero采用了计算机视觉领域最近流行的残差架构ResNet可以说也是这个方法的一个小创新。
有了这个基本的神经网络之后作者们就需要和强化学习结合起来。具体来说在每一个位置的时候算法都会去执行一个蒙特卡罗树搜索Monte Carlo Tree Search对当前的神经网络模型输出的走子策略进行一个修正或者可以认为是“加强”。这个蒙特卡罗树搜索的输出结果依然是走子的概率但是这个概率往往比之前单从神经网络得到的要强。然后更新神经网络的参数使得参数尽可能地接近蒙特卡罗树搜索的结果。
那么,什么是蒙特卡罗树搜索?简单来说,就是我们从当前的棋盘情况出发,对整个棋盘产生的所有可能性进行有限制情况的搜索,也就是说,不是“穷举法”。大体说来,从某一个可能性走到下一个可能性主要是依靠下一个可能性发生的概率,以及通过神经网络来判断是否能赢的可能性。
整个算法最开始的时候是从随机的位置初始化然后通过对神经网络的更新以及每一个迭代通过利用蒙特卡罗树进行搜索从而找到更加合适的神经网络模型的参数整个算法非常简单明了。不管是结构上还是复杂度上都比之前的版本要简洁不少。文章反复强调公布的算法可以在单机上运行基于Google Cloud的4 TPU机器相比于最早的AlphaGo需要使用176个GPU也可以看到整个模型的进化效果。
方法的实验效果
AlphaGo Zero的实验效果是惊人的。从模拟中看大约20小时后这个版本的模型就能够打败依靠数据的监督学习版本的AlphaGo了。而到了40小时后这个版本已经可以打败挑战了李世石的AlphaGo。也就是说不依靠任何人类棋局AlphaGo Zero在不到2天的运算时间里就能够达到顶级的人类水平。
除了可以打败之前的AlphaGo版本以外这个版本相比于监督学习的版本在大约20小时以后也可以更好地预测人类对战的走子。并且随着训练时间的推移这种预测的准确性还在不断提升。
刚才我们也提到了AlphaGo Zero在自我训练的对战中在不依靠人类数据的情况下的确是发现了相当多的人类熟悉的对战套路。然而有一些人类在围棋历史中较早发现的套路却没有或者较晚才在AlphaGo Zero的训练历史中习得。这打开了很多问题比如发生这样情况的原因究竟是什么等等。
最后作者们展示了AlphaGo Zero非常强大的实战能力在和之前最强的AlphaGo版本也就是AlphaGo Master的对战中AlphaGo Zero取得了100比0的绝对优势。而相同的AlphaGo Master与人对弈的成绩是60比0。
小结
今天我为你讲了发表在《自然》杂志上的这篇关于AlphaGo Zero的论文这篇文章介绍了一个简洁的围棋人工智能算法结合深度学习和强化学习不依靠人类的信息。
一起来回顾下要点:第一,关注这篇文章主要作者的信息,我们可以推断出文章的一些变化方向。第二,这篇文章有两大看点,一是很少或者几乎没有利用人类的棋局数据,二是得到了显著的实验结果。第三,文章提出的核心模型将策略网络和价值网络合并,与强化学习相结合。
最后给你留一个思考题有人说AlphaGo Zero并不是完全不依靠人类信息比如围棋本身的规则就是很强的监督信息再比如不管每一步的走动如何棋局最后是输是赢依然是很强的信息。那么AlphaGo Zero到底是不是还是依赖了很强的数据呢我们能不能把AlphaGo Zero看做是监督学习的产物呢你怎么看

View File

@@ -0,0 +1,61 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
152 2017人工智能技术发展盘点
今天是大年初一,在这里先给你拜个年,祝新年新气象,新年新开始!
在今天这个辞旧迎新的日子里,我们对过去一年的人工智能技术发展做一个简单的盘点,梳理思路,温故知新。
2017年对于人工智能整个领域的发展是举足轻重的一年。这一年人工智能的各个领域都蓬勃发展我们目睹了一些在AI发展史上的标志性事件。比如从人工智能的技术上看人工智能系统AlphaGo Master与人类世界实时排名第一的棋手柯洁展开围棋人机对决最终连胜三盘从人工智能的投入上看很多互联网公司都先后成立单独的人工智能研发机构像阿里巴巴的达摩院从云服务和人工智能结合的发展来看2017年谷歌在这一方向发展迅猛不仅在中国开设了研发中心还宣布已经有超过万家企业和组织正在使用谷歌的人工智能接口。
今天我希望能够从几个关键领域和发展方向出发,在繁多的科技进步中,理清关键信息,对过去一年的产业动态和发展做出点评,给你一个清晰而简单的信息参考。
人工智能在棋牌上的迅猛发展
2017年的一个标志性的事件无疑是AlphaGo在围棋这项运动中的“收官”表现。虽然2016年AlphaGo战胜李世石之后很多人依然对人类能够在围棋这个古老的运动中有所发挥保留着期望也给予其他围棋选手以希望。然而5月27日AlphaGo Master与当时人类世界实时排名第一的棋手柯洁展开人机对决并且直接连胜三盘可以说这个结果完全摧毁了人类在这个项目上的希望。随后AlphaGo团队的负责人德迈斯⋅哈萨斯Demis Hassabis宣布乌镇围棋峰会将是AlphaGo参加的最后一场赛事这也意味着AlphaGo以完美的表现“收官”。
几个月后的10月DeepMind团队在《自然》杂志上发表了一篇文章介绍了AlphaGo Zero一个没有用到人类棋局数据的AlphaGo比以前任何击败人类的版本都要强大。通过跟自己对战AlphaGo Zero经过3天的学习以100:0的成绩超越了AlphaGo Lee的实力21天后达到了AlphaGo Master的水平并在40天内超过了所有之前的版本。这种完全不依靠人类棋局的办法并且能够通过自我训练达到最高人类水平可以说是让人工智能界目瞪口呆。我们在之前的分享中曾经详细介绍了这篇论文的核心内容[精读AlphaGo Zero论文])。
从2016年开始到2017年年底短短一年多的时间内AlphaGo经历三次重大进化并以非常完整的形式在《自然》杂志上总结最后成果不得不让人惊叹人工智能在这一方向上发展的神速。
另外一项成就和AlphaGo在围棋上所取得的成就旗鼓相当那就是来自卡内基梅隆大学团队的“利不拉图斯”Libratus在宾夕法尼亚州匹兹堡的“里维斯”Rivers赌场战胜四位德州扑克顶级选手获得最终胜利。这个胜利背后的一些原理已经被团队发表在了NIPS 2017的论文中并且这篇论文也获得了NIPS 2017的最佳论文。我们在之前的NIPS 2017最佳论文推荐中也介绍了这方面的内容[精读NIPS 2017最佳研究论文之三如何解决非完美信息博弈问题])。相比于围棋来说,德州扑克这种非对称信息博弈的难度应该说更大,而卡内基梅隆大学团队的成绩在未来应该会有更大的发挥空间。
计算机视觉的发展
自从和深度学习紧密结合以来计算机视觉在最近的56年里迅猛发展。2017年在像素级别的分割工作上有了一个不错的进展。通俗地讲就是给定一个输入的图像我们希望能够不仅分析这个图像里究竟有哪些物体还能够对于图像中的每一个像素知道其属于哪一个物体也就是我们经常所说的把物体从图像中“抠”出来。
来自Facebook人工智能研究院的明星团队在ICCV上的两篇最佳论文可以说给这个问题提供了非常漂亮的解决方案。
第一篇的重要进展是Mask R-CNN这篇文章中作者们提出了“两个阶段”的策略。第一个阶段叫做“区域提交网络”Region Proposal Network目的是从图像中提出可能存在的候选矩形框。第二个阶段从这些候选框中使用一个叫RoIPool的技术来提取特征从而进行标签分类和矩形框位置定位这两个任务。Mask R-CNN主要是针对第二部分进行了更改。也就是说不仅仅在第二部分输出区域的类别和框的相对位置同时还输出具体的像素分割。
和很多类似工作的区别是像素分割、类别判断、位置预测是三个独立的任务并没有互相的依赖。这是作者们认为Mask R-CNN能够成功的一个重要的关键。之前的一些工作像素分割成为了类别判断的依赖从而导致这几个任务互相有了干扰。我们在介绍ICCV 2017最佳论文中已经对这篇文章有了详细的论述[精读2017年ICCV最佳研究论文]()。
另外一个重要工作则是“焦点损失Focal Loss这也是图像分割的一个重要进展。如果说Mask R-CNN是“两个阶段”的的代表作的话焦点损失则是在“一个阶段”工作上有了显著进展。焦点损失要解决的问题就是对输入图像进行物体识别和语义分割这两个任务。和两阶段的模型不同的是一个阶段模型是希望直接从输入图像入手希望能够从输入图像中提取相应的特征从而可以直接从这些特征中判断当前的图像区域是否属于某个物体然后也能够一次性地找到矩形框的位置用于定位这个物体。
这种思路虽然直观但是有一个致命的问题那就是对于一个输入图像来说大量的区域其实并不包含目标物体因此可以认为是学习过程中的“负例”Negative Instance。如何能够有效地学习这么一个“不均衡”Imbalanced的数据集是这一种思路需要考虑的问题。
焦点损失提出了一个新的目标函数用于取代传统的交叉熵Cross Entropy的目标函数。这个新的目标函数的主要目的就是让一个阶段模型能够在正负例比例非常不协调的情况下依然可以训练出较好的模型使得一个阶段模型在效果上能够和两个阶段模型媲美。我们在之前的论文分享中已经详细介绍过这个工作的内容[精读2017年ICCV最佳学生论文])。
人工智能研究机构的发展
2017年我们见证了越来越多的公司和机构设立人工智能研发团队。
10月11日在阿里云栖大会上阿里巴巴 CTO 张建锋宣布阿里巴巴成立全球研究院。达摩一成立就打算在一系列的领域做出成绩。从宣布的战略看来,达摩希望涉足量子计算、机器学习、基础算法、网络安全、视觉计算、自然语言处理、人机自然交互、芯片技术、传感器技术、嵌入式系统等,涵盖机器智能、智联网、金融科技等多个产业领域,整个布局可谓雄心壮志。
第一步的计划是在全球各地组建前沿科技研究中心包括亚洲达摩院、美洲达摩院、欧洲达摩院并在北京、杭州、新加坡、以色列、圣马特奥、贝尔维尤、莫斯科等地设立不同研究方向的实验室初期计划引入100名顶尖科学家和研究人员。这样的布局会对阿里的中长远发展有什么帮助我们拭目以待。
很多公司在人工智能团队的布局也可谓争先恐后。一个比较突出的代表是今日头条。互联网的新贵今日头条2017年扩张明显。2月14日前微软亚洲研究院常务副院长马维英离职微软加入今日头条出任副总裁管理今日头条人工智能实验室。之后任职华为诺亚方舟实验室主任的李航博士也选择离开了华为加入今日头条人工智能实验室。如果加上之前比较知名的李磊、王长虎今日头条的阵容可谓兵强马壮。这样的人员配置能够在今后的发展中对今日头条产生多大的影响呢这一点还需要时间的检验。
年底,谷歌的人工智能团队在李飞飞博士和李佳博士的带领下,高调在北京开设分部,成立一个致力于人工智能的中国中心。在公开的新闻稿里,谷歌认为北京有在未来技术领域拥有发言权的野心,这种野心推动了中国政府的大力投入,让国内在人工智能领域展现出日益增长的实力。谷歌已在北京有数百名从事研发和其他工作的员工。谷歌中国人工智能中心将由李飞飞和李佳领导。李飞飞是斯坦福大学人工智能实验室的负责人,领导着谷歌云业务的人工智能部门。李佳是谷歌云业务的人工智能部门研发主管。
小结
今天我为你简单梳理了2017年人工智能领域发生的一些事情希望能够帮助你去回顾这一年。人工智能的蓬勃发展表现在每天都有太多的新技术新动态这里我们只是以点带面让你感受到过去这一年行业的飞速变化。
对于2017年人工智能领域的发展你有怎样的感受和体验呢

View File

@@ -0,0 +1,65 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
153 如何快速学习国际顶级学术会议的内容?
我们在专栏中已经多次分享了计算机科学(特别是机器学习、数据挖掘和人工智能)领域顶级学术会议的会议论文,向你介绍了这些会议中一些最新的学术和研究成果,希望这些内容能够起到抛砖引玉的作用。
最近今年,随着机器学习和人工智能的逐渐火热,越来越多的研究人员投入到这些领域中,这些顶级会议的投稿论文数和收录稿件数都成倍增长,不少会议会有几百篇论文被收录。这就给希望学习这些论文的人,不仅是初学者,甚至是长期在这些领域工作的研究人员和实践者,都带来了不小的挑战。
现实情况下,尝试去看完一个会议的所有论文是不现实的,从某种程度上看也是不必要的。那么,怎样才能从这些会议中快速地、有效率地吸收到更多的内容呢?想要事半功倍地学习顶级学术会议的论文,究竟有没有什么方法可以帮助我们实现这个目的呢?
今天我就结合自己的经验,和你分享如何快速学习顶级会议的内容。
顶级会议的基本内容架构
在学习任何顶级会议的论文内容之前,我们其实最需要了解的就是这些会议本身有什么规律,或者说会议的内容安排上是不是遵循了一定的逻辑架构。这里,我们首先来看一看这些顶级会议在内容安排上的规律。
毫无疑问,所有顶级会议的核心内容是收录的论文。这一点,我已经反复提及了。有一个细节可能是初学者容易忽视的,那就是很多会议都对收录的论文进行了区分,用于区分出最优秀的论文和一般的论文。
这种区分一般有两种形式。第一种形式是论文在会议上的表现形式有区别。最优秀的少量论文是时长2030分钟的演讲报告而其他大量的论文是时间很短的报告或者有的会议干脆就没有这些论文报告时间。第二种形式是这些论文在会议论文集中发表的长度有区别这也就有了所谓长论文和短论文的区分。通常情况下长论文是811页而短论文则是26页不等。
除了收录的论文以外顶级会议往往还有很多精彩的内容。你可以关注的第二个有价值的内容形式是“讲座”Tutorial。“讲座”的形式常常有半天的、全天的以及超过一天由几个研究者针对某一个特定主题的集中式分享和讨论。一般来说“讲座”往往是一些最新的热点问题但同时有了一整套阶段性的成果这时候在这个领域有突出贡献的研究者就利用“讲座”的模式把这些内容给总结出来进行分享。
第三种你可以关注的内容形式就是“研讨班”。“研讨班”是针对某一个特定的近期热门的主题,由一些学者或者工程师组织的小型会议。和“讲座”一样,“研讨班”往往也是半天到一天不等。“研讨班”被认为是小型会议,因此有时候也还会收录一些论文。然而,这些论文的数量和质量都有很大的差别。
从组织的角度来讲“研讨班”的目的主要是吸引更多人对某个主题的关注以及给目前针对这个主题工作的研究者们提供一个交流的场所和平台。从这个角度来讲很多“研讨班”分享的内容可能都是“还在进行的工作”Work In Progress。所以“研讨班”所关注的热点往往比“讲座”还要激进。近年来机器学习和人工智能的热点越来越多有的会议有多达十几个甚至二十几个“研讨班”在大会期间举行。
最后还有一个可以关注的则是很多会议和研讨班中都有的“邀请演讲”Invited Talk或者叫作“主题演讲”Keynote Talk。如果是亲自参加这些会议或者有视频录像那么这些演讲往往还是值得一听的。从会议组织的角度来说这些演讲往往是邀请在本领域有重大贡献的学者或者是相关领域的权威学者。因此通过这些演讲我们可以了解到这些领域的重要学者都在针对什么问题进行思考以及他们眼中这些领域的发展方向是怎样的。
上面介绍了几个顶级会议值得关注的点,需要注意的是,并非所有会议都有“研讨班”或者“讲座”。
如何精选内容
了解了这些顶级会议内容的一个基本架构以后,我们现在来聊一聊如何从这些不同形式的内容中精选出你可以学习的信息。
首先,我们来说一说论文。刚才提到了,论文可能分为长论文、短论文以及报告论文和非报告论文。那么,有一些比较粗浅的方法可以帮助你筛选。例如,针对长论文和短论文,可以首先关注长论文。对于报告论文和非报告论文,可以先关注报告论文。利用这种简单的方法,我们已经过滤掉了至少一半以上的论文数量。这里的一个基本假设是,会议安排这些论文的区分其实就是一个最基本的质量控制。
另外很多会议把所有的论文分为不同的“组”Track。每一个组其实有一个主题例如搜索、推荐、用户建模等等。这其实也是帮助你通过论文内容的类别进行区分。所以如果你已经知道自己感兴趣的内容那就可以直奔主题。再庞大的会议针对某一个主题的论文数目往往也是非常有限的。
还有一种便捷的方法就是“跟踪”某一些学者。当然,这需要你对这些领域有哪些活跃的学者、有哪些权威的学者要先有一个了解。你心里有这么一个清单,那么,只关注这些你清单上的学者在这个会议上发表的论文就是一个非常简洁的方法。
举一反三,还有一些和追踪学者类似的办法,比如你可以追踪某几个研究组或者公司。当然,这也需要你对这些领域有一定的了解。
对于论文来说,另外一个精选内容就是获奖论文。虽然对于获奖论文在长期来看是不是最具有学术价值一直存在争议,但是作为快速学习和扩宽视野的方法,浏览这些获奖论文以及获奖作者的一些附带研究,可以说是了解一个领域的另外一个捷径。
说完了论文之后,我们来看一看“讲座”。其实,这里也有一个窍门,那就是如果你是一个初学者,我建议你不要一上来就去看一个会议的论文,而是从“讲座”入手。
我们前面提到过,“讲座”是学者已经总结好的最近已经形成一定系统性的研究成果。这里,“总结好”和“系统性”这两个特点非常重要。这意味着“讲座”里面的内容往往不是一篇论文的介绍,而是多篇相对于一组主题论文的总结。这一组论文以及相关主题极有可能已经形成了一个稳定的内容块,而“讲座”的目的就是希望更多人认可、学习、普及这个内容块。有很多“讲座”的内容在几年后就成为了这些领域核心经典思想的一部分。因此,学习“讲座”其实就是一个走捷径的过程。
另一方面,因为“讲座”具有总结性质,所以肯定会提供很多具体论文的文献资料,这些资料可以作为进一步学习的“指南针”。正因为这个性质,对于“讲座”内容的把握你可以做到先从概念上和大思想上对一个主题进行把握,例如看你自己能不能简单地把这个“讲座”中的核心技术、核心思想复述出来。同时,你也可以来衡量一下到底需不需要对这个“讲座”具体指引的论文进行阅读。绝大多数的时候,我们对于“讲座”的把握在这个层次其实就够了。
最后,我们来说一说“研讨班”的内容。和“讲座”不同的是,“研讨班”的内容因为其性质,往往比较杂。我们刚才也提到了,“研讨班”重在为一线的研发人员提供一个交流的平台。因此,他们的交流是第一目的。而且,“研讨班”的很多方向和主题都比较新,因此对于初学者而言,需要甄别哪些内容值得细看哪些内容可以忽略。总体说来,这里面的内容都不推荐给初学者。当然,如果你对某一个领域已经追踪了一段时间,有了一定的了解,那么“研讨班”无疑是最前沿的讨论平台之一。
小结
今天我为你梳理了如何快速学习顶级会议的内容,希望这篇文章可以帮助你在海量的会议内容中找到自己感兴趣的信息。
一起来回顾下要点:第一,我们讲了顶级会议的内容架构;第二,我们简要地介绍了如何在这些内容中进行快速筛选。
最后给你留一个思考题拿到一篇10页的长论文究竟该如何快速阅读呢

View File

@@ -0,0 +1,67 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
154 在人工智能领域,如何快速找到学习的切入点?
到现在,我们专栏的人工智能核心技术模块就已经全部介绍完了,我们讲了推荐系统、搜索系统、广告系统、自然语言处理及文本挖掘、计算机视觉这五大模块。相信你对这些领域都有了一个最基本的认识。同时,我们还对一些前沿领域的学术会议进行了专项的讨论,和你分享了一些读论文的经验。
这个过程中,我收到了很多反馈,在人工智能领域,面对日新月异的新模型、新方法、新思路,很多人都感到非常难找到切入点来学习和提高。那么,今天我就来分享一下如何快速入门人工智能领域,帮你找到一些学习的捷径。
关注知识主干
我们已经介绍了这么多知识模块,不知道你是否注意到,在每个人工智能的子领域里,真正的知识主干其实是非常有限的。我这里说的“主干”是指构成这个子领域的重要的假设、思路和方法。如果你能够掌握这些主干的内容,那么也就能够相对容易地了解其他枝节信息了。
之所以要了解主干内容,还有一个原因。从时间这个尺度上来看,有一些技术和思想在某个时期曾经有很大的影响力,但是随着时间的变化,它们会被后来更新的技术所取代。因此,只抓主干,也会比较容易看清楚不同类型的技术的时效性。
那么,我们怎么去了解什么是知识主干呢?
对于比较成熟的子领域,或者是传统领域,我们可以依靠教科书。一说起教科书,很多人的第一反应就是枯燥。确实,教科书对于很多知识点的描述过于细节,但是从大的知识块上来讲,教科书还是能够帮助初学者尽快把握重要的知识主干,是一个非常高效的途径。
对于一些比较新的、发展迅速的领域,知识的重要结构发生了很大的变化。在这些领域,要么我们还没有成形的教科书,要么就是即便有,教科书的内容也可能是过时的。所以,比较新的领域我们往往需要借助其他的信息途径。
在这里,我给你介绍两个途径。
第一“文献综述”Survey论文。这一类论文的目的就是对一个较新的而且是快速变化的领域做一些阶段性的总结。从某种意义上来说我们其实可以把文献综述看成是另外一种“教科书”。既然某个领域变化快速那么针对这个领域知识的文献综述就会有很强的时效性。所以阅读文献综述时我们需要关注发表的时期以确保文献的新鲜度。
第二顶级学术会议的“讲座”Tutorial。我们之前在如何学习会议内容的分享中提到讲座往往包含了一些最新的热点问题同时针对这些问题的研究也有了一整套阶段性的成果这时候在这个领域有突出贡献的研究者就利用“讲座”的模式把这些内容给总结出来进行分享。换句话说关注这些讲座也就相当于了解了某个领域的文献综述。
值得说明的是,关注知识的主干内容这一方法其实是可以“循环使用的”。什么意思呢?
举个例子,例如我们要了解深度学习究竟有哪些最基本的内容。在这个层次上的主干内容就有前馈神经网络、卷积神经网络和递归神经网络。那么,接下来,我们就需要大概了解这三种不同的神经网络究竟是什么,解决什么样的问题。层层递进,对于某一个神经网络,比如卷积神经网络,我们要了解的主干知识有“卷积是什么意思”,“这种结构要达到什么目的”。
总结一下,不论是学什么内容,第一个思路就是先看看它的主干知识是什么,养成这样一个思考习惯,你的学习效率就会大大提升。
关注知名学者
针对人工智能领域入门的另外一个“捷径”是关注你所喜欢领域的学者的研究动态。
在一些人工智能的子领域,经常出现这样一种局面,那就是少数学者的研究成果奠定了整个领域的重大发展。你有没有发现,这其实也就是另外一种意义上的主干内容。追踪和学习这些学者的研究成果有两个目的:一方面可以了解到最新的动态;另一方面可以让学习有的放矢,达到事半功倍的效果。
如果我们针对一个领域搜集到五个左右的学者然后关注这些学者本人以及所在机构或者实验室的成果那么一般情况下你阅读了差不多10篇论文后就基本能够把握住这个方向发展的大概内容。
需要注意的是,我们这里所说的知名学者,主要还是指在某一个领域有重要贡献,特别是贡献了核心思想的学者。对于这些学者,我们不能仅仅关注他们论文的数目,还是要看论文的影响力。对于绝大多数人工智能领域而言,我们可以很容易地在网上找到知名学者的名字和介绍。
补充一点,如何在一个完全陌生的领域寻找知名学者呢?寻找这类学者的一个简单的方法是先看这个领域引用度最高的前几篇论文,然后找到这些论文中经常出现的某个学者的名字,然后根据这个学者的名字稍微查询一下,看一看这个学者过去的一些论文发表经历,从而判断这个学者是不是在某个领域持续进行研究。
深入学习少量的模型
对于很多人工智能的初学者而言各种眼花缭乱的模型往往让人会觉得不知所措。这个时候与其一头扎入各式各样层出不穷的新模型里还不如扎扎实实学懂吃透少数几个模型。这个思路也符合软件领域我们常说的“T型”人才模型广度很重要但是没有深度的广度很多时候就没有价值。先有了深度广度的拓展就会更容易。
比如从工业界的应用角度来说我们一般需要掌握的模型就那么几个。可以说如果你掌握了线性模型、树模型和神经网络模型就可以解决超过80%甚至更多的业务需求了。那么,我们要做的就是深入细致地学习这三种模型,而不是去了解几十种甚至上百种模型,但是每一种都只是了解了一点皮毛内容而已。
那么,对于这些核心内容,多深入才算是深入学习呢?
首先,也是最基本的,我们要“理解”这些模型的最基本的原理。其次,最好能够从数学的角度来理解这些模型的数学推导。再次,还要理解这些模型的“模型本身和优化算法的区别”,以及各种优化算法的好坏。最后,我们最好能够自己动手写一写这些模型的基本实现。另外,还有很多方面能够帮助我们进行深入学习,比如这些模型会有什么特点?在什么场景下比较适用?这些问题都是非常好的参考。
小结
今天我为你梳理了快速入门人工智能领域的几个思路,希望你能在学习的过程中快速定位到有用的信息,提高自己的学习效率。但是,有一点我想推心置腹地跟你说,虽然我们今天分享的内容叫作如何快速入门,但是要想在这个领域真正获得成长,我们更需要有一颗平稳的心,要抱持着一种愿意踏踏实实学习基础的态度,这一点是非常必要的。换句话说,成长为一名有能力的数据科学家或者人工智能工程师,往往并没有太多的捷径可走。
一起来回顾下要点:第一,我们讲了抓住内容主干的思想;第二,我们简要地介绍了如何跟踪知名学者;第三,我们讨论了深入学习少量模型的好处。
最后,给你留一个思考题,你现在要学习一个新模型,是要深入了解模型的数学细节,还是仅仅知道一个大概信息就可以,你怎么做判断呢?

View File

@@ -0,0 +1,53 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
155 人工智能技术选择,该从哪里获得灵感?
在上一讲的内容里,我们分享了在人工智能领域快速学习的一些方法。学习到这些人工智能技术后,我们肯定是希望能够把技术应用到工程实践中,来解决实际产品的问题。
这里面有一个非常重要的问题,就是面对这些论文、或者是别人分享的工程实践,作为初学者或者是有一些经验的工程师,我们应该如何来选择技术呢?是去实现当前最新论文介绍的技术?还是跟随其他公司已经有了的架构?
今天,我们就来聊一聊人工智能领域的工程技术选择这个话题。
如何看待学术论文和技术选择的关系
首先,我们来看一看论文和工程技术选择之间的关系。我们是不是需要去实现最新论文里的模型呢?
在回答这个问题之前,我们来聊一下学术论文本身的一些特点。
学术论文,作为科学知识和信息传播的一种载体,本身是有其内在的使命和一定的规律的。学术论文的核心功能是在一定的规范框架下,传播、总结和讨论新知识。这里面我们需要注意的是“一定的规范框架”和“新知识”。
我们先来说说新知识,这其实是整个学术论文存在的核心价值。很多新知识其实是某种意义上的学术尝试和创新,例如提出的一种新观点、一种新思想、一种新方法或者是一种新算法。这些新知识是不是能够沉淀下去成为某种主流思想,或者说是否能够在实际系统中真正发挥作用,还有待时间的检验。换句话说,新知识的知识结构还不完整,我们并不知道这些知识点后续会有什么样的发展,我们并不能简单地在学术创新和实现现实意义之间划等号。
因此冒然利用最新的技术往往会因为技术不成熟、信息不完整而带来很多风险。举个例子如果我们在2009年的时候就采用了深度学习技术当时的很多方法例如“事先训练”Pre-Training在后面更加成熟的技术面前都已经被遗弃了。很明显当时的深度学习框架远远没有现在的成熟所以就会有很大的前期工程成本。
再举个例子,在最基本的“随机梯度下降”算法上进行改进的优化算法,绝大多数都是在理论上对收敛速度的改进。而这些收敛速度基本上都取决于当数据点趋近于无穷多的时候。那么,这种改进其实并没有太大的现实意义。
我们刚才还提到学术论文都在“一定的框架范围内”其实就是说目前计算机科学的绝大多数论文都遵循某种格式和写作要求也可以说是某种程度的“八股论文”式的写作。这种格式虽然统一了论文发表内容的差异性但是过分注重在某个标准数据集上的一些性能提升就有可能发明了一些在其他数据集上完全无法推广的技术。比如有的论文甚至把在某些标准数据集上非常小例如小于1%)的提升当作重要的创新。显然,这样的成果往往都无法在工程环境中复现,又何谈现实意义呢?
说了这么多学术论文的特点,我们再回到刚才最开始的话题,那就是学术论文和工程选择的关系。学术论文提供了一种思路,帮助我们开阔眼界,但是切记,我们不能把学术论文当作是金科玉律和亘古不变的真理。相反,对于每一篇学术论文,我们要带着批判的眼光,有所保留地来看待论文背后的创新点。
那学术论文中的思路是不是就完全不要去采用呢?其实也不是。当我们发现有一系列的学术论文,或者很多学术会议都在探讨某个类似的技术时,那么这个技术也许就值得我们尝试去实现一下,来做一些早期的评测,看这样的技术在自己工程环境的数据中是不是依然有效果。
如何看到工业界技术分享和技术选择的关系
除了正规的学术论文以外,在人工智能火热的今天,各类工业界的技术分享也是层出不穷,这里面的内容水平和可复制性可以说是千差万别。那么,我们到底应该如何看待这些技术分享呢?我总结了两点给你借鉴。
第一,一般来说,很多公司的技术分享其实都是只言片语或者说一个整体平台的片段。因此,如果我们直接把这些分享用于自己团队的工程实践中,往往就会产生断章取义的效果。
实际上,一个公司的技术选择和这个公司在做选择那个时间段的很多因素都有着密不可分的关系。比如,一个比较大的机器学习系统往往和公司的其他业务需求、数据基础、机器学习基础设施以及团队当时的工程水平等因素相关。某一个系统在一个时期内的形态就是这些相关因素的一个综合体现。然而,技术人员的分享内容很难涵盖所有的方方面面,使得我们容易忽略某个技术选择和公司以及团队的这种内在的紧密联系,而单纯考虑技术分享的内容。因此,尽量去理解其他公司的技术选择思路,要比只关注所分享的内容本身更重要。
第二,公司的很多技术选择并不是同行审议的结果,需要我们带着批判的眼光去看待。这一点是和学术论文相比较而言的。一般来说,一篇高水平的论文要想发表在顶级学术会议(或者期刊)上,往往都需要得到同行的审议。这种审议的重点一般会看论文是不是比较了类似方法,以及能否真正说清楚论文的创新点和贡献在哪里,这其实就是对论文质量的某种程度的把关。那么,这个同行审议的环节在公司做技术选择的过程中是不一定存在的。很多公司的技术发展路线选择都不能摆脱种种外部的和内部的限制,最后的结果并不是无懈可击或者不容置疑的。
所以,我们不太可能直接复制其他公司的技术框架,但是这些公司的技术分享对我们的好处也是显而易见的。我们一定要抱着开放的心态来学习这些分享中的精华之处,重点是能够理解各个组件之间的逻辑关系,以及一些关键技术点选择背后的推理过程和取舍过程,这种思考对于我们的提高是非常有帮助的。
小结
今天,我们从如何借鉴学术论文和工业界技术分享两个角度,一起来梳理了人工智能技术选择的思路。工程技术选择是一个综合的复杂问题,我们一方面着眼于创新技术本身,一方面着眼于自己公司、产品和团队的实际情况,以批判的眼光吸收新知识和新实践,最后做出最适合自己发展的技术选择。
最后给你留一个思考题在一个公司的最佳实践分享中他们提出了一个模型A大幅度提高了模型B现在你会如何来看待这个分享呢

View File

@@ -0,0 +1,149 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
156 内参特刊 和你聊聊每个人都关心的人工智能热点话题
暖场篇
Q您本硕博学的都是计算机科学专业这个专业其实有很多方向您为什么会选择人工智能这样一个比较新的领域
A我到美国读博的时候开始并没有想去学习人工智能而是想做一些操作系统及软件的研发。到了美国以后我的导师认为社交媒体的数据挖掘、机器学习应用比较前沿希望有一个相关课题当时把新的课题给了我。我从这个课题入手接触了机器学习接触了人工智能然后慢慢地走上了人工智能的发展方向。
Q您怎么定义人工智能
A我认为人工智能有两个方面非常重要。一是人工智能是数据驱动的也就是说一个人工智能产品一定得是有数据支撑的另一方面人工智能是一个持续的决策过程比如说AlphaGo、无人驾驶等都是利用机器学习以及其他算法进行持续决策的一个过程。在人工智能这个定义中数据驱动和持续决策应该说是非常重要的两个元素。
落地篇
Q您能不能详细介绍一下目前在Etsy有哪些人工智能的技术是实实在在落地了的落地的场景是什么取得了什么样的效果
AEtsy人工智能应用主要是围绕三块在做。
第一块是搜索。其实这也是普通电商的一个场景你来到电商平台输入一个关键字Etsy返回一个搜索的结果这个看上去很简单好像跟传统的搜索没有什么区别。但实际上电商的搜索不管是大一点的电商如亚马逊、京东、阿里还是小一点的电商真正能够做到比较完美的搜索体验是非常困难的。比如一部分用户的购买欲望很强烈那么我们如何能够帮助他找到最合适的商品也有一部分用户并没有特别强的购买意愿这个时候他希望通过搜索一些关键字来获取灵感从你的平台上能得到一种逛街的体验所以这个时候搜索带来的东西就未见得一定是他要买的如何能够通过搜索给他带来逛街的体验是比较困难的。这块搜索是我们现在一直在做的并且用不同的模型来进行落地尝试。
那么第二个方向就是推荐系统。电商的推荐也是一个老生常谈的话题了但在一些新的场景下如何做比如Etsy上有很多的商品是手工艺品数量可能很少那么在给用户推荐的时候必须考虑到它的件数是有限的这个地方也是有一些难点。
第三个当然就是我们的广告平台。如何能够通过人工智能帮助广告提升,广告是一个买卖的双方系统,如何帮助卖家实现好的宣传效果,这个也需要通过算法来更新的。
Q目前已落地的一些人工智能技术起到的作用和我们传统的一些办法相比效果明显吗
A人工智能在搜索广告和推荐这块效果已经比较明朗了肯定是比传统的方法做得好但是它的提升度在不同的情况下区别还蛮大的。我们如果能够让效果最大化必须跟产品界面还有前端等融合形成一个统一的产品才能让算法得到的结果以最好的形式展现出来。
Q您认为人工智能落地遇到的最大的一个挑战或者困难是什么
A现在人工智能落地最难的并不是算法本身最难的是和场景的对接。算法本身可能是一个数学描述是个模型但是真实的场景跟模型中间还有一段距离。这个距离需要数据科学家进行“翻译”把我们的场景和算法衔接起来需要我们的工程师能够去根据新翻译的场景调整算法。所以不是所有的经典的算法你都能够马上利用而是需要一些更改这种更改必须是基于你的场景你去理解这个场景并且能够进行合理的翻译这实际上是最困难的。
观点篇
Q人工智能对程序员就业有什么影响?
A我刚才已经谈到了数据科学家和人工智能工程师职能有重叠但也略有不同。打个比方就像你踢一场足球赛需要有11个队员有前锋有中场有后卫有守门员一个复杂的人工智能产品需要有不同的角色这些角色都需要有一定人工智能机器学习背景比如说前端工程师一些设计的人员一些产品经理都需要人工智能背景。那么从这个角度看这个问题我觉得反而是大家的机会更多了大家可以根据自己的背景根据自己的喜好寻找适合自己的角色。
Q人工智能会在哪个行业爆发
A我觉得另外一个角度看这个问题更好有多少行业能够去利用人工智能就像你刚才提到的这个人工智能可能会像空气会像水会像电一样成为一个基础设施我很认同今年可能会有一些新的契机我对这方面也很感兴趣。我们也看到像吴恩达他想去对传统制造业和人工智能做一些结合我觉得这个趋势就是一个很好的切入点不是说现在就能够彻底地改变制造因为毕竟各行各业有些很深的问题你得去了解它但是它可以打开一扇门让更多的传统行业比如像制造业的人来了解人工智能我觉得这个可能会是未来的方向。
Q现在有一种说法是人工智能就是人工智障您怎么看
A今天我们所看到的人工智能像AlphaGo也好或者图像识别的一些突破云技术的一些突破它的确比10年前比20年前的技术要好的多我觉得人工智能的确到了一个好的阶段。同时我们也必须要承认人工智能不能做的事情也很多并且它做绝大多数事情可能不如我们想象的完美。但是我觉得我们也不必给它贴上人工智障的标签以表达我们的失望之情。人工智能目前还处于一个很初级的阶段前面还有很长的路走。我自己希望通过做一个传播者和一个教育者让更多的人了解人工智能。
Q您觉得人工智能存在泡沫吗
A我个人觉得现在的确是有些泡沫比如说媒体的热炒媒体可能不是很了解情况然后去下一些断言。但是我个人感觉现在的泡沫处于一个比较健康的状况这个泡沫帮助更多的人了解这个行业帮助更多的人投身到这个行业帮助更多的社会资源聚焦到人工智能。
人才篇
Q我相信大家都比较关心数据科学团队的招聘的情况您现在会做很多招聘的工作您在招聘的过程中有怎样的一个标准或者最看中候选人的一个特质是什么
A招聘大概有这么几个方面一个是对候选人的基础知识的考察比如说机器学习基础、统计背景、计算机的基本系统的掌握。第二点我们会给一些场景去考察这个候选人是否有能力把一个现实的场景跟他所学的挂上钩他能否用机器学习或人工智能算法作为一种语言去描述这个场景这个能力也是很重要的。第三个是动手的能力比如说他是不是会一些最基本的编写代码或者数据结构等大概是分这么三块。
Q您在专栏里面提到过数据科学家大概有两类您能具体说说这两类吗有什么区别呢
A在国外数据科学家是一个比较范的统称大概有两大类。
一类是偏数据分析,比如我有一个商业的问题,或者产品的问题,我想去挖掘这个数据,看能不能回答我这个问题,它重在分析,不偏重如何提高产品品质。比如说他分析圣诞期间什么东西卖得比较火,明年男生会不会更喜欢某款相机,回答类似的静态问题。
另外一类的数据科学家主要侧重于怎么用机器学习的算法提高我们的搜索、推荐或广告效率,更偏重于驱动产品。这两类数据科学家的技能有一些重叠的部分,比如最基本的机器学习、统计背景、编程背景等,但是他们的侧重方向不一样。
Q是不是硕士学历及以上才能做人工智能
A我觉得要分现状和未来两方面。现状是本科生没有全面的一个训练一些需要高阶技能的部分可能硕士也没有完整训练过并不是说做人工智能就一定要博士生而是需要的这些技能刚好只有一些博士生满足。但是随着教育和推广的演进这个门槛会逐渐降低。我跟朋友闲聊的时候经常举一个例子牛顿发明整个力学体系时候那会儿全世界可能只有几个人知道但是现在牛顿力学体系只是高中的一堂课它的门槛低多了。未来人工智能、机器学习的门槛也会降低普通人也可以从事相关的工作。
学习篇
Q如何入门和学习人工智能
A一方面要去看经典的教材和经典的书籍这个是不可或缺的另一方面人工智能这个领域发展太快了很多的新东西都是在顶级学术的论文里面去阅读学习论文也是必不可少的。
Q如何提高看书的效率
A这个需要在实践中去学如果需要某个知识点要去通读这个知识点相关的内容相同的内容多看一些不同的观点把它搞懂搞透。有的讲的比较粗的需要去其他地方找到比较细的论证有的比较细可能没有抽象到一个高度在其他地方反而能找到要互补这样看书的方式是最高效的。
Q您前面提到除了看书看要看国际会议论文。如果让您给大家推荐三个顶尖国际会议您推荐哪三个
A我个人觉得工业界的朋友可以关注这几个会议。
第一个是KDDConference on Knowledge Discovery and Data Mining数据挖掘与知识发现大会。这个会议有个工业组论文包括一些已经落地的项目经验或者将要上线的经验并且在开会的过程中会跟工业界有互动的环节。你去KDD可以看到很多人在翻译现实中的场景这对工业界的朋友来说是很有帮助的。
另外一个是WSDMInternational Conference on Web Search and Data Mining网络搜索与数据挖掘国际会议。这个会议缘起于雅虎、谷歌等硅谷公司认为传统的学术会议不能满足工业界需求最近几年工业界的不少解决方案和新问题都是在这个会议上提出的。
第三个是CVPRConference on Computer Vision and Pattern Recognition国际计算机视觉与模式识别会议。这个会议可以帮助很多初学者拓宽视野让大家知道机计算机视觉是一个非常广的领域深度学习只是其中的一部分。
Q外行看热闹内行看门道有很多报道只关注谁获得了最佳论文奖谁获得了终身成就奖除此之外您觉得对于这些顶级会议我们还应该关注什么
A现在这些会议会有上百篇甚至将近一千篇的论文。作为一个初学者或者是想进阶的工程师或者是数据科学家一个比较有效的方法就是根据你的领域去了解。像我比较关注搜索、推荐等我一次性去了解这次会议在该领域大概有多少论文有些什么新的东西这就极大的缩小了关注范围节省了时间。另一个需要去了解这个会议上有哪些新的想法这些也许跟你现实的工作不直接相关但是对于你拓宽视野很有帮助。
Q那针对阅读论文我们应该怎么入手呢您的经验是怎样的
A学习人工智能方面的知识特别是读论文很多时候大家觉得难以入手因为有太多的论文一个比较高效的方法是先读文献综述。文献综述总结了当前的发展状况能帮你解决至少两个问题第一个问题是了解相关术语你用这些术语能查到更多相关的东西如果你连术语都不知道可能连这些论文查都查不出来这些综述能帮助你熟悉这个领域的语言和它里面的一些子问题。另外一个能够起到文献综述作用的是国际的顶级会议这些会议会邀请学者做分享分享往往会有一个PPT这些PPT会归纳最近几年的发展和观点。通过综述和讲座你就已经对这个领域有了一个概念性的理解然后你再去读三到五篇该领域、子领域的经典论文这是我个人去体会过相对比较高效的一个方法。
Q小白如何入门人工智能
A如果你想真正投身到人工智能我个人建议还要相对系统地去学习整个知识体系比如刚才我们聊过的机器学习、统计、系统概念、最基本的编程的能力等还有一些工具比如Python等磨刀不误砍柴工但这肯定需要一个过程。
Q目前有个说法Python是机器学习第一语言一般推荐大家先学习Python您怎么看
APython的确是一个比较好的机器语言学习工具并且现在围绕Python也产生了不少生态系统使得Python比较适合机器学习、数据分析或者是一些场景。但这里我必须强调一下在一个比较完整的端到端的人工智能应用中特别是工业级的应用中往往是一个比较异构化的环境。所谓异构化是指不是单一的语言或者单一的工具就能够完全的把数据转化成你想要的模型并且能够用这个模型去推动我们的产品这里面可能有Python的部分但可能还有Java的部分有C++的部分等如果你真想要有一个进阶成为一个更加全面的工程师或者是科学家就不能只掌握Python。

View File

@@ -0,0 +1,65 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
156 近在咫尺,走进人工智能研究
在前面两次的分享里,我们聊了一些在人工智能领域快速入门的捷径,以及面对不同的论文或别人分享的技术实践,我们该如何来选择技术。我们今天来看另一个话题:如何做人工智能研究。
对于初学者来说,可能很多人会觉得人工智能研究离自己比较远,在工作中一时半会儿也接触不到。但实际上,我们有必要了解做研究的一些基本原理,而且这些思路能够应用到我们的日常工作中。
对于中高阶的工程师来说,能够在研究方向更进一步,我们就可以更好地理解优秀的学术论文是怎么写成的,能够快速挖掘出论文的核心价值。同时,也可以把自己手上的工作总结成论文发表出去,真正参与到学术社区的建设当中。当然了,即便我们不以写论文为目的,用做研究的标准来要求自己平时的工作,也可以让很多工作更加严谨,这也是一种不错的进阶。
什么是人工智能研究
那到底什么是人工智能研究呢?
简单来说,只要是针对某一个问题,我们有新的方法、新的见解或是新的结果,这都是潜在的研究成果。另外一方面,如果我们发现了一个新的问题,甚至是一个新的领域,那就更具备总结出来加以发表的潜质。
你是不是已经注意到了,研究的一个核心要素就是“新”。这也是让很多初学者感到困惑的地方:我们平时的很多工作看上去都那么普通,没有什么创新的地方呀!
其实,哪怕是在人工智能技术应用非常广泛的很多领域和场景,依然有相当多的地方存在创新点,只是初学者不太容易注意到。我这里举几个例子,你可以感受一下。
例如一个互联网网站经常使用在线测试也就是通常所说的A/B测试来判断这一个网站的新功能或者新特性是否好于现在的版本。一个最基本的设置就是把现在的版本当做“对照组”然后把新的功能当做“实验组”分别在50%的流量上运行这两个组别。然而在线A/B测试存在一些根本上的挑战。
第一我们举例是把整个网站流量的一半用于测试某一个组别而有一些小的改变在50%的流量上可能需要2~3周的时间才能看出效果。而在真实情况中拿来进行A/B测试的流量往往是占比更小的因此等到能够看出一个实验的效果需要很长时间这本身就是一个非常耗时的过程。
第二,如果我们测试的功能和收入相关,那么假设对照组或者实验组有明显的收入增加或者减少,观察到了这样的结果,但是我们无法在实验的过程中动态地调整这个预先设置好的比例。
你看关于传统意义上A/B测试所面临的难题我们这里仅仅是列举了两条其实还有很多其他的问题。从这些问题出发我们是不是就可以问问自己能否找到节省A/B测试时间的方法呢能否让实验达到同样的效果但是使用尽可能少的时间能否在A/B测试的过程中动态调整用户或者流量的比例呢这些问题其实就都是研究课题。
再比如传统的推荐系统非常适合电影推荐的场景例如著名的Netflix大赛。经历了十多年的发展后推荐系统方法重点都集中在矩阵分解这样的协同过滤的方向上。那是不是这样的方法就解决了所有的推荐问题呢
我们试想一下如果是电影推荐我们作为一个用户看了《纸牌屋1》之后系统就给我们推荐《纸牌屋2》、《纸牌屋3》以及这一个系列虽然有一点重复但依然是可以接受的非常相关的推荐结果。那么如果我们在一个电商网站上购买了一款佳能相机以后系统依然给我们推荐类似的相机我们是不是就会觉得这样的推荐短期内意义不大了呢
我们可以看到,推荐系统对场景有非常高的要求。对于一些特定场景的推荐,我们无法直接照搬现有的方法。这个时候,这个场景,就需要一些创新,有可能是把现有的方法进行改进和调整,也有可能是完全提出一些新的思路或新的方法。
说到这里,你是不是对人工智能研究的范围有了一个新的认识呢?按照我们在这里举例的思路,你可以观察一下自己手边的项目,这里面或许就潜藏着不少值得研究的课题,说不定你就能发现一个新的研究领域。
怎么做人工智能研究
由此可见,作为普通的工程师或者初学者,我们的工作中也有机会接触到研究课题和研究领域。那么,接下来,我们就来看一看怎么做人工智能研究。这其实是一个非常大的话题,今天我来给你提供一个简单的指南。
要做人工智能研究一般有这么几个步骤。
第一,好好总结一下在当前这个场景下,我们要解决的是什么问题,也就是针对要研究的问题进行建模归纳。回到刚才所提的电商推荐的例子,我们需要解决的问题是把类似的相机过滤掉?还是要推荐买了相机后其他的附件?还是要推荐相机的替代品?或者是要从根本上理解这样的情况是怎么产生的,消费者的心理预期是什么样的?你可以看到,即便是尝试解决同一个问题,我们也可以有好多不同的切入点。所以,最重要的第一步就是找准一个切入点。
第二,了解前人的工作,查找和学习相关文献。相信我,即便你认为找到了一个貌似完全新的问题或者领域,认真查找了相关文献之后,有很大可能你会发现其实已经有人做了一些类似的工作。甚至,你还可能发现你设想的某种方法已经有人尝试过了。
了解前人工作这个步骤初学者或者是完全在工业界的工程师往往容易忽略。这一步的核心其实就是看前人在你设想的问题中是如何寻找方案的和你设想的思路是不是完全一致。通常情况下你会发现一定的差异性。于是基于这些差异性你可以提出一些“进阶性”Incremental的创新思路。这也就是我们常说的“站在巨人的肩膀上”。
另外,多了解前人的工作,我们不会把自己的思想和整个大的方法论孤立开来,能够更好地融入到研究的整个社群中去。
第三选择一种测试数据集和一些“基线方法”Baseline来进行比较。无论是多么重要的新方法也无论是什么样的新领域如果我们不能通过一些标准的数据集或者是构造一些可以值得信赖的数据集而且和多种方法进行比较那么这些创新也都无法通过检验。换句话说我们提出的新方法、新思路再好必须有一个相对的比较者最好这个比较者是之前提出的已经使用了的这样我们才能够更清楚地说明新的方法究竟好在哪里。
研究工作,特别是“了解前人工作”和“进行基线比较”这两点,是和一般的技术分享有区分的重要标志。这其实也是我们在上一次的分享中讲到的,有的技术分享其实只是描述做了一件事情,或者是描述了一个系统,我们无法真正知道这个系统的设计和整体的思路在社群中的位置,也不知道这个系统是否和类似系统进行过比较,这其实也给我们的技术选择设置了挑战。通过今天的内容,我们了解了研究工作的思路,把用研究的思路应用在工作中,会让我们平时的技术选择更加严谨。
小结
今天我为你梳理了进行人工智能研究的一些思路。通过今天的内容,你会发现,人工智能研究离我们并不遥远,很多场景都有可能发现新问题、找到新方法。另外,了解一些研究思路对我们的日常工程开发也会有所借鉴。
最后,给你留一个思考题,如何来衡量我们自己做研究的价值?

View File

@@ -0,0 +1,33 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
结束语 雄关漫道真如铁,而今迈步从头越
去年,“极客时间”联系到我,询问是否愿意开一个人工智能主题的专栏,因为我对知识经济充满好奇,对知识分享更是有极大的热情,所以我几乎是不加思考就答应了下来,对于接下来一年会遇到的挑战和收获丝毫没有准备。
一年过去了,我们的专栏到了说再见的时候。现在我的感受是,我和你一起完成了一个不可能完成的任务。今天就和你聊聊一路走来我遇到的那些挑战和收获。
我的第一个挑战就是在浩如烟海的人工智能知识库中,究竟要为你准备什么样的内容才能照顾到不同人群的需求。人工智能技术涵盖面广,变化更新很快,涉及到大量的工程实践以及纯粹的理论工作,如何取舍呢?
最后呈现给你的156期内容涵盖推荐、搜索、广告、自然语言处理和计算机视觉这五个人工智能核心技术模块带你了解最关键的概念、模型和技术最新的顶级学术会议论文导读帮助你跟踪最新的技术动态以及数据科学家成长和数据科学团队建设的经验之谈帮助初学者快速入门。
一切取舍之间的纠结都是为了打造一整套丰富的内容,给初学者一个理想的入门手册,带你跨进人工智能的大门,看清这里面都有什么,在心里画出一张人工智能的地图;同时还能给你一个进阶指南,让你能够找到继续精进的方向。
对于顶级学术会议中精彩论文的分享,我花费了很多精力。现在很多会议动辄发表一两百篇甚至几百篇新论文,我每次都要扎进去选取我认为最优质的内容你给解读。我之所以觉得这个部分很重要,是因为在一个发展如此快速的领域,我们不能只埋头学技术、做工程实现,还得关注最新发展、最新思路,这样我们的学习才能事半功倍。
在整个专栏准备中的第二个挑战就是内容的撰写。一方面是时间上的安排。白天我要管理和发展一个15人左右横跨美国东西海岸的工程团队。晚上我要写出一篇3000字左右的AI技术文章。每篇文章平均3000字一年的内容就是40多万字。不管是中国的假期还是美国的假期专栏都没有停止更新。这中间的艰辛和挑战是我在去年欣然答应时所始料未及的。但从另一个角度来说也正是这份压力和挑战一直督促着我整整一年每周雷打不动写出3篇原创文章最后完成了这项看似不可能完成的任务。
另一方面就是内容要怎么写。因为人工智能内容的特殊性,同时专栏文章也都要转成音频形式,我需要尝试使用通俗易懂的语言,来讲解很多即便有数学公式和图表都难以说清楚的机器学习内容,这个难度非常大,我也在不断学习中。在这个过程中,我也逐渐清晰了专栏内容和完整的课本教学之间的关系。专栏内容并不是专业知识的一个替代,也不可能成为替代,但专栏文章可以是一个很好的“向导”,帮助初学者入门,找到经典知识的主脉络和进阶的快速通道。
所以,如果有一些内容你还是没有弄明白,欢迎你留言和我继续讨论。另外,可以认真想想到底是哪里不明白,这恰恰是最好的学习机会。通过专栏学习,抓住知识树的树干,然后再去看每一个枝杈上还缺什么,一点一点添枝加叶,日积月累,这棵知识树终会枝繁叶茂、开花结果。
过去一年里,我在迎接这些挑战的过程中收获很多,还获得了不少惊喜,在好几次学术和工业界会议上、电话面试甚至面对面的面试中,我都听到这么一句越来越熟悉的话,“洪老师,我是您专栏的用户。”在这个时候,我感到欣慰,也感受到了更大的责任。我越来越体会到当一名知识转播者的快乐和影响力,也让我更加坚定了自己在人工智能知识的传播上贡献自己力量的决心。
我相信“AI技术内参”这个专栏是我系统分享知识的一个开始也是你学习人工智能的一个开始。接下来就像在专栏开篇中的期许那样我们齐头并进在人工智能的世界里走得更快、更高、更远
最后感谢你一年365天的陪伴。AI是海我们一起乘风破浪AI是山管他雄关漫道我们一起迈步从头越