推送的广告都跟我看的内容有关,怎么回事?一文看懂推荐引擎


来源:大数据DT

本文约6000字,建议阅读10分钟

本文我们简单介绍了各种类型的流行推荐引擎,如协同过滤、基于内容的推荐引擎、混合推荐引擎、情境感知系统、可扩展的推荐系统和基于图的实时推荐引擎。

[ 导读 ]读完关于数据分析的文章,就收到Python课程的广告?没错,这就是数据叔的亲身经历。如今,这种现象正在变得稀松平常。一方面,我们在担心隐私问题,为什么商家们比我自己更了解我自己?另一方面,这种广告也确实提高了我们的生活效率,有时候快速刷过去,甚至意识不到这是个广告。

实际上,无论从商家还是消费者的角度来看,一个优秀的推荐引擎都是非常有益的。那么应该怎么做呢?

我们是如何决定购买某些商品的呢?在日常生活中,我们在决定购买之前会询问朋友或者家人;网购时,我们会阅读匿名用户对产品的评论,对产品进行比较,之后才会决定是否购买。

当今互联网中的信息正以指数级速度增长,寻找有效的信息将是一项挑战,而增加用户对检索结果的信心则是更大的挑战。

推荐系统的出现可以为用户提供优质的相关信息或重要信息,一些大型网站的参与则更好地推动了推荐引擎的普及。例如,亚马逊的商品推荐,Facebook的人脉圈推荐,Twitter、LinkedIn、YouTube上的视频推荐,谷歌新闻推荐等。这些案例的成功为诸如旅游、医疗健康、金融等领域的其他行业打开了一扇窗。

01 推荐引擎定义

推荐引擎是从信息检索和人工智能派生出来的技术,是分析巨量数据(特别是产品和用户信息)强有力的工具,能够基于数据挖掘提供相关推荐。

在技术上,推荐引擎要求开发一个数学模型或者目标函数,用来预测用户对商品的喜欢程度。

假设U={用户},I={商品},F表示目标函数,通过F计算I对U的有用性,表示成:

F:U×I->R,其中R={推荐商品}

对于每位用户u,我们要选择使目标函数最大的商品i,表示成:

推荐系统的主要目的是在用户做决定的时候提供相关推荐,以便在线用户从网络上的大量可用选项中做出更好的决定。一个优秀的推荐系统更趋向于个性化推荐,它可以通过收集用户有价值的数字足迹(如人口统计、事务细节、交互日志)和关于产品的信息(例如规格、用户反馈、与其他产品比较等),来完成推荐之前的数据分析。

用户标签

推荐引擎最大的挑战是如何给参与者提供好的推荐,一个好的推荐系统会充分考虑消费者信息(如上图所示用户标签)和销售信息。

从消费者角度来说,一个有价值的推荐可以影响消费者的最终决定,所以推荐的动机是考虑如何增强消费者的购买信心。从商家的角度来说,为不同层次的消费者提供个性化推荐,做到精准营销是十分必要的。

伴随着网购的兴起壮大,很多公司通过收集大量用户交互信息日志,对用户行为进行越来越深入的分析。此外,对推荐引擎的实时性也有更高的要求。随着技术和研究的进步,将大数据分析和人工智能技术加入推荐引擎也是一个挑战。下图显示了推荐引擎的一些应用。

02 推荐系统的必要性

我们知道构建推荐系统是非常复杂的,它需要大量的工作量和人员、技术、资金的投入。如此巨大的投入值得吗?来看一些事实:

  • Netflix客户观看的电影有2/3是由推荐系统推荐的。

  • Google新闻上有38%的点击是推荐链接。

  • 亚马逊35%的销售量来自推荐产品。

  • ChoiceStream销售数据显示:有28%的用户通过推荐购买自己喜欢的音乐。

03 大数据对推荐系统的推动作用

推荐系统在很多方面成功地影响着我们的生活,这种影响的一个很明显的例子就是如何重新定义我们的网购体验。当我们浏览电子商务网站并购买商品时,底层的推荐引擎会立即实时响应,向消费者提供各种相关推荐。

无论从商家还是消费者的角度来看,推荐引擎都是非常有益的。毫无疑问,大数据是推荐系统的驱动力。一个好的推荐系统应该具备可靠性、可扩展性、高可用性,并且能够向它所包含的大型用户群实时提供个性化推荐。

一个典型的推荐系统如果没有足够的数据作为支撑,就不能有效地工作。大数据技术的引入使得企业能够捕获大量的用户数据,比如,用户的过往购买记录、浏览历史和反馈信息等,并能将这些数据反馈给推荐引擎,实时生成相关和有效的推荐。

简而言之,即使是最先进的推荐系统,如果没有大数据的支持也不可能完成推荐。大数据技术在软硬件方面不断进步,不仅能够提供海量的数据存储能力,还在更多方面显示出作用,比如提高对数据的操作速度,对实时数据的处理能力等。

要了解相关技术,可以访问下面的网站:

http://www.kdnuggets.com/2015/10/big-data-recommendation-systems-change-lives.html

04 推荐系统类型

前面介绍了什么是推荐系统、它要达到的目标、它的益处以及其背后的驱动力。接下来,我们将介绍正在使用的不同类型的常见推荐系统。

1. 协同过滤推荐系统

协同过滤推荐系统是推荐引擎的基本形式。这种类型的推荐引擎可以简单理解为在用户偏好的协同下,从大型备选项集合中选出推荐的商品。

协同过滤推荐系统的基本假设是,如果两个用户在过去有相同的兴趣,那么未来他们也将有相似的兴趣。例如,如果用户A和用户B有相似的电影偏好,用户A最近看了电影《泰坦尼克号》,而用户B还没看过,然后我们就将该电影推荐给B用户。Netflix的电影推荐方案是协同过滤推荐系统的一个很好的例子。

协同过滤推荐系统有以下两种类型。

1)基于用户的协同过滤

基于用户的协同过滤给出的推荐项主要是考虑用户的喜好。

基于用户的协同过滤分两步:

  • 基于共同兴趣识别相似用户。

  • 根据与活跃用户相似的用户所给出的对新项目的评级,为活跃用户进行新项目推荐。

2)基于项目的协同过滤

基于项目的协同过滤,是根据相邻项目产生推荐。与基于用户的协同过滤不同,我们要先找项目,然后根据活跃用户对相似项目的历史评估进行新项目的推荐。

基于项目的推荐系统的构建过程分为两个步骤:

  • 根据用户对项目喜好计算相似项目。

  • 找出相似度最高并未被活跃用户评估的项目进行推荐。

在构建协同过滤推荐系统时,我们将关注以下问题:

  • 用户之间的相似度是如何计算的?

  • 项目之间的相似度是如何计算的?

  • 推荐是如何产生的?

  • 对新产生的项目和用户数据该如何处理?

协同过滤系统的优点是实现简单,推荐准确。然而,它也有自己的局限性,比如冷启动问题,这是指协同过滤系统不能对系统无法获得其数据的用户(即第一次登录的用户)进行推荐,如下图所示。

2. 基于内容的推荐系统

在协同过滤推荐系统中,只需考虑用户-项目-喜好之间的关系就可以构建推荐系统。虽然这种类型的推荐信息是准确的,但是如果我们想把推荐做得更好一些,还需要加上用户属性和项目属性的考量。与协同过滤不同,基于内容的推荐系统是建立在项目属性结合用户对项目属性的偏好基础之上,根据相关内容信息构建推荐模型。

内容推荐系统对活跃用户进行推荐时,通常包含用户画像、项目画像、生成模型等相关步骤。基于内容的推荐系统推荐的项目,是对项目的信息或特征、用户属性等分析之后形成的推荐项。

举个例子,当你在YouTube搜索Lionel Messi的视频时,基于内容的推荐系统会学习你的偏好,并且会推荐其他与Lionel Messi相关的视频或者其他与足球有关的视频。

简单来说,基于内容的推荐系统提供的推荐项信息是基于相似用户的历史喜好数据产生的。项目的相似度是根据与其他的比较项相关联的特征计算得出的,并与用户的历史偏好相匹配。

