基于内容的推荐算法

本文约9663字,建议阅读25分钟。

1.简介

基于内容的推荐算法(Content-Based Recommendations,CB)非常古老,应该是最早被使用的推荐算法,虽是一个年代久远的算法,但即便放在深度学习十分火热的当下,基于内容的推荐算法依然被工业界广泛使用,足以证明其具有不可替代的优势,也经受了时间的检验。

基于内容的推荐算法最早主要是应用在信息检索系统当中,所以很多信息检索及信息过滤里的方法都能用于基于内容的推荐中。而用于个性化推荐领域的内容推荐,本质上就是一个包装成推荐系统的信息检索系统。

工业界中成熟的推荐系统往往是多个推荐算法策略的组合使用,因此基于内容的推荐很少会独立支撑整个推荐系统,但通常一个复杂的推荐系统很可能是从基于内容推荐成长起来的,基于内容的推荐系统是一个推荐系统的孩童时代。

2.基本思路

根据用户过去喜欢的物品,为用户推荐和他过去喜欢的物品相似的物品。这个过程中最重要的是通过用户的历史行为来学习用户的偏好,刻画出用户画像,然后通过相似性度量找出与用户偏好最接近的 N 个物品。

举个简单的例子:在京东上购物的小伙伴们应该都知道,每当你进入任何一个物品页面的时候都会有一个 “猜你喜欢” 的栏目,这时候他就会根据你经常购买的物品给你推荐相似的物品。例如对我来说:我经常购买互联网类书籍,所以它就会给我推荐类似的书籍(当然这里只是举个例子,京东的推荐算法肯定不可能那么单一,但是可以肯定的是他一定会用到最基础的内容推荐算法)。

3.架构流程

一个完整的基于内容的推荐系统架构1如下图所示:

主要流程说明:

  • 物品表示(Item Representation):为每个 item 抽取出一些特征(也就是 item 的 content 了)来表示此 item。
  • 用户偏好学习(Profile Learning):利用一个用户过去喜欢(及不喜欢)的 item 的特征数据,来学习出此用户的偏好特征(profile);
  • 生成推荐列表(Recommendation Generation):通过比较上一步得到的用户 profile 与候选 item 的特征,为此用户推荐一组相关性最大的 item。

举个例子说明前面的三个步骤。随着今日头条的崛起,基于内容的文本推荐就盛行起来。在这种应用中一个 item 就是一篇文章。

  1. 第一步,我们首先要从文章内容中抽取出代表它们的属性。常用的方法就是利用出现在一篇文章中的词来代表这篇文章,而每个词对应的权重往往使用信息检索中的 TF-IDF 来计算。利用这种方法,一篇抽象的文章就可以使用具体的一个向量来表示了。
  2. 第二步,根据用户过去喜欢什么文章来产生刻画此用户喜好的特征向量了,最简单的方法可以把用户所有喜欢的文章对应的向量的平均值作为此用户的特征向量。比如用户经常在今日头条阅读技术科技相关的文章,那么今日头条的算法可能会把用户偏好特征中的 “互联网”、“大数据”、“机器学习”、“数据挖掘” 等关键词的权重设置的比较大。
  3. 第三步,当用户登录或刷新头条客户端的时候,推荐系统会根据用户 ID 获取到相应的用户特征,然后利用内容推荐算法与未读的较新文章进行相似度计算(相似度的衡量可以用余弦相似度),然后取相似度最大的前 N 个篇文章作为推荐结果返回给用户的推荐列表中。2

4.相关算法

本小节,我们将详细介绍各个流程的细节以及各个环节所涉及的相关算法。

4.1.物品表示(Item Representation)

物品表示,用更形象的说法是物品画像(Item Profile)的构建,是相对于用户画像(User Profile)来说的。不管是物品画像的构建,还是用户画像的构建,有一个非常重要的步骤,那就是内容的挖掘和分析。

