推荐召回--基于内容的召回:Content Based

本文介绍推荐系统中的内容召回策略,包括用户画像与物品画像构建、内容数据处理流程以及基于文本的召回算法应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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等查询快速的数据库存储即可。

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

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

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

### 基于内容召回推荐系统实现方法 基于内容召回是一种常见的推荐策略,其核心思想是通过分析目标用户的兴趣特征和候选集的内容特征之间的相似度来筛选出可能感兴趣的项目[^3]。以下是关于其实现方法的具体描述: #### 数据准备 为了构建基于内容召回模型,需要收集并处理两部分数据:用户的历史行为数据和物品的内容属性数据。历史行为可以包括点击、浏览、购买等交互记录;而物品的内容属性则可能是新闻文章的主题标签、关键词或者商品的类别、品牌等信息。 #### 特征提取 对于每一件待推荐的商品或资讯,都需要将其转化为计算机可理解的形式即向量表示。这一步骤可以通过自然语言处理技术完成,比如TF-IDF(term frequency-inverse document frequency),word embedding(word2vec, GloVe)等方式将文本型的数据转换成数值化的特征向量[^3]。 #### 计算相似度 有了上述得到的特征向量之后,下一步就是计算不同对象间的相似程度。常用的衡量标准有余弦距离(cosine similarity), Jaccard index等等。假设我们已经有了某个特定用户的偏好模式,则可以根据该模式去寻找那些与其喜好最为接近的新资源作为潜在推荐项[^1]。 #### 构建索引结构加速检索过程 由于实时在线服务场景下对性能有着极高要求,在离线阶段预先建立高效的搜索索引来加快查询速度就显得尤为重要了。像倒排表(Inverted Indexes)这样的数据结构能够显著提升查找效率,尤其是在面对海量文档集合时效果尤为明显[^2]。 ```python from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity def content_based_recommendation(user_profile, items_content): vectorizer = TfidfVectorizer() # 将item的内容转为tf-idf矩阵 tfidf_matrix = vectorizer.fit_transform(items_content) # 用户profile也需要被同样的方式vectorize user_vector = vectorizer.transform([user_profile]) # 使用cosine_similarity函数计算相似度得分 similarities = cosine_similarity(user_vector, tfidf_matrix).flatten() # 获取top N个最相似的结果index top_indices = (-similarities).argsort()[:N] return [items[i] for i in top_indices] ``` 此代码片段展示了如何利用`scikit-learn`库中的工具来进行简单的基于内容推荐操作。它先创建了一个TF-IDF矢量化器用于把文本材料映射到高维空间里形成稀疏矩阵形式表达;接着再采用余弦相似性测量法评估各个样本间关联紧密与否的程度最后选取前几名最高分者予以反馈回去给调用方知道哪些东西更贴近当前活跃个体的需求倾向[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值