在上一篇博客里面分享的是《推荐系统实践》中协同过滤相关的算法,对此还不熟悉的读者可以戳这里。
关于这个系列会分为如下几个部分:
《推荐系统实践》算法纯享(附代码链接)(一)—— 评价指标篇
《推荐系统实践》算法纯享(附代码链接)(二)—— 协同过滤篇
《推荐系统实践》算法纯享(附代码链接)(三)—— 冷启动篇
《推荐系统实践》算法纯享(附代码链接)(四)—— UGC推荐篇
《推荐系统实践》算法纯享(附代码链接)(五)—— 借助上下文信息推荐篇
《推荐系统实践》算法纯享(附代码链接)(六)—— 借助社交网络推荐篇
《推荐系统实践》算法纯享(附代码链接)(七)—— 评分预测篇
完整代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice
下面将开始本系列的第三部分——冷启动篇。
3 冷启动
冷启动问题主要分为3类:
- 用户冷启动:解决为新用户做个性化推荐的问题
- 物品冷启动:解决将新物品推荐给可能对它感兴趣的用户这一问题
- 系统冷启动:解决在新开发的网站上,没有用户,也没有用户行为,只有一些物品信息的推荐问题
这里主要分享两个算法,一个是利用用户的注册信息进行冷启动,一个是利用物品本身信息进行冷启动。
3.1 利用用户注册信息
代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice/blob/master/Chapter3/用户冷启动-利用用户的注册信息.ipynb
这里主要利用用户注册时填写的人口统计学信息,如年龄、性别、职业、民族、学历和居住地等,来进行推荐。其基本流程如下:
- 获取用户的注册信息
- 根据注册信息对用户进行分类
- 给用户推荐他所属那个分类中用户喜欢的物品
其中核心问题是计算每种分类(特征)的用户喜欢的物品,即对于每种类别(特征) f f f,计算具有这种特征的用户对各个物品的喜好程度 p ( f , i ) p(f, i) p(f,i)。
令 N ( i ) N(i) N(i)为喜欢物品i的用户集合, U ( f ) U(f) U(f)是具有特征 f f f的用户集合。计算方式有如下两种:
a. 物品i在具有 f f f的特征的用户中的热门程度
p ( f , i ) = ∣ N ( i ) ⋂ U ( f ) ∣ p(f, i) = |N(i) \bigcap U(f)| p(f,i)=∣N(i)⋂U(f)∣
b. 喜欢物品i的用户中具有特征 f f f的比例
p ( f , i ) = N ( i ) ⋂ U ( f ) ∣ N ( i ) ∣ + α p(f, i)=\frac{N(i) \bigcap U(f)}{|N(i)| + \alpha} p(f,i)=∣N(i)∣+αN(i)⋂U(f)
α \alpha α是为了解决数据稀疏的问题,比如有一个物品只被1个用户喜欢过,而这个用户刚好就有特征 f f f,那么就有 p ( f , i ) = 1 p(f, i)=1 p(f,i)=1。但是,这种情况并没有统计意义,因此为分母加上一个比较大的数,可以避免这样的物品产生比较大的权重。
3.2 利用物品的内容信息
代码链接:https://github.com/Magic-Bubble/RecommendSystemPractice/blob/master/Chapter3/物品冷启动-利用物品的内容信息.ipynb
一般物品都有自己的内容信息,比如有一些文本等信息,这时候可以用NLP的知识将物品内容表示成向量空间模型,即表示为一个关键词向量。其流程如下图:
例如对于物品d,它的内容表示为关键词向量如下:其中 e i e_i ei是关键词, w i w_i wi是关键词对应的权重。
d i = ( e 1 , w 1 ) , ( e 2 , w 2 ) , . . . d_i = {(e_1, w_1), (e_2, w_2), ...} di=(e1,w1),(e2,w2),...
对于关键词权重的计算可以使用著名的TF-IDF公式:
w i = T F ( e i ) l o g D F ( e i ) w_i = \frac{TF(e_i)}{logDF(e_i)} wi=logDF(ei)TF(ei)
在给定物品内容的关键词向量之后,对于物品相似度的计算就可以通过余弦相似度进行计算:
w i j = < d i , d j > ∣ ∣ d i ∣ ∣ ∣ ∣ d j ∣ ∣ w_{ij}=\frac{<d_i, d_j>}{\sqrt{||d_i||||d_j||}} wij=∣∣di∣∣∣∣dj∣∣<di,dj>
同样的,与前面的协同过滤算法类似,可以建立关键词-物品的倒排表加速计算过程。
在得到物品之间的相似度之后,就可以用前面的ItemCF进行推荐了。
对于冷启动的分享到这里就结束了,下面将继续分享第四部分——UGC推荐篇。