内容的挖掘和分析实际上是基于内容的推荐系统最关键的一个步骤,相当于机器学习任务中特征工程的环节,实际上,基于内容推荐算法中所谓的 “内容”,表现在结构化数据中,就是指想尽各种办法提取出来的关键特征,在数据资源固定的情况下,特征提取的质量直接影响推荐效果的好坏。因此,基于内容的推荐,最重要的不是推荐算法,而是内容挖掘和分析。内容挖掘越深入,哪怕早期推荐算法仅仅是非常硬的规则,也能取得不俗的效果。随着内容分析的逐步深入,能抓住的用户群体就越细致,推荐的转化率就越高,用户对产品的好感度也就增加了。3

举个例子,比如短视频的推荐,内容挖掘由浅至深可能有以下几个过程,推荐效果也会更加精细化:

  1. 如果短视频本身没有任何结构化信息,如果不挖掘内容,那么除了强推或者随机小流量,没有别的合理曝光逻辑了;
  2. 如果对视频的文本描述,比如标题等能够有内容分类,比如是娱乐类,那么对于喜欢娱乐的用户来说就很合理;
  3. 如果能够进一步分析文本的主题,那么对于类似主题感兴趣的用户就可能得到展示;
  4. 如果还能识别出内容中主角是吴亦凡,那就更精准锁定一部分用户了;
  5. 如果再对内容本身做到嵌入分析,那么潜藏的语义信息也全部抓住,更能表达内容了。

既然是特征工程,那么前置预处理必不可少,因此要想物品特征做好,需要做好 “抓(丰富内容库,提高推荐多样性)、洗(洗掉垃圾内容,保留有用信息)、挖(挖掘有用信息)、算(计算相关性,确定筛选合理属性特征)” 四门功课。

内容挖掘和分析过程中,挖掘侧重于信息的探索和发现,分析侧重于信息的提炼和转化。在这里,内容分析往往是指关键词的提取,涉及非结构文本内容的结构化处理。我们拿到的文本,常常是自然语言描述的,也就是 “非结构化” 的,为了便于计算机处理和计算,把对非结构化的文本内容的处理简化为向量空间中的向量运算,这个过程常常伴随着文本特征提取。向量化的表示方法也是最早来自于信息检索系统,称为向量空间模型(VSM:Vector Space Model)。

4.1.1.文本内容的结构化算法

非结构文本内容的结构化处理以及文本特征提取,可用的算法和模型众多,各有特点,大都属于 NLP(自然语言处理)领域,因这部分内容相对独立,我整理到了另一篇文章《文本内容分析算法》,请移步参考。

最后我们说说物品画像构建结束后的最终产物:

  • 结构化内容库

物品结构化的内容库,最重要的用途是结合用户反馈行为去学习用户画像(用户对物品的偏好特征)。

  • 内容分析模型

在内容结构化处理过程中,可能会用到多种模型来实现,比如分类器模型、主题模型、实体识别模型、嵌入模型等,这些模型在之后的场景中依然可堪当大用,比如当新的物品刚刚进入时,需要实时地被推荐出去,这时候可用这些模型对新物品的内容信息进行实时分析,提取结构化内容,之后便可直接与旧物品一样毫无差别地进入推荐候选列表,获得了推荐和曝光机会,很好地解决了新物品的冷启动问题。

4.2.用户偏好学习(Profile Learning)

相对于物品画像的说法,这个过程实际上就是用户画像的构建(User Profile)了,用户画像这个词相比物品画像来说更加被广为流传,一些大厂内部也习惯把用户画像简称 UP。实际上个性化推荐系统中的用户画像,并不是单纯的人口统计学信息构建的标签云,还有一些特征可能是一些抽象的隐含语义,无法被人直观理解,因为它不是给人看的,而是给机器看的。用户画像并不是推荐系统的目的,而是在构建推荐系统的过程中产生的一个关键环节的副产品。

