1. 前言

在之前总结过协同过滤的召回通路后,今天我们来总结下召回策略中的重头戏:基于内容的召回通路,也即我们常说的基于标签的召回。这里就要涉及两个一直很流行的词汇:用户画像User Profile和物品画像Item Profile。

说回推荐系统,它的使命就是,要在用户(User)和物品(Item)之间建立连接。那么用户画像和物品画像是否是推荐系统的“银弹”呢?答案肯定不是,但也不能说用户画像一无是处。

用户画像只是推荐系统构建过程中的一个副产品,而不是推荐系统的目的。归根结底,用户画像是给机器看的,而不是给用户看的,所以越酷炫的用户画像越没什么用。在使用机器学习、深度学习时,用户画像的维度、数量、量化等,这些往往是不可解释的。所以,不要把用户画像看的那么重要,但是,实际工作中,推荐系统的召回侧,标签化的内容召回,效果往往会比其他策略要好很多,而标签化的迭代往往是一个长期持久的过程。

为何一定要做好内容的推荐呢?这是因为,通常一个推荐系统往往从基于内容开始成长。推荐最开始的时候,内容数据很好获得,不需要有用户数据就可以做出推荐系统。内容数据是基础,只要深入挖掘,就可以挖掘出一些很有用的信息给推荐系统用。

然后,当最初的推荐结果反馈给用户后,用户的行为数据可以作为协同过滤等其他召回通路的数据输入源。

那么,今天我们就来聊聊基于内容的推荐召回。

2. 构建画像

现在我们来一起聊聊如何构建画像,拿用户画像来说,有两个关键因素:维度量化。对于维度来说,比如性别、年龄、价格等,我们在处理数据时,要铭记一点,这些数据是让机器去学习的,不一定让人类能够理解,后续我会总结在模型构建时,相关数据格式的处理。

说说量化,在实际的生产系统中,画像每个维度的量化,应该交给机器,而且以目标为导向,以结果来反向优化才有意义。

那么如何构建画像呢?常见的有三种方法:

  1. 查户口:直接使用最原始的数据作为画像的内容,如:性别、年龄、区域、兴趣爱好等等,在经过数据清洗挖掘阶段后,这些数据往往在冷启动等场景下有很好的作用。
  2. 堆数据:堆积历史数据,也就是在用户有一定行为后,对历史数据进行挖掘,构建标签系统,然后基于这些标签,进行各种维度的统计,这些统计结果就可以作为量化指标。
  3. 黑盒子:这个呢,就是使用机器学习、深度学习等方法,学习出人类无法理解的user_embedding,在推荐的中后期迭代中,承担非常大的作用。

那该如何把内容推荐做好呢?从技术层面上来说,需要做好:抓、洗、挖、算,这四门功课。

抓:爬虫,很多公司都会有爬虫组,在公司的数据基础上,获取更多互联网的数据来补充自己的内容源,增加分析的维度

洗:清洗,抓取过来的数据,必须洗洗才会更健康,冗余、黄赌毒等敏感及黑名单数据需要清洗

挖:挖掘,不管是自己的数据还是抓取过来的的数据,在清洗之后,需要深入挖掘,统计各维度的结果

算:计算,匹配用户和物品的属性,然后计算出更合理的推荐结果

整体上的流程,是这样的:基于现有的数据源,对内容进行分析,得到结构化的内容库和内容模型,然后根据标签给用户推荐结果,在用户使用产品后,对行为数据进行分析,构建用户的标签。而同时对于那些没有历史行为的用户,可以根据最初的标签,直接拿标签去推荐,所以基于内容的推荐,也常常作用于冷启动过程。

3. 内容召回的算法

说完流程,我们来谈谈基于内容召回,经常使用的一些算法。

从最初的数据源开始,对于文本数据,经常的做法就是:

  1. 把非结构化的文本结构化
  2. 根据用户行为数据,把物品的结构化结果传给用户,与用户结构化信息合并

对于文本结构化的处理上来说,一般使用比较多的就是NLP相关算法:

  1. TF-IDF:目前我经常用的就是,可以提取出item的关键词词频,然后建立关键词和item的倒排表。
  2. Kmeans:可以对用户、物品分别聚类,根据聚类进行针对性推荐
  3. Word2vec:计算词向量,扩充结构化标签;累加得到一个文本的稠密向量;聚类,得到更好的聚类效果
  4. 其他:LDA主题识别,TextRank算法,UGC内容分类,卡方检验CHI和信息增益IG

在具体的实践中,我目前的做法是:

  1. 针对item,利用TF-IDF,计算出每个item的关键词,然后在ES中构建关键词-item的倒排表,如:剑南春:[item1:0.9, item2:0.7, item100:0.5...]
  2. 截取近30天内用户的行为数据,统计出用户每个关键词的比例,如:剑南春-0.5,茅台0.2,五粮液0-0.2,泸州老窖-0.1,这个过程用hive、spark都可以统计出来
  3. 假如内容召回100个,那么拿着关键词去es中,提取每个关键词对应的item数量,如:剑南春-50个,茅台-20个,五粮液-20个,泸州老窖-10个

通过这样的方法,就完成了基于内容的召回,真的不难。就是给每个item打标签,然后统计用户的标签比例,然后根据召回的个数,对应的去数据库里拿item就结束了。

当然,在打标签的时候,根据内容的特点,去针对性的选择算法,筛选完后,再选择es或redis等查询快速的数据库存储即可。

