基于内容的推荐系统是根据内容的特征来进行推荐,如文本信息的词向量,商品的属性等信息,我们这里则是根据题目的知识点来进行推荐。
根据上篇博文的内容,我们可以将题目样本表示为如下形式:
x(1)=⎡⎣⎢⎢⎢x(1)0x(1)1x(1)2⎤⎦⎥⎥⎥=⎡⎣⎢1.00.90.0⎤⎦⎥ x ( 1 ) = [ x 0 ( 1 ) x 1 ( 1 ) x 2 ( 1 ) ] = [ 1.0 0.9 0.0 ]
x(2)=⎡⎣⎢⎢⎢x(2)0x(2)1x(2)2⎤⎦⎥⎥⎥=⎡⎣⎢1.01.00.01⎤⎦⎥ x ( 2 ) = [ x 0 ( 2 ) x 1 ( 2 ) x 2 ( 2 ) ] = [ 1.0 1.0 0.01 ]
x(3)=⎡⎣⎢⎢⎢x(3)0x(3)1x(3)2⎤⎦⎥⎥⎥=⎡⎣⎢1.00.990.0⎤⎦⎥ x ( 3 ) = [ x 0 ( 3 ) x 1 ( 3 ) x 2 ( 3 ) ] = [ 1.0 0.99 0.0 ]
x(4)=⎡⎣⎢⎢⎢x(4)0x(4)1x(4)2⎤⎦⎥⎥⎥=⎡⎣⎢1.00.11.0⎤⎦⎥ x ( 4 ) = [ x 0 ( 4 ) x 1 ( 4 ) x 2 ( 4 ) ] = [ 1.0 0.1 1.0 ]
x(5)=⎡⎣⎢⎢⎢x(5)0x(5)1x(5)2⎤⎦⎥⎥⎥=⎡⎣⎢1.00.00.9⎤⎦⎥ x ( 5 ) = [ x 0 ( 5 ) x 1 ( 5 ) x 2 ( 5 ) ] = [ 1.0 0.0 0.9 ]
在这里我们设样本特征向量x的维度为n,则n=2,注意这里不包括我们为了计算方便而添加的输助
x0
x
0
。
为了解决用户对未知题目打分预测问题,我们引入参数向量
θ∈Rn+1=R3
θ
∈
R
n
+
1
=
R
3
。对于每个学生我们都用一个参数向量
θ∈Rn+1
θ
∈
R
n
+
1
,来描述,则我们的参数集为:
{θ(1),θ(2),θ(3),...,θ(nu)}={θ(1),θ(2),θ(3),θ(4)}
{
θ
(
1
)
,
θ
(
2
)
,
θ
(
3
)
,
.
.
.
,
θ
(
n
u
)
}
=
{
θ
(
1
)
,
θ
(
2
)
,
θ
(
3
)
,
θ
(
4
)
}
。假设我们要预测学生张一对第三个题目3的需要程度,我们首先找到描述这个题目的特征向量:
假设我们要预测用户张一对第三个题目3的需要程度,我们首先找到描述这个题目的特征向量:
x(3)=⎡⎣⎢⎢⎢x(3)0x(3)1x(3)2⎤⎦⎥⎥⎥=⎡⎣⎢1.00.990.0⎤⎦⎥ x ( 3 ) = [ x 0 ( 3 ) x 1 ( 3 ) x 2 ( 3 ) ] = [ 1.0 0.99 0.0 ]
如果我们已经知道参数集的值,例如对于张一来说,其对应的参数为:
θ(1)=⎡⎣⎢0.05.00.0⎤⎦⎥ θ ( 1 ) = [ 0.0 5.0 0.0 ]
那么张三对题目3的需要程度可以通过下式来计算:
θ(1)T⋅x(3)=⎡⎣⎢0.05.00.0⎤⎦⎥T⎡⎣⎢1.00.990.0⎤⎦⎥=5.0×0.99=4.95 θ ( 1 ) T ⋅ x ( 3 ) = [ 0.0 5.0 0.0 ] T [ 1.0 0.99 0.0 ] = 5.0 × 0.99 = 4.95
所以我们预测张一将对题目3的需要程度为4.95分,那么这个分数是否合理呢?我们看到,张一对知识点1基本都非常需要练习,而对知识点2基本不需要再练习,对同样是知识点1的题目3需要程度为4.95分是比较合理的,因此我们认为是一个合理的预测结果。如果我们将这个题目推荐给张一,他就很可能补足其在知识点1上的漏洞。
如果我们预先知道参数集
{θ(1),θ(2),θ(3),...,θ(nu)}
{
θ
(
1
)
,
θ
(
2
)
,
θ
(
3
)
,
.
.
.
,
θ
(
n
u
)
}
的值,我们就可以很容易的预测出学生j对题目i的需要程度。但是我们是不可能预先知道这些参数的值的,因此我们的问题就变成怎样求出参数集的值。
我们先引入一个变量
m(j)
m
(
j
)
,代表学生j做过题目的总数。
对于学生j,我们要通过学习得到
θ(j)
θ
(
j
)
,我们的学习任务可以表述为:选取适当的
θ(j)
θ
(
j
)
,使得下式所表示的误差值最小:
minθ(j)12m(j)∑i:r(i,j)=1(θ(j)Tx(i)−y(i,j))2 min θ ( j ) 1 2 m ( j ) ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) 2
上式中叠加i:r(i,j)=1表示对学生j所有做过的题目,我们利用参数
θ(j)
θ
(
j
)
计算出该学生对题目i的需要程度,求出其与学生j对题目i的真实需要程度的偏差,并取平方,然后将所有题目的平方差相加,得到总的平方和误差,再除以用户j打过分影片的数量,得到一个平均值,我们的任务就是通过选择合适的
θ(j)
θ
(
j
)
,使得这个值达到最小。
在实际算法中,我们要会加上一个
L2
L
2
调整项,表明我们希望参数
θ(j)
θ
(
j
)
的长度(2范式)平方最小,即参数值越小越好,如下所示:
minθ(j)(12m(j)∑i:r(i,j)=1(θ(j)Tx(i)−y(i,j))2+λ2m(j)∑k=1nθ(j)k2) min θ ( j ) ( 1 2 m ( j ) ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) 2 + λ 2 m ( j ) ∑ k = 1 n θ k ( j ) 2 )
式中第二项为权值衰减项(Weight Decay),λ代表我们希望调整项起的作用,λ取较小值时,调整效果小,取较大值时调整效果大,取0时相当于没有调整。另外,还需要注意的是,式中k=1开始,因为我们第0维表示的是偏移量b,而我们通常不调整偏移量,所以k=1开始,n为特征向量维数,在我们这个问题中n=2。
因为式中的
m(j)
m
(
j
)
是一个常量,求最小值时,去掉也不会影响最终结果,为了简化运算,我们去掉
m(j)
m
(
j
)
,可以得到学习参数
θ(j)
θ
(
j
)
的代价函数:
minθ(j)(12∑i:r(i,j)=1(θ(j)Tx(i)−y(i,j))2+λ2∑k=1nθ(j)k2) min θ ( j ) ( 1 2 ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ k = 1 n θ k ( j ) 2 )
我们不仅需要学习学生j的参数向量
θ(j)
θ
(
j
)
,我们需要学习所有学生参数向量
{θ(1),θ(2),θ(3),...,θ(nu)}
{
θ
(
1
)
,
θ
(
2
)
,
θ
(
3
)
,
.
.
.
,
θ
(
n
u
)
}
,所以代价函数就变为如下式所示:
minθ(1),θ(2),θ(3),...,θ(nu)(12∑j=1nu∑i:r(i,j)=1(θ(j)Tx(i)−y(i,j))2+λ2∑j=1nu∑k=1nθ(j)k2) min θ ( 1 ) , θ ( 2 ) , θ ( 3 ) , . . . , θ ( n u ) ( 1 2 ∑ j = 1 n u ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n θ k ( j ) 2 )
通过上面的讨论,我们可以得到代价函数为:
J(θ(1),θ(2),θ(3),...,θ(nu))=minθ(1),θ(2),θ(3),...,θ(nu)(12∑j=1nu∑i:r(i,j)=1(θ(j)Tx(i)−y(i,j))2+λ2∑j=1nu∑k=1nθ(j)k2) J ( θ ( 1 ) , θ ( 2 ) , θ ( 3 ) , . . . , θ ( n u ) ) = min θ ( 1 ) , θ ( 2 ) , θ ( 3 ) , . . . , θ ( n u ) ( 1 2 ∑ j = 1 n u ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) 2 + λ 2 ∑ j = 1 n u ∑ k = 1 n θ k ( j ) 2 )
我们采用梯度下降算法,可以得到如下公式:
θ(j)0=θ(j)0−α∑i:r(i,j)=1(θ(j)Tx(i)−y(i,j))x(i)0 θ 0 ( j ) = θ 0 ( j ) − α ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) x 0 ( i )
当
k=1,…,n
k
=
1
,
…
,
n
时:
θ(j)k=θ(j)k−α(∑i:r(i,j)=1(θ(j)Tx(i)−y(i,j))x(i)k+λθ(j)) θ k ( j ) = θ k ( j ) − α ( ∑ i : r ( i , j ) = 1 ( θ ( j ) T x ( i ) − y ( i , j ) ) x k ( i ) + λ θ ( j ) )
式中
α
α
为超参数学习率,需要人工设定。
以上就是基于内容的推荐系统,其核心原理就是通过对每道题目的知识点进行人工标注,同时根据学生做题情况,推出学习对知识点的掌握情况,最后根据这些信息来进行推荐。在下一小节中,我们将向大家介绍另一类推荐算法,即基于深度学习技术的协同过滤算法。