从零开始搭建工业级推荐系统,你不可不知的五大问题(上篇)
扫描二维码
随时随地手机看文章
(全球TMT2021年8月12日讯)推荐系统作为一种高效的信息发现工具,可以很好地解决用户精准高效获取信息的问题,尤其在人们需求不明确时,借助推荐系统获取信息是非常重要甚至是不可或缺的一种手段。同时就商业价值而言,推荐系统在内容分发、用户体验、商业化变现等方面也已经获得了广泛的认可。推荐系统目前已经成为互联网to C产品的标配技术,用来高效地解决用户的信息匹配问题。
笔者是算法工程师背景,曾在国内最大的短视频平台参与推荐系统核心算法模块研发,先后经历五款千万级以上日活内容分发产品从0到1阶段的推荐系统架构设计,踩过各种产品/内容/算法/运营的坑。之后在做推荐算法to B服务过程中,经历了各种推荐应用的场景,比如:短视频、长视频、新闻资讯、音频应用、社交社区、直播、电商、游戏等几乎所有需要个性化算法的产品。通过本文,笔者希望基于以往经历过的失败或成功的案例,与业界同仁探讨在搭建工业级推荐系统过程中必须深入思考的五个关键性问题。
问题1:算法是否有用?
根据业界主流定义,推荐算法是指建立在机器学习基础之上的一套包含模型训练/预测功能的决策系统。广义的算法其实包含各种计算策略、方法和技巧,不限于机器学习方法,比如一些求解技巧或者是结合业务特点的先验假设。
如前文所述,推荐系统目前已经成为to C互联网产品的标配技术,但是,你有没有认真思考过:你的产品或者系统,有没有必要利用推荐算法?推荐算法有多大的空间?
笔者经常见到一些初入门算法工程师,面对具体推荐场景时,没有做好充分的评估建模,一上来就三段式:样本生成、模型训练、上线预测,最终折腾半天没有任何效果,甚至不如人工推荐的效果。之所以会出现各种结果,是因为这些算法工程师没有做好前期建模,分析数据基本面,确认面对的应用场景是不是属于“用户”和“事物(Item)”的双边充分消费市场。这里面,事物(Item)可以是人、信息、商品、服务等,双边基数越大推荐算法作用越大,双边消费越频繁,推荐效果越好。
在2020年中量质子曾经接触过一个做小游戏推荐的客户。他们在产品早期有几个策略工程师基于一些业务策略做了一版推荐系统,相对于完全没有策略的状态推荐效果好了很多,公司决策层于是认为算法效果立竿见影、大有可为,高成本从抖音、百度等大厂挖了20多个高级算法工程师。算法同学加入之后没有充分理解小游戏场景的用户行为特点和产品指标评估体系,而是把内容类产品的建模方法和模型算法应用在App上,评估指标体系是用户人均使用时长和用户留存,结果做了半年尝试了各种模型算法都没有任何进展,团队信心丧失,人员流失严重,这时公司决策层又开始怀疑算法的价值。那么究竟是哪里出了差错呢?
其实,这个案例的核心问题出在建模目标、模型拆解、样本生成、评估体系上。小游戏场景和内容分发类产品差别很大。内容分发类产品一个最大的特点是:推荐内容都是新的不重复的(工业级内容推荐系统都有展现消重模块),用户对老内容会本能排斥。而小游戏则不同,相比内容消费,玩小游戏是一个中度决策的场景,用户一个时段倾向于玩相同游戏直到兴趣消退,对新游戏发现需求不如内容分发强。因此,就需要仔细权衡新老游戏分发权重、冷启动策略如何制定、多目标如何拆解、模型样本怎么定义等等关键节点。如果这些关键点没有做到位,那么后续怎么调参都不会有效果。同时,在产品宏观指标算法效果评估上也要能反应出产品大目标,比如人均消费游戏数量、人均新游戏打开数,并综合考虑留存和人均时长指标。
中量质子团队在2020年还曾经服务过一个做艺术品的社区社交的客户,其产品UI类小红书。客户的产品从UI形式上看非常适合推荐,然而我们尝试了一段时间,效果始终做的不好。经过深度复盘,我们终于发现核心原因是用户数量太少,每天的用户行为非常少,导致模型学习非常不充分预测不准;而且,用户的消费行为不像内容消费那么高频度。这些用户对一个艺术品会反复浏览,是一个重度决策过程,更接近一个电商商品推荐。此外,这家客户设定的评估指标是人均消费金额,相比与时长留存,这是一个行为更稀疏的指标,更难做多目标的拆解和模型算法的充分学习。最终,我们给客户的建议是:这个阶段的产品更适合基于策略做热门运营半自动推荐,先做好用户增长。记不记得前面我曾经讲过,在“用户”和“事物”的双边消费市场里,双边基数越大推荐算法作用越大,双边消费越频繁推荐效果越好。
其实,对于算法硬实力笔者认为不必过分强调,反而对于理解业务场景、建模问题、定义模型目标等等推荐系统团队的软实力,大家应该给予更多的重视。
问题2:特征工程该怎么做?
在确认了产品的场景适合用算法提升匹配效率,并且评估了产品和数据基本面,完成了建模后,“特征工程”是下一个决定模型能否充分训练学习、精准预测的关键环节。不知道你对于特征工程是否熟悉。据笔者的观察,目前行业里系统性介绍特征工程的技术文章不多,也不如算法受重视程度高,特征的重要性往往被忽视。
什么是特征?特征是影响模型预测的输入因子,而模型是预测时基于输入因子的计算方法。从两者间的相互关系,你立刻就会意识到特征的重要性有多么大。在深度学习算法时代来临之前,以逻辑回归为代表的线性宽度模型是业界主要应用的模型,那时特征工程几乎对算法效果具有决定性的作用。时至今日,在深度学习模型广泛应用的大背景下,特征工程依然是推荐系统的核心前置工程,复杂的特征工程和复杂的深度模型结构都是主流工业级推荐引擎必不可少的基石性的组成部分。
那么,特征工程是什么?是如何影响模型的?具体而言,特征工程属于建模的一部分,指用哪些因子(特征)去支持模型做决策判断。特征和行为埋点、画像系统密切关联,行为埋点是最原始的数据来源,画像字段一般是用行为埋点和用户以及事物的元信息生成的。特征工程的关键是找到一系列判定模型目标的决策因子,并且在工程上有一套标准化的特征抽取和表示方法,一般可以分为单维特征(比如各画像字段维度)、多维组合特征(比如用户和事物的特征组合)、机器学习特征(比如用户和事物的embedding特征)。特征是模型的原始输入,工业级推荐系统优化到一定阶段,特征工程就成为算法工程师最主要的工作。
在特征工程领域,中量质子团队在“行业级最佳实践”和“工程实现”两个关键领域积累了深厚的实力。
行业级最佳实践,是一种准确判断在不同的产品场景应用哪些特征能够获得最优效果的能力。特征工程也遵循28原则,你需要找到在每个领域起核心作用的那些少数特征。中量质子团队在内容、短视频、新闻资讯、社区社交、电商、直播等应用领域已经积累了大量的最佳特征体系实践,比如电商领域哪些是核心特征、怎么构建用户侧特征、特征字段计算方法和更新频率等等。
关于工程实现,有三个维度你需要给予特别的关注:
- 首先,特征工程中最消耗算法工程师时间的工作是频繁尝试新特征,这需要在工程上做各种提效支持,比如可配置特征和训练时特征屏蔽功能等等。在这方面,中量质子经过多年实战,已经具备了一套高效标准化的特征抽取和表示方法,我们提出的DeepTouch推荐系统拥有各种特征增删、组合配置、屏蔽的功能,并和模型创建、训练、预测等管理功能形成高效协同的一体化框架。
- 其次,是特征工程的规模。工业级推荐系统数据量巨大,特征工程规模也越做越大,千亿几乎成了行业标准,万亿级特征也成为不少系统追求的目标。中量质子的DeepTouch推荐系统已经实现了万亿级特征实时在线学习的能力。
- 最后,特征工程不是独立的系统,其和模型训练、模型预测、参数服务器单元高效耦合是一个巨大的工程挑战。DeepTouch推荐系统已经实现了以上所有关键要素的高效耦合。
由于文字篇幅所限,笔者在本文中重点分享了从零开始搭建工业级推荐系统的过程中,最为关键的两大问题。“算法”和“特征工程”,这两个话题一个在行业内为大家所津津乐道,而另一个则名声不显。但是,通过笔者实战经历的分享,相信大家一定已经认识到了他们在工业级推荐系统中的基石性的作用。在接下来的文章中,笔者将就对于搭建工业级推荐系统另外三个至关重要的问题跟大家做进一步的分享。