于笔者而言,虽然也曾从事过技术研发相关的工作,但是对算法这类很“高深”和数学关系又比较紧密的技术来说,要真正地了解起来确实是一个难度很大的动作。但是在笔者参加了一些和算法以及推荐系统相关的活动之后,发现这一高深的学问已经被从事软件开发的朋友应用的非常广泛。特别是在电商火爆的今天,各种和推荐相关的网站风起云涌,算法进入平常百姓家也就是水到渠成了。这也是为什么 InfoQ 在 2013 年,将算法和推荐系统作为一个和移动开发、云计算等相并列的重点专题的原因之一。
作为一个编辑,要想为读者提供说得过去的内容,前提肯定是要对这一技术领域能有个七七八八的理解。也基于这个原因,笔者和业界的一些专家做了相关的沟通,包括 ResysChina 论坛的发起人谷文栋(新浪微博 @clickstone ),百度的前技术委员会主席廖若雪(新浪微博 @Riso- )等。本文旨在将笔者从这些专家身上所学习到的内容分享给大家,希望对想要算法有所了解的同学有所帮助。
算法和推荐引起关注的原因
在 2012 年年底,InfoQ 曾参与举办过一次以算法为主题的百度技术沙龙(新浪微博 @百度技术沙龙),邀请了百度的研发工程师赵岷以及百分点 COO 兼技术副总裁张韶峰参加,能容纳 160 人的场地来了差不多 260 人,反响非常强烈。而在 ResysChina 举办的推荐系统大会上,更是火爆,来自 Hulu (新浪微博 @Hulu_Beijing )、 Facebook 、百度、淘宝、腾讯等公司的算法专家分享自己的经验,在微博上也激起热烈的讨论。至于算法和推荐之所以受关注的几个原因,大体可以归纳为以下几点:
- 从行业趋势来看。信息大爆炸使得信息极大丰富,传统获取信息的手段已经不能很好地解决这种环境下的信息获取需求,推荐和个性化技术,作为解决信息爆炸问题的一个方法,取得了不错的效果。在业内的各个公司的应用也越来越多,这反过来也促进了大家对推荐的热情
- 从技术本身来看。推荐涉及到的技术深度、复杂度往往也是计算机科学最前沿的。例如:推荐系统要处理的数据规模往往高达 PB(Petabeta,1PB=1024TB),而实时性要求则要求到秒级别,这对于架构和算法都是非常高的挑战。
- 推荐是系统和人的互动,推荐首先需要更好地理解人,理解用户。就百度前技术委员会主席廖若雪看来,这是一个互联网更加智能化的发展方向,系统的智慧会越来越高级,这本身是非常有吸引力的方向。
算法并不深奥,案例为证
如笔者在本文开始时所谈到的,考虑到算法和数学等结合很紧密,而且在日常的生活中应用的也较少,其实很多人对算法还是多少有些恐惧。但算法真的有那么深奥吗?广义来说,算法是人们归纳总结出来的解决一类问题的方法。一般而言,我们所说的计算机算法,为了描述的精确严密,通常会采用数学的形式语言去描述问题和给出对应的解决方案。抽样的形式语言对大众而言是不容易理解的。但算法本身只是一个解决问题的途径,实际的应用中我们会使用很多的算法,有的简单有的复杂。
为了让普通技术人员对算法有更好的了解,廖若雪列举了一个电商网站经常有的一个功能——“热销榜”。其实“热销榜”就是一个简单有效的算法引用,利用销售量直接进行排序。同时,在这个基础上也可以进行进一步的深入分析,针对实际问题,做出更有针对性的策略升级。但直接按照销售量排序,有时我们会遇到大量热门商品长期占据榜单,存在“过期”的情况。比如,适合冬季销售的产品大量卖出,到夏季时已经无人再购买,但由于历史数据,使得这个商品仍然占据着榜单的位置,显得不合时宜。这时我们就要有针对性地改进算法,加入“时间”维度的信息。
我们既可以简单地按照离散的一刀切的方式,如只计算 1 个月以内的销售量;也可以做一个连续化的函数,使得历史的销售量会随着时间进行衰减,如使用“牛顿冷却定理”(注:温度高于周围环境的物体向周围媒质传递热量逐渐冷却时所遵循的规律。当物体表面与周围存在温度差时,单位时间从单位面积散失的热量与温度差成正比,比例系数称为热传递系数)。在算法的指定和改进中,我们既可以针对实际问题,使用独特的有针对性的方案;同时也可对问题进行抽象,将实际问题转变为一个已知问题的变种,利用已有的知识和成熟的算法,来解决新问题。
其实很多算法,其基本原理都是来源于我们的常识,例如:你想购买一部手机,但是满足你基本要求的手机是在太多了,你开始纠结。于是你关注周围的同事和朋友们都在使用哪款手机,并咨询他们对这款手机的评价,从而来帮助自己做决策,因为你觉得他们在对手机的使用习惯和需求,比其他人(比方说你的长辈或者晚辈们)的更相似,所以他们的评价更有参考价值。这就是大名鼎鼎的协同过滤算法,是推荐领域里最为经典的算法。它的核心思想就是:根据与你最相似的一些用户对某个事物的喜好程度的投票,来预估你对这个事物的喜好程度。
算法、架构、策略、机器学习之间的关系
在过往和技术人员交流时,很多人对算法和架构之间的关系感到不可理解,算法是软的,架构是硬的,难道算法和架构还有什么关系不成?其实不然,算法和架构的关系非常紧密。在互联网时代,我们需要用算法处理的数据规模越来越大,要求的处理时间越来越短,单一计算机的处理能力是不可能满足需求的。而架构技术的发展,带来了很多不同特点的分布式计算平台。算法为了能够应用到这些分布式计算平台上,往往需要进化,例如:并行计算要求算法可以拆分为可并行计算的几个独立单位,但很多算法不具备这种可拆分特性,使得不能简单通过分布式计算来提高效率。这时候,为了实现分布式化的计算效果,需要将算法进行等效改写,使得其具有独立拆分性。另一方面,算法的发展,也反过来会对计算架构提出新的要求。
对算法和策略的关系亦是,不过这两个概念并不像算法和架构那样好解释,廖若雪给了一个自认为偏个人的看法。策略是解决具体问题的手段,而算法是解决一类问题的方法。解决一个具体问题,可能需要将问题分解为一个或者多个算法,一起作用来解决,也可能不需要算法。例如,对于个性化新闻,我们可能有一个策略是:重大新闻需要及时展现给用户;而实现的具体算法可能只包括“重大新闻挖掘算法”等。
机器学习是一类算法的统称,在一定的数据集合上,利用机器学习的算法,自动得到规律,来进行预测,机器学习领域常见的问题包括分类问题、回归问题等。而预测,尤其是对用户的偏好进行预测是推荐领域的核心问题之一,机器学习算法在解决此类问题上会发生很大的作用。
学习推荐算法的几点经验
记得从前在和某个大型电商公司的朋友沟通时,谈到一开始大家只对技术架构什么的感兴趣,对于算法并不是非常的上心,只是用一些现成的方案去做,认为可优化的区间不大,投入产出比少。但是后来公司引进了一个在算法方面非常有经验的同学加入,这哥们来了之后只是将其广告系统的参数做了微调,就发现广告效果较原来提升了 40%。这就是算法的神奇和实用之处。而据廖若雪介绍,在其自有产品百度知道上,他们通过优化推荐算法,在很大程度上提高了知道产品上的问题回答量。在前段时间百度所发布的一个公开报告中,详细地解释了该算法的使用。
在和其他一些推荐算法领域的朋友沟通过程中,他们也提到这些情况是非常有可能存在的,在合适的场景,使用最合适的算法,能够带来意想不到的效果。尤其是对于一些复杂的数据应用场景,比如计算广告学、搜索排序和个性化推荐等。当然,改进算法可获取的收益空间,也依赖于实际场景下的效果。比如对于一个准确率已经达到 90% 的问题而言,准确率自身已经没有太大的提升空间。其实问题还是在于是否抓住了问题的关键和主要矛盾。也许对于某些应用,调整一下页面布局、字体、颜色等,有时也能实现很好的效果。
对于想深入研究推荐算法的朋友,廖若雪也给出了自己的一些经验,虽然没有涉及到非常细节的地方,但相信搞算法的同学都是绝顶聪明之人,从这些点滴经验中就能体味到“顿悟”的感受吧:
- 没有最好的算法,只有合适的算法。推荐算法和产品需求、应用场景、数据密切相关,不要相信有什么包打天下的算法;
- 数据是基础:数据充足而且质量高,简单算法也可以有不错的效果;反之,则多好的算法也不可能有好的效果;
- 木桶效应:算法策略要和用户需求、功能展现密切配合;(注:木桶原理又称短板理论,其核心内容为“一只木桶盛水的多少,并不取决于桶壁上最高的那块木块,而恰恰取决于桶壁上最短的那块。”)
- 一般而言,推荐算法都需要考虑是否能处理大数据,是否能大规模并行化。
再次提醒各位读者,本文只是 InfoQ 推荐算法专题的开篇,接下来我们计划走进技术社区的各个技术专家,和他们进行更加深入的交流,了解他们在算法这一技术领域的经验和教训,并分享给大家。如果各位读者有任何线索,或者想了解某公司某人的观点,大可以直接邮件(editors@cn.infoq.com)或者微博私信 @InfoQ ,我们的编辑会扮演好中间人的角色,套出这些专家的经验给大家。也希望“推荐算法”这个专题能够更加引起大家对这一技术领域的重视和了解。
评论 1 条评论