随着当今技术的飞速发展,互联网中所积累的数据量也与之倍增,人们在海量数据前越来越觉得束手无策,这时候我们需要一些技术从海量的内容中找出用户所关心的展示给用户,从而减少建立用户与事物之间联系的时间。
与之最相关的技术有两种:
- 搜索系统:通过用户的主动搜索行为,给用户展现相关的内容,是主动获取。
- 推荐系统:通过分析用户的各种行为,给用户展现相关的内容,是被动获取。
当然这里提到推荐系统,你可能对系统的内部流程和运作一无所知,因为它在你面前就像是一个黑盒。但不要感觉到害怕,相信你读完这篇文章之后就会对它有一个大概的了解,说不定也会走进推荐系统领域,做一个相关技术从业者,毕竟作为AI的一个分支,它挺香的。本篇文章主要说三点内容,是的就是以下三点内容就能带你走进推荐系统的世界。
- 推荐系统是什么
- 推荐系统怎么做
- 推荐系统怎么学
推荐系统是什么
推荐系统在Wiki上的定义为:推荐系统是一种信息过滤系统,用于预测用户对物品的“评分”或者“偏好”。这是推荐系统诞生背景的概括,但现在都0202年了,推荐系统再扮演一个信息过滤系统的同时也扮演着以下几个角色:
- 万物互联:推荐系统不仅可以为人推荐人,也可以为人推荐物,也可以为物推荐物,所以推荐系统可以构建一个万物互联的系统。
- 路径优化:和信息过滤所表达的含义所差无几,但计算能力的发展,路径优化可以跨越的度变得更大,信息传达的更准确,时间上也更有效率。
- 兴趣发现:推荐系统在扮演一个为用户推荐感兴趣的内容之外,也扮演者探索兴趣的作用,因为推荐系统让用户陷入了一个信息茧房,这似乎并不是我们想看到的,所以在进行准确推荐的同时,也要承担探索新兴趣的责任。
明白了推荐系统的含义之后,我们来看下推荐系统的一个整体架构是什么样的。
上图所示是业界推荐系统通用架构图,主要包括:底层基础数据、数据加工存储、召回内容、计算排序、过滤和展示、业务应用。 底层基础数据是推荐系统的基石,只有数据量足够多,才能从中挖掘出更多有价值的信息,进而更好地为推荐系统服务。底层基础数据包括用户和物品本身数据、用户行为数据、用户系统上报数据等。
当然对于我们个人来讲,做一个上图这样完善和强大的推荐系统恐怖有些难度,不管是友善的界面设计、完善的数据流,还是完备的技术支持、架构设计,一个人恐怖力所不能及,但是也不要灰心,毕竟一口吃不成胖子,我们可以从一个简单的推荐系统入手,尝一下甜头,然后再逐步深入。
下面就介绍一个简单的新闻推荐系统案例。
推荐系统怎么做
这里介绍的新闻推荐系统案例是基于Python进行开发的,所以只要你看的懂Python代码,会写Python代码,你也可以做出来一个这样的推荐系统。
整体系统主要分为几个模块:
- 基于Mysql的底层数据存储
- 用户冷启动的标签选择
- 首页的为你推荐
- 新闻详情页的相似推荐
- 类别下的新闻查看
- 热度榜单
首先是用户冷启动的标签选择,用户在登陆时,由于没有其任何的行为,所以会给用户提供一些选择,依次对用户进行推荐,如下图所示:
用户在系统内产生一些行为之后,会记录到数据库中,后台代码逻辑会根据用户的实时行为进行“为你推荐”,如下图所示:
在每篇新闻的详情页面,会根据离线计算好的新闻相似度,进行相似推荐,如下图所示:
整个系统被拆解之后,你会发现其实推荐系统也没那么难,当然这里演示的只是一个简单的推荐系统,更复杂的推荐系统需要的是用户和平台的交互,流程也会更加复杂,但万变不离其宗,整体离不开第一部分中的“业内通用推荐系统架构图”。
读到这里,我想大家心中都会有一个疑问,就是如果我想学习推荐系统,并想在该领域有自己的成就,我该怎么做?别着急,一起来看下一部分的内容,如何学习推荐系统。
推荐系统怎么学
俗话说得好,学习任何一门技术都不是一蹴而就的,你不了解推荐系统的发展史,没有掌握基本的推荐技术,不了解推荐流程,怎么能够掌握最前沿的动态和思想。所以从基本学起,做起,多动手。
▊ 掌握Python开发能力,打好基础
Python是一门万能的开发语言,可以干很多事情,比如web、小程序、爬虫、数据分析、算法等,学好Python基础,掌握一些包含算法的库(比如scikit-learn、tensorflow、keras、pytorch等),就可以在自己的电脑上快速开展实验,试错、调整和优化测试。
所以学好Python是基础,但也不一定必须要学Python,有很多大神使用C 手撸神经网络(我承认我是撸不了)。建议学习Python是因为学习的成本小,可以在最短的时间内,走进推荐系统的领域。
▊ 掌握Spark技术,掌握海量数据背景下的模型构建
我们都知道企业内的数据是海量的,Python在单机的情况下对海量的数据建模几乎是不可能的(当然很多也会使用Python写Spark代码,但我个人是很不习惯,而且业界普遍使用的是java或者scala写spark代码),这时候就需要一门新的技术或者框架来解决海量数据背景下的建模问题。
在业界使用Spark来做模型,应用的十分广泛,因为我们在做模型的时候,需要很多的数据处理流程和特征构建工作,利用分布式的计算框架可以将时间缩短在分钟级别,这对于模型的优化和迭代节省了很多时间,