一个推荐系统来到这个世界上,它只有一个使命,就是要在用户(User)和物品(Item)之间建立连接。内容的挖掘和分析就是为了更好地识物断人,从而更高效的完成用户与物品之间的对接。而特征学习就是完成连接的关键步骤。

用户画像由两个部分构成,一部分是对用户端内容挖掘分析后的用户的属性特征,另一部分是根据用户行为数据统计或学习到的对物品端结构化属性的偏好度量。

用户端的内容分析一般可以从人口统计学信息入手(如性别、年龄、婚姻状况、职业等),还可以对用户的个人签名、发表的评论、动态、日记等内容进行分析提炼关键特征。

用户对物品的偏好特征是基于内容推荐的重要一环,这个过程体现了基于内容推荐的核心思想,也就是通过用户的历史行为来了解用户的兴趣偏好。此时我们已经拿到了用户喜欢的多个物品的向量化表示,那么,如何计算用户的喜好特征呢?相关的算法有很多,主要分非机器学习算法和机器学习算法。

4.2.1.平均法

这是最简单的方法,基于统计直接把用户所有喜欢的物品对应的向量的平均值作为此用户的偏好特征向量。用公式表示为:

$$w_u=\frac{1}{N}\sum_{i=1}^N w_i$$

其中,N 表示用户历史喜欢物品的总数,$w_i$ 表示用户喜欢的第 $i$ 个物品的向量。最后得到的是各个偏好特征上的平均值。

4.2.2.时间衰减

在某些推荐场景下,会考虑到时间效应,用户的兴趣迁移比较快,其中的某个兴趣点可能会随着时间变化不断衰减,因此在计算用户偏好特征的时候会增加时间因子,可用如下公式计算:

$$w_u=\frac{1}{N}\sum_{i=1}^N w_i \cdot \alpha^{diff_i}$$

上式只是在平均方法上添加了时间因子,其中,其中α 取小于 1 的数值,值越小时间衰减越快,$diff_i$ 是用户对该物品产生行为到现在的时间间隔。

注意,时间衰减的算法很多,这仅是一种较简单的,不过基础思想都是一样的,实际使用应根据业务场景进行设计。

4.2.3.Rocchio算法

Rocchio 算法是信息检索中处理相关反馈(Relevance Feedback)的一个著名算法。比如你在搜索引擎里搜 “苹果”,当你最开始搜这个词时,搜索引擎不知道你到底是要能吃的水果,还是要不能吃的苹果,所以它往往会尽量呈现给你各种结果。当你看到这些结果后,你会点一些你觉得相关的结果(这就是所谓的相关反馈了)。然后如果你翻页查看第二页的结果时,搜索引擎可以通过你刚才给的相关反馈,修改你的查询向量取值,重新计算网页得分,把跟你刚才点击的结果相似的结果排前面。比如你最开始搜索 “苹果” 时,对应的查询向量是 {“苹果” : 1}。而当你点击了一些与 Mac、iPhone 相关的结果后,搜索引擎会把你的查询向量修改为 {“苹果” : 1, “Mac” : 0.8, “iPhone” : 0.7},通过这个新的查询向量,搜索引擎就能比较明确地知道你要找的是不能吃的苹果了。Rocchio 算法的作用就是用来修改你的查询向量的:{“苹果” : 1} –> {“苹果” : 1, “Mac” : 0.8, “iPhone” : 0.7}。

在内容推荐中,我们可以类似地使用 Rocchio 算法来获得用户的偏好特征:

$$ w_u =\alpha \cdot \frac{1}{|I_r|}\sum_{{w_j}\in I_r} w_j- \beta \cdot \frac{1}{|I_{nr}|}\sum_{w_k \in I_{nr}} w_k$$

其中,$I_r$ 和 $I_{nr}$ 分别表示用户喜欢与不喜欢的 Item 集合,$w$ 表示某 item 的特征向量,$\alpha$ 与 $\beta$ 分别为正负反馈的权重,它们的值可根据经验人为给定。

