[TOC]
个性化推荐算法实践第05章基于内容的推荐方法Content Based
本章节重点介绍一种基于内容的推荐方法content based。从content based算法的背景与主体流程进行介绍。并代码实战content based算法。
第一部分:基于内容的推荐的理论知识部分
一、个性化召回算法Content based背景介绍
之前博文讲到的CF、LFM、Personal Rank都同属于基于领域的推荐。item2vec属于基于深度学习的推荐。
基于内容推荐不同于之前讲过的任何一种个性化召回算法,属于独立的分支。我们有必要去了解该算法出现的背景。
- 思路简单,可解释性强
任何一个推荐系统的初衷,都是推荐出用户喜欢的item。
基于内容的推荐,恰恰是根据用户的喜好之后,给予用户喜欢的物品。
eg:某一个用户经常点击体育类的新闻,那么在这个用户下一次访问这个网站系统的时候,自然而然的给用户推荐体育类型的新闻。那么对于推荐结果可解释性非常的强。
- 用户推荐的独立性
基于内容的推荐,推荐的结果只与该用户本身的行为有关系,其余用户的行为是影响不到该用户的推荐结果的。但是,联想一下,之前提到的无论是CF还是LFM、personal rank以及item2vec,其余用户的行为都会一定程度上,或多或少的干预到最后的推荐结果。
- 问世较早,流行度高
由于基于内容推荐思路的极简性,可解释性,所以它出现的非常早;并且,无论是在工业界,还是研究界,都最为一种基础的算法,流行度非常的高。
但是,任何事物都是有两面性的,基于内容的推荐不是说是完美的,它同样有一些非常明显的缺点。
(1)对于推荐的扩展性较差:也就是说,如果一个用户之前经常访问体育类型的新闻,那么在之后的推荐之中,倾向于在体育范围内不断地挖掘;很难完成跨领域的物品推荐。
(2)需要积累一定量的用户的行为,才能够完成基于内容的推荐。
二、Content-based算法的主体流程介绍
实际上该算法的主体流程大部分不属于个性化推荐的范畴,应该从属于NLP或者用户画像的范畴。只有极小部分属于个性化推荐算法实战的范畴。
- item profile:对item的刻画
针对于基于内容的推荐下,对item的刻画大体可以分为两大类:(1)关键词刻画;(2)类别的刻画。
比如,在信息流场景下,我们需要刻画出这篇新闻属于财经还是娱乐;那么在电商场景下也是一样的,我们需要刻画出这个物品它属于图书还是说属于母婴,具体的关键词上也会有这个图书是数据机器学习的还是人文情感的,这个物品是参与满减的,还是参与包邮的等等。
第一步完成内容的物品刻画之后,第二步需要对用户进行刻画。
- user profile
传统范畴的用户画像是比较宽泛的,它不仅包含了用户的动态特征,还包含了它的一些静态特征。
而我们用在基于内容推荐里的更多的是聚焦在用户的长期、短期行为,进而通过行为的分析将用户感兴趣的topic、或者用户感兴趣的类别给予刻画。
那么,有了item的刻画,有了user的刻画,第三步就是在线上完成个性化推荐的过程。
- online recommendation
给用户推荐他最感兴趣的一些topic,或者说一些类别。
假设某个用户经常点击明星新闻,当用户访问系统的时候,我们应该明星最新的新闻最及时的推荐给用户,这样点击率自然很高。
那么经过这三步流程的分析,可以发现:实际上,前两步更多的同属于NLP或者说是用户画像的范畴,第三步更多的是我们个性化推荐的内容实战范畴。
下面将每一部分的技术要点进行解析:
(1)item profile
a. Topic finding(Topic 发现):首先要选定特征,这里的特征是title和内容主体的分词,那么得到词语的分词之后,针对于topic的发掘采用命名实体识别的方式。这个命名实体识别的方式可以去匹配关键词词表,那么得到了关键词之后,我们需要对这些关键词进行一定的排名,那么将排名最高的top 3 或者top 5给 item 完成label。
至于这里的排名,会使用一些算法和规则,算法诸如:TF-IDF,规则是基于自己的场景总结出来的修正错误case的一些规则。
b. Genre Classify(类别的划分):首先选定好特征,这里同样是利用一些文本信息,比如说title,分词(正文中所有的去过标点,去过停用词)得到的词向量,这里词向量在浅层模型中可以直接one-hot编码,在深层模型中,首先可以先进行一个embedding,这里使用的分类模型主要是像LR、GBDT、CNN等等。
分类器的使用,是使用多种分类器,分别占不同的权重,然后对结果进行一个线性的加权,从而得到正确的分类。
以上是针对于文档的topic 发掘或者说是类别的分类进行的叙述。那么对于短视频,实际上现在引入了一些更多的特征,比如关键帧所对应图像的分类识别,以及音频所对应的语音识别后,文字的处理等一些有意义的尝试。
(2)user profile
a. Genre/Topic(类别的划分)(Topic 发现):
一个层面是用户对哪些种类的新闻或者是物品感兴趣;另一个层面是对哪些关键词感兴趣。
现在多是基于统计的方式,业界也在做一些尝试,比如引入分类器等等。
b. Time Decay:
注意时间衰减,不同时期的行为所占权重是不同的。
最终,针对于某个用户最想想刻画得到的结果是,用户对于不同种类item的倾向性,eg,比如这个用户对于娱乐倾向性是0.7,对于财经的倾向性是0.3。
(3)线上推荐部分
a. find top k Genre/Topic ;
b. get the best n item for fix genre/topic
第一步,基于用户的刻画,找到用户最感兴趣的top k个分类,由于这top k个分类都是带有权重的,那么第二步,相应给每个分类得到n个最好的分类下的item.
这里有两点说明,
a. 由于权重的不同,从种类下召回的数目是不同的。比如某人对财经感兴趣,对娱乐也感兴趣,但是对娱乐感兴趣的程度更高。那么对娱乐召回的数目就要多于财经召回的数目。
b. best的理解:这里的best对于不是新item来讲,就是它的后验CTR;如果是新的item,在入库的时候,都会给出一个预估的CTR,那么就用这个预估的CTR来作为衡量的标准。
第二部分:基于内容的推荐的代码实战部分