推荐系统:从协同过滤到深度学习,用户只是想要点新鲜的
我手机上装过一个新闻App用了三个月之后推荐给我的内容就只剩下三样东西俄乌冲突的最新进展、某科技公司又出了什么新车、以及一位钓鱼博主每天钓了几条鲫鱼。最初是我自己选的确实点过几次。但当我看了两个月一模一样的新闻框架之后我终于卸载了它。不是它推荐得不精准是它太精准了精准到把我关进了一个信息茧房连一扇窗户都不给我留。推荐系统这些年卷得不成样子。模型从协同过滤卷到深度学习从双塔卷到Transformer多目标排序、强化学习、图神经网络轮番上阵。学术界刷着MovieLens和Amazon Reviews的榜单工业界的工程师们在A/B测试里为了千分之一的CTR提升熬夜上线。但有一个根本问题很多系统做到最后都忘了用户到底想要什么用户想要的不是精准是惊喜。精准是手段惊喜才是目的。一、协同过滤的落日余晖ItemCF和UserCF这两个算法大概是推荐系统历史上最伟大的发明。简单可解释冷启动也不算太差。你买了这本《深度学习》系统告诉你买这本书的人也买了那本《模式识别》你一看确实需要下单。皆大欢喜。但协同过滤有一个天花板它只能推荐流行的东西。ItemCF的共现矩阵天然偏向热门物品冷门但高质量的内容永远沉在矩阵底部。你用了一个协同过滤主导的推荐系统之后会发现自己越来越被推向大众审美的中心。你看的电影是豆瓣Top250你买的书是当当畅销榜你听的音乐是抖音神曲。你被困在了流行度构成的舒适区里不是因为你不喜欢冷门的好东西是因为算法不知道那些好东西的存在或者即使知道也因为交互数据太少而不敢推荐给你。我做过一个图书推荐的项目一开始全量上ItemCF点击率涨了百分之十五看上去很美。但仔细看数据推荐出去的百分之八十都是各种畅销书和经典名著小众学术书和冷门小说的曝光量反而下降了。长尾图书的销量本来就不高推荐不给流量卖得更差数据更稀疏以后就更不可能被推荐。这是一个死亡螺旋。后来我们强行在排序层加了一个长尾提权因子用逆用户频率对候选集做了重排序把冷门但主题高度相关的书拉到前排。点击率微跌了一点但长尾图书的整体销量涨了百分之三十用户收藏夹的多样性也大幅提升。这个改动在技术上毫无难度难的是说服产品经理接受“短期点击率下降”这件事。二、深度学习进来之后发生了什么深度学习给推荐系统带来的最大改变不是精度是特征交互的自动化。以前做特征工程交叉特征要手动构造用户年龄和商品价格的交叉用户性别和品类的交叉排列组合起来没完没了。DeepFM、DCN、xDeepFM这些模型本质上是把特征交叉这件事交给了神经网络自动完成。但这带来一个新的问题模型变成了一个你越来越看不懂的黑盒。排序分为什么涨了不知道大概是第几个隐层里的哪几个神经元被激活了。为什么这个商品没被推荐更不知道模型的输出就是一个分数没有解释。业务方问你为什么用户A看到了这个推荐你只能耸肩。这对需要强解释的场景是灾难。金融产品的推荐、医疗信息的推荐、教育内容的推荐推荐理由有时候比推荐结果本身还重要。你得告诉用户“因为你之前学习过微积分所以我们推荐线性代数”用户才会信任你。深度学习模型堆得再深也很难优雅地生成这种推荐理由。我的折中方案是把推荐系统拆成召回和排序两个阶段。召回层尽量用多路策略协同过滤一路内容标签一路实时兴趣一路热门和冷启动各一路。每一路召回都有自己的业务逻辑和可解释性。排序层可以上深度学习但它只负责给各路召回的结果排个先后顺序最终的推荐理由从触发的那一路召回逻辑里生成。这样既用上了深度学习的排序能力又保留了可解释性。虽然粗糙但至少当用户问“为什么推这个”的时候你能说出个一二三。三、实时性和“下一刻”的问题推荐系统有一个非常微妙的时效性问题用户的兴趣在下一刻可能就变了。他刚买了一台打印机你紧接着推荐墨盒这叫贴心。他买了打印机三个月之后你还在推荐墨盒这叫烦人。他买了一台手机你推荐手机壳结果他下一秒就退出了App你的推荐在他下次打开App的时候才出现这时候他可能已经在别的平台买完了。真正的实时推荐不是在离线训练一个模型然后每天更新一次而是要在用户行为的下一秒就做出反应。这要求你的特征计算、模型推理、排序下发全链路延迟在毫秒级。技术栈要上Flink做实时特征Redis做特征存储模型要能在线增量更新。工程成本极高不是大厂很难吃得消。但中小公司也有取巧的办法。把“实时性”拆成两个层面短期兴趣的捕捉和长期偏好的建模。长期偏好用离线模型每天更新一次搞定用户的基本盘。短期兴趣用规则引擎用户刚刚搜索了“机械键盘”接下来的三十分钟内不管他刷到什么页面硬塞几个机械键盘的推荐进去。这个规则粗暴但有效成本几乎为零。很多看起来很智能的实时推荐底层就是这么一堆规则的集合加上一点基于会话的协同过滤。创业公司别一上来就想搞工业级实时推荐系统先用规则把用户体验兜住把数据积累起来等体量到了再升级。四、推荐系统的道德困境推荐系统是注意力经济时代最强大的工具之一。你可以用它来提升用户满意度也可以用它来最大化广告收入。这中间的张力每个做推荐的人都要面对。一个视频平台推荐策略是“最大化观看时长”。算法发现争议性越强、情绪越极端的内容观看时长越长。于是推荐系统不断给用户推送能激发愤怒和焦虑的内容。用户确实看更久了但看完之后身心俱疲。平台指标好看用户福祉在受损。这个矛盾不是技术问题但最终是通过技术手段来实现的做推荐的工程师就在这个漩涡的中心。我在做内容推荐的时候内部定过一个不成文的规矩不做纯粹的情绪驱动推荐。如果一个内容被大量用户标注为“引起不适”或者“过度煽情”即使它的点击率高也要在排序时降权。这个规矩不是算法推导出来的是产品和算法团队坐在一起讨论出来的价值观。推荐系统从来不是价值中立的。你设计的每一个目标函数、每一个特征权重、每一条召回策略都在定义平台认为什么是“好的内容”。这个权力太大大到你必须主动意识到它的存在并承担责任。五、用户要的到底是什么回到开头那个被我卸载的新闻App。它的问题不是推荐技术不好是对“用户需求”的理解太狭窄。它把我当成了一个只对三个主题感兴趣的静态实体而忘了我是一个会变化、会厌倦、偶尔想随便看看别的东西的活人。推荐系统里有一个概念叫“探索与利用的平衡”Explore Exploit。利用就是推你确定用户喜欢的东西探索就是推一些可能喜欢但不确定的东西。大多数系统的探索比例都极低因为利用的短期收益太明显了。但长期来看没有探索的系统必然走向信息茧房用户会在某个厌倦的峰值点离开。这个离开通常是沉默的、不可逆的。你看到他卸载的那一天其实他已经忍受了好几个月的单调推荐。我后来自己做推荐策略的时候坚持在排序层留出一个固定的随机探索流量百分之五到百分之十。这批流量不参与任何精准排序纯粹随机从候选池里抽取但要保证内容质量和安全底线。这百分之十的流量长期来看贡献了平台上几乎全部的新兴趣发现。很多用户的第一次跨品类购买第一次进入一个新的话题圈第一关注一个之前从未接触过的创作者都来自这个随机的窗口。百分之十的流量损失换来的是整个生态的新鲜血液。这个账从纯粹的短期CTR上算不过去但从用户生命周期的角度算绝对划算。推荐系统的终极目标不是让用户点那个按钮而是让用户在点完之后觉得嗯这个我没见过但我确实喜欢。你能给用户的最好的推荐是那个他自己都不知道自己会喜欢的东西。这需要算法需要工程但更需要你对“人”本身的理解和敬畏。那些只知道往模型里堆层数的人永远做不出让人眼前一亮的推荐。真正好的推荐系统藏在每一行代码背后的是设计者对用户好奇心和生活多样性的尊重。

