对于商品内容进行分析,进而根据商品内容进行推荐,是一种常用的推荐系统实现技术。但是如果商品种类很多,而且商品的属性很复杂,这样靠人工来标注商品的内容属性,就变得不太现实了。协同过滤技术正是为了解决这一问题而提出的,通过这种技术,我们不需要了解商品本身,只需要通过研究用户与商品这间的交互,就可以精准的向用户推荐他们可能感举趣的商品了。
具体到我们的个性题库系统,如果我们的客户有数以万计的题目,让人工来观看每个题目,然后给出这个题目有多少成份是知识点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 ) | 题目1 | 5 | 5 | 0 | 0 | ? | ? |
x(2) x ( 2 ) | 题目2 | 5 | ? | ? | 0 | ? | ? |
x(3) x ( 3 ) | 题目3 | ? | 4 | 0 | ? | ? | ? |
x(4) x ( 4 ) | 题目4 | 0 | 0 | 5 | 4 | ? | ? |
x(5) x ( 5 ) | 题目5 | 0 | 0 | 5 | ? | ? | ? |
我们的任务就是根据上面的已知条件,推测出每个题目的特征向量 x(i) x ( i ) 。例如,我们要预测题目 x(1) x ( 1 ) 我们知道张一和李二都需要知识点1,而对知识点2掌握程度较好,而王三和赵四都非常需要知识点2,对知识点1掌握程度较好。通过上表可以看到,张一和李二对题目1的需要程度都是5分,而王三和赵四的需要程度则为0分,综合上面的信息,我们不难推测出题目1是知识点1的题目,而不是知识点2的题目,所以 x(1) x ( 1 ) 的值为:
注意,在上面的表示中 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的打分可以通过如下公式计算:
具体计算过程如下所示:
从上面可以看出,我们的计算结果与学生的实际需求程度结果是一致的,这证明我们对 x(1) x ( 1 ) 的预测是准确的。
这就引出了我们的协同过滤算法,对于题目i,我们首先需要选取适当的 x(i) x ( i ) ,使得我们预测出的学生对题目i的需要程度与用户实际对题目i的需要程度误差得到最小值,我们假设 m(i) m ( i ) 为影片i的所有评分数量:
为了提高模型的范化能力,我们在上式上加入 L2 L 2 调整项,表明我们希望参数 x(i) x ( i ) 的2范式平方最小,即参数值越小越好,如下所示:
与上一节类似,我们也去掉不影响取得极小值的 m(i) m ( i ) ,得到最终的代价函数为:
我们不仅需要学习题目i的参数向量 x(i) x ( i ) ,我们需要学习所有题目参数向量 {x(1),x(2),x(3),...,x(nm)} { x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . , x ( n m ) } ,所以代价函数就变为如下式所示:
通过上面的讨论,我们可以得到代价函数为:
我们采用梯度下降算法,可以得到如下公式:
当 k=1,…,n k = 1 , … , n 时:
式中 α α 为超参数学习率,需要人工设定。
在有了上两节介绍的算法之后,我们就可以根据我们的实际情况,应用其中的一种算法,来进行推荐了。在实践中,我们其实可以将两种方法结合起来,取得更好的推荐效果。我们首先确定题目的特征向量,例如在本例中知识点1、知识点2特征,然后我们估计每个学生对这些特征的需要程度,即估计参数集 {θ(1),θ(2),...,θ(nu)} { θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) } ,然后我们运行协同过滤算法,学习出每个题目的特征向量。接着我们以新学习出来的特征向量为基础,通过内容推荐算法,重新学习出新的参数集 {θ(1),θ(2),...,θ(nu)} { θ ( 1 ) , θ ( 2 ) , . . . , θ ( n u ) } ,此时的参数集会比我们开始时的估计值要好很多。我们可以再以新的参数集为输入,利用协同过滤算法求出每道题目的特征向量,这个过程可以一直进行下去,直到得到令人满意的结果。
但是这种方法有一个缺点,就是要运行两个独立的线性回归模型,效率比较低下。在下一节中,我们将介绍将两个算法结合起来,一次可以同时学习参数集和特征向量。
慧川数码专营店 深度学习支持