深度学习在线教育平台实践---协同过滤推荐系统

对于商品内容进行分析,进而根据商品内容进行推荐,是一种常用的推荐系统实现技术。但是如果商品种类很多,而且商品的属性很复杂,这样靠人工来标注商品的内容属性,就变得不太现实了。协同过滤技术正是为了解决这一问题而提出的,通过这种技术,我们不需要了解商品本身,只需要通过研究用户与商品这间的交互,就可以精准的向用户推荐他们可能感举趣的商品了。
具体到我们的个性题库系统,如果我们的客户有数以万计的题目,让人工来观看每个题目,然后给出这个题目有多少成份是知识点1,有多少成份是知识点2,是一件工作量非常巨大的事情。而且在实际应用中,我们对每个题目的描述,也不仅仅是知识点1、知识点2两个特征,所以实际应用中工作量非常巨大,这就是基于内容的推荐技术应用较少的原因。
如果我们换个角度来看待这个问题,我们还是用知识点1、知识点2两个特征来描述每个题目,但是我们并不知道每个题目到底是知识点1还是知识点2。为了解决这个问题,我们会评做每个学生,给该学生对知识点1、知识点2的需要程度进行打分,那么我们的研究问题就变成了已经参数集 {θ(1),θ(2),...,θ(nu)} { θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) } ,来求出每部影片样本集 {x(1),x(2),...,x(nm)} { x ( 1 ) , x ( 2 ) , . . . , x ( n m ) } ,如下所示:

*题目张一李二王三赵四知识点1知识点2
x(1) x ( 1 ) 题目15500??
x(2) x ( 2 ) 题目250??
x(3) x ( 3 ) 题目340??
x(4) x ( 4 ) 题目40054??
x(5) x ( 5 ) 题目5005??

{θ(1),θ(2),...,θ(nu)}={0.05.00.0,0.05.00.00.00.05.00.00.05.0} { θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) } = { [ 0.0 5.0 0.0 ] , [ 0.0 5.0 0.0 ] , [ 0.0 0.0 5.0 ] , [ 0.0 0.0 5.0 ] }

我们的任务就是根据上面的已知条件,推测出每个题目的特征向量 x(i) x ( i ) 。例如,我们要预测题目 x(1) x ( 1 ) 我们知道张一和李二都需要知识点1,而对知识点2掌握程度较好,而王三和赵四都非常需要知识点2,对知识点1掌握程度较好。通过上表可以看到,张一和李二对题目1的需要程度都是5分,而王三和赵四的需要程度则为0分,综合上面的信息,我们不难推测出题目1是知识点1的题目,而不是知识点2的题目,所以 x(1) x ( 1 ) 的值为:
x(1)=x(1)0x(1)1x(1)2=1.01.00.0 x ( 1 ) = [ x 0 ( 1 ) x 1 ( 1 ) x 2 ( 1 ) ] = [ 1.0 1.0 0.0 ]

注意,在上面的表示中 x(1)0 x 0 ( 1 ) 始终为1, θ(0) θ ( 0 ) 取b,代表偏移量。
那么我们的推测是否正确呢?因为我们已经知道了参数集 {θ(1),θ(2),...,θ(nu)} { θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) } ,同时知道了当前样本的特征向量 x(1) x ( 1 ) ,我们可以很方便地求出每个学生对题目1的需要程度,通过与学生对这个题目的实际需要程度,我们就可以得出我们对x(1)的推测是否正确,学生j对题目i的打分可以通过如下公式计算:
y^(i,j)=θ(j)2x(i) y ^ ( i , j ) = θ ( j ) 2 x ( i )

具体计算过程如下所示:
y^(1,1)=θ(1)2x(1)=0.05.00.0T1.01.00.0=5.0 y ^ ( 1 , 1 ) = θ ( 1 ) 2 x ( 1 ) = [ 0.0 5.0 0.0 ] T [ 1.0 1.0 0.0 ] = 5.0

y^(1,2)=θ(2)2x(1)=0.05.00.0T1.01.00.0=5.0 y ^ ( 1 , 2 ) = θ ( 2 ) 2 x ( 1 ) = [ 0.0 5.0 0.0 ] T [ 1.0 1.0 0.0 ] = 5.0

y^(1,3)=θ(3)2x(1)=0.00.05.0T1.01.00.0=0.0 y ^ ( 1 , 3 ) = θ ( 3 ) 2 x ( 1 ) = [ 0.0 0.0 5.0 ] T [ 1.0 1.0 0.0 ] = 0.0