相关新闻

想学AI漫剧?看这本书就够!普通人实实在在的副业收入!

想学AI漫剧?看这本书就够!普通人实实在在的副业收入!

想副业赚到钱的朋友们,今天一定要看看漫剧这个赛道。有些人一直在不停换副业,无法长期坚持,核心问题有两个:一个是没利润,大家都在做,高度内卷;二是投入成本高,费时费力,…

2026/10/14 22:57:57 阅读更多 →
异常检测:别老想把离群点干掉,那是情报

异常检测:别老想把离群点干掉,那是情报

刚入行那几年,我对异常点的态度很粗暴:影响模型训练,干掉。箱线图一画,上下须一划拉,须子外面的全删。后来被人问了一句:“你删掉的那些点里,有没有正在偷刷信用卡的骗子?”我突然意…

2026/10/3 0:51:11 阅读更多 →
YOLOv8模型部署全链路优化:从1.2FPS到35FPS的实战指南

YOLOv8模型部署全链路优化:从1.2FPS到35FPS的实战指南

大家好,我是专注于计算机视觉与深度学习部署的开发者。在实际项目中,我们常常遇到这样的困境:一个训练好的 YOLOv8 模型,在推理时帧率(FPS)低得令人沮丧,例如只有 1.2FPS,这完全无法…

