传统推荐算法
① 生活中的人工智能之搜索和推荐算法
姓名:陈心语 学号:21009102266 书院:海棠1号书院
转自: 人工智能在搜索中的应用_u014033218的专栏-CSDN博客
人工智能在搜索的应用和实践_qq_40954115的博客-CSDN博客
【嵌牛导读】日常生活中的搜索和推荐算法也与人工智能有所关联,让我们一起来看看吧!
【嵌牛鼻子】人工智能运用于搜索和推荐算法。
【嵌牛提问】人工智能在搜索和推荐算法中有什么运用呢?
【嵌牛正文】
智能交互
智能交互有三个方面的这部分组成,第一个就是Query推荐,这是比较古老的课题;第二个做智能导购,这是现在正在做的一个原形,后面我会讲为什么做智能导购;第三个内容的展示和个性化的创意。就是说你把商品怎么展示给用户,也是我们认为是交互的一部分。
第一个是Query推荐,这个问题怎么来抽象呢?Query推荐是一个用户当前Query下面我们怎么推荐其它Query,这是我们相关搜索一样的。我们推荐这样的一个Query以后,如果用户一旦点了其中的一个Query,用户的状态就会发生变化,从当前的Query跳到另外一个Query,这是用户状态的变化。第二个就是说我们怎么评价我们推荐的Query的好坏,它由几部分组成,一个Query有没有被点,第二个就是说推荐Query里面,它的SRP页会不会点,因为Query推荐本质上不是Query推荐做的最好就是最好的,它是说最终要在搜索SRP用户有没有买,有没有点击,这才是做的好的,这是第二个收益。还有一个更加间接的,通过Query推,这个状态转到下一个状态以后,这个里面还会推其它Query,还会有其它点击,这个时候也是个间接推荐。如果我不推Query就不能到这个状态,不到状态不会有这个Query,不会有这个收益。我们了解,这就是典型的一个马尔科夫决策过程,我们是用强化学习来做的,Actions就是我们的Query list,根据用户和当前Query推荐其他Query,状态就是User + Query,收益就是包括推荐Query击,还有一个间接收益,间接收益通过bellman 公式可以算出来,这就是一个DQN的强化学习项目。
智能导购
现在的搜索呈现的问题就是说,如果去看搜索的Query都是一些品类词、品牌词、型号词或者属性词。假定用户他知道买什么再来搜索搜,但是有各很大的东西用户不知道买什么吗?智能导购就是做做一个类似智能导购机器人的产品,引导用户怎么搜,用户也可以主动问,获取知识或购物经验。这是后台的算法的一个原形,不久后会上线。
智能内容
因为淘宝的商品,卖家为了适应我们的引擎,做了大量的SEO,里面都是罗列热门的关健词,导致问题淘宝的标题没什么差异,都写的差不多,看标题也不知道什么东西,或者知道但里面没有很多特色的内容。我们做智能内容很重要的出发点是怎么从商品的评价、详情页、属性里面挖出一些比较有卖点,或者商品比较有特色的东西展示给用户,让用户更好的了解商品,这是第一个。第二个淘宝上面还有类似商品聚合的,比如清单,生成一个清单,怎么给清单生成一个比较好的导入的描述,让用户描述这个清单干什么。这里面主要做了这两个事情。具体怎么做的?一个会生成一些Topic,比如行业运营加上我们挖的一些点,比如像手机一般大家关注点会是手机的性价比,拍照是不是清晰,还有速度是不是快,是不是发热什么的,这是用户关注的兴趣点。然后它会根据这个商品会选择一个兴趣点,通过Seq2seq生成短文本。
语义搜索
我们的商品属性基本上是比较标准化的,因为这里淘宝有一个这样的商品库,非标准化的内容是没法上传的。导致的问题是我们的商品内容相对来说是比较规范化的,但是用户的输入的Query不是这样的,比如我这里举一些例子,比如一个新品有各种表达,2017新品,2017冬季新品,是吧?新品,有很多的表达。所以就是从从用户的需求跟商品的内容,就存在了一个语义的Gap。还有我们经常举例,比如三口之家用的电饭锅,很多这种语义的问题,这个语义从语义角度解决语义Match的事情。
大概会有这么几个方面。比如一个就是意图的理解,还有意图的Mapping,比如大容量冰箱,首先知道大的是跟冰箱的容量相关的,冰箱是个类目,最后要Mapping到人的冰箱,把‘大’改写成一个容量大于多少升,类目是冰箱这样才能够比较好的解决我们这个搜索的这个召回的问题。 第二个语义理解,这里面包括Query和商品都要做语义理解,比如通过image tagging计算从图片里面抽取很多文本的语义标签补充到商品文本索引中。 第三个就是现在有这个端到端的深度学习技术来直接学Query和商品的Similarity,通过端到端的深度学习技术来做语义的召回和语义的相关性。
智能匹配
主要就是讲个性化,做个性化的首要就是个性化数据。个性化本质上就是说以用户为中心构建用户的标签,用户的行为,还有用户的偏好,再通过这些数据找到,去Match到商品,比如说你看过相似商品,典型的协同过滤,还有你偏好的品牌的其它商品。那就是基于这些经历了一个以用户为中心的电商图谱,这里面还加了一些辅助的数据,比如商品的相似度,店铺之间的相似度,这样构建了我们这样的叫电商图谱。
个性化召回与向量化召回
召回是这样的,首先从咱们的电商图谱里取出用户的信息,包括比如说年龄性别,还有当地温度是多少,还有行为足迹等等之类的,社交现在没用了,因为这是几年前社交特别火,什么都要掺和一下,其实社交,信息的社交到电商其实风马牛不相及的领域,没有任何价值。所以现在好友这东西几乎没有用。因为不同Query中,用户信息重要性是不一样的,我们根据上下文会做用户信息的筛选或者排序,会找出比较重要的信息做个性化召回。以上是淘宝商品索引结构,传统的搜索关键字是通过搜索关键字召回,而个性化商品索引,除了Query还会有商品簇,簇与簇之间的关系,品牌店铺等等之类的,会加很多个性化的特征做召回,通过这种带的好处是召回的结果跟用户是直接相关的,就召回这一步带来个性化。
但是这种基于行为召回还是存在一个问题的。最重要的问题它的泛化能力会比较差。最典型的比如说你通过协同过滤来做,如果两个商品,没有用户同时看过的话,这两个商品你认为他们相似度是零,这个结论是错的,但是如果通过协同过滤就有这个问题。我们今年实现了向量化召回,包括两步:一个是Similarity learning,通过这个深度学习做端到端的Similarity learning,就会把这个我们的User 和Item会变成一个向量;第二步就是做向量化召回,比如层次聚类,随机游走,learning to hash等,这样的话就是说会极大的提升召回的深度。
个性化工作
在个性化领域其实最重要的一个核心的问题就是怎么去理解用户,怎么感知用户和预测用户行为及偏好。
首先是数据,用户在淘宝有两个中类型重要的基本信息:一个是用户标签,比如年龄、性别、职业等;第二是用户足迹,比如 点过,买过的商品,店铺等;
其次是用户感知要和搜索上下文相关,即这个用户的表征和要用户搜索意图相关;
第三是搜索有很多差异化的任务,比如用户消费能力的预估, User到Item的CTR预估和用户购物状态预估等,是为每个任务做个端到端的深度学习模型还是用统一的用户表征来完成不同的Task?如果每一个任务都做端到端深度学习会有很多问题,比如离线和在线的性能开销会大很多,或部分任务样本太少。
如图是用户感知深度模型,输入X是用户的点击行为序列,下一步是embedding,embedding完以后,通过LSTM把用户行为序列做embedding,因为在搜索用户感知和Query相关,所以加入query 的 attention层,选择和当前query有关系的行为,表征完是Multi-task learning 网络。整个这个网络的参数大概有一百亿个参数,我在双11我们还实现了在线学习。
算法包括智能交互、语义搜索、智能匹配和搜索策略四个方向。
智能交互
商品搜索就是带交互的商品推荐,用户通过关键字输入搜索意图,引擎返回和搜索意图匹配的个性化推荐结果,好的交互技术能够帮助到用户更好的使用搜索引擎,目前搜索的交互主要是主动关键字输入和关键字推荐,比如搜索框中的默认查询词和搜索结果中的文字链等,推荐引擎根据用户搜索历史、上下文、行为和状态推荐关键字。和商品推荐的区别是,关键字推荐是搜索链路的中间环节,关键字推荐的收益除了关键字的点击行为外,还需要考虑对整个购物链路的影响,包括在推荐关键字的后续行为中是否有商品点击、加购和成交或跳转到另外一个关键字的后继行为,这是一个典型的强化学习问题,action 是推荐的关键字候选集合,状态是用户当前搜索关键词、上下文等,收益是搜索引导的成交。除了被动的关键字推荐,我们也在思考搜索中更加主动的交互方式,能够做到像导购员一样的双向互动,主动询问用户需求,挑选个性化的商品和给出个性化的推荐理由,目前我们已经在做智能导购和智能内容方向的技术原型及论证,智能导购在技术上主要是借鉴对话系统,通过引导用户和引擎对话与关键字推荐方式互为补充,包括自然语言理解,对话策略,对话生成,知识推理、知识问答和商品搜索等模块,功能主要包括:a. 根据用户搜索上下文生成引导用户主动交互的文本,比如搜索“奶粉”时,会生成“您宝宝多大?0~6个月,6个月到1岁….”引导文案,提示用户细化搜索意图,如果用户输入“3个月”后,会召回相应段位的奶粉,并在后续的搜索中会记住对话状态“3个月”宝宝和提示用户“以下是适合3个月宝宝的奶粉”,b. 知识导购,包含提高售前知识问答或知识提示,比如“3个月宝宝吃什么奶粉” 回答“1段”,目前对话技术还不太成熟,尤其是在多轮对话状态跟踪、知识问答和自动评价几个方面,但随着深度学习、强化学习和生成对抗学习等技术在NLP、对话策略、阅读理解等领域的应用,越来越多的训练数据和应用场景,domain specific 的对话技术未来几年应该会突飞猛进;智能内容生成,包括生成或辅助人工生成商品和清单的“卖点”,短标题和文本摘要等,让淘宝商品表达更加个性化和多元化。
语义搜索
语义搜索主要是解决关键字和商品内容之间的语义鸿沟,比如搜索“2~3周岁宝宝外套”,如果按照关键字匹配召回结果会远小于实际语义匹配的商品。语义搜索的范围主要包括:a. query tagging和改写,比如新品,年龄,尺码,店铺名,属性,类目等搜索意图识别和归一化,query tagging模型是用的经典的序列标注模型 bi-lstm + CRF,而标签分类(归一化) 作为模型另外一个任务,将序列标注和分类融合在一起学习;b. query 改写,主要是计算query之间相似度,把一个query改写成多个语义相似的query,通常做法是先用不同改写策略生成改写候选query集合,比如词替换、向量化后top k、点击商品相似度等,然后在用ltr对后续集合排序找出合适的改写集合,模型设计和训练相对简单,比较难的是如何构建高质量的训练样本集合,线上我们用bandit 的方法探测部分query 改写结果的优劣,离线则用规则和生成对抗网络生成一批质量较高的样本; c. 商品内容理解和语义标签,通过商品图片,详情页,评价和同义词,上下位词等给商品打标签或扩充商品索引内容,比如用 image tagging技术生成图片的文本标签丰富商品内容,或者更进一步用直接用图片向量和文本向量融合,实现富媒体的检索和查询;d. 语义匹配,经典的DSSM 模型技术把query 和商品变成向量,用向量内积表达语义相似度,在问答或阅读理解中大量用到多层LSTM + attention 做语义匹配,同样高质量样本,特别是高质量负样本很大程度上决定了模型的质量,我们没有采样效率很低的随机负采样,而是基于电商知识图谱,通过生成字面相似但不相关的query及相关文档的方法生成负样本。从上面可以看到query tagging、query相似度、语义匹配和语义相关性是多个目标不同但关联程度非常高的任务,下一步我们计划用统一的语义计算框架支持不同的语义计算任务,具体包括1. 开发基于商品内容的商品表征学习框架,为商品内容理解,内容生成,商品召回和相关性提供统一的商品表征学习框架,重点包括商品标题,属性,详情页和评价等文本信息抽取,图像特征抽取和多模信号融合;2. query 表征学习框架,为query 类目预测,query改写,query 推荐等提供统一的表征学习框架,重点通过多个query 相似任务训练统一的query表征学习模型;3. 语义召回,语义相关性等业务应用模型框架。语义搜索除了增加搜索结果相关性,提升用户体验外,也可以一定程度上遏制淘宝商品标题堆砌热门关键词的问题。
智能匹配
这里主要是指个性化和排序。内容包括:a. ibrain (深度用户感知网络),搜索或推荐中个性化的重点是用户的理解与表达,基于淘宝的用户画像静态特征和用户行为动态特征,我们基于multi-modals learning、multi-task representation learning以及LSTM的相关技术,从海量用户行为日志中直接学习用户的通用表达,该学习方法善于“总结经验”、“触类旁通”,使得到的用户表达更基础且更全面,能够直接用于用户行为识别、偏好预估、个性化召回、个性化排序等任务,在搜索、推荐和广告等个性化业务中有广泛的应用场景,感知网络超过10B个参数,已经学习了几千亿次的用户行为,并且会保持不间断的增量学习越来越聪明; b. 多模学习,淘宝商品有文本、图像、标签、id 、品牌、类目、店铺及统计特征,这些特征彼此有一定程度的冗余和互补,我们利用多模学习通过多模联合学习方法把多维度特征融合在一起形成统一的商品标准,并多模联合学习中引入self-attention实现特征维度在不同场景下的差异,比如女装下图片特征比较重要,3C下文本比较重要等;c. deepfm,相对wide & deep 模型,deepfm 增加了特征组合能力,基于先验知识的组合特征能够应用到深度学习模型中,提升模型预测精度;d. 在线深度排序模型,由于行为类型和商品重要性差异,每个样本学习权重不同,通过样本池对大权重样本重复分批学习,有效的提升了模型学习稳定性,同时通过融合用户状态深度ltr模型实现了千人千面的排序模型学习;e. 全局排序,ltr 只对单个文档打分然后按照ltr分数和打散规则排序,容易导致搜索结果同质化,影响总页效率,全局排序通过已知排序结果做为上下文预测下一个位置的商品点击概率,有效提升了总页排序效率;f. 另外工程还实现了基于用户和商品向量的向量召回引擎,相对倒排索引,向量化召回泛化能力更强,对语义搜索和提高个性化匹配深度是非常有价值的。以上实现了搜索从召回、排序特征、排序模型、个性化和重排的深度学习升级,在双11无线商品搜索中带来超过10% (AB-Test)的搜索指标提升。
智能决策
搜索中个性化产品都是成交最大化,导致的问题是搜索结果趋同,浪费曝光,今年做的一个重要工作是利用多智能体协同学习技术,实现了搜索多个异构场景间的环境感知、场景通信、单独决策和联合学习,实现联合收益最大化,而不是此消彼长,在今年双11中联合优化版本带来的店铺内和无线搜索综合指标提升12% (AB-Test),比非联合优化版本高3% (AB-Test)。
性能优化
在深度学习刚起步的时候,我们意识到深度模型inference 性能会是一个瓶颈,所以在这方面做了大量的调研和实验,包括模型压缩(剪枝),低秩分解,量化和二值网络,由于缺少相应的指令集和硬件支持,最终只在个别场景下上线,期待支持低精度矩阵计算和稀疏矩阵计算的硬件早日出现。
未来计划
通用用户表征学习。前面介绍的DUPN 是一个非常不错的用户表征学习模型,但基于query 的attention 只适合搜索,同时缺少基于日志来源的attention,难以推广到其他业务,在思考做一个能够适合多个业务场景的用户表征模型,非搜索业务做些简单fine tuning 就能取得比较好的效果;同时用户购物偏好受季节和周期等影响,时间跨度非常大,最近K个行为序列假设太简单,我们在思考能够做life-long learning 的模型,能够学习用户过去几年的行为序列;搜索链路联合优化。从用户进入搜索到离开搜索链路中的整体优化,比如 搜索前的query 引导(底纹),搜索中的商品和内容排序,搜索后的 query推荐(锦囊)等场景;跨场景联合优化。今年搜索内部主搜索和店铺内搜索联合优化取得了很好的结果,未来希望能够拓展在更多大流量场景,提高手淘的整体购物体验;多目标联合优化。搜索除了成交外,还需要承担卖家多样性,流量公平性,流量商业化等居多平台和卖家的诉求,搜索产品中除了商品搜索外还有“穹顶”,“主题搜索”,“锦囊”,“内容搜索”等非商品搜索内容,不同搜索目标和不同内容(物种)之间的联合优化未来很值得深挖。
② 推荐算法小结
输入 :与用户相关的包含众多特征(feature)的数据:
用户的注册信息(职业、年龄、性别等 显信息),行为信息(使用功能、有效使用时长等 隐信息)。
输出 :推荐给用户的功能列表(根据得分高低排序)
函数 : 传统算法 、 机器学习算法 (Machine Learning)、 深度学习算法 (Deep Learning)
基于流行度的算法非常简单粗暴,类似于各大新闻、微博热榜等,根据VV、UV、日均PV或分享率等数据来按某种热度(加权)排序来推荐给用户。
访问次数 (VV):记录1天内所有访客访问了该网站多少次,相同的访客有可能多次访问该网站,且访问的次数累加。
独立访客 (UV):记录1天内所有访客访问了该网站多少次,虽然相同访客能多次访问网站,但只计算为1个独立访客。
PV访问量 (Page View):即页面访问量,每打开一次页面或者刷新一次页面,PV值+1。
优点:该算法简单,适用于刚注册的新用户
缺点:无法针对用户提供个性化的推荐
改进:基于该算法可做一些优化,例如加入用户分群的流行度进行排序,通过把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。
基于用户的协同过滤推荐算法 (UserCF):针对目标用户(A),先通过兴趣、爱好或行为习惯找到与他相似的“其他用户”(BCD...),然后把BCD...喜欢的并且A没有浏览过的物品或功能推给A。
基于物品的协同过滤推荐算法 (ItemCF):例如由于我之前看过张艺谋导演的《英雄》这部电影,会给我推荐《红高粱》、《归来》等同导演电影。
1)分析各个用户对物品的评价,通过浏览记录、购买记录等得到用户的隐性评分;
2)根据用户对物品的隐性评分计算得到所有用户之间的相似度;
3)选出与目标用户最相似的K个用户;
4)将这K个用户隐性评分最高并且目标用户又没有浏览过的物品推荐给目标用户。
优点:
基于用户的协同过滤推荐算法是给目标用户推荐那些和他有共同兴趣的用户喜欢的物品,所以该算法推荐较为社会化,即推荐的物品是与用户兴趣一致的那个群体中的热门物品;
适于物品比用户多、物品时效性较强的情形,否则计算慢;
能实现跨领域、惊喜度高的结果。
缺点:
在很多时候,很多用户两两之间的共同评分仅有几个,也即用户之间的重合度并不高,同时仅有的共同打了分的物品,往往是一些很常见的物品,如票房大片、生活必需品;
用户之间的距离可能变得很快,这种离线算法难以瞬间更新推荐结果;
推荐结果的个性化较弱、较宽泛。
改进:
两个用户对流行物品的有相似兴趣,丝毫不能说明他们有相似的兴趣,此时要增加惩罚力度;
如果两个用户同时喜欢了相同的物品,那么可以给这两个用户更高的相似度;
在描述邻居用户的偏好时,给其最近喜欢的物品较高权重;
把类似地域用户的行为作为推荐的主要依据。
1)分析各个用户对物品的浏览记录;
2)依据浏览记录分析得出所有物品之间的相似度;
3)对于目标用户评价高的物品,找出与之相似度最高的K个物品;
4)将这K个物品中目标用户没有浏览过的物品推荐给目标用户
优点:
基于物品的协同过滤推荐算法则是为目标用户推荐那些和他之前喜欢的物品类似的物品,所以基于物品的协同过滤推荐算法的推荐较为个性,因为推荐的物品一般都满足目标用户的独特兴趣。
物品之间的距离可能是根据成百上千万的用户的隐性评分计算得出,往往能在一段时间内保持稳定。因此,这种算法可以预先计算距离,其在线部分能更快地生产推荐列表。
应用最广泛,尤其以电商行业为典型。
适于用户多、物品少的情形,否则计算慢
推荐精度高,更具个性化
倾向于推荐同类商品
缺点:
不同领域的最热门物品之间经常具有较高的相似度。比如,基于本算法,我们可能会给喜欢听许嵩歌曲的同学推荐汪峰的歌曲,也就是推荐不同领域的畅销作品,这样的推荐结果可能并不是我们想要的。
在物品冷启动、数据稀疏时效果不佳
推荐的多样性不足,形成信息闭环
改进:
如果是热门物品,很多人都喜欢,就会接近1,就会造成很多物品都和热门物品相似,此时要增加惩罚力度;
活跃用户对物品相似度的贡献小于不活跃的用户;
同一个用户在间隔很短的时间内喜欢的两件商品之间,可以给予更高的相似度;
在描述目标用户偏好时,给其最近喜欢的商品较高权重;
同一个用户在同一个地域内喜欢的两件商品之间,可以给予更高的相似度。
(相似度计算:余弦相似度、Jaccard系数、皮尔森相关系数等)
常见经典 ML 分类算法:
逻辑回归 (Logistics Regression)
支持向量机 (SVM)
随机森林 (Random Forest)
提升类算法 (Boosting):Adaboost、GBDT、XGboost
一般处理流程:数据处理 -> 特征工程 -> 模型选择 -> 交叉验证 -> 模型选择与模型融合
特征清洗 :剔除不可信样本,缺省值极多的字段不予考虑
特征预处理 :单个特征(归一化,离散化,缺失值补全,数据变换),多个特征(PCA/LDA降维,特征选择)
使用工具 :pandas(python开源库)
模型选择与模型融合 :根据交叉验证得分选择前几名模型,然后进行模型融合(Bagging、Boosting、Stacking)
DL 优势 :ML 中特征工程是十分重要并且要根据行业经验确定,DL 可以自己从数据中学习特征。DL 能自动对输入的低阶特征进行组合、变换,得到高阶特征。对于公司产品应用领域来说,用户的注册信息(职业、年龄、性别等 显信息),行为信息(使用功能、有效使用时长等 隐信息)。这些就可以作为低阶特征输入。
RNN系列 (处理文本数据)
CNN系列 (处理图像数据)
DNN (处理一般性分类)
③ 推荐算法简介
写在最前面:本文内容主要来自于书籍《推荐系统实践》和《推荐系统与深度学习》。
推荐系统是目前互联网世界最常见的智能产品形式。从电子商务、音乐视频网站,到作为互联网经济支柱的在线广告和新颖的在线应用推荐,到处都有推荐系统的身影。推荐算法是推荐系统的核心,其本质是通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的方式。
推荐系统的主要功能是以个性化的方式帮助用户从极大的搜索空间中快速找到感兴趣的对象。因此,目前所用的推荐系统多为个性化推荐系统。个性化推荐的成功应用需要两个条件:
在推荐系统的众多算法中,基于协同的推荐和基于内容的推荐在实践中得到了最广泛的应用。本文也将从这两种算法开始,结合时间、地点上下文环境以及社交环境,对常见的推荐算法做一个简单的介绍。
基于内容的算法的本质是对物品内容进行分析,从中提取特征,然后基于用户对何种特征感兴趣来推荐含有用户感兴趣特征的物品。因此,基于内容的推荐算法有两个最基本的要求:
下面我们以一个简单的电影推荐来介绍基于内容的推荐算法。
现在有两个用户A、B和他们看过的电影以及打分情况如下:
其中问好(?)表示用户未看过。用户A对《银河护卫队 》《变形金刚》《星际迷航》三部科幻电影都有评分,平均分为 4 .7 分 ( (5+4+5 ) / 3=4.7 );对《三生三世》《美人鱼》《北京遇上西雅图》三部爱情电影评分平均分为 2.3 分 ( ( 3十2+2 ) /3=2.3 )。现在需要给A推荐电影,很明显A更倾向于科幻电影,因此推荐系统会给A推荐独立日。而对于用户B,通过简单的计算我们可以知道更喜欢爱情电影,因此给其推荐《三生三世》。当然,在实际推荐系统中,预测打分比这更加复杂些,但是其原理是一样的。
现在,我们可以将基于内容的推荐归纳为以下四个步骤:
通过上面四步就能快速构建一个简单的推荐系统。基于内容的推荐系统通常简单有效,可解释性好,没有物品冷启动问题。但他也有两个明显的缺点:
最后,顺便提一下特征提取方法:对于某些特征较为明确的物品,一般可以直接对其打标签,如电影类别。而对于文本类别的特征,则主要是其主题情感等,则些可以通过tf-idf或LDA等方法得到。
基于协同的算法在很多地方也叫基于邻域的算法,主要可分为两种:基于用户的协同算法和基于物品的协同算法。
啤酒和尿布的故事在数据挖掘领域十分有名,该故事讲述了美国沃尔玛超市统计发现啤酒和尿布一起被购买的次数非常多,因此将啤酒和尿布摆在了一起,最后啤酒和尿布的销量双双增加了。这便是一个典型的物品协同过滤的例子。
基于物品的协同过滤指基于物品的行为相似度(如啤酒尿布被同时购买)来进行物品推荐。该算法认为,物品A和物品B具有很大相似度是因为喜欢物品A的用户大都也喜欢物品B。
基于物品的协同过滤算法主要分为两步:
基于物品的协同过滤算法中计算物品相似度的方法有以下几种:
(1)基于共同喜欢物品的用户列表计算。
此外,John S. Breese再其论文中还提及了IUF(Inverse User Frequence,逆用户活跃度)的参数,其认为活跃用户对物品相似度的贡献应该小于不活跃的用户,应该增加IUF参数来修正物品相似度的公式:
上面的公式只是对活跃用户做了一种软性的惩罚, 但对于很多过于活跃的用户, 比如某位买了当当网80%图书的用户, 为了避免相似度矩阵过于稠密, 我们在实际计算中一般直接忽略他的兴趣列表, 而不将其纳入到相似度计算的数据集中。
(2)基于余弦相似度计算。
(3)热门物品的惩罚。
从上面(1)的相似度计算公式中,我们可以发现当物品 i 被更多人购买时,分子中的 N(i) ∩ N(j) 和分母中的 N(i) 都会增长。对于热门物品,分子 N(i) ∩ N(j) 的增长速度往往高于 N(i),这就会使得物品 i 和很多其他的物品相似度都偏高,这就是 ItemCF 中的物品热门问题。推荐结果过于热门,会使得个性化感知下降。以歌曲相似度为例,大部分用户都会收藏《小苹果》这些热门歌曲,从而导致《小苹果》出现在很多的相似歌曲中。为了解决这个问题,我们对于物品 i 进行惩罚,例如下式, 当α∈(0, 0.5) 时,N(i) 越小,惩罚得越厉害,从而使热门物品相关性分数下降( 博主注:这部分未充分理解 ):
此外,Kary pis在研究中发现如果将ItemCF的相似度矩阵按最大值归一化, 可以提高推荐的准确率。 其研究表明, 如果已经得到了物品相似度矩阵w, 那么可以用如下公式得到归一化之后的相似度矩阵w':
归一化的好处不仅仅在于增加推荐的准确度,它还可以提高推荐的覆盖率和多样性。一般来说,物品总是属于很多不同的类,每一类中的物品联系比较紧密。假设物品分为两类——A和B, A类物品之间的相似度为0.5, B类物品之间的相似度为0.6, 而A类物品和B类物品之间的相似度是0.2。 在这种情况下, 如果一个用户喜欢了5个A类物品和5个B类物品, 用ItemCF给他进行推荐, 推荐的就都是B类物品, 因为B类物品之间的相似度大。 但如果归一化之后, A类物品之间的相似度变成了1, B类物品之间的相似度也是1, 那么这种情况下, 用户如果喜欢5个A类物品和5个B类物品, 那么他的推荐列表中A类物品和B类物品的数目也应该是大致相等的。 从这个例子可以看出, 相似度的归一化可以提高推荐的多样性。
那么,对于两个不同的类,什么样的类其类内物品之间的相似度高,什么样的类其类内物品相似度低呢?一般来说,热门的类其类内物品相似度一般比较大。如果不进行归一化,就会推荐比较热门的类里面的物品,而这些物品也是比较热门的。因此,推荐的覆盖率就比较低。相反,如果进行相似度的归一化,则可以提高推荐系统的覆盖率。
最后,利用物品相似度矩阵和用户打过分的物品记录就可以对一个用户进行推荐评分:
基于用户的协同算法与基于物品的协同算法原理类似,只不过基于物品的协同是用户U购买了A物品,会计算经常有哪些物品与A一起购买(也即相似度),然后推荐给用户U这些与A相似的物品。而基于用户的协同则是先计算用户的相似性(通过计算这些用户购买过的相同的物品),然后将这些相似用户购买过的物品推荐给用户U。
基于用户的协同过滤算法主要包括两个步骤:
步骤(1)的关键是计算用户的兴趣相似度,主要是利用用户的行为相似度计算用户相似度。给定用户 u 和 v,N(u) 表示用户u曾经有过正反馈(譬如购买)的物品集合,N(v) 表示用户 v 曾经有过正反馈的物品集合。那么我们可以通过如下的 Jaccard 公式简单的计算 u 和 v 的相似度:
或通过余弦相似度:
得到用户之间的相似度之后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的物品。如下的公式度量了UserCF算法中用户 u 对物品 i 的感兴趣程度:
首先回顾一下UserCF算法和ItemCF算法的推荐原理:UserCF给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品, 而ItemCF给用户推荐那些和他之前喜欢的物品具有类似行为的物品。
(1)从推荐场景考虑
首先从场景来看,如果用户数量远远超过物品数量,如购物网站淘宝,那么可以考虑ItemCF,因为维护一个非常大的用户关系网是不容易的。其次,物品数据一般较为稳定,因此物品相似度矩阵不必频繁更新,维护代价较小。
UserCF的推荐结果着重于反应和用户兴趣相似的小群体的热点,而ItemCF的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反应了用户所在小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反应了用户自己的个性传承。因此UserCF更适合新闻、微博或微内容的推荐,而且新闻内容更新频率非常高,想要维护这样一个非常大而且更新频繁的表无疑是非常难的。
在新闻类网站中,用户的兴趣爱好往往比较粗粒度,很少会有用户说只看某个话题的新闻,而且往往某个话题也不是每天都会有新闻。 个性化新闻推荐更强调新闻热点,热门程度和时效性是个性化新闻推荐的重点,个性化是补充,所以 UserCF 给用户推荐和他有相同兴趣爱好的人关注的新闻,这样在保证了热点和时效性的同时,兼顾了个性化。
(2)从系统多样性(也称覆盖率,指一个推荐系统能否给用户提供多种选择)方面来看,ItemCF的多样性要远远好于UserCF,因为UserCF更倾向于推荐热门物品。而ItemCF具有较好的新颖性,能够发现长尾物品。所以大多数情况下,ItemCF在精度上较小于UserCF,但其在覆盖率和新颖性上面却比UserCF要好很多。
在介绍本节基于矩阵分解的隐语义模型之前,让我们先来回顾一下传统的矩阵分解方法SVD在推荐系统的应用吧。
基于SVD矩阵分解在推荐中的应用可分为如下几步:
SVD在计算前会先把评分矩阵 A 缺失值补全,补全之后稀疏矩阵 A 表示成稠密矩阵,然后将分解成 A' = U∑V T 。但是这种方法有两个缺点:(1)补成稠密矩阵后需要耗费巨大的储存空间,对这样巨大的稠密矩阵进行储存是不现实的;(2)SVD的计算复杂度很高,对这样大的稠密矩阵中进行计算式不现实的。因此,隐语义模型就被发明了出来。
更详细的SVD在推荐系统的应用可参考 奇异值分解SVD简介及其在推荐系统中的简单应用 。
隐语义模型(Latent Factor Model)最早在文本挖掘领域被提出,用于找到文本的隐含语义。相关的算法有LSI,pLSA,LDA和Topic Model。本节将对隐语义模型在Top-N推荐中的应用进行详细介绍,并通过实际的数据评测该模型。
隐语义模型的核心思想是通过隐含特征联系用户兴趣和物品。让我们通过一个例子来理解一下这个模型。
现有两个用户,用户A的兴趣涉及侦探小说、科普图书以及一些计算机技术书,而用户B的兴趣比较集中在数学和机器学习方面。那么如何给A和B推荐图书呢?
我们可以对书和物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。简言之,这个基于兴趣分类的方法大概需要解决3个问题:
对于第一个问题的简单解决方案是找相关专业人员给物品分类。以图书为例,每本书出版时,编辑都会给出一个分类。但是,即使有很系统的分类体系,编辑给出的分类仍然具有以下缺点:(1)编辑的意见不能代表各种用户的意见;(2)编辑很难控制分类的细粒度;(3)编辑很难给一个物品多个分类;(4)编辑很难给一个物品多个分类;(5)编辑很难给出多个维度的分类;(6)编辑很难决定一个物品在某一个类别中的权重。
为了解决上述问题,研究员提出可以从数据出发,自动找到那些分类,然后进行个性化推荐。隐语义模型由于采用基于用户行为统计的自动聚类,较好地解决了上面提出的5个问题。
LFM将矩阵分解成2个而不是3个:
推荐系统中用户和物品的交互数据分为显性反馈和隐性反馈数据。隐式模型中多了一个置信参数,具体涉及到ALS(交替最小二乘法,Alternating Least Squares)中对于隐式反馈模型的处理方式——有的文章称为“加权的正则化矩阵分解”:
一个小细节:在隐性反馈数据集中,只有正样本(正反馈)没有负反馈(负样本),因此如何给用户生成负样本来进行训练是一个重要的问题。Rong Pan在其文章中对此进行了探讨,对比了如下几种方法:
用户行为很容易用二分图表示,因此很多图算法都可以应用到推荐系统中。基于图的模型(graph-based model)是推荐系统中的重要内容。很多研究人员把基于领域的模型也称为基于图的模型,因为可以把基于领域的模型看作基于图的模型的简单形式。
在研究基于图的模型之前,需要将用户行为数据表示成图的形式。本节的数据是由一系列用户物品二元组 (u, i) 组成的,其中 u 表示用户对物品 i 产生过行为。
令 G(V, E) 表示用户物品二分图,其中 V=V U UV I 由用户顶点 V U 和物品节点 V I 组成。对于数据集中每一个二元组 (u, i) ,图中都有一套对应的边 e(v u , v i ),其中 v u ∈V U 是用户对应的顶点,v i ∈V I 是物品i对应的顶点。如下图是一个简单的物品二分图,其中圆形节点代表用户,方形节点代表物品,用户物品的直接连线代表用户对物品产生过行为。比如下图中的用户A对物品a、b、d产生过行为。
度量图中两个顶点之间相关性的方法很多,但一般来说图中顶点的相关性主要取决于下面3个因素:
而相关性高的一对顶点一般具有如下特征:
举个例子,如下图,用户A和物品c、e没有边直连,但A可通过一条长度为3的路径到达c,而Ae之间有两条长度为3的路径。那么A和e的相关性要高于顶点A和c,因而物品e在用户A的推荐列表中应该排在物品c之前,因为Ae之间有两条路径。其中,(A,b,C,e)路径经过的顶点的出度为(3,2,2,2),而 (A,d,D,e) 路径经过了一个出度比较大的顶点D,所以 (A,d,D,e) 对顶点A与e之间相关性的贡献要小于(A,b,C,e)。
基于上面3个主要因素,研究人员设计了很多计算图中顶点相关性的方法,本节将介绍一种基于随机游走的PersonalRank算法。
假设要给用户u进行个性化推荐,可以从用户u对应的节点 v u 开始在用户物品二分图上进行随机游走。游走到任一节点时,首先按照概率α决定是继续游走还是停止这次游走并从 v u 节点重新开始游走。若决定继续游走,则从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。
上述算法可以表示成下面的公式:
虽然通过随机游走可以很好地在理论上解释PersonalRank算法,但是该算法在时间复杂度上有明显的缺点。因为在为每个用户进行推荐时,都需要在整个用户物品二分图上进行迭代,知道所有顶点的PR值都收敛。这一过程的时间复杂度非常高,不仅无法在线进行实时推荐,离线计算也是非常耗时的。
有两种方法可以解决上面PersonalRank时间复杂度高的问题:
(1)减少迭代次数,在收敛之前停止迭代。但是这样会影响最终的精度。
(2)从矩阵论出发,重新涉及算法。另M为用户物品二分图的转移概率矩阵,即:
网络社交是当今社会非常重要甚至可以说是必不可少的社交方式,用户在互联网上的时间有相当大的一部分都用在了社交网络上。
当前国外最着名的社交网站是Facebook和Twitter,国内的代表则是微信/QQ和微博。这些社交网站可以分为两类:
需要指出的是,任何一个社交网站都不是单纯的社交图谱或兴趣图谱。如QQ上有些兴趣爱好群可以认识不同的陌生人,而微博中的好友也可以是现实中认识的。
社交网络定义了用户之间的联系,因此可以用图定义社交网络。我们用图 G(V,E,w) 定义一个社交网络,其中V是顶点集合,每个顶点代表一个用户,E是边集合,如果用户va和vb有社交网络关系,那么就有一条边 e(v a , v b ) 连接这两个用户,而 w(v a , v b )定义了边的权重。一般来说,有三种不同的社交网络数据:
和一般购物网站中的用户活跃度分布和物品流行度分布类似,社交网络中用户的入度(in degree,表示有多少人关注)和出度(out degree,表示关注多少人)的分布也是满足长尾分布的。即大部分人关注的人都很少,被关注很多的人也很少。
给定一个社交网络和一份用户行为数据集。其中社交网络定义了用户之间的好友关系,而用户行为数据集定义了不同用户的历史行为和兴趣数据。那么最简单的算法就是给用户推荐好友喜欢的物品集合。即用户u对物品i的兴趣 p ui 可以通过如下公式计算。
用户u和用户v的熟悉程度描述了用户u和用户在现实社会中的熟悉程度。一般来说,用户更加相信自己熟悉的好友的推荐,因此我们需要考虑用户之间的熟悉度。下面介绍3中衡量用户熟悉程度的方法。
(1)对于用户u和用户v,可以使用共同好友比例来计算他们的相似度:
上式中 out(u) 可以理解为用户u关注的用户合集,因此 out(u) ∩ out(v) 定义了用户u、v共同关注的用户集合。
(2)使用被关注的用户数量来计算用户之间的相似度,只要将公式中的 out(u) 修改为 in(u):
in(u) 是指关注用户u的集合。在无向社交网络中,in(u)和out(u)是相同的,而在微博这种有向社交网络中,这两个集合的含义就不痛了。一般来说,本方法适合用来计算微博大V之间的相似度,因为大v往往被关注的人数比较多;而方法(1)适用于计算普通用户之间的相似度,因为普通用户往往关注行为比较丰富。
(3)除此之外,还可以定义第三种有向的相似度:这个相似度的含义是用户u关注的用户中,有多大比例也关注了用户v:
这个相似度有一个缺点,就是在该相似度下所有人都和大v有很大的相似度,这是因为公式中的分母并没有考虑 in(v) 的大小,所以可以把 in(v) 加入到上面公式的分母,来降低大v与其他用户的相似度:
上面介绍了3种计算用户之间相似度(或称熟悉度)的计算方法。除了熟悉程度,还需要考虑用户之间的兴趣相似度。我们和父母很熟悉,但很多时候我们和父母的兴趣确不相似,因此也不会喜欢他们喜欢的物品。因此,在度量用户相似度时,还需要考虑兴趣相似度,而兴趣相似度可以通过和UserCF类似的方法度量,即如果两个用户喜欢的物品集合重合度很高,两个用户的兴趣相似度很高。
最后,我们可以通过加权的形式将两种权重合并起来,便得到了各个好有用户的权重了。
有了权重,我们便可以针对用户u挑选k个最相似的用户,把他们购买过的物品中,u未购买过的物品推荐给用户u即可。打分公式如下:
其中 w' 是合并后的权重,score是用户v对物品的打分。
node2vec的整体思路分为两个步骤:第一个步骤是随机游走(random walk),即通过一定规则随机抽取一些点的序列;第二个步骤是将点的序列输入至word2vec模型从而得到每个点的embedding向量。
随机游走在前面基于图的模型中已经介绍过,其主要分为两步:(1)选择起始节点;(2)选择下一节点。起始节点选择有两种方法:按一定规则抽取一定量的节点或者以图中所有节点作为起始节点。一般来说会选择后一种方法以保证所有节点都会被选取到。
在选择下一节点方法上,最简单的是按边的权重来选择,但在实际应用中需要通过广度优先还是深度优先的方法来控制游走范围。一般来说,深度优先发现能力更强,广度优先更能使社区内(较相似)的节点出现在一个路径里。
斯坦福大学Jure Leskovec教授给出了一种可以控制广度优先或者深度优先的方法。
以上图为例,假设第一步是从t随机游走到v,这时候我们要确定下一步的邻接节点。本例中,作者定义了p和q两个参数变量来调节游走,首先计算其邻居节点与上一节点t的距离d,根据下面的公式得到α:
一般从每个节点开始游走5~10次,步长则根据点的数量N游走根号N步。如此便可通过random walk生成点的序列样本。
得到序列之后,便可以通过word2vec的方式训练得到各个用户的特征向量,通过余弦相似度便可以计算各个用户的相似度了。有了相似度,便可以使用基于用户的推荐算法了。
推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,因此大量的用户行为数据就成为推荐系统的重要组成部分和先决条件。如何在没有大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统,就是冷启动问题。
冷启动问题主要分为三类:
针对用户冷启动,下面给出一些简要的方案:
(1)有效利用账户信息。利用用户注册时提供的年龄、性别等数据做粗粒度的个性化;
(2)利用用户的社交网络账号登录(需要用户授权),导入用户在社交网站上的好友信息,然后给用户推荐其好友喜欢的物品;
(3)要求用户在登录时对一些物品进行反馈,手机用户对这些物品的兴趣信息,然后给用推荐那些和这些物品相似的物品;
(4)提供非个性化推荐。非个性化推荐的最简单例子就是热门排行榜,我们可以给用户推荐热门排行榜,然后等到用户数据收集到一定的时候,在切换为个性化推荐。
对于物品冷启动,可以利用新加入物品的内容信息,将它们推荐给喜欢过和他们相似的物品的用户。
对于系统冷启动,可以引入专家知识,通过一定高效的方式快速建立起物品的相关度表。
在上面介绍了一些推荐系统的基础算法知识,这些算法大都是比较经典且现在还在使用的。但是需要注意的是,在实践中,任何一种推荐算法都不是单独使用的,而是将多种推荐算法结合起来,也就是混合推荐系统,但是在这里并不准备介绍,感兴趣的可以查阅《推荐系统》或《推荐系统与深度学习》等书籍。此外,在推荐中非常重要的点击率模型以及基于矩阵的一些排序算法在这里并没有提及,感兴趣的也可自行学习。
虽然现在用的很多算法都是基于深度学习的,但是这些经典算法能够让我们对推荐系统的发展有一个比较好的理解,同时,更重要的一点——“推陈出新”,只有掌握了这些经典的算法,才能提出或理解现在的一些更好地算法。
④ 推荐算法有哪些
推荐应该说分为两类:个性化推荐和非个性化推荐,“让全局优秀的内容被大家看到”应该算是非个性化推荐,热门榜单/最多观看这类方法可以简单解决这个问题;不同的人对于“好”的理解不一样,换句话说也就是偏好不同,所以推荐新加入的好内容我认为是个性化推荐问题。
个性化推荐的两个主要思想八个字概括之:物以类聚、人以群分。主要的方法及变种应该有很多,像协同过滤、基于内容的推荐、基于标签的推荐等等。
⑤ 推荐算法的主要推荐方法的对比
各种推荐方法都有其各自的优点和缺点,见表1。 表1 主要推荐方法对比 推荐方法优点缺点基于内容推荐推荐结果直观,容易解释;不需要领域知识 新用户问题;复杂属性不好处理;
要有足够数据构造分类器 协同过滤推荐新异兴趣发现、不需要领域知识;随着时间推移性能提高;
推荐个性化、自动化程度高;
能处理复杂的非结构化对象 稀疏问题;可扩展性问题;
新用户问题;
质量取决于历史数据集;
系统开始时推荐质量差; 基于规则推荐能发现新兴趣点;不要领域知识 规则抽取难、耗时;产品名同义性问题;
个性化程度低; 基于效用推荐无冷开始和稀疏问题;对用户偏好变化敏感;
能考虑非产品特性 用户必须输入效用函数;推荐是静态的,灵活性差;
属性重叠问题; 基于知识推荐能把用户需求映射到产品上;能考虑非产品属性 知识难获得;推荐是静态的
⑥ 推荐算法之模型协同过滤(1)-关联规则
关联规则是数据挖掘中的典型问题之一,又被称为购物篮分析,这是因为传统的关联规则案例大多发生在超市中,例如所谓的啤酒与尿布传说。事实上,“购物篮”这个词也揭示了关联规则挖掘的一个重要特点:以交易记录为研究对象,每一个购物篮(transaction)就是一条记录。关联规则希望挖掘的规则就是:哪些商品会经常在同一个购物篮中出现,其中有没有因果关系。为了描述这种“经常性”及“因果关系”,分析者定义了几个指标,基于这些指标来筛选关联规则,从而得到那些不平凡的规律。
(1)计算支持度
支持度计数:一个项集出现在几个事务当中,它的支持度计数就是几。例如{Diaper, Beer}出现在事务 002、003和004中,所以它的支持度计数是3
支持度:支持度计数除于总的事务数。例如上例中总的事务数为4,{Diaper, Beer}的支持度计数为3,所以它的支持度是3÷4=75%,说明有75%的人同时买了Diaper和Beer。
(2)计算置信度
置信度:对于规则{Diaper}→{Beer},{Diaper, Beer}的支持度计数除于{Diaper}的支持度计数,为这个规则的置信度。例如规则{Diaper}→{Beer}的置信度为3÷3=100%。说明买了Diaper的人100%也买了Beer。
一般地,关联规则被划分为动态推荐,而协同过滤则更多地被视为静态推荐。
所谓动态推荐,就是推荐的基础是且只是当前一次(最近一次)的购买或者点击。譬如用户在网站上看了一个啤酒,系统就找到与这个啤酒相关的关联规则,然后根据这个规则向用户进行推荐。而静态推荐则是在对用户进行了一定分析的基础上,建立了这个用户在一定时期内的偏好排序,然后在这段时期内持续地按照这个排序来进行推荐。由此可见,关联规则与协同过滤的策略思路是完全不同的类型。
事实上,即便在当下很多能够拿到用户ID的场景,使用动态的关联规则推荐仍然是值得考虑的一种方法(尤其是我们经常把很多推荐方法的结果综合起来做一个混合的推荐),因为这种方法的逻辑思路跟协同过滤有着本质的不同,问题似乎仅仅在于:个人的偏好到底有多稳定,推荐到底是要迎合用户的长期偏好还是用户的当下需求。
挖掘关联规则主要有Apriori算法和FP-Growth算法。后者解决了前者由于频繁的扫描数据集造成的效率低下缺点。以下按照Apriori算法来讲解。
step 1: 扫描数据集生成满足最小支持度的频繁项集。
step 2: 计算规则的置信度,返回满足最小置信度的规则。
如下所示,当用户购买1商品时推荐2、3商品
⑦ 传统优化算法和现代优化算法包括哪些.区别是什么
1. 传统优化算法一般是针对结构化的问题,有较为明确的问题和条件描述,如线性规划,二次规划,整数规划,混合规划,带约束和不带约束条件等,即有清晰的结构信息;而智能优化算法一般针对的是较为普适的问题描述,普遍比较缺乏结构信息。
2. 传统优化算法不少都属于凸优化范畴,有唯一明确的全局最优点;而智能优化算法针对的绝大多数是多极值问题,如何防止陷入局部最优而尽可能找到全局最优是采纳智能优化算法的根本原因:对于单极值问题,传统算法大部分时候已足够好,而智能算法没有任何优势;对多极值问题,智能优化算法通过其有效设计可以在跳出局部最优和收敛到一个点之间有个较好的平衡,从而实现找到全局最优点,但有的时候局部最优也是可接受的,所以传统算法也有很大应用空间和针对特殊结构的改进可能。
3. 传统优化算法一般是确定性算法,有固定的结构和参数,计算复杂度和收敛性可做理论分析;智能优化算法大多属于启发性算法,能定性分析却难定量证明,且大多数算法基于随机特性,其收敛性一般是概率意义上的,实际性能不可控,往往收敛速度也比较慢,计算复杂度较高。
⑧ 07_推荐系统算法详解
基于人口统计学的推荐与用户画像、基于内容的推荐、基于协同过滤的推荐。
1、基于人口统计学的推荐机制( Demographic-based Recommendation)是一种最易于实现的推荐方法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户。
2、对于没有明确含义的用户信息(比如登录时间、地域等上下文信息),可以通过聚类等手段,给用户打上分类标签。
3、对于特定标签的用户,又可以根据预设的规则(知识)或者模型,推荐出对应的物品。
4、用户信息标签化的过程一般又称为 用户画像 ( User Profiling)。
(1)用户画像( User Profile)就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后,完美地抽象出一个用户的商业全貌作是企业应用大数据技术的基本方式。
(2)用户画像为企业提供了足够的信息基础,能够帮助企业快速找到精准用户群体以及用户需求等更为广泛的反馈信息。
(3)作为大数据的根基,它完美地抽象出一个用户的信息全貌,为进一步精准、快速地分析用户行为习惯、消费习惯等重要信息,提供了足够的数据基础。
1、 Content- based Recommendations(CB)根据推荐物品或内容的元数据,发现物品的相关性,再基于用户过去的喜好记录,为用户推荐相似的物品。
2、通过抽取物品内在或者外在的特征值,实现相似度计算。比如一个电影,有导演、演员、用户标签UGC、用户评论、时长、风格等等,都可以算是特征。
3、将用户(user)个人信息的特征(基于喜好记录或是预设兴趣标签),和物品(item)的特征相匹配,就能得到用户对物品感兴趣的程度。在一些电影、音乐、图书的社交网站有很成功的应用,有些网站还请专业的人员对物品进行基因编码/打标签(PGC)。
4、 相似度计算:
5、对于物品的特征提取——打标签(tag)
- 专家标签(PGC)
- 用户自定义标签(UGC)
- 降维分析数据,提取隐语义标签(LFM)
对于文本信息的特征提取——关键词
- 分词、语义处理和情感分析(NLP)
- 潜在语义分析(LSA)
6、 基于内容推荐系统的高层次结构
7、 特征工程
(1)特征( feature):数据中抽取出来的对结果预测有用的信息。
特征的个数就是数据的观测维度。
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
特征工程一般包括特征清洗(采样、清洗异常样本),特征处理和特征选择。
特征按照不同的数据类型分类,有不同的特征处理方法:数值型、类别型、时间型、统计型。
(2)数值型特征处理
用连续数值表示当前维度特征,通常会对数值型特征进行数学上的处理,主要的做法是归一化和离散化。
* 幅度调整归一化:
特征与特征之间应该是平等的,区别应该体现在 特征内部 。
例如房屋价格和住房面积的幅度是不同的,房屋价格可能在3000000~15000000(万)之间,而住房面积在40-300(平方米)之间,那么明明是平等的两个特征,输入到相同的模型中后由于本身的幅值不同导致产生的效果不同,这是不合理的
* 数值型特征处理——离散化
离散化的两种方式:等步长——简单但不一定有效;等频——min -> 25% -> 75% -> max
两种方法对比:
等频的离散化方法很精准,但需要每次都对数据分布进行一遍从新计算,因为昨天用户在淘宝上买东西的价格分布和今天不一定相同,因此昨天做等频的切分点可能并不适用,而线上最需要避免的就是不固定,需要现场计算,所以昨天训练出的模型今天不一定能使用。
等频不固定,但很精准,等步长是固定的,非常简单,因此两者在工业上都有应用。
(3) 类别型特征处理
类别型数据本身没有大小关系,需要将它们编码为数字,但它们之间不能有预先设定的大小关系,因此既要做到公平,又要区分开它们,那么直接开辟多个空间。
One-Hot编码/哑变量:One-Hot编码/哑变量所做的就是将类别型数据平行地展开,也就是说,经过One-Hot编码哑变量后,这个特征的空间会膨胀。
(4) 时间型特征处理
时间型特征既可以做连续值,又可以看做离散值。
连续值:持续时间(网页浏览时长);间隔时间(上一次购买/点击离现在的时间间隔)。
离散值:一天中哪个时间段;一周中的星期几;一年中哪个月/星期;工作日/周末。
(5) 统计型特征处理
加减平均:商品价格高于平均价格多少,用户在某个品类下消费超过多少。
分位线:商品属于售出商品价格的分位线处。
次序性:商品处于热门商品第几位。
比例类:电商中商品的好/中/差评比例。
8、 推荐系统常见反馈数据 :
9、 基于UGC的推荐
用户用标签来描述对物品的看法,所以用户生成标签(UGC)是联系用户和物品的纽带,也是反应用户兴趣的重要数据源。
一个用户标签行为的数据集一般由一个三元组(用户,物品,标签)的集合表示,其中一条记录(u,i,b)表示用户u给物品打上了标签b。
一个最简单的算法:
- 统计每个用户最常用的标签
- 对于每个标签,统计被打过这个标签次数最多的物品
- 对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门的物品,推荐给他
- 所以用户u对物品i的兴趣公式为 ,其中 使用户u打过标签b的次数, 是物品i被打过标签b的次数。
简单算法中直接将用户打出标签的次数和物品得到的标签次数相乘,可以简单地表现出用户对物品某个特征的兴趣。
这种方法倾向于给热门标签(谁都会给的标签,如“大片”、“搞笑”等)、热门物品(打标签人数最多)比较大的权重,如果一个热门物品同时对应着热门标签,那它就会“霸榜”,推荐的个性化、新颖度就会降低。
类似的问题,出现在新闻内容的关键字提取中。比如以下新闻中,哪个关键字应该获得更高的权重?
10、 TF-IDF:词频逆文档频率 ( Term Frequency- -Inverse Document Frequency,TF-DF)是一种用于资讯检索与文本挖掘的常用加权技术。
TFDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
TFIDF=TF IDF
TF-IDF的主要思想是 :如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-DF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。
词频( Term Frequency,TF) :指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数的归一化,以防止偏向更长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。) ,其中 表示词语 i 在文档 j 中出现的频率, 表示 i 在 j 中出现的次数, 表示文档 j 的总词数。
逆向文件频率( Inverse Document Frequency,IDF) :是一个词语普遍重要性的度量,某一特定词语的IDF,可以由总文档数目除以包含该词语之文档的数目,再将得到的商取对数得到 ,其中 表示词语 i 在文档集中的逆文档频率,N表示文档集中的文档总数, 表示文档集中包含了词语 i 的文档数。
(11) TF-IDF对基于UGC推荐的改进 : ,为了避免热门标签和热门物品获得更多的权重,我们需要对“热门进行惩罚。
借鉴TF-IDF的思想,以一个物品的所有标签作为“文档”,标签作为“词语”,从而计算标签的“词频”(在物品所有标签中的频率)和“逆文档频率”(在其它物品标签中普遍出现的频率)。
由于“物品i的所有标签” 应该对标签权重没有影响,而 “所有标签总数” N 对于所有标签是一定的,所以这两项可以略去。在简单算法的基础上,直接加入对热门标签和热门物品的惩罚项: ,其中, 记录了标签 b 被多少个不同的用户使用过, 记录了物品 i 被多少个不同的用户打过标签。
(一)协同过滤(Collaborative Filtering, CF)
1、基于协同过滤(CF)的推荐:基于内容( Content based,CB)主要利用的是用户评价过的物品的内容特征,而CF方法还可以利用其他用户评分过的物品内容。
CF可以解决CB的一些局限:
- 物品内容不完全或者难以获得时,依然可以通过其他用户的反馈给出推荐。
- CF基于用户之间对物品的评价质量,避免了CB仅依赖内容可能造成的对物品质量判断的干。
- CF推荐不受内容限制,只要其他类似用户给出了对不同物品的兴趣,CF就可以给用户推荐出内容差异很大的物品(但有某种内在联系)
分为两类:基于近邻和基于模型。
2、基于近邻的推荐系统:根据的是相同“口碑”准则。是否应该给Cary推荐《泰坦尼克号》?
(二)基于近邻的协同过滤
1、 基于用户(User-CF): 基于用户的协同过滤推荐的基本原理是,根据所有用户对物品的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,并推荐近邻所偏好的物品。
在一般的应用中是采用计算“K-近邻”的算法;基于这K个邻居的历史偏好信息,为当前用户进行推荐。
User-CF和基于人口统计学的推荐机制:
- 两者都是计算用户的相似度,并基于相似的“邻居”用户群计算推荐。
- 它们所不同的是如何计算用户的相似度:基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制可是在用户的历史偏好的数据上计算用户的相似度,它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。
2、基于物品(Item-CF):基于项目的协同过滤推荐的基本原理与基于用户的类似,只是使用所有用户对物品的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户。
Item-CF和基于内容(CB)的推荐
- 其实都是基于物品相似度预测推荐,只是相似度计算的方法不一样,前者是从用户历史的偏好推断,而后者是基于物品本身的属性特征信息。
同样是协同过滤,在基于用户和基于项目两个策略中应该如何选择呢?
- 电商、电影、音乐网站,用户数量远大于物品数量。
- 新闻网站,物品(新闻文本)数量可能大于用户数量。
3、 User-CF和Item-CF的比较
同样是协同过滤,在User-CF和ltem-CF两个策略中应该如何选择呢?
Item-CF应用场景
- 基于物品的协同过滤( Item-CF ) 推荐机制是 Amazon在基于用户的机制上改良的一种策略因为在大部分的Web站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定,同时基于物品的机制比基于用户的实时性更好一些,所以 Item-CF 成为了目前推荐策略的主流。
User-CF应用场景
- 设想一下在一些新闻推荐系统中,也许物品一一也就是新闻的个数可能大于用户的个数,而且新闻的更新程度也有很快,所以它的相似度依然不稳定,这时用 User-cf可能效果更好。
所以,推荐策略的选择其实和具体的应用场景有很大的关系。
4、 基于协同过滤的推荐优缺点
(1)基于协同过滤的推荐机制的优点:
它不需要对物品或者用户进行严格的建模,而且不要求对物品特征的描述是机器可理解的,所以这种方法也是领域无关的。
这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好。
(2)存在的问题
方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。
推荐的效果依赖于用户历史好数据的多少和准确性。
在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。
对于一些特殊品味的用户不能给予很好的推荐。
(三)基于模型的协同过滤
1、基本思想
(1)用户具有一定的特征,决定着他的偏好选择
(2)物品具有一定的特征,影响着用户需是否选择它。
(3)用户之所以选择某一个商品,是因为用户特征与物品特征相互匹配。
基于这种思想,模型的建立相当于从行为数据中提取特征,给用户和物品同时打上“标签”;这和基于人口统计学的用户标签、基于内容方法的物品标签本质是一样的,都是特征的提取和匹配。
有显性特征时(比如用户标签、物品分类标签)我们可以直接匹配做出推荐;没有时,可以根据已有的偏好数据,去发据出隐藏的特征,这需要用到隐语义模型(LFM)。
2、基于模型的协同过滤推荐,就是基于样本的用户偏好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测新物品的得分,计算推荐
基于近邻的推荐和基于模型的推荐
- 基于近邻的推荐是在预测时直接使用已有的用户偏好数据,通过近邻数据来预测对新物品的偏好(类似分类)
- 而基于模型的方法,是要使用这些偏好数据来训练模型,找到内在规律,再用模型来做预测(类似回归)
训练模型时,可以基于标签内容来提取物品特征,也可以让模型去发据物品的潜在特征;这样的模型被称为 隐语义模型 ( Latent Factor Model,LFM)。
(1)隐语义模型(LFM):用隐语义模型来进行协同过滤的目标:
- 揭示隐藏的特征,这些特征能够解释为什么给出对应的预测评分
- 这类特征可能是无法直接用语言解释描述的,事实上我们并不需要知道,类似“玄学”
通过矩阵分解进行降维分析
- 协同过滤算法非常依赖历史数据,而一般的推荐系统中,偏好数据又往往是稀疏的;这就需要对原始数据做降维处理。
- 分解之后的矩阵,就代表了用户和物品的隐藏特征
隐语义模型的实例:基于概率的隐语义分析(pLSA)、隐式迪利克雷分布模型(LDA)、矩阵因子分解模型(基于奇异值分解的模型,SVD)
(2)LFM降维方法——矩阵因子分解
(3)LFM的进一步理解
我们可以认为,用户之所以给电影打出这样的分数,是有内在原因的,我们可以挖掘出影响用户打分的隐藏因素,进而根据未评分电影与这些隐藏因素的关联度,决定此未评分电影的预测评分。
应该有一些隐藏的因素,影响用户的打分,比如电影:演员、题材、年代…甚至不定是人直接可以理解的隐藏因子。
找到隐藏因子,可以对user和Iiem进行关联(找到是由于什么使得user喜欢/不喜欢此Item,什么会决定user喜欢/不喜欢此item),就可以推测用户是否会喜欢某一部未看过的电影。
(4)矩阵因子分解
(5)模型的求解——损失函数
(6)模型的求解算法——ALS
现在,矩阵因子分解的问题已经转化成了一个标准的优化问题,需要求解P、Q,使目标损失函数取最小值。
最小化过程的求解,一般采用随机梯度下降算法或者交替最小二乘法来实现交替最小二乘法( Alternating Least Squares,ALS)
ALS的思想是,由于两个矩阵P和Q都未知,且通过矩阵乘法耦合在一起,为了使它们解耦,可以先固定Q,把P当作变量,通过损失函数最小化求出P,这就是一个经典的最小二乘问题;再反过来固定求得的P,把Q当作变量,求解出Q:如此交替执行,直到误差满足阅值条件,或者到达迭代上限。
(7)梯度下降算法