从上式可以看出,其实 Rocchio 算法和平均法很类似,只是多了负反馈的部分,并分别给了两个调节权重实现灵活调节。另外,Rocchio 算法还有一个好处是 ,可以根据用户的反馈实时更新,其更新代价很小,非常适合短期需求场景。

上述三种非机器学习方法,都是先通过历史行为数据统计计算出用户偏好特征,然后再与候选物品对应的属性特征一一计算相似度,再按照相似度打分进行排序推荐。这种特征学习方法得到的是用户的平均偏好特征,因此推荐精度可能没那么好,不过好处也有,那就是算法简单可快速实现、快速上线,还可以对用户的偏好特征进行实时更新。

4.2.4.机器学习算法

如果细心的话,你会发现非机器学习算法只用到用户的偏好特征就能进行相似度计算,然后进行召回推荐了,而用户画像的另一部分即用户本身的属性特征,其实更多用在机器学习算法中,这样可以提高推荐精度。

机器学习算法更加强调目标思维,通常会把推荐问题转化为有监督的分类问题。

一种最典型的场景:提高某种行为的转化率,如点击、收藏、转发等。那么标准的做法是:收集这类行为的日志数据,转换成训练样本,训练预估模型。

每一条样本由两部分构成:一部分是特征,包含用户端的画像内容,物品端的结构化内容,可选的还有日志记录时一些上下文场景信息,如时间、地理位置、天气、设备等等,另一部分就是用户行为,作为标注信息,包含 “有反馈” 和 “无反馈” 两类。

用这样的样本训练一个二分类器,常用模型是对数几率回归(Logistic Regression)和梯度提升树(GBDT)或者两者的结合。在推荐匹配时,预估用户行为发生的概率,按照概率排序。这样更合理更科学,而且这一条路可以一直迭代优化下去。关于 LR 和 GBDT,可参考我之前写的文章《Logistic 回归》和《集成学习》。

需要注意的是,采用机器学习思路训练预估模型,必须得有大量的用户行为数据做保证

4.3.生成推荐列表(Recommendation Generation)

生成推荐列表的过程其实是一个打分召回排序的过程。如果上一流程中偏好特征学习使用的是机器学习算法,那么用户与物品间连接的紧密程度使用预测概率值度量。使用机器学习算法会为用户训练出一个二分类模型,该模型可对每个候选物品进行预测输出一个相应的预测概率值,概率值越高表明该物品与用户连接越紧密,因此从候选物品中选出概率值最大的 N 个物品排序推荐即可。

如果偏好特征学习使用的是非机器学习算法,那么用户与物品间连接的紧密程度的度量需要一个相关度打分的算法,因为是计算两个向量的相关度,一般使用余弦相似度(cosine similarity)进行计算打分,此外,还有一种算法叫 BM25F 算法,借鉴于搜索领域,可以实现更好的打分。

4.3.1.余弦相似度

相关度打分最常用的是余弦相似度,公式为:

$$\cos(\vec w_u, \vec w_i)=\frac{\vec w_u \cdot \vec w_i}{||\vec w_u||_2 \times ||w_i||_2 }=\frac{\sum_{k=1}^K w_{k,u} w_{k,i}} {\sqrt{\sum_{k=1}^Kw_{k,u}^2}\sqrt{\sum_{k=1}^K w_{k,i}^2}}$$

其中,$\vec w_u$ 表示某个 user 的偏好特征,$\vec w_i$ 为某个候选 item 的属性特征,k 为第 k 个特征,向量中共 K 个特征。余弦相似度的值越接近 1,表面二者越相似(方向越一直,夹角越小),反之越接近-1。

4.3.2.BM25F算法

BM25F 算法来源于搜索领域,在商业搜索引擎的网页排序中被广泛使用,属于效果比较好的概率检索模型。在机器学习盛行的时代,再加上 BM25F 算法相对复杂一点,还有很多经验参数需要人为配置,因此在基于内容的推荐算法中,使用 BM25F 的还是很少,这里仅简单介绍,作为一种知识储备,可能会在特殊场景下用到。