2026/10/9 7:09:27 阅读更多 →

最新新闻

昇腾AI守正与开放:大模型时代软硬件协同与开发者迁移实战

昇腾AI守正与开放:大模型时代软硬件协同与开发者迁移实战

1. 从"淘金热"说起:大模型浪潮里真正稀缺的是什么大模型这波浪潮,用"淘金热"来形容一点都不夸张。过去两年,几乎每一家有点技术积累的公司都在往这个方向挤:有的做基础模型训练,有的做行业微调&am…

2026/10/14 22:57:48 阅读更多 →
OpenClaw开源项目实战:从模型接入到安全落地的全链路解析

OpenClaw开源项目实战:从模型接入到安全落地的全链路解析

1. 一只“龙虾”怎么就突然火了最近技术圈里聊得最多的话题之一,就是那个叫 OpenClaw 的开源项目。名字听着像个钳子,实际上它干的事情也确实挺“钳”的——把大语言模型的能力直接接到你的本地环境里,让模型能真正动手操作文件、执行命令、跑…

2026/10/14 22:57:48 阅读更多 →
Spring Boot分层测试与CI/CD集成实践指南

Spring Boot分层测试与CI/CD集成实践指南

1. 为什么Spring Boot项目必须在CI/CD流水线里“先跑通测试”,而不是等上线前再补?我带过三个不同规模的Spring Boot项目团队,从十几人的初创小队到百人级的中台研发组,有一个现象反复出现:所有线上事故的根因追溯报告…

2026/10/14 22:57:48 阅读更多 →
AI-CAD 实战:从自然语言到可编辑模型的生成式设计工作流

AI-CAD 实战:从自然语言到可编辑模型的生成式设计工作流

1. 从"输入一句话"到"拿到可编辑模型":AI-CAD 到底在解决什么如果你做过机械结构设计或者消费电子产品的外观建模,一定对那种"改一个倒角,整条特征树全红"的崩溃感不陌生。传统 CAD 的工作流是高度确定性的&am…

2026/10/14 22:57:48 阅读更多 →
AI-CAD副驾模式实战:参数化建模与2分钟出图的技术真相

AI-CAD副驾模式实战:参数化建模与2分钟出图的技术真相

1. 从一条热搜说起:AI-CAD 到底在解决什么问题前几天刷到一条消息,说某个开源 CAD 项目在代码托管平台上攒了 17K stars,背后拿了 740 万美元融资,最抓眼球的是那句"2 分钟出图"。作为一个在机械设计和参数化建模领域摸…

2026/10/14 22:57:48 阅读更多 →
Vue工程实践进阶:组件通信、组合式函数与性能优化全解析

Vue工程实践进阶:组件通信、组合式函数与性能优化全解析

Vue 笔记写到第七篇,这次不聊基础语法,也不画响应式原理的图解,重点全部放在工程实践里真正卡过人的地方:组件通信方案怎么选、组合式函数怎么拆才不会拆出一堆烂代码、路由守卫的执行顺序为什么老和预期不一样、Pinia 到底管什么…

2026/10/14 22:56:44 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →