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