推荐系统入门(一):从“找相似”开始 —— 基于内容的推荐

一句话理解推荐系统
“你喜欢这个?那我给你找点类似的。”
这就是推荐系统最朴素的起点。

在短视频刷不停、电商首页千人千面、新闻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视频,所以推荐这个”);
  • 不依赖其他用户行为,适合冷启动场景(新用户或新物品)。

局限

  • 依赖高质量的物品特征:如果标签不准或缺失,效果大打折扣;
  • 难以发现新兴趣:用户只看编程视频,系统永远不会推荐“数据可视化”或“产品设计”,哪怕他可能喜欢;
  • 容易陷入信息茧房:推荐结果过于同质化。

小结

“找相似”是推荐系统的起点,也是理解更复杂方法的基础。基于内容的推荐虽简单,但在很多场景下依然有效——比如新闻推荐、课程平台、音乐标签推荐等。

但现实中的用户兴趣远比标签复杂。如何利用群体行为来发现跨领域的关联?这就引出了下一章的主题:协同过滤

预告:在下一篇《推荐系统入门(二):协同过滤——让相似的人替你做选择》中,我们将不再依赖物品特征,而是通过“和你行为相似的人喜欢什么”来为你推荐。敬请期待!


注:本文代码可在本地直接运行,只需安装 numpyscikit-learn。推荐系统的学习,从跑通第一行代码开始。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值