而在实际工作中,标签打的越多,对用户的喜好也就越准确,但是,耗费的精力也就越多。召回阶段是推荐系统的一部分,没必要在某一个节点做的太过细致,就目前业界的趋势来说,更多的是用机器学习,深度学习等算法,去提升生产力,所以适度的标签化即可,也就是前面提到的,用户画像不是推荐系统的目的,而是附带的产品。

好了,关于基于内容的召回,就总结到这里,还是那句话,思路最重要,具体使用什么算法,使用什么工具,需要根据数据的特点来选择。学习就应该从全局到局部,由上至下的思想,才会把知识体系构建出来。

后续我会针对算法进行详细的总结,拜了个拜~

推荐召回--基于内容的召回:Content Based的更多相关文章

  1. 基于内容的图片检索CBIR(Content Based Image Retrieval)简介

    传统的图像检索过程,先通过人工对图像进行文字标注,再利用关键字来检索图像,这种依据图像描述的字符匹配程度提供检索结果的方法,简称“以字找图”,既耗时又主观多义.基于内容的图像检索客服“以字找图”方式的 ...

  2. 推荐召回--基于物品的协同过滤:ItemCF

    目录 1. 前言 2. 原理&计算&改进 3. 总结 1. 前言 说完基于用户的协同过滤后,趁热打铁,我们来说说基于物品的协同过滤:"看了又看","买了又 ...

  3. Recommending music on Spotify with deep learning 采用深度学习算法为Spotify做基于内容的音乐推荐

    本文参考http://blog.csdn.net/zdy0_2004/article/details/43896015译文以及原文file:///F:/%E6%9C%BA%E5%99%A8%E5%AD ...

  4. elasticsearch使用More like this实现基于内容的推荐

    基于内容的推荐通常是给定一篇文档信息,然后给用户推荐与该文档相识的文档.Lucene的api中有实现查询文章相似度的接口,叫MoreLikeThis.Elasticsearch封装了该接口,通过Ela ...

  5. ElasticSearch java API-使用More like this实现基于内容的推荐

    ElasticSearch java API-使用More like this实现基于内容的推荐 基于内容的推荐通常是给定一篇文档信息,然后给用户推荐与该文档相识的文档.Lucene的api中有实现查 ...

  6. Recommender Systems基于内容的推荐

    基于内容的推荐的基本推荐思路是:用户喜欢幻想小说,这本书是幻想小说,则用户有可能喜欢这本小说 两方面要求:(1)知道用户的喜好:(2)知道物品的属性 基于内容的推荐相比协同过滤方法(个人观点):协同过 ...

  7. 新闻推荐系统:基于内容的推荐算法(Recommender System:Content-based Recommendation)

    https://blog.csdn.net/qq_32690999/article/details/77434381 因为开发了一个新闻推荐系统的模块,在推荐算法这一块涉及到了基于内容的推荐算法(Co ...

  8. 推荐系统第5周--- 基于内容的推荐,隐语义模型LFM

    基于内容的推荐

  9. 【T-BABY 夜谈大数据】基于内容的推荐算法

    这个系列主要也是自己最近在研究大数据方向,所以边研究.开发也边整理相关的资料.网上的资料经常是碎片式的,如果要完整的看完可能需要同时看好几篇文章,所以我希望有兴趣的人能够更轻松和快速地学习相关的知识. ...

随机推荐

  1. 【LeetCode】968. Binary Tree Cameras 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  2. 【LeetCode】463. Island Perimeter 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 减去相交部分 参考资料 日期 题目地址:https: ...

  3. python学习第三天:python基础(数据类型和变量)

    注释 以  # 开头的语句是注释,如,注释不会被编译运行: 格式 当语句以冒号:结尾时,缩进的语句视为代码块.按照约定俗成的管理,应该始终坚持使用4个空格的缩进(在文本编辑器中,需要设置把Tab自动转 ...

  4. 如何改善win10录屏时声音降噪(消除杂音)

    此文章是针对win10系统中安装Realtek声卡的麦克风出现杂音的设置办法 1. 打开win10的控制面板,找到"硬件和声音选项" 2. 进入"硬件和声音"选 ...

  5. isEmpty 和 isBlank

    <org.apache.commons.lang3.StringUtils> isEmpty系列 StringUtils.isEmpty() ========> StringUtil ...

  6. 【Java笔记】applet和html注意

    1.首先记得extends Applet 泪目 2.如果不分包,HTML可以写 <applet code="HelloWorldApplet.class" width=150 ...

  7. Kernel PCA and De-Noisingin Feature Spaces

    目录 引 主要内容 Kernel PCA and De-Noisingin Feature Spaces 引 kernel PCA通过\(k(x,y)\)隐式地将样本由输入空间映射到高维空间\(F\) ...

  8. CS5210完全替代AG6202|HDMI转VGA不带音频输出的芯片+原理图|替代兼容AG6202

    CS5210完全替代AG6202|HDMI转VGA不带音频输出的芯片+原理图|替代兼容AG6202 安格AG6202是一个HDMI转VGA不带音频解决方案,用于实现HDMI1.4高分辨率视频转VGA转 ...

  9. Spring练习,定义三个模块,使用<import>标签完成分模块配置开发,模拟实现学生借书和还书的过程,将结束输出到控制台。

    相关 知识 >>> 相关 练习 >>> 实现要求: 在图书管理系统中,学生管理模块.书籍管理模块和借还书管理模块等其他模块,相互配合协作,促使系统的运行流畅.定义三 ...

  10. 关于 Spring-WebFlux 的一些想法

    本文是本人在知乎提问 spring webflux现在看来是否成功? 下的回答,其他回答也很精彩,如果感兴趣可以查看 现在基于 spring web 的同步微服务有一个非常大的缺陷就是:相对于基于 s ...