BM25F 算法在搜索领域的主要用途就是计算一个查询语句里面所有词和文档的相关度,在推荐系统中我们可以拿来计算用户偏好特征和物品属性特征的相关性,可以得到比余弦相似度更合理的打分,比如 BM25F 算法中有一个 “域”(Field)的概念,一个文档有多个域构成,不同的域需要不同的权值,比如一篇新闻,正文和标题中分析出一个人物名,评论中也分析出其他用户讨论提及的一些人物名,都可以用于推荐。直观上新闻的正文和标题中更重要。

BM25F 算法有不同的几个变种,是 BM25 算法的改进算法,BM25 算法又是 BIM(Binary Independent Model,二元独立模型)的改进算法。4,我们这里介绍一种常用的较简单的 BM25F 变种。

我们把整体相关度打分看做是所有查询关键字相关性的加权和,如下:

$$Score(Q,d)=\sum_i^n{W_i}\cdot{R(q_i,d)}$$

其中 $R(q_i,d)$ 是查询语句 Q 集合中每个词 $q_i$ 和文档 $d$ 的相关度值,$W_i$ 是该词的权重。

$W_i$ 一边情况下用某种变形的 IDF(Inverse Document Frequency)值,即逆向文档频率,公式如下:

$$IDF(q_i)=log\frac{N+0.5}{n(q_i)+0.5}$$

其中,N 是文档总数,$n(q_i)$ 是包含该词的文档数,0.5 是平滑系数,避免 $n(q_i)=0$ 的情况。log 函数是为了让 IDF 的值受 $N$ 和 $n(q_i)$ 的影响更加平滑。 从公式中显然能看出 IDF 值的含义:即总文档数越大,包含词 $q_i$ 的文档数越小,则 $q_i$ 的 IDF 值越大。 关于 IDF,更具体的可以参考《文本内容分析算法》。

注,还有一个变种算法是用 RSJ 值来对单词加权,RSJ 即 “罗伯逊 – 斯巴克 – 琼斯” 权重(Robertson-Spärck-Jones),简称 RSJ 值。这个权重其实就是一个更加复杂版本的 IDF。一个关键的区别是 RSJ 值需要一个监督信息,就是要看文档对于某个查询关键字是否相关,而 IDF 并不需要。

解决了 $W_i$,现在再来解决 $R(q_i,d)$。$R(q_i,d)$ 公式如下:

$$R(q_i,d)=\frac{{f’_i}}{k_1+f’_i}$$

BM25F 公式与 BM25 的区别体现在计算因子 $f’_i$ 上,这个因子综合了第 $i$ 个单词出现在不同域的得分,其定义如下:

$$f’_i = \sum_{k=1}^u w_k \times \frac{f_{ui}}{B_u}$$

$$B_u = ((1-b_u)+b_u \times \frac{ul_u}{avul_u})$$

其中 $k_1$ 是调节因子,是一个经验参数,作用是对查询次在文档中的词频进行调节,一般设 $k_1$ 为 1.2。 假设一个文档 $D$ 包含了 $u$ 个不同的域,而每个域的权值设定为 $w_k$,$f’_i$ 将第 $i$ 个单词在各个不同域的分值 $\frac{f_{ui}}{B_u}$ 加权求和,其中 $f_{ui}$ 代表单词在第 $u$ 个域出现的词频数,$B_u$ 则是域的长度因素,对于 $B_u$ 来说,$ul_u$ 是这个域的实际长度,$avul_u$ 是文档集合中这个域的平均长度,而 $b_u$ 则是调节因子,这里需要注意的是,不同的域需要设定不同的调节因子,这样的搜索效果才好,所以对于 BM25F 来说,除了调节因子 $k_1$ 外,如果文档不含 $u$ 个不同的域,则还要凭经验设定 $u$ 个域权值和 $u$ 个长度调节因子(不分域的 BM25 算法中,通常 $b$ 设为 0.75 会获得较好的搜索效果,此处可参考设定)。

BM25F 就是在 BM25 算法的基础上加了域的权重设定,BM25 其实是一个经验公式。这里面的每一个成分都是经过很多研究者的迭代而逐步发现的。很多研究在理论上对 BM25 进行了建模,从 “概率相关模型”(Probabilistic Relevance Model)入手,推导出 BM25 其实是对某一类概率相关模型的逼近。

在推荐系统中,我们计算的是两个等长向量的相关度,即用户的偏好特征和物品的属性特征,我们可以把用户偏好特征看成是查询关键字集合 Q,每一个偏好特征都是一个查询关键字 $q_i$,把候选物品看作是一个个文档,如此便可用 BM25F 算法计算候选物品的相关度。其实在 “学习排序”(Learning To Rank,L2R)这一思路未出现以前,BM25 是排序普遍做法,往往就是用线性加权的形式直接把各种信息相结合。例如,在 21 世纪初期比较流行的做法是用 BM25 和 PageRank 的线性结合来确定网页的相关度。这里面,BM25 是和某个查询关键字有联系的信息,而 PageRank 则是一个网页的总体权重。

5.工程经验

  1. 实际应用时怎样建立词表向量?

在实际应用中,一般内容较多,词表会非常大,向量维度可能会非常高,通常会事先做个统计,取最高频(可参考 TF-IDF 值)的若干个词,其它词则全部归在一个位置上,叫 Unknown,即未知词。

  1. 如何从物品的结构化标签中生成用户的兴趣标签?

我们把用户对物品的行为,消费或者没有消费看成是一个分类问题。用户用实际行动帮我们标注了若干数据,那么挑选出他实际感兴趣的特性就变成了特征选择问题。

最常用的是两个方法:卡方检验(CHI)和信息增益(IG)。基本思想是:

  1. 把物品的结构化内容看成文档;
  2. 把用户对物品的行为看成是类别;
  3. 每个用户看见过的物品就是一个文本集合;
  4. 在这个文本集合上使用特征选择算法选出每个用户关心的东西。

6.算法优缺点

基于内容推荐算法的优点

  1. 原理简单,易于实现,可以快速上线,且易于定位问题,常用于推荐系统起步阶段。
  2. 可解释性非常强,因为给用户推荐是和他过去喜欢的物品相似的物品。
  3. 用户之间具有独立性。这是与协同过滤截然不同的一点,基于内容的推荐算法都是依据他自身的历史数据来推荐的,自然就与他人的行为无关。而协同过滤算法刚好相反,它需要利用很多人的数据,基于内容的这种用户独立性也为推荐系统带来的一个显著好处,就是是别人不管对物品如何作弊(比如利用多个账号把某个产品的排名刷上去)都不会影响到自己。
  4. 物品没有冷启动问题,因为物品的内容特征不依赖于用户数据,新的物品可以立刻得到推荐,具有和老物品相同的曝光机会;同时推荐出的物品不会存在过于热门的问题。相对而言,基于协同过滤的新物品必须要有用户行为才能被推荐给其他用户。

基于内容推荐算法的缺点

  1. 物品的特征抽取一般很难。基于内容的推荐算法的前提是必须能够抽取出有意义的特征,且要求这些特征内容有良好的结构。这一步非常重要,因为特征质量决定了推荐系统性能的上界。如果系统中的 item 是文档(如个性化阅读中),那么我们现在可以比较容易地使用信息检索里的方法来 “比较精确地” 抽取出 item 的特征。但很多情况下我们很难从 item 中抽取出准确刻画 item 的特征,比如电影推荐中 item 是电影,社会化网络推荐中 item 是人,这些 item 属性都不好抽。其实,几乎在所有实际情况中我们抽取的 item 特征都仅能代表 item 的一些方面,不可能代表 item 的所有方面。这样带来的一个问题就是可能从两个 item 抽取出来的特征完全相同,这种情况下基于内容的推荐系统就完全无法区分这两个 item 了。比如如果只能从电影里抽取出演员、导演,那么两部有相同演员和导演的电影对于基于内容的推荐系统来说就完全不可区分了。因此,必须从各个方面想办法去丰富内容,比如我们说到的 “抓洗挖算”,另外就是从各个可能的区域信息中去尝试挖掘有意义的信息。
  2. 无法挖掘出用户的潜在兴趣,推荐精度较低。因为内容推荐只依赖于用户过去对某些物品的喜好,它产生的推荐也都会和用户过去喜欢的物品相似。如果一个人以前只看与推荐有关的文章,则只会给他推荐更多与推荐相关的文章,它不会知道用户可能还喜欢数码,推荐的都是相似物品,差异性不大,无法给用户带来惊喜感。
  3. 无法为新用户产生推荐,无法解决用户的冷启动问题,新用户没有喜好历史,自然无法获得他的偏好特征,所以也就无法为他产生推荐了。当然,这个问题协同过滤也有。

7.应用场景

基于内容的推荐系统因为相对简单,易于实现,再加上没有物品的冷启动问题,非常适合推荐系统的起步阶段。在推荐系统建设的成熟阶段,推荐系统依然可以持续存在,此时多与其他推荐算法共同存在,可应用于独特的场景,比如物品的冷启动阶段,比如有时候用基于内容的推荐算法来过滤其他算法的候选集,把一些不太合适的候选去掉,比如不要给小孩推荐偏成人的书籍。

另外,推荐系统虽然简单且古老,但实际上后来发展的一些与深度学习结合的算法都有借鉴或以基于内容推荐系统为理论基础实现的。

8.业界案例

流媒体音乐网站 Pandora:人工为音乐标注了各种维度的属性,实现其音乐推荐系统背后的 “音乐基因工程”,然后基于内容的推荐算法来推荐音乐。

今日头条:有一系列内容分析、特征提取过程,推荐系统是由多种推荐算法混合构成,基于内容的推荐是其中的一部分。

9.参考资料


1 Paul Kantor et. Recommender Systems Handbook. Springer
3 刑无刀. 推荐系统三十六式. 极客时间
4 张俊林. 这就是搜索引擎. 电子工业出版社
© 除特别注明外,本站所有文章均为卢明冬的博客原创 , 转载请联系作者。
© 本文链接:https://lumingdong.cn/content-based-recommendation-algorithm.html
卢明冬

大千世界,人生百态,世事万物,皆无所固形。 行走于世,自当因变而变,写此文,以自省。 人性不离根泽,形之百变,亦可应万物。 凡人之处世,皆不能守固而据,应思变而存。 既可谨言慎行指点江山,又可放浪形骸鲜衣怒马, 既可朝九晚五废寝忘食,又可浪迹天涯四海为家。 随形而居,随意而为,静则思动,动则思远。 虽困于束缚,又能借力束缚,虽惘于迷思,又能获于迷思。 看山是山,看水是水,有酒学仙,无酒学佛。 心存根本,又何惧变乎?

相关文章
评论 ( 2 )
  1. 码蚁编程
    2019年8月19日 at 下午5:26
    回复

    请问博主,我计算了每个文章的向量,通过文章-文章相似度实现了相似推荐,就是一个文章详情页的下方列出了最相似的文章列表,这种是不是也可以叫做 “基于内容的推荐”?

    • 卢明冬
      卢明冬
      2019年8月23日 at 下午2:36
      回复

      关键要看计算文章向量的方法是什么,如果是以 NLP 的方式基于文章内容来学习到的文章向量(Word2Vec),这样根据某用户的历史阅读进行相似推荐就是 “基于内容的推荐”;如果文章的向量是通过大量用户的共现行为数据学习到的(Item2Vec),其本质是 “基于协同过滤的推荐”,后者并不关心文章内容是什么。

写下您的评论...