在构建基于内容的推荐系统时,我们考虑以下几个问题:

  • 如何选择产品的内容或特征?

  • 如何创建具有相似产品内容喜好的用户画像?

  • 如何根据项目的特点创建项目之间的相似度?

  • 如何连续创建和更新用户画像?

因为这种技术不考虑近邻用户的喜好,所以它不需要维护一个大规模的用户组对项目的喜好来提高推荐精度。它只需考虑用户过去的喜好和项目的属性或者特性。该系统以及它的优点和缺点,如下图所示。

3. 混合推荐系统

这种类型的推荐引擎是结合多种推荐系统而建立的,是一个更强大的系统。通过组合各种系统,可以构建一个更健壮的系统。比如,通过组合协同过滤方法,当新项目因为没有评级而导致模型失败时,在基于内容的系统中,关于项目的特征信息是可用的,仍然可以使新项目被更准确、更有效地推荐。

举个例子说明一下,假设你是一个经常阅读谷歌新闻的人,推荐引擎会在流行新闻的基础上,找到与你相似的人读的新闻,并根据你的个人喜好、历史点击信息等进行计算,从而得到要向你推荐的新闻。这种类型的推荐系统混合使用基于内容的推荐系统和协同过滤系统。

在构建混合模型时,应该考虑以下几个问题:

  • 采用何种技术方案来满足我们的业务需求?

  • 何种混合技术方案能提供更好的预测?

与单一推荐技术相比,混合推荐引擎(如下图所示)的好处是增强了推荐效果。这种方式对用户来说也提供了一个好的混合推荐,在个性化水平或者近邻水平上也有更好的表现。

4. 情境感知推荐系统

个性化推荐系统有时效果也不是很理想,比如基于内容的推荐系统,主要原因是没有考虑情境。

假设一个姑娘非常喜欢吃冰激凌,但是这个姑娘现在在北极。个性化的推荐系统推送了一款非常受欢迎的冰激凌。请问推荐冰激凌是对的吗?对于一个寒冷的下午,是不是一杯热咖啡更值得推荐?这种类型的推荐就是情境感知推荐系统,这里的位置信息就是情境。

用户喜好会根据情境的变化而不同,例如,时间、季节、心情、地点、位置、系统中的选项等都可以是情境。当一个人在不同的地点、不同的时间、面对不同的人时,可能需要不同的东西。情境感知推荐系统在推荐之前会考虑这些情境。这种推荐系统可以根据用户所处的不同情境来满足用户的各种需求。

在建立情境感知模型之前,我们需要考虑以下问题:

  • 在推荐系统中如何定义情境?

  • 使用何种技术构建推荐系统可以实现业务需求?

  • 如何根据情境推荐产品来满足用户喜好?

  • 何种技术可以用来混合情境和用户喜好从而搭建混合推荐系统?

05 推荐系统技术的发展

随着技术、研究和基础设施的进步,推荐系统发展迅速。推荐系统正在远离基于相似度量的简单方法,并向诸如机器学习方法、深度学习等非常先进的方法靠近。

从商业角度来看,用户和组织正在寻求能满足即刻响应需求的更加个性化的推荐系统。通过构建个性化推荐系统来迎合庞大的用户群和产品,可以得到我们需要的复杂系统,以便实现轻松扩展和快速响应。以下几种类型的推荐系统可以帮助解决这个挑战。

1. Mahout在可扩展推荐系统中的应用

如前所述,大数据是驱动推荐系统发展的主要因素。大数据平台使研究人员能够访问大型数据集并在个人层面分析数据,从而为构建个性化推荐系统铺平道路。

随着互联网使用量的增长和源源不断的数据的提供,有效的推荐系统不仅需要庞大的数据,而且需要支持可扩展并具有最小化停机时间的基础设施。为了实现这一点,诸如Apache Hadoop生态系统这样的大数据技术提供了基础设施和平台,用来提供大量数据。