y^(1,4)=θ(4)2x(1)=0.05.00.0T1.01.00.0=5.0 y ^ ( 1 , 4 ) = θ ( 4 ) 2 x ( 1 ) = [ 0.0 5.0 0.0 ] T [ 1.0 1.0 0.0 ] = 5.0

从上面可以看出,我们的计算结果与学生的实际需求程度结果是一致的,这证明我们对 x(1) x ( 1 ) 的预测是准确的。
这就引出了我们的协同过滤算法,对于题目i,我们首先需要选取适当的 x(i) x ( i ) ,使得我们预测出的学生对题目i的需要程度与用户实际对题目i的需要程度误差得到最小值,我们假设 m(i) m ( i ) 为影片i的所有评分数量:
minx(i)12m(i)i:r(i,j)=1(θ(j)Tx(i)y(i,j))2 min x ( i ) 1 2 m ( i ) ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) 2

为了提高模型的范化能力,我们在上式上加入 L2 L 2 调整项,表明我们希望参数 x(i) x ( i ) 的2范式平方最小,即参数值越小越好,如下所示:
minx(i)(12m(i)i:r(i,j)=1(θ(j)Tx(i)y(i,j))2+λ2m(i)k=1nx(i)k2) min x ( i ) ( 1 2 m ( i ) ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) 2 + λ 2 m ( i ) ∑ k = 1 n x k ( i ) 2 )

与上一节类似,我们也去掉不影响取得极小值的 m(i) m ( i ) ,得到最终的代价函数为:
minx(i)(12i:r(i,j)=1(θ(j)Tx(i)y(i,j))2+λ2k=1nx(i)k2) min x ( i ) ( 1 2 ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ k = 1 n x k ( i ) 2 )

我们不仅需要学习题目i的参数向量 x(i) x ( i ) ,我们需要学习所有题目参数向量 {x(1),x(2),x(3),...,x(nm)} { x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . , x ( n m ) } ,所以代价函数就变为如下式所示:
minx(1),x(2),x(3),...,x(nm)(12i=1nmi:r(i,j)=1(θ(j)Tx(i)y(i,j))2+λ2i=1nmk=1nx(i)k2) min x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . , x ( n m ) ( 1 2 ∑ i = 1 n m ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n x k ( i ) 2 )

通过上面的讨论,我们可以得到代价函数为:
J(x(1),x(2),x(3),...,x(nm))=minx(1),x(2),x(3),...,x(nm)(12i=1nmi:r(i,j)=1(θ(j)Tx(i)y(i,j))2+λ2i=1nmk=1nx(i)k2) J ( x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . , x ( n m ) ) = min x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . , x ( n m ) ( 1 2 ∑ i = 1 n m ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ i = 1 n m ∑ k = 1 n x k ( i ) 2 )

我们采用梯度下降算法,可以得到如下公式:
k=1,,n k = 1 , … , n 时:
x(i)k=x(i)kα(i:r(i,j)=1(θ(j)Tx(i)y(i,j))θ(j)k+λx(i)k) x k ( i ) = x k ( i ) − α ( ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) θ k ( j ) + λ x k ( i ) )

式中 α α 为超参数学习率,需要人工设定。
在有了上两节介绍的算法之后,我们就可以根据我们的实际情况,应用其中的一种算法,来进行推荐了。在实践中,我们其实可以将两种方法结合起来,取得更好的推荐效果。我们首先确定题目的特征向量,例如在本例中知识点1、知识点2特征,然后我们估计每个学生对这些特征的需要程度,即估计参数集 {θ(1),θ(2),...,θ(nu)} { θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) } ,然后我们运行协同过滤算法,学习出每个题目的特征向量。接着我们以新学习出来的特征向量为基础,通过内容推荐算法,重新学习出新的参数集 {θ(1),θ(2),...,θ(nu)} { θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) } ,此时的参数集会比我们开始时的估计值要好很多。我们可以再以新的参数集为输入,利用协同过滤算法求出每道题目的特征向量,这个过程可以一直进行下去,直到得到令人满意的结果。
但是这种方法有一个缺点,就是要运行两个独立的线性回归模型,效率比较低下。在下一节中,我们将介绍将两个算法结合起来,一次可以同时学习参数集和特征向量。
这里写图片描述
慧川数码专营店 深度学习支持

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值