摘要: 12月13-14日,由云栖社区与阿里巴巴技术协会共同主办的《2017阿里巴巴双11技术十二讲》顺利结束,集中为大家分享了2017双11背后的黑科技。本文是《人工智能在搜索中的应用》演讲整理,本文首先介绍了AI如何在搜索中落地,进而重点介绍了个性化搜索,包括图搜索、个性化召回,接着又分享了智能决策的探索。
12月13-14日,由云栖社区与阿里巴巴技术协会共同主办的《2017阿里巴巴双11技术十二讲》顺利结束,集中为大家分享了2017双11背后的黑科技。本文是《人工智能在搜索中的应用》演讲整理,本文首先介绍了AI如何在搜索中落地,进而重点介绍了个性化搜索,包括图搜索、个性化召回,接着又分享了智能决策的探索。内容如下。
分享嘉宾:
三桐:阿里巴巴资深算法专家,淘宝商品搜索算法方向,主持多个搜索技术项目,致力于推动大规模机器学习、深度学习等在商品搜索的应用。
以下为演讲实录:
以深度学习为代表的人工智能,在语音、图象还有自然语言领域超越了很多传统的算法,今天给大家介绍一下在搜索这样一个比较传统的业务上面人工智能怎么来落地。
我今天讲的内容会包括四个部分:
首先会简单介绍一下搜索,就是从业务的角度,我们人工智能应该怎么落地,我们的技术架构体系应该怎么去建设;
第二,在搜索里面哪些场景适合用深度学习的技术来做优化。 第三部分,我介绍一下像深度学习技术落地的时候,对我们的系统、算法,甚至将来对我们的硬件方面提出什么样的要求,或者是说它是怎么演化的。
第四部分是未来挑战。
先简要介绍一下搜索。搜索可以认为是有关键字的个性化推荐,用户和搜索的交互主要是关键字,关键字推荐对提升用户使用搜索效率有起到重要作用。第二个我们搜索商品的排序,我们叫公域和私域,大家打开手淘上面的搜索服务,我们叫商品搜索,也叫主搜索;私域,就是我们店铺内的搜索。第三就是商业化,消费者可能了解的比较少,它是比较偏后台的,因为商品搜索作为淘宝最大的一个流量入口,成交占比最高的一个入口,除了做用户和卖家流量匹配外,还有平台战略的落地,比如说平台的长期可持续发展,平台的竞争力,这里包括平台宏观规划和通过微观或者是算法来落地。最后一个就是风控,一般就是指反作弊,具体就是指炒信,因为炒信一般来说有两个特点,商品炒信一般不是个人行为,它是个团体的行为;第二个这些团体一般不会只炒一个商品,会炒多个商品,我们反作弊团队一个是通过图计算,第二个通过graph embedding做了很多非常不错的工作。商业化和风控不会展开讲,我今天主要是讲前面两块,一个是交互,第二个是商品搜索。
接下来讲一下商品搜索的特点。商品搜索我们理解就是带一个关键字的个性化推荐。交互这一块主要是引导用户怎么去跟搜索互动,怎么去探索发现用户的一些潜在的需求。第二,就是个性化,个性在商品搜索里面是最重要的一个因素,也是商品搜索区别于网页搜索一个根本的差异。个性化有几个特点,一个就是说用户兴趣是多变的,因为从用户搜索到最后成交时间是非常短的,那这对我们的技术架构来说,我们要有实时计算的能力,实时的去捕获用户的兴趣偏好给他推荐相应的商品,这是第一个实时计算。第二,训练样本没有ground truth,可能很多同学不理解什么意思,比如做语音识别跟图象分类是很不一样的,像语音和图片分类其实跟环境是没有关系的,但是个性化不一样,因为用户的行为是受限于当前的排序的,用户最喜欢的商品如果排不出来,就无法触达到该商品;这导致的问题是用线上的日志训练一个新的模型,部署到线上去,经常发现效果不如离线的好,不好的原因是新排序模型训练日志来自老的排序模型,把新模型部署到线上的话会产生全新的排序结果,而新排序结果的用户的反馈离线是没有办法得到校验的,所以我们经常就发现离线训练模型效果挺好的,但线上测试效果不好。那怎么解决这个问题呢,我们主要是通过在线学习来解决,就是提高模型的迭代速度,实时收集用户反馈,然后在不断的学习和部署到线上,通过不断在线学习,在线部署和实时反馈,最终达到一个比较平衡的状态;由于训练样本受环境影响的特点,我们实现了实时计算和在线学习平台,目前已经得到广泛的应用;第三个就是用户在淘宝上买东西的时候往往会跨多个产品,比如说搜索收一收,在店铺找一找,最后在推荐里面成交了,这是非常正常的一个现象。但现在面临一个问题是,这些产品都是想把自己成交做得最大,它会导致一个问题是大量的行为重定向技术会导致搜索点击一个商品,其他场景很快会出来一模一样的商品,导致很多无效的曝光,今年我们在多个产品线之间联合优化做了一些尝试,并取得不错的效果。 最后一个是冷启动,这是我们要做深度学习一个重要的原因之一,因为传统的行为重定向技术很难降用户在一个类目下面很难到迁移另外一个类目,比如鞋子和裤子的商品关系很难用协同过滤方法计算,而深度学习通过对用户和商品做embedding,有很好的泛发能力,同时有非常好的迁移能力。 第三,因为我们淘宝毕竟是一个商业平台上面的搜索,它承担了很多对平台里面的需求,在我们搜索里面优化目标往往有多个,比如说我们的货单价,卖家的流量,还有对于炒信的抑制,还有对SEO的抑制等等有很多的诉求,所以搜索存在就是一个多目标的问题,它不是一个简单的GMV。
最后一个数据闭环,我们一般看到是做CTR预估,那其实在淘宝的行为远不止曝光和点击,它包括成交,评价,收藏,加购等。有很多种的行为,这里面带来两个问题,第一个问题就是模型训练目标,怎么学习这些不同的行为类型和属性,其次是模型特征,怎么去把不同商品内容、行为类型和属性融合,比如点击时间和点击停留时间,商品文本、图片和评价情感等怎么去融合到我们深度学习里面来。基于这些业务特点我们搜索构建了自己的一套技术体系,包括实时计算、在线学习,强化学习,多目标学习、多模学习,多智能体联合优化等,我后面都会讲一些具体的例子。
AI@搜索里边的落地先要解决哪些问题?
第一个就是系统的计算能力的问题,首先你得有一个大规模深度学习平台。搜索和图片可能不太一样,因为搜索我们大部分是用ID的特征,淘宝已经有10亿在上面,如果你拿10亿个商品去做embedding,每个只要16维的话,就是160亿个参数,所以这个模型会非常非常大,你要具备这种超大规模的深度学习模型训练的能力,系统这一块也做了非常不错的工作,比如稀疏矩阵计算,底层通讯, IO等,同时还实现了在线跟离线的混步,这个也帮我们解决了计算资源的问题。 第二个在线学习,因为用户的行为变化很快,要用在线学习,这个也是我们在线机器学习也做了很多不错的优化,建立了从实时日志收集,在线模型训练,实时模型同步部署的流程,解决在线学习的问题。第三个异构计算,我们做在线预测的时候,深度学习模型相对浅层模型,性能差异是非常大的,在我们深度学习模型中我们做精排的性能消耗比以前下降了10倍以上。如果传统的用CPU算至少要加十倍的机器,关键加十倍机器还不行,因为latency太高了,今年搜索这边就基本上实现了GPU和CPU的异构的计算,双11的时候我们用到了550张GPU卡来做排序。
第二个算法能力,前面提到搜索输入信号和目标,和图片分类等很不一样,商品有商品的ID、图片、文本,行为反馈有不同行为类型,停留时间,成交价格等,怎么做多模信息的融合和学习不同行为类型,所以要具备根据搜索业务的特点开发合适的网络结构,优化方法等的算法能力。 第三个就是落地场景,有了能力还需要找到好的落地点,下面是我们的应用场景: a. 语义搜索和匹配,我们知道这几年在NLP领域发展的很快,现在做语义搜索,这是一个水到渠成的事情。 b.个性化这,包括用户的感知,排序策略,个性化匹配。因为个性化是搜索里面最重要的一个因素,如果不能个性化结合,做的价值也会比较小。 c. 全链路的优化,多个个性化产品的联合优化; d. 模型量化和压缩,做预测性能加速。
这是今年在深度学习,一些系统的问题,算法应该怎么做,怎么找落地场景这三方面的考虑的。
搜索其实一直是在往智能化方向在努力的。如果要从迭代的规律来看,基本上是算法和系统的交织发展的,算法首先要有强大的计算能力和系统的支撑, 算法反过来会推动系统的升级,它基本上这样一个交织发展的过程。
早期机器学习平台基于MPI做浅层模型,在MPI开发过训练代码需要自己控制机器之间的通信,学习成本较高,并且MPI是点对点的通信,机器多了性能非常差,没办法做超大规模的机器学习,后来采用PS后大规模的机器学习才成为可能,目前平台已经发展为基于异构计算和离在线混布的机器学习平台。另外一个特点是样本时效性,我们逐步发展出了离线学习和在线学习的平台。第三个是Inference,我们通过异构计算,就是实现了这种深度学习的在线预测。
从算法角度其实也是差不多的,就是说最开始是用离线浅层模型做排序,然后从离线模型到在线模型再到深度学习,再到在线深度学习和强化学习。
搜索大概分三部分: 一个是离线,就是我们的ODPS加PAI; 第二个是我们的实时,实时就是我们的PORSCHE; 第三个就是在线,在线是HA3引擎加上业务引擎配套的比如说图引擎、个性化引擎,是我们整个搜索的架构。 离线做什么呢?一是离线模型的训练,第二是做离线的特征的预测,我们排序很多通过离线模型做预测的,比如商品的CVR,GMV预估等。
第二个在线学习和实时计算,实时计算主要是实时日志处理和特征计算,比如用户实时偏好预估,商品实时转化率统计等。在线学习主要是根据实时日志更新模型。
然后下面就是讲智能搜索具体怎么落地。
首先讲一下智能交互。
智能交互有三个方面的这部分组成,第一个就是Query推荐,这是比较古老的课题;第二个做智能导购,这是现在正在做的一个原形,后面我会讲为什么做智能导购;第三个内容的展示和个性化的创意。就是说你把商品怎么展示给用户,也是我们认为是交互的一部分。
第一个是Query推荐,这个问题怎么来抽象呢?Query推荐是一个用户当前Query下面我们怎么推荐其它Query,这是我们相关搜索一样的。我们推荐这样的一个Query以后,如果用户一旦点了其中的一个Query,用户的状态就会发生变化,从当前的Query跳到另外一个Query,这是用户状态的变化。第二个就是说我们怎么评价我们推荐的Query的好坏,它由几部分组成,一个Query有没有被点,第二个就是说推荐Query里面,它的SRP页会不会点,因为Query推荐本质上不是Query推荐做的最好就是最好的,它是说最终要在搜索SRP用户有没有买,有没有点击,这才是做的好的,这是第二个收益。还有一个更加间接的,通过Query推,这个状态转到下一个状态以后,这个里面还会推其它Query,还会有其它点击,这个时候也是个间接推荐。如果我不推Query就不能到这个状态,不到状态不会有这个Query,不会有这个收益。我们了解,这就是典型的一个马尔科夫决策过程,我们是用强化学习来做的,Actions就是我们的Query list,根据用户和当前Query推荐其他Query,状态就是User + Query,收益就是包括推荐Query击,还有一个间接收益,间接收益通过bellman 公式可以算出来,这就是一个DQN的强化学习项目。
然后第二个就是为什么做智能导购。现在的搜索呈现的问题就是说,如果去看搜索的Query都是一些品类词、品牌词、型号词或者属性词。假定用户他知道买什么再来搜索搜,但是有各很大的东西用户不知道买什么吗?智能导购就是做做一个类似智能导购机器人的产品,引导用户怎么搜,用户也可以主动问,获取知识或购物经验。这是后台的算法的一个原形,不久后会上线。
第三个就是智能内容。这个其实它主要解决这样的问题,因为淘宝的商品,卖家为了适应我们的引擎,做了大量的SEO,里面都是罗列热门的关健词,导致问题淘宝的标题没什么差异,都写的差不多,看标题也不知道什么东西,或者知道但里面没有很多特色的内容。我们做智能内容很重要的出发点是怎么从商品的评价、详情页、属性里面挖出一些比较有卖点,或者商品比较有特色的东西展示给用户,让用户更好的了解商品,这是第一个。第二个淘宝上面还有类似商品聚合的,比如清单,生成一个清单,怎么给清单生成一个比较好的导入的描述,让用户描述这个清单干什么。这里面主要做了这两个事情。具体怎么做的?一个会生成一些Topic,比如行业运营加上我们挖的一些点,比如像手机一般大家关注点会是手机的性价比,拍照是不是清晰,还有速度是不是快,是不是发热什么的,这是用户关注的兴趣点。然后它会根据这个商品会选择一个兴趣点,通过Seq2seq生成短文本。
这是交互这一块。
下面说一下语义搜索,我们的商品属性基本上是比较标准化的,因为这里淘宝有一个这样的商品库,非标准化的内容是没法上传的。导致的问题是我们的商品内容相对来说是比较规范化的,但是用户的输入的Query不是这样的,比如我这里举一些例子,比如一个新品有各种表达,2017新品,2017冬季新品,是吧?新品,有很多的表达。所以就是从从用户的需求跟商品的内容,就存在了一个语义的Gap。还有我们经常举例,比如三口之家用的电饭锅,很多这种语义的问题,这个语义从语义角度解决语义Match的事情。
大概会有这么几个方面。比如一个就是意图的理解,还有意图的Mapping,比如大容量冰箱,首先知道大的是跟冰箱的容量相关的,冰箱是个类目,最后要Mapping到人的冰箱,把‘大’改写成一个容量大于多少升,类目是冰箱这样才能够比较好的解决我们这个搜索的这个召回的问题。 第二个语义理解,这里面包括Query和商品都要做语义理解,比如通过image tagging计算从图片里面抽取很多文本的语义标签补充到商品文本索引中。 第三个就是现在有这个端到端的深度学习技术来直接学Query和商品的Similarity,通过端到端的深度学习技术来做语义的召回和语义的相关性。
然后下一个我主要讲智能匹配,主要就是讲个性化,做个性化的首要就是个性化数据。个性化本质上就是说以用户为中心构建用户的标签,用户的行为,还有用户的偏好,再通过这些数据找到,去Match到商品,比如说你看过相似商品,典型的协同过滤,还有你偏好的品牌的其它商品。那就是基于这些经历了一个以用户为中心的电商图谱,这里面还加了一些辅助的数据,比如商品的相似度,店铺之间的相似度,这样构建了我们这样的叫电商图谱。
召回是这样的,首先从咱们的电商图谱里取出用户的信息,包括比如说年龄性别,还有当地温度是多少,还有行为足迹等等之类的,社交现在没用了,因为这是几年前社交特别火,什么都要掺和一下,其实社交,信息的社交到电商其实风马牛不相及的领域,没有任何价值。所以现在好友这东西几乎没有用。因为不同Query中,用户信息重要性是不一样的,我们根据上下文会做用户信息的筛选或者排序,会找出比较重要的信息做个性化召回。以上是淘宝商品索引结构,传统的搜索关键字是通过搜索关键字召回,而个性化商品索引,除了Query还会有商品簇,簇与簇之间的关系,品牌店铺等等之类的,会加很多个性化的特征做召回,通过这种带的好处是召回的结果跟用户是直接相关的,就召回这一步带来个性化。
但是这种基于行为召回还是存在一个问题的。最重要的问题它的泛化能力会比较差。最典型的比如说你通过协同过滤来做,如果两个商品,没有用户同时看过的话,这两个商品你认为他们相似度是零,这个结论是错的,但是如果通过协同过滤就有这个问题。我们今年实现了向量化召回,包括两步:一个是Similarity learning,通过这个深度学习做端到端的Similarity learning,就会把这个我们的User 和Item会变成一个向量;第二步就是做向量化召回,比如层次聚类,随机游走,learning to hash等,这样的话就是说会极大的提升召回的深度。
第三个介绍一下我们在个性化做的工作。因为在个性化领域其实最重要的一个核心的问题就是怎么去理解用户,怎么感知用户和预测用户行为及偏好。我们怎么感知用户呢?
首先是数据,用户在淘宝有两个中类型重要的基本信息:一个是用户标签,比如年龄、性别、职业等;第二是用户足迹,比如 点过,买过的商品,店铺等;
其次是用户感知要和搜索上下文相关,即这个用户的表征和要用户搜索意图相关;
第三是搜索有很多差异化的任务,比如用户消费能力的预估, User到Item的CTR预估和用户购物状态预估等,是为每个任务做个端到端的深度学习模型还是用统一的用户表征来完成不同的Task?如果每一个任务都做端到端深度学习会有很多问题,比如离线和在线的性能开销会大很多,或部分任务样本太少。
如图是我们的用户感知深度模型,输入X是用户的点击行为序列,下一步是embedding,embedding完以后,通过LSTM把用户行为序列做embedding,因为在搜索用户感知和Query相关,所以加入query 的 attention层,选择和当前query有关系的行为,表征完是Multi-task learning 网络。整个这个网络的参数大概有一百亿个参数,我在双11我们还实现了在线学习。接下来问题就是说怎么来做Item的embedding和User的embedding。
下面献给大家介绍一下怎么来做商品的 embedding,商品上面信息其实量是非常大的,有商品ID,有店铺,有关键字,有图片,用户的类型也是有很多种的,有点击,有成交,点击的还有停留时间,需要把不同维度的信息综合在一起做一个embedding,形成统一的表征向量,这里面我们用到了类似多模学习的思想,这是商品图片和其他信息融合的例子,首先是用一个Vgg模型,训练用图片分类的任务完全VGG网络的初始化,然后把分类的网络层去掉,用用户前面点过的商品的图片预测下面的商品点击行为,通过这种方法就完成了这个商品的图片特征的一个抽取,而商品ID用类似于Factor machine来做的。上面是完成了不同维度的特征的embedding,接下来是通过attention 降不同特征融合起来。
这是比较加入特征对于效果的影响,评测任务有lte任务,CTR的任务和购买力预估的任务。我们看到就是说随着特征的增加的话,我们的AUC准确率其实还是有明显的提升的,加上attention会有进一步的提升。说明通过加入更多维度的信息,做多维信息的融合,对我们这个整体的准确率有明显的提升的。 然后是对于LTR的,CTR任务AUC,发现我们通过attention的多模信息的融合对比简单拼接的方法,效果是有很明显提升。
那前面讲到这个其实我们只是完成了,完成了输入商品ID的embedding,下一步怎么做User的embedding,这一层是我们LSTM的输出,我们这里面引用Query和User profile信息,把行为序列的输出通过attention最终形成一个统一用户的表征。这样做的一个目的是用户的点击行为序列是比较杂乱的,可能前面点过手机,点过鞋子,点过裙子,那今天他来搜裙子,这时候我们知道裙子会比较重要,前面点的手机和鞋子没那么重要。
这是我们离线模型训练的这样的大概的流程。
我们今年因为实现了在线和离线的混布,我们用的资源比以前多的多,这个模型是用到了三万个CPU的核。然后这是我们在线学习的流程,为什么做在线学习,主要还是说前面讲因为商品或者用户它的,它这个谁先受线上环境的影响是比较快的,所以我们在双11当天其实也是实现了在线选择的流程。
然后同时我们还做了大量的试验,一个是说用CNN还是LSTM好,因为前面我刚才前面讲,一个用户点击行为,它是个行为序列,这个行为序列到底是用哪个效果更好。其实LSTM没有达到预期那么好,这个主要是因为没有attention。下面这两个对比的是端到端训练和预训练加fine tuning,我们这里面也做了两个试验,一个是做预训练,预训练就是我们,比如说先验一个非监督的方法,完成ID的embedding,然后在基于模型做一些Fine tuning,这个就是我们item embedding是一起来学的,其实我们发现就说端到端的学习比Fine tuning的效果好得非常多的。
然后这个对比Multi task和single task的差别,这里红线是single task,蓝线是我们的Multi task,像这个来看的话,我们Multi task的效果比single task效果还要好,这个解释的主要是,你做多任务学习的时候每一个,那你其它任务都是这个任务的一个正则项,这个你得到用户的表征,它的泛化能力是更强的,所以你在预测集上得到一个更好的准确率。
然后因为搜索里面新的任务会越加越多,今天我们只做了三个,随着搜索的个性化做的越来越深入,如果有新的业务以后,对于我们这个方法能不能迁移到新的任务,也是做了三个试验,红线的是端到端的,我加一个新的任务以后用我之前的方法,端到端的去学,我不加其它任务,第二个做简单的transfer learning,把User的这个表征这块固定下来,只做下面的Fine tuning;第三就是用预训练好的模型端到端的做fine tuning学习,其实我们这个方法比端到端的学习,比transfer learning效果其实也是要更好的。
然后这个就是我们上下文attention的一个解释。这是用户的行为序列,看了衣服帽子鞋子,伞之类的,我们看到我们在搜裙子的时候,我们看到就是说用户第一时间点过的裙子,这两件裙子和这件裙子,它的重要性会更高,伞的重要性就比较小,也验证了我们的attention想法。
下面我再讲一下排序模型。其实在最早做个性化排序的时候就意识到一个问题,在不同场景下不同的特征的重要性是不一样的。举个例子,像这种3C数码或者标类,我们对品牌的关注度比较高,但是比如说我们有些人买衣服的时候,或者买配件的时候不会怎么看中品牌,更多的看中功能和性价比。在不同的场景下面,甚至不同的人群下面,个性化的特征,它的重要性是不一样的,没法用一个统一的权重统一的模型来排序。所以这里面千人千面的排序模型,以前说千人千面,每个人有不同的结果,排序模型最好做到千人千面。最早的做法,我们人工的根据这个行业加上人群,划成一千份,每一份数据会彼此独立,所以这里面有一千个模型,用户来了以后根据它的Query,根据用户的一个状态,就会落到其中的一个模型,这里每个是一个LTR模型,是一个线性模型。这个大概是一两年前做的事情。
这样做有个问题,因为每个模型的数据是完全分开的,训练数据没有共享,所以做在线学习遇到很大的问题,因为每个模型的数据非常少,没法做在线学习,第二个是简单的线性模型,相对来说比较简单。所以今年做的事情是说我们实现这种在线的基于深度学习的非线性排序模型。这里面一个是说今年加了很多深度学习特征,其次我们会把Query User引入进来,跟商品的特征做一个拼接,然后再去学习。这样的话它的好处是说整个模型训练所有样本都会过的,而不是把这个数据分的很细。通过深度学习非线性的表达能力,我们就实现了,可以认为是千人万面的排序模型。因为这个User不是用户的状态,跟用户的行为序列实时发生变化,你在淘宝里面,同一个Query,你上一页跟下一页的排序模型是不一样的,我们根据状态调整排序模型。
然后这是我们在做性能优化做的事情,就是说这个在排序的时候,我们因为每个Query结果比较多,所以一般的排序,先一个比较简单的特征,先过滤掉一些明显不喜欢的商品,剩下商品再给到相对复杂的模型,是一个层次排序的过程。之前每层需要计算多少个商品是人工设定的统一参数,但实际上对结果多的query每层排序商品需要多,而结果少的query需要少点 。基于这个目的我们实现了cascade learning的方法,动态学习每个query的截断商品数量,在今年双11的时候,我们当天的性能带来了30%的提升的。
然后下面这个就是讲了一个Learn to Display,一般的排序模型只是给单独一个文档的算分,然后按照分数的大小排序。但在因为个性化排序中,如果两个商品比较相似,得分也会比较相似,会导致排序结果中部分结果是趋同的,多元性差。Learn to Display主要为了解决这个问题,核心思路是根据已经排序好的商品来预测下一个商品的分数,这里我们是用LSTM对已经排好的商品做表征,用beam search 生成排序序列。
还有一个最后讲一下智能决策。机器学习是给你一些确定样本,根据样本调整模型参数来优化学习目标。但是现实情况中,有时候是我们没有样本,或者为了得到样本要付出很大的代价,这时候怎么来做?其实我们身边有很多类似问题,举多臂老虎机的例子,有多个老虎机,每个老虎机输赢概率不一样的,怎么跟老虎机赌博收益是最大的,一般是每个老虎机用少量的币去试,更多花在赢概率大的机器上,其实在搜索有很多类似的问题,比如冷启动时怎么探索用户偏好效率最高,典型的还有一些传统长短期收益问题,间接收益很难通过离线数据驱拟合的,你只能通过在线做探索。
第一个问题就是说我们用来解决过度个性化的问题,过度个性化,大家估计吐槽的最多。那这里面我们通过MAB的方法来解决过度个性化问题,我们在搜索个性化会分为这几者类型,前面三者都是比较强的个性化,后面还有弱的个性化模型,根据一些简单的人群,购买力的模型,个性化相对较弱但多样性好。在每一页搜索结果中,不同个性化的比例怎么展示,这是早期我们用MAB实现的一个例子。
然后最后再给大家讲一个合作的一个问题。还是我前面讲的,我们有很多个性化产品,如果每个产品采用相同的个性化策略,导致每个结果比较趋同,那这个其实实际上在浪费流量。 我这里据举了一个例子更加容易的说明这个问题。假设我们在一个一百米的沙滩上,有两个卖冰淇淋的,那他们最理想的位置是什么?一个站在25米,一个站在75米的位置,这样是最优的,因为这样他们各占一半的市场,每个顾客买冰淇淋的时候平均的距离只有12.5米,这是最优的一个分布。但是在非合作竞争时,这种情况是不存在的,因为对于A来说,它为了扩大自己的客源,他会往中间移,因为他往这里移一下,他的用户群体就会增加是吧,B也不傻,B也会往中间移,最后A和B都在中间。这样的话整个客户数变少,因为两边的客户,买冰淇淋变得更远,但是A和B还各占50%,整个客户变少了,他们谁都没占到便宜,消费者还体验变差了,典型的一个非合作竞争的问题。在现实环境中类似问题非常多,我们用淘宝主搜索和淘宝店铺内搜索两个场景做为试点,通过多智能体实现了跨场景的联合优化。
我们提出了multi-agent的方法来解决这个问题,每个场景的我们认为就是一个智能体,我们要用让这些智能体学会合作;首先第一个问题就是解决智能体之间的通信,如果没有通信是没法合作的,这个通信我们是用LSTM来做的,用lstm把用户不同场景中的状态和action通过lstm编码。其次是场景之间怎么联合决策,我们用经典的multi-agents方法, 每个场景的Action是独立的但评价是统一的,统一评价保证这两个Action朝着共同的目标学习。
这是线上应用的一个使用的流程。Porsche是会负责样本的搜集,然后通过replay的方法训练模型训练,训练好的模型会实时同步模型到预测系统。预测系统对于一个具体的场景,我画的是A1这个场景,这个场景来了以后首先会去获取当前的用户的状态,和上一个状态的通信的信息,然后会来产生一个排序策略,然后线上的环境会投放A1生成的排序策略,环境会给一个反馈,包括比如说它的状态是什么,它的收益是什么,下一个状态是什么,通过这个反馈,数据在流入到我们的Porsche,开始下一轮模型的训练和迭代,这样完成了数据闭环。这是线上应用的一个流程图。
然后这是一个效果,这个是我们在平时测的一个结果,这个是LTR和LTR,是两个独立的LTR模型,但是两个LTR模型的目标是一样的,他们都是在优化这个联合的收益,但是是两个独立的LTR模型做的。这个是Multi-agents做的,我们看到Multi-agents比两个独立的LTR去学,GMV比它还是高了0.8个点的。双11当天的效果会更明显,双11当天我们联合优化带的GMV提升是12%,相对于单独优化的版本我们提升了三个点的提升。
然后接下来我讲一下就是系统的演化。那首先我前面强调因为个性化,因为线上的环境会变化的很快,所以搜索其实是构建了实时计算和在线学习的平台。这里面主要是流计算的Blink平台。然后第二个就是说我们的数据其实是构建了一个电商图谱的数据,那对应的其实我们系统这边就有一个图引擎。第三个就是我们的排序服务,排序服务其实去年都还是基于CPU的,那今年其实我们现在已经实现了CPU和GPU的异构计算,这样才能支持我们深度学习的应用。机器学习平台,这几年,不光是我们整个集团这方面发展,从离线学习到增量学习到在线学习,构建了这样的一个不同时效的学习的体系。实现了这个混布和异构计算。搜索的在线服务,到晚上是流量低谷,我们有大量机器可能CPU负载很低的,通过混布把机器学习调度的这些在机器上面,实际上是为集团还是节省了很多计算资源的。
第二个对于算法而言的话,对于算法而言最基本我们是从浅层模型到深度学习模型,带来的变化有很多,之前我们一般是单任务的学习,现在深度学习很容易做多任务的学习,包括迁移学习,这是深度学习带给我们的很好的一个特性。第二个包括我们的优化方法,其实也会有很大的变化,以前我们常用的batch的优化方法,其实在深度学习里面我们用的大部分都是随机梯度的优化方法。
然后第二个就是说其实我们也是根据搜索的业务特点,我们在策略这块做了很多探索,像多MAB、CMAB,DQN、DDPG MULTI AGENTS等。
我讲一下软硬协同,因为现在深度学习大量的使用,性能还是一个我们比较关注的一个点。怎么做性能优化,从算法的角度,我相信很多应该知道。因为深度学习模型里面还是存在大量的冗余信息的,这些冗余信息怎么合理的去掉对我们预测的加速,还是非常明显的。这些方法我相信大家可能也知道,那这个是我们今年在一个spell-check任务点上面通过二值网络做的一个试验。就是我们其实本质就是把原始的矩阵和向量的乘法变成多个二值矩阵乘法。如果是我们这里给的例子是两个网络,就是说一个矩阵乘法变成四个一个二值矩阵和向量的乘法,因为二值的乘法容易通过XOR实现,这样对性能提升还是非常明显的。
这是我们在CPU上做的试验,我们用三个B来做,我们性能提升有1.59,精度其实损失还好,全精度0.53,三个B大概是0.52。因为集团做这个的也很多,我们现在做的比较大胆的我们实际上,我们除了权重的量化以后,我们做的是激活的量化,因为集团很多只做了权重的量化。
然后这个我讲一下为什么,为什么我提的是软硬协同,就是说因为现在我们的GPU也好,CPU也好,低精度的矩阵计算或者稀疏矩阵的计算,还包括二值的矩阵计算,这是不太好的。所以我们现在也调研了一些比如FEGA,因为FEGA它的计算逻辑你可以自己定制,你要做什么计算精度,自己定义计算逻辑。那它对于低精度,或者稀疏矩阵和二值网络计算支持比较好,这里是对比,全精度来算的话,我们看到FEGA它的性价比还是相对来说不是特别高。但是如果我们加上一些算法的优化,比如说我们把这个模型做一些模型的压缩,那其实我们看到它就40%的提升,如果我们做低精度,int6,就有50%提升,如果二值网络,就有3倍的提升。 我觉得将来这种软硬件的协同对于系统的优化未来应该是很重要的方向。
最后介绍一下未来的主要的一些挑战。
第一个就是说,第一个怎么学一个更加通用的用户表征的一个学习,这个就是说,因为在整个集团里面很多个性化的产品,当前的其实我们也只要解决搜索的用户表征的问题,那这个用户表征,首先是能够应用到更多的地方,怎么去用,这里面其实未来还是想做一个更加兼容的用户的标准,能够用到更多的业务里面去。第二个其实通用表还有一个另外一个问题就是说因为用户在淘宝里面的行为序列其实比较长的,你真正了解一个用户可能需要对它的行为轨迹做几年的跟踪,可能过去一两年的行为对今天的购买还会造成影响,所以这里面怎么做这种Life long learning。就是我们可能要,现在的模型其实我们每天都在学,每天都在做增量的学习,希望看这个模型学一年以后,我们的模型对于用户的了解比现在高很多。现在我们才学的两个月,是吧?我们希望是说一年以后这个模型对于用户的感知或者对用户的理解会比现在好很多很多。
第二个就是多场景的联合优化。现在其实我们是做的一些搜索内部的一些联合优化,将来我们想的还是说有没有可能在集团里面跟更多的团队合作,实现更大范围的这种个性化产品的灵活的优化。 还有就是多目标的学习,搜索里面有很多这种流量的约束,对于炒信的抑制,还有GMV,这些很多这种目标我们将来怎么去做这个综合的学习,而不是说,比如现在有流量的调控和排序,其实是两个完全独立的体系。 还有一个比较有意思的是超参数的学习,这个其实我们在不管深度学习模型里面还是系统里面都存在大量的超参数,超参数怎么去学,深度学习里面做深度学习知道超参数怎么优化调差。