Mahout可以实现这种巨大数据的供应,它是建立在Hadoop平台上的机器学习库,使我们能够搭建可扩展的推荐系统。Mahout为建设、评估和调整不同类型的推荐引擎算法提供基础设施。由于Hadoop是为离线批量处理而设计的,所以基于它还可以建立可扩展的离线推荐系统。

下图显示了如何使用Mahout设计可扩展的推荐系统。

2. Apache Spark在可扩展实时推荐系统中的应用

在浏览任何一个电子商务网站时,经常看到“你可能也喜欢”这个功能。这个看似简单的功能正是用户关系管理新时代的实时表现。企业开始投资推荐系统,这些系统可以为客户生成精准且实时的个性化推荐。

建立这样一个系统不仅会带来良好的投资回报,而且高效的系统也会增强用户的购买信心。这要求可扩展的实时推荐系统不仅可以捕获用户的购买历史、产品信息、用户偏好,并提取模式和推荐产品,还可以基于用户在线交互和多标准搜索偏好进行即时响应。

这种能力需要得到新技术的支持。这种技术必须考虑由用户购买历史、用户偏好、在线互动等信息组成的大型数据库,比如页面内导航数据和多目标搜索记录,然后对这些信息进行实时分析,并根据用户当前和长期的需求进行准确响应。

大多数流行的推荐引擎协同过滤都需要在推荐时将用户和产品信息作为整体来考虑。假设有这样一个场景:100万个用户对1万个产品进行评级。

为了建立一个系统来处理这样大量的计算量,并实现在线响应,我们需要一个与大数据兼容并在内存中处理数据的系统。实现可扩展、实时推荐的关键技术是Apache Spark Streaming,它可以利用大数据的可扩展性并实时生成推荐,还可以在内存中处理数据,如下图所示。

  • Neo4j在基于图的实时推荐系统中的应用

图数据库已经彻底改变了人们发现新产品、探索有价值信息的方式。在人类的大脑里,对人、事物、位置等信息的记忆,往往采用图、关系或者网络。

当我们试图从这些网络中获取信息时,会直接转到所需的连接或图,并准确获取信息。同样,图数据库将用户和产品信息作为节点和边缘(关系)进行存储。在图数据库中可以实现快速检索。近年来,图数据库推荐系统可以提供实时、准确、个性化的推荐信息。

Neo4j是使用图数据库实现实时推荐的关键技术之一,它是一种NoSQL图数据库,在为客户提供洞见和产品趋势方面,它可以轻松胜过任何其他关系型和NoSQL系统。

NoSQL(意指“not only SQL”)数据库是一种新型数据库。不同于关系数据库,它可以存储和管理诸如柱状、图、键值对等数据。这种新的存储和管理数据的方法使我们可以更好地构建可扩展的实时系统。

图数据库主要由节点和边组成,其中,节点代表实体,边代表实体之间的关系。这些边是连接节点的定向线或箭头。在下面的图像中,圆圈是代表实体的节点,连接节点的线称为边,表示关系。箭头方向指示信息流向。通过显示图的所有节点和链接,帮助用户对结构有一个全局的视图。

下图显示的是用户电影评级信息。绿色和红色的圆圈分别代表用户和电影节点。用户对电影的评级用边表示,以表示用户与电影之间的关系。每个节点和关系可以包含属性以存储数据的进一步细节。

该图中显示的是采用图论的概念实时生成推荐,检索和搜索速度非常快。

06 小结

在本文中,我们简单介绍了各种类型的流行推荐引擎,如协同过滤、基于内容的推荐引擎、混合推荐引擎、情境感知系统、可扩展的推荐系统和基于图的实时推荐引擎。我们还介绍了大数据和各大IT巨头的实际应用是如何推动推荐引擎发展的。

关于作者:苏雷什·库马尔·戈拉卡拉(Suresh Kumar Gorakala)是一位专注于人工智能方向的数据科学家。他拥有近10年的专业经验,曾为多个领域的全球客户服务,并帮助他们使用先进的大数据分析技术解决业务问题。他主要从事推荐引擎、自然语言处理、高级机器学习和图数据库等方面的工作。

本文摘编自《自己动手做推荐引擎》,经出版方授权发布。

编辑:王菁

校对:林亦霖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章