现在主要做编程。当年学习网络主要看《TCP/IP详解:卷一》,还有cisco一系列的书。
软件除了抓包软件,还要选一个配置终端比如secureCRT,安装系统的虚拟机比如VMware,接下来当然要推荐各种模拟环境。
小巧如Cisco Packet Tracer,虽然只是个模拟器,但是可以配置各种协议,发包还有动画,可以点击看每一步在做什么。另外还可以搜集各种题目(pka)进行配置。(ccna级别的实验都可以做)
gns3是陪伴我最久,在路由的模拟上比Cisco Packet Tracer要逼真,因为加载的cisco的路由器镜像(为此当年下30G左右的cisco镜像,然后常用的就2个),结合qemu以及虚拟机基本上常见网络环境都罩得住。(ccnp基本的实验都可以做)
大杀器WEB-IOU,有了图形配置界面,模拟路由交换实验都不是事。(据说ccie的实验也可以做)
ensp,集各家之长,华为良心出品,中文手册很棒。不知道某个协议是什么,怎么配,都可以看手册解决。
自从用上了这些模拟器,做一些实验都懒得跑实验室玩路由交换了,相比于插网线搬机器,还是在软件上拖拖拽拽方便。
当然以上模拟器对二层交换机的模拟支持的不是很完全,有条件的话可以在真机上配置。
ps:不做网络好多年。。。不知道这几年有没有出更好的模拟器
推荐一下当年的资源(最好自己找下相关资源,我的推荐并不是最新的),可以去看下鸿鹄论坛,还有yeslab现任明教教主讲的tcp/ip
② 推荐系统的主要推荐方法
基于内容的推荐(Content-based Recommendation)是信息过滤技术的延续与发展,它是建立在项目的内容信息上作出推荐的,而不需要依据用户对项目的评价意见,更多地需要用机 器学习的方法从关于内容的特征描述的事例中得到用户的兴趣资料。在基于内容的推荐系统中,项目或对象是通过相关的特征的属性来定义,系统基于用户评价对象 的特征,学习用户的兴趣,考察用户资料与待预测项目的相匹配程度。用户的资料模型取决于所用学习方法,常用的有决策树、神经网络和基于向量的表示方法等。 基于内容的用户资料是需要有用户的历史数据,用户资料模型可能随着用户的偏好改变而发生变化。
基于内容推荐方法的优点是:1)不需要其它用户的数据,没有冷开始问题和稀疏问题。2)能为具有特殊兴趣爱好的用户进行推荐。3)能推荐新的或不是很流行的项目,没有新项目问题。4)通过列出推荐项目的内容特征,可以解释为什么推荐那些项目。5)已有比较好的技术,如关于分类学习方面的技术已相当成熟。
缺点是要求内容能容易抽取成有意义的特征,要求特征内容有良好的结构性,并且用户的口味必须能够用内容特征形式来表达,不能显式地得到其它用户的判断情况。 协同过滤推荐 (Collaborative Filtering Recommendation)技术是推荐系统中应用最早和最为成功的技术之一。它一般采用最近邻技术,利用用户的历史喜好信息计算用户之间的距离,然后 利用目标用户的最近邻居用户对商品评价的加权评价值来预测目标用户对特定商品的喜好程度,系统从而根据这一喜好程度来对目标用户进行推荐。协同过滤最大优 点是对推荐对象没有特殊的要求,能处理非结构化的复杂对象,如音乐、电影。
协同过滤是基于这样的假设:为一用户找到他真正感兴趣的内容的好方法是首先找到与此用户有相似兴趣的其他用户,然后将他们感兴趣的内容推荐给此用 户。其基本思想非常易于理解,在日常生活中,我们往往会利用好朋友的推荐来进行一些选择。协同过滤正是把这一思想运用到电子商务推荐系统中来,基于其他用 户对某一内容的评价来向目标用户进行推荐。
基于协同过滤的推荐系统可以说是从用户的角度来进行相应推荐的,而且是自动的即用户获得的推荐是系统从购买模式或浏览行为等隐式获得的,不需要用户努力地找到适合自己兴趣的推荐信息,如填写一些调查表格等。
和基于内容的过滤方法相比,协同过滤具有如下的优点:1) 能够过滤难以进行机器自动内容分析的信息,如艺术品,音乐等。2) 共享其他人的经验,避免了内容分析的不完全和不精确,并且能够基于一些复杂的,难以表述的概念(如信息质量、个人品味)进行过滤。3) 有推荐新信息的能力。可以发现内容上完全不相似的信息,用户对推荐信息的内容事先是预料不到的。这也是协同过滤和基于内容的过滤一个较大的差别,基于内容的过滤推荐很多都是用户本来就熟悉的内容,而协同过滤可以发现用户潜在的但自己尚未发现的兴趣偏好。4) 能够有效的使用其他相似用户的反馈信息,较少用户的反馈量,加快个性化学习的速度。
虽然协同过滤作为一种典型的推荐技术有其相当的应用,但协同过滤仍有许多的问题需要解决。最典型的问题有稀疏问题(Sparsity)和可扩展问题(Scalability)。 基于关联规则的推荐 (Association Rule-based Recommendation)是以关联规则为基础,把已购商品作为规则头,规则体为推荐对象。关联规则挖掘可以发现不同商品在销售过程中的相关性,在零 售业中已经得到了成功的应用。管理规则就是在一个交易数据库中统计购买了商品集X的交易中有多大比例的交易同时购买了商品集Y,其直观的意义就是用户在购 买某些商品的时候有多大倾向去购买另外一些商品。比如购买牛奶的同时很多人会同时购买面包。
算法的第一步关联规则的发现最为关键且最耗时,是算法的瓶颈,但可以离线进行。其次,商品名称的同义性问题也是关联规则的一个难点。 由于各种推荐方法都有优缺点,所以在实际中,组合推荐(Hybrid Recommendation)经常被采用。研究和应用最多的是内容推荐和协同过滤推荐的组合。最简单的做法就是分别用基于内容的方法和协同过滤推荐方法 去产生一个推荐预测结果,然后用某方法组合其结果。尽管从理论上有很多种推荐组合方法,但在某一具体问题中并不见得都有效,组合推荐一个最重要原则就是通 过组合后要能避免或弥补各自推荐技术的弱点。
在组合方式上,有研究人员提出了七种组合思路:1)加权(Weight):加权多种推荐技术结果。2)变换(Switch):根据问题背景和实际情况或要求决定变换采用不同的推荐技术。3)混合(Mixed):同时采用多种推荐技术给出多种推荐结果为用户提供参考。4)特征组合(Feature combination):组合来自不同推荐数据源的特征被另一种推荐算法所采用。5)层叠(Cascade):先用一种推荐技术产生一种粗糙的推荐结果,第二种推荐技术在此推荐结果的基础上进一步作出更精确的推荐。6)特征扩充(Feature augmentation):一种技术产生附加的特征信息嵌入到另一种推荐技术的特征输入中。7)元级别(Meta-level):用一种推荐方法产生的模型作为另一种推荐方法的输入。
③ 评价推荐系统的几个标准
前言
推荐系统的评测指标用于评价推荐系统的各方面性能。这些指标(之前推送过一篇文章:《推荐系统的十二大评价指标总结》,可以点击查看)有的可以离线获得,有的可以用户调研获得,有的只能在线获得。现在对于不同的指标做下详细的说明。
1.用户满意度
用户作为推荐系统的重要参与者,其满意度是评测推荐系统的最重要指标。但是,用户满意没有办法离线获得,只能通过童虎调查或者在线实验获得。
2.预测精准度
预测精准度是度量一个推荐系统(或者推荐算法)预测用户行为的能力。这个指标是最重要的推荐系统离线评测指标,从推荐系统诞生那天起,几乎99%的于推荐系统相关的论文都在讨论这个指标。
在计算该指标时需要一个离线的数据集,这个数据集包含了用户的 历史 行为记录。然后将这个数据集通过时间分成训练集和测试集。最后,通过在训练集上面建立用户的行为和兴趣模型预测用户在测试集上的行为,并计算预测行为和测试集上面的实际行为的重合度作为预测准确度。
3.覆盖度
它是描述一个推荐系统对长尾商品的发掘能力的。覆盖度的定义方法有不同。最简单的定义为推荐系统能够推荐出来的商品占总商品集合的比例。
从上面的定义可以看到,覆盖率是一个内容供应商(商家)会关心的指标。这里以图书为例,出版社可能会关心他们的数有没有被推荐给用户。覆盖率为100%的推荐系统可以将每一本书推荐给至少一个用户。此外,从上面的定义也可以知道,热门排行榜(Top 100等等)的覆盖率就很低。它只会推荐那些热门的商品,而这些商品占总商品数的比例是很小的。一个好的推荐系统,不仅仅需要比较高的用户满意度,也要有较高的覆盖度。
社会 学领域有一个着名的马太效应,所谓强者越强,弱者更弱的效应。搜索引擎的PageRank算法也具有一定的马太效应,推荐系统的初衷是希望消除马太效应,让商品都有被用户浏览的机会,但是现实是主流的推荐算法(例如协同过滤算法)也是有马太效应的。
4. 多样性
用户的兴趣是广泛的,在一个视频网站中,用户可能既喜欢看《名侦探柯南》,也喜欢看成龙的功夫片,那么,为了满足用户广泛的兴趣,推荐列表需要能够极可能的覆盖用户的不同兴趣领域,即推荐结果要有多样性。
关于推荐系统的多样性最好要达到什么程度?可以通过一个例子说明。假设用户喜欢看动作片和动画片,且80%时间在看动作片,20%时间在看动画片。那么,可以提供4中不同的推荐列表。A中10部动作片,没有动画片;B中10部动画片,没有动作片;C中8部动作片,2部动画片;D中5部动作片,5部动画片。在这个例子中,一般认为C是最好的,它既考虑的多样性,有符合用户的 历史 行为习惯。
5.新颖性
新颖的推荐是指给用户推荐那些他们之前没有听过的物品。在一个网站中实现新颖性的最简单的办法是,把那些用户之前在网站在对其有过行为的物品从推荐列表中过滤掉。评测新颖度的最简单的办法是利用推荐结果的平均流行度,因为越不热门的商品越可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有较高的新颖度。
6.惊喜度
惊喜度是最近几年推荐系统领域热门的话题。但什么是惊喜度,惊喜度和新颖度有什么区别是首先要搞清的问题。
可以举个例子说明这两种指标的区别。假设一名用户喜欢周星驰的电影,然后我们给他推荐一部叫做《临歧》的电影,二用户不知道这部电影,那么这个推荐是有新颖性的。但是,这个推荐并没有惊喜度,因为用户一旦了解周星驰的电影,就不会觉得奇怪。但是我们给他推荐一部《活着》,假设用户没有看过这部电影,那么他看完后觉得这部电影还不错,那么就可以说这个推荐让用户觉得是惊喜的。这个例子的基本意思就是,如果推荐结果和用户的 历史 兴趣不相似,却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听过这个推荐结果。
7.可信度
如果你有两个朋友,一个你很信任,一个满嘴跑火车,那么如果你信任的朋友推荐你去A地方 旅游 ,你很可能听从他的推荐,但那位满嘴跑火车的推荐你去A地方去 旅游 ,相信你多半是不会去的。这两个人可以看成两个推荐系统,尽管他们推荐的结果相同,但你却产生了不同的反应,因为你对他们的信任度是不同的。
提高推荐系统的信任度主要有两种办法。一是增加推荐系统的透明度,而增加透明度的主要办法就是提供推荐解释。只有让用户了解推荐系统的运行机制,让用户认可推荐系统的工作机制,用户才会信任来自推荐系统的推荐。二是考虑用户社交网络的信息,利用好友的信息给用户做推荐,并且用好友进行解释。这是因为用户对他们的好友计较信任,如果这个物品好友买过,那么他们对推荐结果就会相对比较信任。
8.实时性
在很多网站中,因为物品(新闻、微博等)具有很强的时效性,所以需要在物品还有时效性的时候推荐给用户。比如,给用户推荐昨天的新闻显然不如推荐刚刚发生的新闻。因此,在这些网站中,推荐系统的时效性就至关重要。
9.健壮性
任何一个能带来利益算法系统都会被人攻击。这方面最典型的例子就是搜索引擎。搜索引擎的作弊和反作弊斗争异常激烈,这是因为如果自己的商品能成为热门搜索词语的第一个搜索结果,会带来极大的商业利益。推荐系统也面临这这个问题,而健壮性指标衡量了一个推荐系统的抗击作弊的能力。
④ Amazon推荐系统是如何做到的
亚马逊使用了哪些信息进行推荐:
1)当前浏览品类
2)与当前商品经常一同购买的商品
3)用户最近浏览记录
4)用户浏览历史(长期)中的商品
5)用户浏览历史(长期)相关的商品
6)购买相同商品的其它用户购买的物品
7)已购商品的新版本
8)用户购买历史(如近期购买商品的互补品)
9)畅销商品
2、推荐系统模型:U x S → R
1)U是用户矩阵
2)S是物品矩阵
3)R是用户对物品的喜爱程度,推荐系统就是基于现有的信息填补R矩阵
3、常用推荐算法
1)基于内容:易实现,效果好,但是如何获得一个物品的内容、相似度如何定义等有些情况下会较难把握
2)协同过滤:基于物的协同过滤与基于人的协同过滤
3)矩阵分解(SVD):用户-物品评分矩阵A很大且稀疏,将A分解为用户矩阵(用户潜在因子)和物品矩阵(物品潜在因子),目标是这两个矩阵的乘积尽可能接近R。缺点是只利用了评分信息,忽略了用户属性和物品属性
4)因子分解机(FM):将SVD推广到多类潜因子的情况,如分解为 用户、物品、用户性别、用户年龄、物品价格 等多个因子,允许因子之间有相关关系(如下图,方程前半部分是线性回归,后半部分加入了两两因子间关系)
5)深度学习:训练深度神经网络,输入用户id,输出层做softmax,得到对每个物品id的权重
6)机器学习排序
7)探索与利用:先对用户聚类(如分为abcde五类),随机对a中的用户1和b中的用户2推荐电影,如果用户1没点击,2点击了,说明b类用户可能对该电影更感兴趣。
8)集成:对上述多种方法的ensemble
⑤ 推荐系统论文阅读(十)-基于图神经网络的序列推荐算法
论文:
论文地址: https://arxiv.org/abs/1811.00855
论文题目:《Session-based Recommendation with Graph Neural Networks》SR-GNN
github: https://github.com/CRIPAC-DIG/SR-GNN
基于会话的推荐一般是将序列会话建模,将整个session进行编码,变成一个隐向量,然后利用这个隐向量进行下一个点击预测。但是这种方法没有考虑到item直接复杂的转换(transitions)关系,也就是item之间在点击的session中除了时间顺序外还有复杂的有向图内的节点指向关系,所以之前的方法不足以很好的对点击序列进行建模。
现有基于会话的推荐,方法主要集中于循环神经网络和马尔可夫链,论文提出了现有方法的两个缺点:
1)当一个session中用户的行为数量十分有限时,这些方法难以获取准确的用户行为表示。如当使用RNN模型时,用户行为的表示即最后一个单元的输出,论文认为只有这样并非十分准确。
2)根据先前的工作发现,物品之间的转移模式在会话推荐中是十分重要的特征,但RNN和马尔可夫过程只对相邻的两个物品的 单向转移关系 进行建模,而忽略了会话中其他的物品。
为了克服上述缺陷,本文提出了用图神经网络对方法对用户对session进行建模:
下面具体介绍怎么进行图序列推荐
V = {v1,v2...vm}为全部的item,S = { }为一个session里面按时间顺序的点击物品,论文的目标是预测用户下一个要点击的物品vs,n+1,模型的任务是输出所有item的预测概率,并选择top-k进行推荐。
我们为每一个Session构建一个子图,并获得它对应的出度和入度矩阵。
假设一个点击序列是v1->v2->v4->v3,那么它得到的子图如下图中红色部分所示:
另一个例子,一个点击序列是v1->v2->v3->v2->v4,那么它得到的子图如下:
同时,我们会为每一个子图构建一个出度和入度矩阵,并对出度和入度矩阵的每一行进行归一化,如我们序列v1->v2->v3->v2->v4对应的矩阵如下:
这个矩阵里面的值是怎么计算的呢?下面讲一下:
看左边的出度矩阵,第一行为 0 1 0 0 ,代表着v1->v2,因为v1,只有一个指向的item,所以为1;看第二行,0 0 1/2 1/2,因为v2有指向v3和v4的边,所以进行归一化后每一个值都变成了1/2。入度矩阵的计算方法也是一样的,就不再说了。
本文采用的是GRU单元进行序列建模,将图信息嵌入到神经网络中,让GRU充分学习到item之间的关系,传统的GRU只能学到相邻的两个物品之间的关系,加入图信息后就能学到整个session子图的信息。
计算公式如下:
为了刚好的理解这个计算过程,我们还是使用之前那个例子:v1->v2->v3->v2->v4来一步步分析输入到输出的过程。
(1) 是t时刻,会话s中第i个点击对应的输入, 是n✖️2n的矩阵,也就是会话子图的完整矩阵,而 是其中一行,即物品vi所对应的那行,大小为1✖️2n,n代表序列中不同物品的数量。
如果按照例子来看,如果i取2,那么 为 [0 0 1/2 1/2 1/2 0 1/2 0]
进一步的,可以把 :拆解为[ , ]
(2) 可以理解为序列中第i个物品,在训练过程中对应的嵌入向量,这个向量随着模型的训练不断变化,可以理解为隐藏层的状态,是一个d维向量。
(3) H是d*2d的权重向量,也可以看作是一个分块的矩阵,可以理解为H=[Hin|Hout],每一块都是d*d的向量。
那么我们来看看计算过程:
1)[ ..., ] ,结果是d * n的矩阵,转置之后是n*d的矩阵,计作
2) : H相当于[ ],即拆开之后相乘再拼接,因此结果是一个1 * 2d的向量。
上面就是完整的第i个点击的输入的计算过程,可以看到,在进入GRU计算之前,通过跟As,i矩阵相乘,把图信息嵌入到了神经网络中取,加深了神经网络学习到的item之间的交互信息。
此外,就是GRU的计算过程了,跟原始的GRU不一样的地方在于输入从xt变成了嵌入了图信息的as,i。
通样也有更新门和重置门,计算方法跟原始GRU一模一样。
这里的 其实就是相当于原始gru中的 ,只不过在SR-GNN里面,进行一轮运算的时候i是没有变化,相当于每个物品单独进去GRU进行计算,得到自己的向量,也就是说在GRU的计算过程中, 是不断变化的,看一下源码更易于理解:
hidden就是公式里面的 ,在gru的每一个step计算中都会进行更新,这里我有个疑问,如果所有item的hidden都更新的话,那么应该是整个序列中所有的item并行进入GRU中进行计算,每一个step都得到自己的vector,当每个item的vector更新后,下一个step就重新根据新的 计算 ,接着计算下一个step。
计算过程大概就是下面这样:
这里有四个GRU并行计算,没次更新自己的hidden状态,输入则考虑所有的hidden和图信息。
从上面的图看来,每一个item都要进行T个step得到自己的item-vec,所以经过T个step后,我们就得到了序列中所有item的向量,即:
图中用蓝色框框画出来的向量,有了这些向量后,我们怎么得到预测结果呢?这就引入了下一个问题。
观察上面的模型结构,我们看到attention,没错,我们认为一个session中的这些item-vec并不都对预测结果产生影响,有些item对结果影响很大,有些影响很小,所以我们进行了加权求和。同时,论文认为session对最后一个item-vec,s1=vn是重要的,所以单独拿出来:
公式(6)就是简单的attention操作,其实从公式上来看就是计算每个vi跟最后一个向量vn的权值,然后进行加权求和。
在最后的输出层,使用sh和每个物品的embedding进行内积计算,这里vi应该是item的embedding层出来的向量,而不是后面一直更新的hidden:
最后通过一个softmax得到最终每个物品的点击概率:
损失函数为交叉熵损失函数:
从数据上来看,SR-GNN超过了经典的GRU4REC,这也说明了图信息的嵌入能带来更好的推荐效果。
本论文很巧妙的将图信息嵌入的神经网络中,更高地让GRU学习到每个item之间的关系,不再局限于相邻的物品之间进行学习。近年来,图神经网络的思想和方法屡屡被用在推荐系统中,学好图神经网络应该是推荐系统的下一个热潮。
⑥ 关于YouTube推荐系统的论文学习
本文是2010年发表在RecSys上的文章。本文主要介绍的是YouTube的个性化推荐的相关内容。
用户使用YouTube一般有三个原因:
--看他们在其他地方找到的单一视频(直接导航);
--围绕某个主题(搜索和目标导向浏览)查看特定视频;
--受他们感兴趣内容的吸引。
推荐系统主要是针对第三点,目的是帮助用户发现他们感兴趣的高质量视频,并且推荐结果应该随时间和用户最近的行为更新。
在YouTube的推荐应用中,面临以下挑战:
--用户上传的视频的元信息非常少;
--视频时长比较短(一般小于10分钟);
--用户行为短暂、多变而且噪声很多;
--视频生命周期短。
这是YouTube的推荐和普通视频网站推荐不同的地方,这些挑战也是现在很多短视频公司关注的问题。
推荐系统算法应该保持时效性和新鲜性,另外,用户必须了解为什么向他们推荐视频,这样可以帮助用户根据自己的喜好改善推荐引擎。推荐的视频是通过用户的行为来生成的,用户的行为包括观看、收藏、喜欢等来作为种子视频,然后使用各种相关性和多样性的 signals 对视频集进行排序。推荐系统的工程设计方面,保持各个模块的独立性,并且还需要对故障具有恢复能力,并在出现部分故障时适度降级。
这里有2种数据可以考虑:
1)是内容数据视频流、视频元信息(标题,标签等);
2)用户行为数据,包括显性和隐性数据。前者是指用户评分、明确表示喜欢、不喜欢等行为,后者是浏览、观看等行为。
原始数据中还含有非常多的噪声,很多不可控因素会影响原始数据的质量。
作者将相关视频定义为用户在观看给定的种子视频 v 之后可能会观看的视频,使用关联规则挖掘技术来确定视频间的相关性。视频i和j的相关性定义为:
将用户观看过的视频、喜欢过的视频、收藏过的视频等等作为种子集合,对它们进行N级的级联扩展,也就是YouTube选择召回的不是1步相关视频,而是n-步相关视频,即种子视频迭代n次后得到的相关视频集合,产生广阔和多样的候选结果。
在生成一组候选视频后,需要对这些相关视频进行排序。
用于排序的数据主要包括:
--视频质量:包括观看次数、视频评分、评论、收视和上传时间等;
--用户特征:考虑用户观看历史记录中种子视频的属性,例如观看次数和观看时间等;
--多样性:要在被推荐的视频集合的类别中做一个平衡,以保持结果的多样性。
这些数据最终被线性组合起来,得到ranking的评分。
本文虽然是2010年发表的,近年来有很多内容升级复杂化了,但是作为初学者,本文的知识点和整体思路是非常值得学习的。当时的YouTube推荐系统的核心算法就是基于Item的协同过滤算法,也就是对于一个用户当前场景下和历史兴趣中喜欢的视频,找出它们相关的视频,并从这些视频中过滤掉已经看过的,剩下就是可以用户极有可能喜欢看的视频。
本文是Google的YouTube团队在推荐系统上DNN方面的尝试,发表在16年9月的RecSys会议。本文第1节介绍了YouTube推荐系统主要面临的挑战。第2节介绍了一个简要的系统概述。第3节更详细地描述了候选集生成模型,包括如何对其进行训练并用于提供推荐服务;实验结果显示模型添加特征和DNN深度后可以显着提升预测效果。第4节详细说明了排序模型,包括使用加权逻辑回归技术以训练预测预期观察时间的模型;实验结果表明,增加隐层网络宽度和深度都能提升模型效果。 最后,第5节做了总结。
-规模大:用户和视频的数量都很大,传统适合小规模的算法无法满足;
-新鲜度:要求对新视频作出及时和合适的反馈;
-噪音:YouTube上的历史用户行为由于稀疏性和各种不可观察的外部因素而不可预测。 我们很少能获得基本真实的用户满意度,更多的是隐式反馈噪声信号。
推荐系统的整体结构如图所示:
该系统由两个神经网络组成:一个用于候选集的生成,一个用于排序。候选集生成网络将用户的Youtube活动历史记录作为输入,然后从海量视频集中筛选出一小部分(数百个)以高精度与用户相关的视频。排序网络负责基于更加精细的特征对候选集进行排序,最后将最高得分的视频呈现给用户(按它们的得分排名)。
该模型把这个推荐问题转化成极端多分类问题:对于用户U和上下文C,把语料库V中的数百万个视频(分类)i,在时间t处做准确的分类,如下所示:
其中u为用户U的embedding表示,vi 代表各个候选视频的embedding。embedding是指稀疏实体(单个视频,用户等)到实数密集向量的映射;DNN的目标就是在用户信息和上下文信息为输入条件下学习用户的embedding向量u,这对于用softmax分类器来区分视频是有用的。
整个模型架构是包含三层全连接层,使用relu激活函数。把用户观看历史数据、搜索数据做一个embedding,加上age、gender等特征作为DNN的输入;输出分线上和离线训练两个部分。训练阶段使用softmax输出概率,在服务期间则直接使用接近最近邻搜索来进行生产候选的N个视频。
1)把用户观看过的视频id列表做embedding,并对所有历史观看视频ID的embedding做平均,得到观看embedding向量。
2)同时把用户搜索过的视频id列表也做如上的embedding,得到搜索embedding向量。
3)用户的人口统计学属性做embedding得到特征向量。
4)简单的二值和连续特征,例如用户的性别,登录状态和年龄作为归一化为[0,1]的实数值直接输入到网络中。
5)example age:机器学习系统总是利用历史的例子去预测未来,所以对过去总会有一个隐含的偏差。为了矫正偏差,YouTube把训练样本的年龄当作一个特征。
1.训练样本要用youtube上的所有视频观看记录,而不只是我们的推荐的视频的观看记录。
2.为每个用户生产固定数量的训练样本。
3.丢弃搜索信息的顺序,用无序的词袋表示搜索查询。
4.如下图,图(a)从历史观看记录中随机拿出来一个作为正样本来预测它,其余的历史观看记录作为上下文;这样其实泄露了未来的信息,并且忽略了任何非对称的消费模式。相反,图(b)是从用户的历史视频观看记录中随机拿出来一个作为正样本,然后只用这个视频之前的历史观看记录作为输入;这样的预测效果好得多。
– 深度为0:这时网络就是一个把连接起来的输入层转换一下,和softmax的256维输出对应起来
– 深度为1:第一层 256个节点,激活函数 是ReLU (rectified linear units 修正线性单元)
– 深度为2:第一层512个节点,第二层256个节点,激活函数都是ReLU
– 深度为3:第一层1024个节点,第二层512个节点,第三层256个节点,激活函数都是ReLU
– 深度为4:第一层2048个节点,第二层1024个节点,第三层512个节点,第四层256个节点,激活函数都是ReLU
实验结果如下图所示:
可以看出,特征选取较多时,并且模型深度在四层时,可以得到较好的结果。
排序阶段最重要的任务就是精准的预估用户对视频的喜好程度。在排序阶段面对的数据集比较小,因此会采用更多的特征来计算。
作者在排序阶段所设计的DNN和上文的DNN的结构是类似的,但在训练阶段对视频的打分函数不再是softmax,而是采用的逻辑回归。如下图所示:
1)特征工程
尽管神经网络能够减轻人工特征工程的负担,但是我们依然需要花费精力将用户及视频数据转化为有效的特征。其主要的挑战在于如何表示用户动作的时间序列以及这些动作如何与正被评分的视频展现相关。但是通过对用户和物品之间的交互行为,我们能提取出一些有用信息,比如: 用户从这个频道里看过多少视频,用户上次观看这个主题的视频是什么时候等。
2)embedding 离散特征
每个维度都有独立的embedding空间,实际并非为所有的id进行embedding,比如视频id,只需要按照点击排序,选择top N视频进行embedding,其余置为0向量;而当多值离散特征映射成embedding之后,像在候选集生成阶段一样,在输入网络之前需要做一下加权平均。另外一个值得注意的是,离散特征对应的ID一样的时候,他们的底层embedding也是共享的,其优势在于提升泛化能力、加速训练、减小内存占用等。
3)连续特征归一化
对连续值类的特征进行归一化,作者设计一种积分函数将特征映射为一个服从[0,1]分布的变量;还可以对某些特征进行取根号、取对数和取平方的相关操作,使得网络有更强的表达能力。
给定正负样本,正样本为有点击视频,负样本为无点击视频;用观看时长对正样本做了加权,负样本都用单位权重(即不加权);采用的是基于交叉熵损失函数的逻辑回归模型训练的。
上表显示了在保留数据集上用不同的隐层配置得到的结果,这些结果表明增加隐层的宽度提升了效果,增加深度也是一样。
本文内容方面,介绍了YouTube基于深度学习的推荐系统,先用视频和用户的主要信息通过深度候选生成模型从百万级视频中找出数百个相关的视频,再用视频和用户的其他信息通过深度排序模型从数百个视频中找出几十个最有可能受用户欢迎的视频给用户。这样使得推荐系统对用户喜好的刻画能力大大增强,刻画的范围更加广泛。
本文结构方面,从推荐系统的整体结构讲起,划分为候选集生成和排序两个阶段,然后对每个阶段详细地展开讲解。整体过程条理清晰,逻辑严密,值得我们学习。
⑦ “干货”YouTube 基于深度神经网络推荐系统剖析
YouTube推荐系统的三大难点:
· 一是规模太大,简单的推荐算法在如此大规模数据量上可能是失效的;
· 二是实效性,即新数据不断产生,需要将其良好的呈现给用户,以平衡旧有的好内容以及新内容;
· 三是噪音问题,用户行为与视频描述均有噪音,并且只能获得充满噪音的用户隐含反馈,而不能直接获取用户满意度。
图1.YouTube基于深度学习推荐系统架构图
本文呈现的推荐系统解决方案分为两个部分:
· 一个是备选生成(Candidate Generation),其目标是初选结果,从海量数据中选择出符合其个人需求偏好的百级别数据;
· 一个则是排序(Ranking),通过更加丰富的用户,视频乃至场景信息,对结果进行精细化排序,得到呈现给用户的备选。
备选生成阶段,将推荐系统定义为一个多分类器,其职责是确定某个用户,在某个场景与时间下,将从系统的视频中选择消费哪一个视频。具体的方法是,将用户与视频全部转化为Embedding描述,即一个向量,最终用户消费某个视频的概率通过如下方式计算得到:
而构建用户与视频的Embedding,则是通过训练而来。将用户观看视频/搜索记录/其它信息如年龄性别等作为输入特征,部分稀疏特征首先进行Embedding化,中间为数层ReLU,最终一层用SoftMax进行分类。 换句话讲,是将用户与场景信息作为输入,预估用户下一个要看的视频,也就是将用户分到具体某一个视频作为其类别。 用户与视频的Eembedding,则是神经网络最后一层的对应矩阵。这种方法除了能利用用户行为信息外,其它信息例如设备,地理位置,性别等也可以作为输入,这是神经网络相对于普通MF类算法的优势之一。
图2.YouTube推荐备选生成阶段架构
备选生成的下一个阶段是排序。其网络结构跟备选生成阶段类似,将所有排序模型中的信息输入后,进入多层ReLU,最终进行优化的是一个加权逻辑回归损失函数,观看时间作为阳性样本权重。在这一层,也可以看到其推荐“代理问题”的转化:由点击行为预估转为了以观看时长为权重的点击行为预估,这样更佳贴近Youtube的产品优化方向。与备选生成阶段另一个不同在于,排序模块需要考量的特征要多得多:
· “场景”类特征,例如用户可能在某个地方某个时间愿意观看某一条视频,但是在别的地方别的时间则不会;
· 曝光信息:用户观看了某界面,但是并未在其上进行操作,那么随之应进行已呈现内容降级;
· 备选生成层输出:排序需要将各种备选结果联合起来;
· 更丰富的用户信息:例如用户最近的一次搜索词,用户最近观看的同一个主题下的视频数量,用户上一次观看同主题视频的时间,用户所使用的语言等;
图3.YouTube推荐排序阶段架构
除了整体设计与系统架构以外,本篇论文中陈述了很多“选择”,这些选择更多的是“艺术”而不完全属于技术范畴。这些选择往往是很多技术人员关注不多的点,但在笔者看来,这些都蕴含着YouTube技术与产品人员深入的思考与判断。
“Example Age” 特征
对于YouTube产品层来讲,鼓励内容产生毫无疑问是至关重要的,所以推荐系统也希望对用户上传的新内容的有所偏好。然而幸运的是,即使损失一部分相关性,视频的消费者也偏好新内容。也就是说,新内容的价值可以良好的通过其带来的吸引力呈现出来,并不需要平台刻意而为之。
由于系统使用一个时间窗口的训练样本进行训练,如果没有视频的上传时间信息,那么模型会认为这个时间窗口内用户对视频的偏好是稳定的,然而事实远非如此。将视频的上传时间加入到特征集合后,预估更加准确,尤其是视频刚上传阶段的强烈便好被成功捕捉到。
图4.无时间特征预估/有时间特征预估/真实情况 三者对比
优化目标选择
图5.优化对象的选择
算法系统的设计首先要明确优化对象,这不仅仅涉及到损失函数的形式,同样也是评判系统成功与否的标准。YouTube是视频平台,更是富含“价值”的长视频平台,其观看行为比点击行为意义更大。(当然,笔者认为没有任何一个简单指标可以完全代表一个产品)
“正样本”定义
图6.何为正样本的设计选择
训练数据来源
图7.关于训练数据来源的设计抉择
训练数据应该只来源于推荐界面的曝光吗?YouTube认为不然。如果只考虑推荐界面曝光,则无法对用户便好进行 探索 ,更加无法捕捉用户偏好的变化,因为用户偏好的变化往往首先会对应着搜索与浏览行为。所以YouTube将各个界面例如搜索,导航等用户行为全部纳入其中。
训练数据窗口
图8. 训练数据收集方式的设计选择
Youtube将所有用户等而视之,每个用户收集一定量的样本。而不是惯常可见的直接收集一个时间窗口内的所有用户行为,作为训练样本。这样的好处是避免系统收到少数行为过多用户的影响,使得系统更多的为大众设计。这样的设计理念与近期阿里Gai Kun的论文中评测方法(用户AUC)设计有异曲同工之妙。
用户行为序列处理
图9.用户行为序列信息处理的设计选择
在系统中,用户往往会顺着一个检索结果页或者用户发布者浏览页进行顺序观看,如果系统捕捉到了用户看了检索界面的前三个结果,那么预估用户将看第四个结果就会很容易。但是这样真的好吗?将检索结果页面或者用户发布视频界面直接作为推荐结果呈现给用户是并不友好的--抢了别的界面应该干的活嘛。所以此处YouTube对用户行为序列做了处理,在模型输入中选择放弃用户行为的序列信息,将其打散成词袋Embedding,即使这样的信息有利于模型的离线训练效果。
预估对象的选择
图10.关于预估对象的设计选择
用户的行为往往是有顺序的,用户在系统中“热身”后,在一个频道下面,往往先看大众喜欢的热门,然后逐步找到自己的兴趣点,聚焦看一块内容。那么,训练数据则应该收集用户前段时间行为,预估此后的行为。而不是收集时间前后段的行为,预估中间时间段的用户行为。这样模型更加接近用户习惯。
除此之外,Youtube根据系统设计了对应的实验,结果非常简单:深度网络层数越高,效果越好。
YouTube的推荐系统,已经为其贡献了70%的用户播放时长,搜索与导航在PC时代的主导地位在移动时代已经完全被颠覆掉。希望大家在其中学到一些东西。笔者水平所限,若有错误不当之处,敬请指正。
另外,个人用TensorFlow模拟Youtube的推荐系统,做了一个简单实现。其实就是一个多分类器外加一个单分类器,远谈不上成熟,可以供大家参考。
https://github.com/wangkobe88/Earth
——END——