一句话理解推荐系统:
“你喜欢这个?那我给你找点类似的。”
这就是推荐系统最朴素的起点。
在短视频刷不停、电商首页千人千面、新闻App越用越懂你的今天,推荐系统早已成为互联网产品的“隐形引擎”。但对初学者来说,它听起来高深莫测。其实,它的核心思想非常直观——找相似。
本文将带你从这一朴素直觉出发,亲手实现一个最基础的推荐方法:基于内容的推荐(Content-Based Recommendation)。你不需要复杂的数学背景,只要会一点 Python,就能跑通一个完整的例子。
为什么“找相似”能做推荐?
想象你第一次打开一个视频平台。系统对你一无所知,只能随机推些热门内容。但当你点了几个“AI入门”“Python教程”后,平台就注意到:这些视频都带有“科技”和“教育”标签。
于是它想:“这位用户大概喜欢技术类内容。” 下次,它就会优先推荐同样带“科技+教育”标签的新视频——比如《机器学习实战》。
这就是基于内容的推荐的核心逻辑:
- 每个物品(视频、商品、文章)用一组特征表示(如标签、关键词、Embedding 向量);
- 用户的兴趣通过其历史行为(如点击、观看)聚合这些特征,形成“用户画像”;
- 推荐时,计算未接触物品与用户画像的相似度,挑最像的几个推给你。
这种方法简单、可解释性强,是推荐系统的“第一课”。
动手实现:用 Python 写一个基于内容的推荐器
我们用一个极简的例子来演示全过程。假设有一个小型视频库,每个视频用一个四维向量表示其所属类别:
- 第0维:科技
- 第1维:娱乐
- 第2维:体育
- 第3维:教育
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
# 1. 定义视频库(每个视频用标签向量表示)
videos = {
"v1": {"title": "AI入门", "features": np.array([1, 0, 0, 1])}, # 科技 + 教育
"v2": {"title": "NBA集锦", "features": np.array([0, 0, 1, 0])}, # 体育
"v3": {"title": "Python教程", "features": np.array([1, 0, 0, 1])},
"v4": {"title": "明星八卦", "features": np.array([0, 1, 0, 0])}, # 娱乐
"v5": {"title": "机器学习实战", "features": np.array([1, 0, 0, 1])},
"v6": {"title": "足球世界杯", "features": np.array([0, 0, 1, 0])},
}
假设用户已经观看了 v1(AI入门)和 v3(Python教程),我们可以这样构建他的“兴趣画像”:
# 2. 用户观看历史
user_watched = ["v1", "v3"]
# 3. 构建用户画像:平均已看视频的特征向量
user_profile = np.mean([videos[vid]["features"] for vid in user_watched], axis=0)
print("用户画像向量:", user_profile)
# 输出: [1. 0. 0. 1.]
结果很清晰:用户只对“科技”和“教育”感兴趣,其他维度为0。
接下来,我们遍历所有未观看的视频,计算它们与用户画像的余弦相似度:
# 4. 计算未看视频与用户画像的相似度
scores = {}
for vid, info in videos.items():
if vid not in user_watched:
sim = cosine_similarity([user_profile], [info["features"]])[0][0]
scores[vid] = sim
# 5. 按相似度排序,推荐 Top-2
recommended = sorted(scores.items(), key=lambda x: x[1], reverse=True)[:2]
print("\n推荐结果:")
for vid, score in recommended:
print(f"{videos[vid]['title']} (相似度: {score:.2f})")
运行结果:
用户画像向量: [1. 0. 0. 1.]
推荐结果:
机器学习实战 (相似度: 1.00)
NBA集锦 (相似度: 0.00)
完美!系统准确识别出《机器学习实战》与用户兴趣完全匹配(相似度1.0),而体育类内容则被排除。
这种方法有什么优缺点?
✅ 优点:
- 实现简单,逻辑清晰;
- 可解释性强(“因为你看过AI视频,所以推荐这个”);
- 不依赖其他用户行为,适合冷启动场景(新用户或新物品)。
❌ 局限:
- 依赖高质量的物品特征:如果标签不准或缺失,效果大打折扣;
- 难以发现新兴趣:用户只看编程视频,系统永远不会推荐“数据可视化”或“产品设计”,哪怕他可能喜欢;
- 容易陷入信息茧房:推荐结果过于同质化。
小结
“找相似”是推荐系统的起点,也是理解更复杂方法的基础。基于内容的推荐虽简单,但在很多场景下依然有效——比如新闻推荐、课程平台、音乐标签推荐等。
但现实中的用户兴趣远比标签复杂。如何利用群体行为来发现跨领域的关联?这就引出了下一章的主题:协同过滤。
预告:在下一篇《推荐系统入门(二):协同过滤——让相似的人替你做选择》中,我们将不再依赖物品特征,而是通过“和你行为相似的人喜欢什么”来为你推荐。敬请期待!
注:本文代码可在本地直接运行,只需安装 numpy 和 scikit-learn。推荐系统的学习,从跑通第一行代码开始。
:从“找相似”开始 —— 基于内容的推荐&spm=1001.2101.3001.5002&articleId=159477709&d=1&t=3&u=945082791ff5441b8eef7807a32ffe3f)
769

被折叠的 条评论
为什么被折叠?



