写点什么

一次推荐算法的普及性讨论

  • 2013-03-15
  • 本文字数:3568 字

    阅读完需:约 12 分钟

于笔者而言,虽然也曾从事过技术研发相关的工作,但是对算法这类很“高深”和数学关系又比较紧密的技术来说,要真正地了解起来确实是一个难度很大的动作。但是在笔者参加了一些和算法以及推荐系统相关的活动之后,发现这一高深的学问已经被从事软件开发的朋友应用的非常广泛。特别是在电商火爆的今天,各种和推荐相关的网站风起云涌,算法进入平常百姓家也就是水到渠成了。这也是为什么 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 ,我们的编辑会扮演好中间人的角色,套出这些专家的经验给大家。也希望“推荐算法”这个专题能够更加引起大家对这一技术领域的重视和了解。

2013-03-15 01:2710749

评论 1 条评论

发布
用户头像
resyschina.com 看起来被澳门赌场收购了,可惜。
2019-05-15 12:31
回复
没有更多了
发现更多内容

显卡只是为游戏而生吗?GPU服务器了解一下

Finovy Cloud

GPU服务器 GPU算力

2021全网最全Activiti7教程02(Activiti7入门使用-欢迎收藏)

爱好编程进阶

Java 程序员 后端开发

13-注解增删改查

爱好编程进阶

Java 程序员 后端开发

2年工作经验的Java程序员面试经历

爱好编程进阶

程序员 后端开发

7Z命令行

爱好编程进阶

Java 程序员 后端开发

动手实操丨RC522射频卡模块与IC卡完成充值消费查询的技术实现思路

华为云开发者联盟

stm32 RC522射频卡模块 IC卡 RC522

一个学渣对于stack的顿悟(1):从CPU的视角说起

计算机漫游

堆栈

2021-11-9【数据结构平时实验】

爱好编程进阶

Java 程序员 后端开发

CoProcessFunction实战三部曲之三:定时器和侧输出

爱好编程进阶

Java 程序员 后端开发

内存不超过5M,datop 在识别冷热内存及跨 numa 访存有多硬核?| 龙蜥技术

OpenAnolis小助手

cpu 内存 datop 轻量级 muma

耗时三年终于整理出了SSM+微服务+Nginx+Redis+MySQL的PDF了!

Java架构追梦

Java 后端开发

(JavaSE)数据类型变量与运算符

爱好编程进阶

Java 程序员 后端开发

15 个优秀开源的 Spring Boot 学习项目,一网打尽!

爱好编程进阶

Java 程序员 后端开发

2021年4月23号,成功斩获阿里(Java岗

爱好编程进阶

Java 程序员 后端开发

CGBTN2111-DAY02总结复习

爱好编程进阶

Java 程序员 后端开发

让 Rust 的 CI 加速 2~3倍速度

非凸科技

rust 构建 cl cithub 缓存空间

元宇宙核心技术--脑机接口

CECBC

快来跟20年京东T9架构师学习进阶微服务+Docker+Dubbo+SpringBoot

Java架构追梦

spring java面试 后端开发

centos7的启动流程(systemctl)

爱好编程进阶

Java 程序员 后端开发

Apache ShardingSphere 企业行|走进汽车之家

SphereEx

数据库 企业 ShardingSphere SphereEx apache 社区

BATJ关于Redis的高频面试真题

爱好编程进阶

Java 程序员 后端开发

《数字经济全景白皮书》Z世代用户洞察篇 完整版 发布

易观分析

Z世代

区块链 重塑不良资产互信机制

CECBC

云图说 | 华为云医疗智能体EIHealth,AI赋能基因组研究

华为云开发者联盟

华为云 云图说 EIHealth 医疗智能体 基因组

维权思考

成周

终于有人把tomcat讲清楚了!阿里大牛推荐的tomcat架构解析文档

Java架构追梦

Java 后端开发 JVM’

BAT华为等一线大厂Java工程师必读书单

爱好编程进阶

Java 程序员 后端开发

不愧是字节跳动技术官,算法精髓全写这本666页笔记里了

Java架构追梦

Java 程序员 数据结构与算法、

4年JAVA外包终上岸,我只能说避雷这些公司

爱好编程进阶

Java 程序员 后端开发

架构师成长路线

汤师爷

软件架构 架构师 成长路线

微服务实战文档分享,阿里内部的Spring cloud微服务精髓都在里面

Java架构追梦

Java 微服务 阿里

一次推荐算法的普及性讨论_语言 & 开发_霍太稳@极客邦科技_InfoQ精选文章