小红书作为中国乃至全球独一无二的社区电商,目标是让全世界的好生活触手可及,那么如何帮助用户在社区里发现好生活,又如何引导用户找到值得剁手的好产品呢?本文整理自 ArchSummit 深圳演讲,探讨如何运用机器学习和人工智能,帮助小红书不到 10 人的算法团队快速接近目标。我们由此篇文章会了解到:
1. 在电商场景中的人工智能应用实例。
2. 深度学习在电商内容搜索,推荐中的应用前景。
3. 如何在初创公司合理使用人工智能。
大家好,非常开心能够在架构师峰会上和大家交流分享,谢谢大家听我分享。
我叫赵晓萌,现在是小红书算法的架构师,在小红书之前,我在微软 Bing 搜索引擎,是排序组 Core Ranking 的产品经理,负责点击模型,后面到 Twitter 的广告组做移动广告的精准投放。
今天要为大家分享四点内容:
首先介绍下小红书、小红书的人工智能团队、以及小红书在机器学习上的应用。
第二点,举一个深入的例子介绍我们怎么理解用户在小红书上产生的内容。
第三点介绍下人工智能在推荐搜索中的应用以及在小红书的应用。
第四点是结合我的经验介绍下如何在像小红书这样一个比较初期的人工智能团队,这样比较小的公司里更好地应用人工智能。
我早上听了几位讲师的分享,特别留意到他们公司有自己的机器学习训练框架和训练平台,他们在算法上做了非常多的优化,我们作为一个小公司并没有这些,我很羡慕,希望有一天我们也会有。去年我们的算法团队大约从 6 个人发展到了 10 个人,以下介绍的是去年一年的时间内,尤其在后半年完成的一些工作,希望我们的经验能够给人员和资源都比较早期的公司一些借鉴。
小红书与人工智能
我先从介绍小红书开始,介绍下我们算法团队需要解决的问题。小红书是一个分享社区加电商的 APP。
首先看下分享社区,分享社区以女性为主,是一个有少量话题引导的,但基本上是自然形成的,关于分享精致好生活的社区。这里主要分享的内容包括美装、穿搭,喜欢去的餐馆,新发现的旅行地点、酒店,最新的母婴和家居生活的内容也在增加。小红书今天有五千万的注册用户,月活跃用户超过千万,这些用户帮助我们在平台上产生了九百多万篇非常高质量的分享。这么多的内容,我要如何转发分发给用户,让他们看到想看的,这是一个算法组需要解决的问题。
小红书的另外一面是福利社,就是电商,这个问题很简单,就是你在社区里看到的,在福利社希望能买到。如何提高福利社的商品购买转换率,这个也是算法组需要解决的问题。
小红书独一无二的地方,就在于它把社区和电商融合到了一个 APP 里,非常重要的一点是它造就了女生人数占比最高的互联网公司。在我们公司里面女生男生占比是 7:3,其他公司里比例可能最高 3:7,或者 1:10 都是有可能的,这是小红书独特的地方。更重要的一点是,它造就了 1 加 1 大于二的效应。
这是什么意思呢?我们社区是提供用户黏性的,它为我们电商引流,电商这部分把流量变现,在我们 APP 里形成了一个闭环,这两个是互相推动的。对于算法团队来说,因为我们有这样独特的形式,我们有社区的用户数据,同时也有用户在福利社的行为数据,我们如何把两边的行为连接起来,更好地理解用户,这是一个非常独特的挑战。
我们算法优化的目标是什么?优化的核心目标也是两个,分别对应社区和电商。社区的目标是用户增长,我们衡量的是在社区的深度交互,这是一个间接的,但是离我们更近的一个 metrics(指标)。对于电商我们要做到的是驱动盈利,福利社的加车购买,是我们关注的指标。机器学习大概是从去年年初开始在小红书慢慢地发展起来,截止到去年年底,整体效果还不错,我们需要达到的深度交互,以及电商的购买转换,都有非常不错的提高。
深度理解小红书们产生的内容
刚才介绍了小红书和我们算法要解决的问题,现在举个具体的例子介绍怎么理解小红书的内容。刚才提到五千万用户的九百万篇推荐笔记,是我们最重要的内容,我们花了非常大的精力来理解内容。
首先我们看一下这些内容大概是什么样子。很简单,是图文并茂的。用户产生的内容图片多,而且质量非常高,同时是非常详细的种草文(推荐物品的文章),这个文章正常情况下不是横过来的,横过来是为了让大家看到这个文章很有长度,写得非常仔细,吸引眼球,而且有感情有干货。
因此需要把文本和图片结合起来去理解文章内容。我们通过机器学习把笔记的主题分到人工标定的上百个主题里。我们用 CNN(卷积神经网络)提取图像特征,用 Doc2Vec(文本到向量模型)提取文本特征,通过一个简单的分类器就能把用户笔记分到主题中。接下来具体介绍下图像特征的提取。
我们用的是卷积神经网络。
卷积神经是深度神经网络,层次比较多,是 feedforward 神经网络。简单解释下它的原理,它模拟了我们大脑处理图像的过程。什么意思呢?如果我们选一个稍浅的神经网络,把这个多层神经网络每一层的输出打出来,那我们大概就能够了解这个神经网络在做什么。最下面的输入层是我们图像的像素,第一层、第二层的输出我们可以看到这个神经网络能够提取出一些边缘的信息,再往上四五层的时候,它把边缘的信息组合起来了,我们会看到转角、圆圈还有网格这样一些形状上局部的信息,再往上到第六第七第八层的时候,就能看到一些整体的概念被抽象出来了。经过这个卷积神经网络层层的抽取和抽象,在像素之上会形成概念最有用的一些特征,这个就是我们拿到的图像的特征。通过这个卷积神经网络我们把一张图变成一个 4096 维的向量,这个向量是这个图在高维空间里的一种表示,它是有空间意义的,这个意义是指相似的图片,或者说图片上的相似特征在这个空间里是距离接近的。
我们这一套神经网络是在 Caffe Model Zoo 的很多已经预先训练好的模型里选出来的一个 VGG 的 16 层神经网络,它已经在 ImageNet 上训练好了,我们不需要花太多时间去训练它,我们只是标注了少量小红书上的图片,把它的主题标上去,然后我们再 fine-tune 这个神经网络,最后就达到我们期望的效果。
讲完了图像,我再讲一下文本的向量表示,文本的向量表示有非常多种,其中一个比较有名的向量表示叫做 Word2Vec,是 Google 提出来的,它的原理非常简单,它其实是一个非常浅的浅层神经网络,根据前后的词来预测中间这个词的概率,优化预测的时候模型就得到了词的向量表示。同样的这个词的向量表示在空间里也是有意义的,相似的词也处在相近的空间里。这个模型比较有意思的是,把向量拿出来随时可以做向量运算,比如图中,女人到男人之间的那个指向的向量,和皇后到国王之间是一样的,所以你知道其中三个,就能算出另外一个。
把文字的 Word2Vec Model 往上提一层时就会得到文本到向量的 Doc2Vec Model。那么怎么用它呢?其实就是把小红薯,就是我们的用户的笔记上的标签,它提到的商品的品牌品类加上笔记本身的内容一起放到这个模型中,我们就得到了一个描述笔记的向量,然后再提取。这个模型也是开源的,我们也直接拿来用就可以了。
当我们现在有了图像和文本的向量表示以后,我们就有监督地去训练一个分类器,把它分布到我们标注出来的主题上,我们用的分类器是一个,有一个隐层的全连接的神经网络,能达到我们要的效果。之前我说过小红书是一个非常视觉的社区,图像很多,我们只用图像提取特征就已经达到良好的效果,准确率大概是 85% 时覆盖率能达到 73% 左右,加上文本以后效果更好,准确率达到 90%,覆盖率达到 84%。
人工智能在推荐搜索中的应用
上面是一个我们用文本和图像特征来理解我们用户产生内容的具体实例。下面给大家概括介绍下小红书机器学习使用的情况。
做这方面的同行应该知道人工智能有三个阶段,最早的专家系统,到统计学习,到深度学习现在慢慢流行起来。对于我们这样一个小的公司来说,我们非常注重算法的实际效果,远超过我们看这个算法先进不先进,比如刚才我们讲的提取图像特征的模型,并不是 CNN 里效果最好的,而是一个相对简单的模型,16 层神经网络对我们来说相对简单,容易理解,比较能 Hold 住。
人工智能的三个阶段产物,我们都各有各的应用。
专家系统是指我们需要依靠人对问题的理解来设计规则,比如中文搜索中特殊的分词,在小红书早期时,搜索中大约 80% 的问题都是因为中文分词分得不太准,导致用户搜不到想要的东西。我们通过人工的一些工作,从人工加词、加词典维护,到我们做了新词发现的一套半自动的系统,这些问题就被解决掉了,实际上分词有更好的解决方法,现在已经有了基于深度学习的方法,有可能以后考虑替换这套系统。
有些专家系统确实不太好替换,比如对于电商来说,它的品类(商品的分类)系统是非常需要行业知识的,需要对商品品类有深刻的理解,而且需要结合公司电商发展的阶段来设计这套系统,系统要随着公司发展阶段的变化去不断地迭代。这套系统特别重要,因为当品类不对时,在品类下的推荐就不准,搜索的筛选可能会做得不太好,或者品类的粒度分得不够细不够准时,推荐和搜索的算法都会受到非常严重的影响,所以这套专家系统可能会一直存在下去。这是最左边的早期的专家系统,相当于早期第一个版本的人工智能,最新版本的人工智能就是现在比较火的深度学习,这点刚才也讲了,主要讲的是主题分类,同样我们可以做到图片相似,以及物体检测等。
剩下中间这块统计学习,统计学习是我们使用量最大也是实践中最常用的,这一套系统当中,最重要的就是统计的信息,往往需要用到大量的统计特征。
比如在我们推荐的 GBDT 模型中,模型的产品目的是个性化,我们希望用户可以看到想看的笔记,这属于我之前讲的笔记分发的问题。在这张表里,大家可以看到,我们有非常多的用户行为统计,产生了一些静态的信息,用来描述用户或者笔记。
我们通过用户画像和人口统计信息来描述用户,比如性别年龄等常用的静态信息。笔记分作者和内容两个维度,比如作者打分和笔记的质量、标签以及刚才介绍的主题等。还有一些我们实验过的更复杂的统计信息,被我们放弃了,因为虽然复杂但是效果并不显著。比如我们会算用户的行为趋向,是趋向在社区里花的时间比较多,还是趋向于在福利社电商花的时间比较多,我们尝试过统计用户的生命周期,这个用户是新用户、老用户、经常回来的用户、还是可能快流失的用户,还有用户的活跃时段,用户是在早上比较活跃还是晚上比较活跃,用户购买力,用户对折扣的敏感度,在社区里的活跃度,这些统计信息我们都尝试过,这些都比较静态地去描述一个用户。
还有一个非常关键的信息是动态特征,虽然动态特征并不多,但是很重要。动态特征包括用户在浏览和搜索过程中有没有点击、有没有深度行为等类似的用户反馈,这些交互的数据有一个实时的 pipeline 从线下直接放到线上的模型里,在线上会利用这些数据对交互的质量,比如点击率进行预测,以及通过协同过滤得到用户和笔记的隐性分类,这在推荐当中也是有用的。我想讲的是用户反馈的数据,即使是简单的统计都是非常有用的。我们在使用复杂模型之前先用简单的统计方法把用户的反馈数据放到模型预测中,可能就能达到想要的 80% 的效果,这是非常重要的。
还有一点是我们有两部分的数据,社区和电商的行为数据,用户在社区的行为和电商的行为是不太一样的,而且是有点互补的。比如用户在社区的行为是比较高频的,用户会在这里搜、看、点击、点赞,可能因为好奇进行点赞和点击,而在电商的数据是低频的,比如产生最后的购买。高频数据我觉得统计信息是非常有用、非常准确的,对于电商,我们认为比较昂贵的行为,比如购买和加心愿单的行为,是非常可信的,这两种数据是互补的,我们试着把这两边的数据融合起来用到特征里。
下面再举一个比较具体的例子,另外一个从文本中提取特征的例子。
之前讲的提取特征,是为了判别文本的主题,我们用的是 Doc2Vec 文本到向量的方法,向量越接近,文本越接近。现在这个场景叫相关笔记,相关笔记的要求是什么呢?推荐的笔记和用户在看的笔记最好讲的是同一个东西,比如说,同一款口红,同一个旅行目的地,同一家酒店,同一家餐馆,有可能不是同一家餐馆,是类似的餐馆,或者说同一件衣服,但是也有可能是不同款但是相似的衣服。
相关笔记的要求的是首先相关性非常强,第二在这个基础上稍微有些扩展。实际实验时发现,如果用 Doc2Vec(文本向量表示)选出来的笔记不太能满足相关性的要求,比如上图的例子,讲的是世界第一潜点诗巴丹,Word2Vec 的结果不太在乎具体地点是哪里,在最右边的例子里,我们可以看到,它找的是附近的地方,比如越南芽庄,它会把相似的地方找出来把它替换掉。在这样一个场景当中,我们选择了另外一个词向量的方法 TDIDF,一个简单的统计学方法。这个就能比较好地解决相似性的问题,因为它本来就是用于信息抽取和信息检索。
有一点让我觉得比较惊喜的是,TFIDF model 虽然基本要求词是一样的,但它可以把一类笔记找出来,就是讲用户心理、描述用户心情的笔记,因为用户描述心情用的词汇很接近,所以这个方法也会把扩展的内容找出来。举这个从另外一个应用场景来选文本向量表示的例子的意思是我们的算法选择在小公司里需要非常接地气,需要考虑具体要求,而且是实验性质的,如果不做实验尝试就没法知道哪个方法更能满足具体场景的需求。所以对于小公司来说,团队能不能快速试错、实验和迭代,这个能力可能比某个模型的质量或者模型本身能力的局限更加重要。
之前讲的几个具体的例子是我们已经实现过的,接下来展望下小红书未来机器学习团队需要做的事情。
之前举的几个都是统计的例子,主要想说明我们如何选择算法,如何注重开发的成本、速度和最后的效果。其实深度学习的效果在推荐预测上已经渐渐超过了之前讲的一些统计模型,随着机器学习平台的成熟,以及相关模型的开源,我们也会考虑把之前在推荐里用的 GBDT 模型替换掉。
深度学习有什么好处呢?首先讲深度学习的一个缺点,就是抽取的特征比较没有解释性,人工特征比较好解释是因为预先设计了特征,然后再去构造。机器学习的特征在抽象完之后,仍然保留了很多信息,虽然不好解释,但是有一个好处,留给应用想象的空间很大,可以实现一些比较有创意的应用。比如去年有一段时间小红书上突然流行分享治痘,就是脸上有很多痘痘,怎么把它治好的这种文章,用户会秀很多自拍的、脸上长很多痘痘的照片,但不是每个用户都喜闻乐见脸上充满痘痘的照片,所以我们需要识别出这些照片,把它推荐给合适的目标人群,这也可以通过我刚才讲的 CNN model 来实现。我们尝试做这件事,发现它对全脸露出的、半脸、1/4 脸甚至脸上只有少量的脸部器官,都能识别为脸部图像,而且能够识别脸上有没有痘痘。CNN 还可以很好地识别这张图里是不是文本占了绝大多数,比如是不是一个截图,对 AntiSpam(反作弊)会有帮助。未来 CNN 还可以帮我们做更多,比如我们想做一些风格上的尝试,希望通过用户买的东西和经常看的东西能够知道用户穿搭的风格。
如何在初创公司合理使用人工智能
刚刚讲完了小红书的故事,现在结合我的经验介绍下如何在类似的初创公司合理地使用人工智能。
我指的小公司是怎样的小公司?首先是希望人工智能能够融入公司业务,是非常实用主义的小公司。它不是 Google,Facebook,阿里百度这样的大公司,大公司研究的更多是人工智能的平台和框架,提供什么样的服务,专注在训练和算法效率上的提升。同时也有区别于人工智能创业公司,这些公司人工智能是它的主业,比如视觉识别、自动驾驶,它们专注于算法的创新突破,算法准确率需要有比较大的提升。我讲的这些小公司,为了将人工智能融入公司业务,它需要更多的是被验证过的算法,它关注的是算法的实用性和开发维护的成本,对于这样的小公司,我们有经验,我想从两个方面谈一下,它应该怎么看待在自己的公司应用人工智能这件事情。
首先我觉得第一点非常重要,就是越来越多的人意识到机器学习、人工智能的应用成本加速降低,小公司要抓住这个机会,抓住人工智能发展提供给自己的红利。运算力、机器学习平台的开放大家都知道,Tensorflow、Caffe 以及 MXNet 都想扩大自己的 Community,希望能够有更多的公司和更多的开发者用他们的平台。
另外一点是模型的成熟和开源,这对于深度学习阶段尤其重要,因为在统计学习阶段模型也是开放的,但是这个阶段算法的核心不在模型,而在模型里使用的特征,特征工程是当时的核心。到了深度学习,情况发生了改变,因为深度学习的核心就是模型,模型能够抽取特征,能够很快地在分类、推荐、预测得到应用。
对一个小公司来说,我们是非常需要开源的,因为从头搭建自己的这套模型非常耗时、耗力,比如我们刚才用的神经网络,它有多少层,它的层和层之间应该怎样卷积,需不需要使用 dropout,这些都是需要花大量的时间做实验,对于小公司来说这样的投入并不值得,投入太大而产出效果可能并不太好。而且深度学习好的模型通用性非常强,比如我刚才举的例子,可以用它处理很多图像识别方面的问题。
最后一点是理论知识,我认为小公司如果有效地利用这点就能够比较快地享受到人工智能带来的利益。理论知识的相对重要性在降低,工程学习能力的重要性要求在上升,这说明个人力成本在下降。几年前在推荐预测上要做到比较好的结果还是很难的,大家可以参考 09 年的时候 Netflix 做了一个挑战奖金是一百万美金,想提高推荐系统的效率,全世界当时有相关知识而且能够把这些理论知识用到推荐系统里的人非常少,人力成本非常昂贵。那么到了现在呢,我记得 Google IO 上 TensorFlow Team 有个分享,说 2005 年大约一个研究室 6 个月想要做到的基于神经网络分类的效果,在今天一个优秀的 Python 开发者有一些 TensorFlow 的背景知识,大概需要几天就能远远超过当时的效果。
小公司对理论知识非常强的深度学习大牛的依赖程度大幅度降低了,而且一个小公司请个大牛并不划算,第一大牛特别贵,第二因为大牛一般有自己的研究方向,尤其到了今天这个时候,他可能有自己的计划,并不一定愿意花时间在小公司这种已经成熟的应用上面,这就不是每个小公司都能承担的起的,第三招个大牛并不代表一段时间内业务会有很大的提升,因为人工智能需要大量工程师协同完成。现在学习能力和工程能力强的团队,能够把已经验证过的算法在快速迭代中优化,能够实现自己的场景,这样的公司反而有比较大的优势。从平台到模型开发、到开发人员的成本,这些成本都在降低,由于这些成本降低,更多的人会进来,促使这些成本加速降低,这点是现在的小公司和初创的公司可以很好利用的。
算法应用和算法团队是整个人工智能应用的冰山一角,我们需要动用整个公司研发团队的力量来支持人工智能的落地。
首先是核心业务数据的设计,对我们的电商来说刚才说的归类商品的品类系统,这是非常重要的,以及这些系统的整理迭代,保证数据的清洁。我们内部想要做这样一件事情,因为我们的搜索经常会被一些不太好的数据干扰,我们需要设计一套系统,让我们内部的人针对我们的搜索引擎做一些 SEO(搜索引擎的优化),帮助我们清理业务的核心数据,并且让他们负责地去输入新的业务数据。
第二在前端对用户行为打点,甚至为了提高效率,要做到自动埋点,比如用户反馈行为,这个信息在整个机器学习应用中非常重要,信息的收集需要产品前端和我们配合,把打点做好。数据收集之后的分析和挖掘是数据、算法团队需要帮我们做的。下一点是训练数据的标注,这是算法团队需要做的事情。当我们需要大量做实验时,AB 测试的框架,实验上线后所有的指标是不是能够反映到 Dashboard 里,这都是需要非常多的人去投入的。
因为成本的降低人工智能正在加速从学术走向日常,希望能看到更多的公司和工程师进入实践机器学习的领域,期待看到更多激动人心的智能应用。以上就是我的分享,谢谢大家。
作者介绍
赵晓萌,小红书算法架构师。曾任微软 Bing 必应搜索 Core Ranking Team 的 program manager,分管用户点击模型在 dynamic ranking 中的应用。曾任 Twitter Performance Ads,Tech Lead,负责移动相关的精准广告投放。现任小红书算法架构师,负责机器学习应用。