精华内容
下载资源
问答
  • 个性化推荐

    2018-03-16 09:53:06
    关于大数据的用户个性化推荐与精准营销的相关文献,涉及算法和具体应用
  • 移动电子化渠道——个性化推荐移动电子化渠道——个性化推荐移动电子化渠道——个性化推荐移动电子化渠道——个性化推荐移动电子化渠道——个性化推荐移动电子化渠道——个性化推荐移动电子化渠道——个性化推荐移动...
  • 个性化推荐算法总结

    万次阅读 多人点赞 2019-04-11 23:24:58
    读书笔记 |《推荐系统实践》- 个性化推荐系统总结 对于推荐系统,本文总结内容,如下图所示: 一、什么是推荐系统 1. 为什么需要推荐系统 为了解决互联网时代下的信息超载问题。 2. 搜索引擎与推荐系统 ...

    读书笔记 |《推荐系统实践》- 个性化推荐系统总结

    对于推荐系统,本文总结内容,如下图所示:

     

    一、什么是推荐系统

    1. 为什么需要推荐系统

    为了解决互联网时代下的信息超载问题。

    2. 搜索引擎与推荐系统

    • 分类目录,是将著名网站分门别类,从而方便用户根据类别查找公司。
    • 搜索引擎,用户通过输入关键字,查找自己需要的信息。
    • 推荐系统,和搜索引擎一样,是一种帮助用户快速发展有用信息的工具。通过分析用户的历史行为,给用户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息。

    并且,推荐系统能够很好的发掘物品的长尾,挑战传统的2/8原则(80%的销售额来自20%的热门品牌)。

    从技术角度来看,搜索引擎和推荐系统的区别在于:

    1)搜索引擎,注重搜索结果之间的关系和排序;
    2)推荐系统,需要研究用户的兴趣模型,利用社交网络的信息进行个性化的计算;

    3)搜索引擎,由用户主导,需要输入关键词,自行选择结果。如果结果不满意,需要修改关键词,再次搜索;
    4)推荐系统,由系统主导,根据用户的浏览顺序,引导用户发现自己感兴趣的信息;

    3. 推荐系统的定义

    推荐系统通过发掘用户的行为,找到用户的个性化需求,从而将长尾物品准确推荐给需要它的用户,帮助用户找到他们感兴趣但很难发现的物品。

    高质量的推荐系统会使用户对系统产生依赖,因此,推荐系统不仅能为用户提供个性化服务,还能与用户建立长期稳定的关系,提高用户忠诚度,防止用户流失。

    二、推荐系统评测

    如何判定什么是好的推荐系统?这是评测需要解决的首要问题。

    一般推荐系统的参与方有3个:

    • 用户
    • 物品提供商
    • 推荐系统提供网站

    因此,评测一个推荐系统时,需要考虑3方的利益,一个好的推荐系统是能够令三方共赢的系统。

    推荐系统评测,总结图如下:

    推荐系统评测.png

    1. 实验方法

    获得评测指标的实验方法,通常分3种:

    • 离线实验(offline experiment)
    • 用户调查(user study)
    • 在线实验(online experiment)

    我们分别介绍3种实验方法的优缺点。

    1)离线实验

    离线实验的方法的步骤如下:
    a)通过日志系统获得用户行为数据,并按照一定格式生成一个标准的数据集;
    b)将数据集按照一定的规则分成训练集和测试集;
    c)在训练集上训练用户兴趣模型,在测试集上进行预测;
    d)通过事先定义的离线指标,评测算法在测试集上的预测结果。

    从以上步骤看出,离线实验的都是在数据集上完成的。意味着,它不需要一个实际的系统作为支撑,只需要有一个从日志中提取的数据集即可。

    离线实验的优点是:

    • 不需要有对实际系统的控制权;
    • 不需要用户参与实践;
    • 速度快,可以测试大量算法;

    缺点是:

    • 数据集的稀疏性限制了适用范围,例如一个数据集中没有包含某用户的历史行为,则无法评价对该用户的推荐结果;
    • 评价结果的客观性,无法得到用户主观性的评价;
    • 难以找到离线评价指标和在线真实反馈(如 点击率、转化率、点击深度、购买客单价、购买商 品类别等)之间的关联关系;

    2)用户调查

    用户调查需要一些真实的用户,让他们在需要测试的推荐系统上完成一些任务。在他们完成任务时,需要观察和记录用户的行为,并让他们回答一些问题。

    最后,我们通过分析他们的行为和答案,了解测试系统的性能。

    用户调查的优点是:

    • 可以获得用户主观感受的指标,出错后容易弥补;

    缺点是:

    • 招募测试用户代价较大;
    • 无法组织大规模的测试用户,统计意义不足;

    3)在线实验

    在完成离线实验和用户调查之后,可以将系统上线做AB测试,将它和旧算法进行比较。

    在线实验最常用的评测算法是【A/B测试】,它通过一定的规则将用户随机分成几组,对不同组的用户采用不同的算法,然后通过统计不同组的评测指标,比较不同算法的好坏。

    它的核心思想是:
    a) 多个方案并行测试;
    b) 每个方案只有一个变量不同;
    c) 以某种规则优胜劣汰。

    其中第2点暗示了A/B 测试的应用范围:A/B测试必须是单变量。
    对于推荐系统的评价中,唯一变量就是--推荐算法。

    有个很棒的网站,http://www.abtests.com,里面有很多通过实际AB测试提高网站用户满意度的例子。

    AB测试的优点是:

    • 可以公平获得不同算法实际在线时的性能指标,包括商业上关注的指标;

    缺点是:

    • 周期较长,必须进行长期的实验才能得到可靠的结果;

    大型网站做AB测试,可能会因为不同团队同时进行各种测试对结果造成干扰,所以切分流量是AB测试中的关键。

    不同的层以及控制这些层的团队,需要从一个统一的地方获得自己AB测试的流量,而不同层之间的流量应该是正交的。

    AB测试系统.png

    4)总结

    一般来说,一个新的推荐算法最终上线,需要完成上述的3个实验。

    • 首先,通过离线实验证明它在很多离线指标上优于现有的算法;
    • 其次,通过用户调查确定用户满意度不低于现有的算法;
    • 最后,通过在线AB测试确定它在我们关心的指标上优于现有的算法;

    2. 评测指标

    评测指标用于评测推荐系统的性能,有些可以定量计算,有些只能定性描述。

    1)用户满意度

    用户满意度是评测推荐系统的重要指标,无法离线计算,只能通过用户调查或者在线实验获得。

    调查问卷,需要考虑到用户各方面的感受,用户才能针对问题给出准确的回答。

    在线系统中,用户满意度通过统计用户行为得到。比如用户如果购买了推荐的商品,就表示他们在一定程度上满意,可以用购买率度量用户满意度。

    一般情况,我们可以用用户点击率、停留时间、转化率等指标度量用户的满意度。

    2)预测准确度

    预测准确度,度量的是推荐系统预测用户行为的能力。 是推荐系统最重要的离线评测指标。

    大部分的关于推荐系统评测指标的研究,都是针对预测准确度的。因为该指标可以通过离线实验计算,方便了学术界的研究人员。

    由于离线的推荐算法有不同的研究方向,准确度指标也不同,根据研究方向,可分为:预测评分准确度和TopN推荐。

    a)预测评分准确度

    预测评分的准确度,衡量的是算法预测的评分与用户的实际评分的贴近程度。
    这针对于一些需要用户给物品评分的网站。

    预测评分的准确度指标,一般通过以下指标计算:

    • 平均绝对误差(MAE)

      MAE.png

      MAE因其计算简单、通俗易懂得到了广泛的应用。但MAE指标也有一定的局限性,因为对MAE指标贡献比较大的往往是那种很难预测准确的低分商品。

      所以即便推荐系统A的MAE值低于系统B,很可能只是由于系统A更擅长预测这部分低分商品的评分,即系统A比系统B能更好的区分用户非常讨厌和一般讨厌的商品,显然这样区分的意义不大。

    • 均方根误差(RMSE)

       

      RMSE.png

      Netflix认为RMSE加大了对预测不准的用户物品评分的惩罚(平方项的惩罚),因而对系统的评测更加苛刻。

      研究表明,如果评分系统是基于整数建立的(即用户给的评分都是整数),那么对预测结果取整数会降低MAE的误差。

    b)TopN推荐

    网站提供推荐服务时,一般是给用户一个个性化的推荐列表,这种推荐叫做TopN推荐。

    TopN推荐的预测准确率,一般通过2个指标度量:

    • 准确率(precision)

       

    • 召回率(recall)

    R(u)是根据用户在训练集上的行为给用户做出的推荐列表,T(u)是用户在测试集上的行为列表。

    TopN推荐更符合实际的应用需求,比如预测用户是否会看一部电影,比预测用户看了电影之后会给它什么评分更重要。

    3)覆盖率

    覆盖率(coverage)是描述一个推荐系统对物品长尾的发掘能力。
    最简单的定义是,推荐系统推荐出来的物品占总物品的比例。

    假设系统的用户集合为U,推荐系统给每个用户推荐一个长度为N的物品列表R(u),覆盖率公式为:

    覆盖率是内容提供者关心的指标,覆盖率为100%的推荐系统可以将每个物品都推荐给至少一个用户。

    除了推荐物品的占比,还可以通过研究物品在推荐列表中出现的次数分布,更好的描述推荐系统的挖掘长尾的能力。

    如果分布比较平,说明推荐系统的覆盖率很高;如果分布陡峭,说明分布系统的覆盖率较低。

    信息论和经济学中有两个著名指标,可以定义覆盖率:

    • 信息熵

    p(i)是物品i的流行度除以所有物品流行度之和。

    • 基尼系数(Gini Index)

      p(ij)是按照物品流行度p()从小到大排序的物品列表中第j个物品。

      • 评测马太效应

      马太效应,是指强者越强,弱者越弱的效应。推荐系统的初衷是希望消除马太效应,使得各物品都能被展示给对它们感兴趣的人群。

      但是,很多研究表明,现在的主流推荐算法(协同过滤)是具有马太效应的。评测推荐系统是否具有马太效应可以使用基尼系数。

      如,G1是从初始用户行为中计算出的物品流行度的基尼系数,G2是从推荐列表中计算出的物品流行度的基尼系数,那么如果G1<G2,就说明推荐算法具有马太效应。

    4)多样性

    为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同兴趣的领域,即需要具有多样性。

    多样性描述了推荐列表中物品两两之间的不相似性。假设s(i,j)在[0,1]区间定义了物品i和j之间的相似度,那么用户u的推荐列表R(u)的多样性定义如下:

    推荐系统整体多样性可以定义为所有用户推荐列表多样性的平均值:

    5)新颖性

    新颖性也是影响用户体验的重要指标之一。它指的是向用户推荐非热门非流行物品的能力。

    评测新颖度最简单的方法,是利用推荐结果的平均流行度,因为越不热门的物品,越可能让用户觉得新颖。

    此计算比较粗糙,需要配合用户调查准确统计新颖度。

    6)惊喜度

    推荐结果和用户的历史兴趣不相似,但却让用户满意,这样就是惊喜度很高。

    目前惊喜度还没有公认的指标定义方式,最近几年研究的人很多,深入研究可以参考一些论文。

    7)信任度

    如果用户信任推荐系统,就会增加用户和推荐系统的交互。

    提高信任度的方式有两种:

    • 增加系统透明度
      提供推荐解释,让用户了解推荐系统的运行机制。

    • 利用社交网络,通过好友信息给用户做推荐
      通过好友进行推荐解释

    度量信任度的方式,只能通过问卷调查。

    8)实时性

    推荐系统的实时性,包括两方面:

    • 实时更新推荐列表满足用户新的行为变化;
    • 将新加入系统的物品推荐给用户;

    9)健壮性

    任何能带来利益的算法系统都会被攻击,最典型的案例就是搜索引擎的作弊与反作弊斗争。

    健壮性(robust,鲁棒性)衡量了推荐系统抗击作弊的能力。

    2011年的推荐系统大会专门有一个推荐系统健壮性的教程,作者总结了很多作弊方法,最著名的是行为注入攻击(profile injection attack)。
    就是注册很多账号,用这些账号同时购买A和自己的商品。此方法针对亚马逊的一种推荐方法,“购买商品A的用户也经常购买的其他商品”。

    评测算法的健壮性,主要利用模拟攻击:

    a)给定一个数据集和算法,用算法给数据集中的用户生成推荐列表;
    b)用常用的攻击方法向数据集中注入噪声数据;
    c)利用算法在有噪声的数据集上再次生成推荐列表;
    d)通过比较攻击前后推荐列表的相似度评测算法的健壮性。

    提高系统健壮性的方法:

    • 选择健壮性高的算法;
    • 选择代价较高的用户行为,如购买行为比浏览行为代价高;
    • 在使用数据前,进行攻击检测,从而对数据进行清理。

    10)商业目标

    设计推荐系统时,需要考虑最终的商业目标。不同网站具有不同的商业目标,它与网站的盈利模式息息相关。

    总结:

    作者认为,对于可以离线优化的指标,在给定覆盖率、多样性、新颖性等限制条件下,应尽量优化预测准确度。

    3. 评测维度

    增加评测维度的目的,就是知道一个算法在什么情况下性能最好。

    一般评测维度分3种:

    • 用户维度
      主要包括用户的人口统计学信息、活跃度以及是不是新用户等;
    • 物品维度
      包括物品的属性信息、流行度、平均分以及是不是新加入的物品等;
    • 时间维度
      包括季节,是工作日还是周末,白天还是晚上等;

    如果推荐系统的评测报告中,包含了不同维度下的系统评测指标,就能帮我们全面了解系统性能。

    三、推荐算法通用模型

    1. 推荐算法通用模型

    推荐系统有3个重要的模块:

    • 用户建模模块
    • 推荐对象建模模块
    • 推荐算法模块

     

    通用的推荐系统模型流程如图,技术一点的描述过程如下:
    a)推荐系统通过用户行为,建立用户模型;
    b)通过物品的信息,建立推荐对象模型;
    c)通过用户兴趣匹配物品的特征信息,再经过推荐算法计算筛选,找到用户可能感兴趣的推荐对象,然后推荐给用户。

    • 用户建模模块
      建立用户模型之前,需要考虑下面几个问题:
      (1)模型的输入数据有哪些,如何获取模型的输入数据。
      (2)如何考虑用户的兴趣及需求的变化。
      (3)建模的对象是谁。
      (4)如何建模。
      (5)模型的输出是什么。

      获取用户信息就是解决模型输入数据的问题,输入数据主要有以下几种:
      (1)用户属性:人口统计学信息;

      (2)用户手动输入的信息:包括用户在搜索引擎中输入的关键词,用户反馈的信息,对推荐对象的喜好程度等;

      (3)用户的浏览行为和浏览内容:包括浏览次数、频率、停留时间等,浏览页面时的操作(收藏、保存、复制等)等。服务器端保存的日志也能较好地记录用户的浏览行为和内容。

      (4)推荐对象的属性特征:不同的推荐对象,用户建模的输入数据也不同。网页等推荐对象通常考虑对象的内容和用户之间的相似性,而产品等推荐对象通常考虑用户对产品的评价。

      为提高推荐质量,推荐对象的相关的属性也要考虑进去,比如除网页内容以外,还要考虑网页的发布人、时间等。

      产品类的对象还要考虑产品的品牌、价格、出售时间等。

    获取模型输入数据的方式有显式获取、隐式获取和启发式获取三种方式。

    用户模型的建模方法主要有遗传算法、基于机器学习的 方法,例如 TF-IDF、自动聚类、贝叶斯分类器、决策树归纳和神经网络方法等。

    • 推荐对象建模

    考虑以下几个问题:
    (1)提取推荐对象的什么特征,如何提取,提取的特征用于什么目的。
    (2)对象的特征描述和用户文件描述之间有关联。
    (3)提取到的每个对象特征对推荐结果会有什么影响。
    (4)对象的特征描述文件能否自动更新。

    2. 算法模块

    目前主要的推荐算法,如下图所示。

    推荐算法是整个推荐系统中最核心的部分,在很大程度上决定了推荐系统类型和性能的优劣。

    四、推荐算法详述

    1)基于内容的推荐

    原理是基于用户感兴趣的物品A,找到和A内容信息相近的物品B。

    利用用户和物品本身的内容特征,如用户的地理位置、性别、年龄,电影物品的导演、演员、发布时间等。
    比如你喜欢看《怪奇物语I》,系统会给你推荐《怪奇物语II》。

    所以提取推荐对象的特征,是内容推荐算法的关键。但是对于多媒体内容,如视频、音乐,很难找到它们之间的特性关联性。

    基于内容的推荐的优点如下:
    (1) 简单、有效,推荐结果直观,容易理解,不需要领域知识。
    (2) 不需要用户的历史数据,如对对象的评价等。
    (3) 没有关于新推荐对象出现的冷启动问题。
    (4) 没有稀疏问题。
    (5) 算法成熟,如数据挖掘、聚类分析等。

    基于内容的推荐的缺点如下:
    (1) 受到了推荐对象特征提取能力的限制。
    比如图像、视频,没有有效的特征提取方法。即便是文本资源,特征提取也只能反应一部分内容,难以提取内容质量,会影响用户满意度。

    (2) 很难出现新的推荐结果。
    根据用户兴趣的喜好进行推荐,很难出现惊喜。对于时间敏感的内容,如新闻,推荐内容基本相同,体验度较差。

    (3)存在新用户出现时的冷启动问题。
    当新用户出现时, 系统较难获得该用户的兴趣偏好,无法进行有效推荐。

    (4) 推荐对象内容分类方法需要的数据量较大。

    2)协同过滤算法

    仅仅基于用户行为数据设计的推荐算法,称为协同过滤算法。此方法主要根据用户对物品的历史行为,寻找用户或物品的近邻集合,以此计算用户对物品的偏好。

    主要的算法分3种,最广泛应用的是基于领域的方法:

    a) 基于领域的模型算法

    主要包含两种算法:

    i) 基于用户的协同过滤算法(UserCF)
    这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品。

    • 算法步骤:
      (1) 找到和目标用户兴趣相似的用户集合;
      (2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品,推荐给目标用户。

    算法的关键是计算两个用户的兴趣相似度。协同过滤计算用户兴趣相似度是利用用户行为的相似度。

    UserCF

    • 计算用户相似度的方法有3种:
      • 余弦相似性
      • 相关相似性(皮尔森系数相关)
      • 修正的余弦相似性

    计算用户兴趣相似度时,要避免热门物品自带马太效应的影响。换句话说,两个用户对冷门物品采取过同样行为,更能说明他们的兴趣相似。

    • 缺点:
      • 用户数目越大,计算用户兴趣相似度越复杂,时间、空间复杂度的增长和用户数的增长近似于平方关系。
      • 解释性不强

    ii) 基于物品的协同过滤算法(ItemCF)
    这种算法给用户推荐和他之前喜欢的物品相似的物品。

    该算法是目前业界应用最多的算法,如亚马逊、Netflix、YouTube,都是以该算法为基础。

    • ItemCF 与 基于内容的推荐算法的区别

      • 基于内容的推荐算法,计算的是物品内容属性之间的相似度。如,电影的导演是不是同一个人;
      • ItemCF是通过用户的行为计算物品之间的相似度。如,物品A、B具有很大相似度,是因为喜欢物品A的用户也大都喜欢物品B。
    • 算法步骤:
      (1) 根据用户的历史行为,计算物品之间的相似度;
      (2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。

    两个物品产生相似度,是因为它们共同被很多用户喜欢,也就是说,每个用户都可以通过它们的历史兴趣列表给物品“贡献”相似度。

    ItemCF

    • 用户活跃度对物品相似度的影响
      IUF(Inverse User Frequence),用户活跃度对数的倒数的参数。
      论文提出的观点是,活跃用户对物品相似度的贡献应该小于不活跃的用户。用IUF修正物品相似度的计算。

    • 物品相似度的归一化
      研究表明,将ItemCF的相似度矩阵按最大值归一,可以提高推荐的准确率。

    • UserCF 与 ItemCF 的优缺点

    b) 隐语义模型算法

    LFM(latent factor model)隐语义模型是最近几年推荐系统领域最热门的话题,它的核心思想是通过隐含特征联系用户兴趣和物品。

    i)隐语义模型解决了什么问题

    比如,用户A的兴趣列表里,有关于侦探小说、科普图书和计算机技术图书。用户B的兴趣列表集中在数学和机器学习方面。

    如何给用户A和B推荐图书?

    除了UserCF与ItemCF,还可以对书和物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。

    • 基于兴趣分类的方法,大概需要解决的问题:

      • 如何给物品进行分类?
      • 如何确定用户对哪类物品感兴趣,以及感兴趣程度?
      • 对于一个给定的分类,选择哪些属于这个类的物品推荐给用户,以及如何确定这些物品在一个类中的权重?
    • 人工编辑分类存在的问题:

      • 编辑的意见不能代表各种用户的意见。
      • 编辑很难控制分类的粒度。
      • 编辑很难给一个物品多个分类。
      • 编辑很难给出多维度的分类。
      • 编辑很难决定一个物品在某一个分类的权重。
    • 隐语义分析技术解决了上述5个问题:

      • 用户的行为代表了用户对物品分类的看法。比如,如果两个物品被很多用户同时喜欢,这个两个物品很可能属于同一类。
      • 隐语义技术允许我们指定最终的分类数目,分类数越多,分类粒度越细。
      • 隐语义技术可以计算出物品属于每个类的权重,因为每个物品不是硬性地被分到一个类目中。
      • 隐语义技术给出的每个分类都不是一个维度,它根据用户的共同兴趣计算得出。
      • 隐语义技术可以通过统计用户行为决定物品在每个类中的权重,如果喜欢某个类的用户都会喜欢某个物品,那么这个物品在这个类中的权重就可能较高。

    隐语义技术有很多著名的模型和方法,其中耳熟能详的名词有pLSA、LDA、隐含类别模型、隐含主题模型、矩阵分解。这些技术和方法在本质上是相同的,都可以用于个性化推荐系统。

    ii)LFM算法详解

    LFM公式

    推荐系统的用户行为分为显性反馈和隐性反馈,LFM在显性反馈数据(评分数据)上解决评分预测问题达到了很好的精度。

    对于隐性反馈数据,这种数据集的特点是,只有正样本(用户喜欢什么物品),没有负样本(用户对什么物品不感兴趣)。

    在隐性反馈数据集上应用LFM解决TopN推荐,第一个关键问题是如何给每个用户生成负样本。

    • 对于这个问题,Rong Pan在文章中做了很多探讨,对比了如下几种方法:
      • 1)对于一个用户,用他所有没有过行为的物品作为负样本。
      • 2)对于一个用户,从他没有过行为的物品中均匀采样出一些物品作为负样本。
      • 3)对于一个用户,从他没有过行为的物品中采样出一些物品作为负样本,但采样时,保证每个用户的正负样本数目相当。
      • 4)对于一个用户,从他没有过行为的物品中采样出一些物品作为负样本,但采样时,偏重采样不热门的物品。

    对于1),它的明显缺点是负样本太多,正负样本数目相差悬殊,因而计算复杂度很高,最终结果的精度也很差。另外三种方法的效果,作者表示,3)> 2)> 4)。

    • 对负样本的采样还应该遵循以下原则:
      • 对每个用户,要保证负样本的平衡(数目相似)
      • 对每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品。

    通过离线实验对比LFM在TopN推荐中的性能,在LFM中,有4个重要参数:

    • 隐特征的个数F;
    • 学习速率alpha;
    • 正则化参数lambda;
    • 负样本/正样本比例ratio;
      实验表明,ratio参数对LFM的性能影响最大。

    iii)基于LMF的实际系统的例子

    雅虎的研究人员公布过一个使用LFM进行雅虎首页个性化设计的方案。

    LFM的缺点是,很难实现实时的推荐。
    经典的LFM模型每次训练时,需要扫描所有用户的行为记录,这样才能计算出用户隐类向量和物品隐类向量。所以一般每天只训练一次。

    雅虎的解决方案是:

    • 利用新闻链接的内容属性(关键词、类别等)得到链接的内容特征向量;
    • 实时收集用户对链接的行为,并用这些数据得到链接的隐特征向量;
    • 利用公式预测用户是否会单击链接。

    iiii)LFM和基于领域的方法区别

    总结如下图:

    c) 基于图的模型

    用户行为很容易用二分图表示,因此很多图的算法都可以用到推荐系统中。也可以把基于领域的模型看做是基于图的模型的简单形式。

    i)用户行为数据的二分图表示

    基于图的模型(graph-based model)是推荐系统中的重要内容,其基本思想是将用户行为数据表示为一系列的二元组。

    每一个二元组(u,i)代表用户u对物品 i 产生过行为,这样便可以将这个数据集表示为一个二分图。

    下图是一个简单的用户物品二分图模型,其中圆形节点代表用户,方形节点代表物品,圆形节点和方形节点之间的边代表用户对物品的行为。比如图中用户节点A和物品节点a、b、d相连,说明用户A对物品a、b、d产生过行为。

    ii)基于图的推荐算法

    基于用户行为二分图,给用户u推荐物品,可以转化为计算用户顶点u和与所有物品顶点之间的相关性,然后取与用户没有直接边相连的物品,按照相关性的高低生成推荐列表。

    其实,这是一个图上的排名问题,最著名的就是Google的pageRank算法。

    • 度量图中两个顶点之间相关性,一般取决于3个因素:

      • 两个顶点之间的路径数;
      • 两个顶点之间的路径长度;
      • 两个顶点之间的路径经过的顶点;
    • 相关性高的两个顶点,一般具有以下特征:

      • 两个顶点之间有很多路径相连;
      • 链接两个顶点之间的路径长度都比较短;
      • 链接两个顶点之间的路径不会经过出度比较大的顶点。

    iii)PageRank算法简介

    PageRank是Larry Page 和 Sergey Brin设计的,用来衡量特定网页相对于搜索引擎中其他网页的重要性的算法,其计算结果作为Google搜索结果中网页排名的重要指标。

    网页之间通过超链接相互连接,互联网上不计其数的网页就构成了一张超大的图。

    PageRank假设用户从所有网页中随机选择一个网页进行浏览,然后通过超链接在网页直接不断跳转。到达每个网页后,用户有两种选择:到此结束或者继续选择一个链接浏览。

    算法令用户继续浏览的概率为d,用户以相等的概率在当前页面的所有超链接中随机选择一个继续浏览。

    这是一个随机游走的过程。
    当经过很多次这样的游走之后,每个网页被访问用户访问到的概率就会收敛到一个稳定值。这个概率就是网页的重要性指标,被用于网页排名。算法迭代关系式如下所示:

    上式中PR(i)是网页i的访问概率(也就是重要度),d是用户继续访问网页的概率,N是网页总数。in(i)表示指向网页i的网页集合,out(j)表示网页j指向的网页集合。

    iiii)PersonalRank算法简介

    对于推荐系统,我们需要计算的是物品节点相对于某一个用户节点u的相关性。

    Standford的Haveliwala于2002年在他《Topic-sensitive pagerank》一文中提出了PersonalRank算法,该算法能够为用户个性化的对所有物品进行排序。它的迭代公式如下:

    我们发现PersonalRank跟PageRank的区别只是用ri替换了1/N,也就是说从不同点开始的概率不同。

    我们重新描述一下算法的过程:

    假设要给用户u进行个性化推荐,可以从用户u对应的节点Vu开始在用户物品二分图上进行随机游走。

    游走到任何一个节点时,首先按照概率α决定是继续游走,还是停止这次游走并从Vu节点开始重新游走。如果决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。

    这样,经过很多次随机游走后,每个物品节点被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。

    • 缺点
      PersonalRank每次都需要在全图迭代,所以时间复杂度非常高。
      解决办法是,
      • 减少迭代次数,在收敛前停止。会影响精度,但影响不大。
      • 从矩阵论出发,重新设计算法。

    3)基于关联规则的推荐

    主要用于购物车分析。

    (以下内容摘自网络)

    关联规则是反映一个事物与其他事物之间的相互依存性和关联性,常用于实体商店或在线电商的推荐系统:通过对顾客的购买记录数据库进行关联规则挖掘,最终目的是发现顾客群体的购买习惯的内在共性。

    例如购买产品A的同时也连带购买产品B的概率,根据挖掘结果,调整货架的布局陈列、设计促销组合方案,实现销量的提升,最经典的应用案例莫过于<啤酒和尿布>。

    关联规则分析中的关键概念包括:支持度(Support)、置信度(Confidence)与提升度(Lift)。首先,我们简单温故下这3个关键指标~

    1、支持度 (Support):支持度是两件商品(A∩B)在总销售笔数(N)中出现的概率,即A与B同时被购买的概率。类似于中学学的交集,需要原始同时满足条件。

    公式:

    例子说明:

    比如某超市2016年有100w笔销售,顾客购买可乐又购买薯片有20w笔,顾客购买可乐又购买面包有10w笔,那可乐和薯片的关联规则的支持度是20%,可乐和面包的支持度是10%。

    2、置信度 (Confidence):置信度是购买A后再购买B的条件概率。简单来说就是交集部分C在A中比例,如果比例大说明购买A的客户很大期望会购买B商品。

    公式:

    例子说明:

    某超市2016年可乐购买次数40w笔,购买可乐又购买了薯片是30w笔,顾客购买可乐又购买面包有10w笔,则购买可乐又会购买薯片的置信度是75%,购买可乐又购买面包的置信度是25%,这说明买可乐也会买薯片的关联性比面包强,营销上可以做一些组合策略销售。

    3、提升度 (Lift):提升度表示先购买A对购买B的概率的提升作用,用来判断规则是否有实际价值,即使用规则后商品在购物车中出现的次数是否高于商品单独出现在购物车中的频率。如果大于1说明规则有效,小于1则无效。

    公式:

    例子说明:

    可乐和薯片的关联规则的支持度是20%,购买可乐的支持度是3%,购买薯片的支持度是5%,则提升度是1.33>1, A-B规则对于商品B有提升效果。

    4)基于知识推荐

    基于知识的推荐(Knowledge-based Recommendation),主要应用于知识型的产品中,主要解决的问题是,为你量身定制升级打怪的进阶路线图。

    比如你想学习钢琴,如果你是刚入门的小白,那你最好从简单的谱子学起。但这样带来一个问题,是因为你的历史行为都在初级范围之内,根据兴趣偏好,推荐给你的信息也都在初级范围。无法满足你的升级需求。

    这个时候就需要基于知识的推荐。推荐系统知道你现在所处的知识级别(用户知识),也知道学习钢琴所有的级别(产品知识),然后根据你现在的情况为你推荐适合你进阶的信息。

    以上为个人理解,百度百科的解释为:

    使用用户知识和产品知识, 通过推理什么产品能满足用户需求来产生推荐。这种推荐系统不依赖于用户评分等关于用户偏好的历史数据, 故其不存在冷启动方面的问题。基于知识的推荐系统响应用户的即时需求, 当用户偏好发生变化时不需要任何训练。

    举例:
    针对海量习题带来的信息过载导致学习针对性不强、效率不高等问题,提出了基于知识点层次图的个性化习题推荐算法(A Personalized Exercises Recommendation Algorithm based on Knowledge Hierarchical Graph,ReKHG)。

    首先,借鉴课程知识点体系结构的特点,构建了表征知识点层次关系的权重图,该权重图有效反映知识点间的层次关系。

    然后,根据学生对知识点的掌握情况,在知识点层次图的基础上提出了一种个性化习题推荐算法。该算法通过更新学生-知识点失分率矩阵,获取学生掌握薄弱的知识点,以此实现习题推荐。

    ps:以上举例来自于某论文,没有用于实际案例中。关于知识推荐,没有找到太多实际案例,国外的论文论述的比较多一些。

    5)混合推荐

    每个算法都不是完美的,因此实际应用中,可以混合使用各种推荐算法,各取所长。

    五、推荐算法数据来源

    1. 利用用户行为信息

    用户行为数据一般存于日志中。
    用户行为可以分为:显性反馈行为和隐性反馈行为。
    互联网上的很多数据分布满足一种称为Power Law的分布,称为长尾分布。

    2. 利用用户标签数据

    推荐系统联系用户和物品的几种途径

    推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介。目前流行的有3种方式:物品、用户、特征。

    前两种我们都很熟悉,特征有不同的表现形式,可以是物品的属性集合,可以是隐语义向量,这里我们用标签表示。

    • 标签分两类
      • 让作者或者专家给物品打标签
      • 让普通用户给物品打标签,即UGC标签应用,既描述了用户的兴趣又将表达了物品的语义。

    以豆瓣为例,打标签作为一种用户重要的行为,蕴含了丰富的用户兴趣信息。

    • 标签推荐系统算法

      • 统计每个用户最常用的标签
      • 对于每个标签,统计被打过这个标签次数最多的物品
      • 对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门物品推荐给这个用户
    • 算法改进:

      • TF-IDF,降低热门标签的权重,使推荐结果更准确
      • 数据稀疏性:对于新用户或者新物品来说,其标签数量可能过少,需要对标签进行扩展,即对每个标签找到和它相似的标签,也就是计算标签相似度。(拓展方法--话题模型)
      • 标签清理:清理掉同义词、无义词,方便做出推荐解释
    • 给用户推荐标签

      • 推荐的好处

        • 方便用户输入标签
        • 提高标签质量
      • 推荐方法

        • 推荐系统中最热门的标签(PopularTags)
        • 推荐物品最热门的标签(Item PopularTags)
        • 推荐用户经常使用的标签(User PopularTags)
        • 前面两种融合(Hybrid PopularTags)
      • 冷启动物品的推荐方法

        • 从物品的内容数据中抽取关键词作为标签
        • 根据仅有的标签做拓展

    3. 利用上下文信息

    用户所处的上下文,包括用户访问推荐系统的时间、地点、心情等,有助于提高推荐系统的性能。

    比如,用户夏天喜欢过的T恤,冬天再推荐就不合适了。
    用户在中关村,打开美食推荐,如果给的结果是国贸是不合适了。

    1) 时间上下文信息

    • 时间对用户兴趣的影响:

      • 用户兴趣是变化的
      • 物品也是有生命周期的
      • 季节效应
    • 推荐系统的实时性
      用户兴趣是不断变化的,其变化体现在用户不断增加的新行为中。一个实时的推荐系统需要能够实时响应用户新的行为,让推荐列表不断变化,从而满足用户不断变化的兴趣。

      实现推荐系统的实时性除了对用户行为的存取有实时性要求,还要求推荐算法本身具有实时性,而推荐算法本身的实时性意味着:

      • 实时推荐系统不能每天都给所有用户离线计算推荐结果,然后在线展示昨天计算出来的结果。所以,要求在每个用户访问推荐系统时,都根据用户这个时间点前的行为实时计算推荐列表
      • 推荐算法需要平衡考虑用户的近期行为和长期行为,即要让推荐列表反应出用户近期行为所体现的兴趣变化,又不能让推荐列表完全受用户近期行为的影响,要保证推荐列表对用户兴趣预测的延续性。
    • 推荐算法的时间多样性
      推荐系统每天推荐结果的变化程度被定义为推荐系统的时间多样性。时间多样性高的推荐系统中用户会经常看到不同的推荐结果。

      提高推荐结果的时间多样性需要分两步解决:

      • 首先,需要保证推荐系统能够在用户有了新的行为后及时调整推荐结果,使推荐结果满足用户最近的兴趣;
      • 其次,需要保证推荐系统在用户没有新的行为时也能经常变化一下结果,具有一定的时间多样性

      如果用户没有行为,推荐思路:

      • 在生成推荐结果时加入一定的随机性。比如从推荐列表前20个结果中随机挑选10个结果展示给用户,或者按照推荐物品的权重采样10个结果展示给用户。
      • 记录用户每天看到的推荐结果,然后在每天给用户进行推荐时,对他前几天看到过很多次的推荐结果进行适当地降权。
      • 每天给用户使用不同的推荐算法。可以设计很多推荐算法,比如协同过滤算法、内容过滤算法等,然后在每天用户访问推荐系统时随机挑选一种算法给他进行推荐。

    协同过滤算法可以利用时间信息提高预测的准确度。

    • 时间上下文相关的ItemCF算法

      • 物品相似度
        用户在相隔很短的时间内喜欢的物品具有更高相似度。
      • 在线推荐
        用户近期的行为比用户很久之前的行为,更能体现用户现在的兴趣。
    • 时间上下文相关的UserCF算法

      • 用户兴趣相似度
        如果两个用户【同时】喜欢相同的物品,则他们有更大的兴趣相似度。
      • 相似兴趣用户的最近行为
        给用户推荐和他兴趣相似的用户最近喜欢的物品。

    2)地点上下文信息

    • 用户兴趣和地点相关的两种特征:
      • 兴趣本地化,不同地方的用户兴趣存在着很大的差别,不同国家和地区用户的兴趣存在着一定的差异性。
      • 活动本地化,一个用户往往在附近的地区活动。因此,在基于位置的推荐中我们需要考虑推荐地点和用户当前地点的距离,不能给用户推荐太远的地方。

    4. 利用社交网络数据

    • 获取社交网络数据的途径

      • 电子邮件
      • 用户注册信息
      • 用户位置数据
      • 论坛和讨论组
      • 即时聊天工具
      • 社交网站
        • Facebook中的绝大多数用户联系基于社交图谱:由于人们之间的亲属关系、工作关系而形成;
        • Twitter中的绝大多数用户联系基于兴趣图谱:通过人们之间的共同兴趣和信念形成;
    • 社交网络数据的分类

      • 双向确认的社交网络数据,以Facebook和人人网为代表,用户之间形成好友关系需要通过双方的确认;
      • 单向关注的社交网络数据,以Twitter和新浪微博为代表,用户A可以关注用户B,而不用得到用户B的允许;
      • 基于社区的社交网络数据,用户之间并没有明确的关系,但是这种数据包含了用户属于不同社区的数据。比如豆瓣小组,属于同一个小组可能代表了用户兴趣的相似性;
    • 社会化推荐的优点

      • 好友推荐可以增加推荐的信任度
      • 社交网络可以解决冷启动问题

    六、冷启动问题

    1)冷启动主要分3类:

    • 用户冷启动
      一个新用户,没有任何历史行为数据,怎么做推荐。
    • 物品冷启动
      一个新上线的物品,没有用户对它产生过行为,怎么推荐给感兴趣的用户。
    • 系统冷启动
      一个新开发的网站,没有用户数据,怎么做个性化推荐。

    2)解决方案:

    • 提供非个性化推荐,如热门排行。等有了数据之后再推荐。
    • 利用用户注册信息,做粗粒度的个性化。
    • 利用用户的社交网络账号,导入用户的好友,推荐好友喜欢的物品。
    • 用户初次登录时,对一些物品进行反馈,根据这些信息做个性化。
    • 对于新上线的物品,利用内容信息,推荐给喜欢类似物品的用户。
    • 系统冷启动,可以引入外部资源,如专家知识,建立起物品的相关度。

    3)冷启动,启动用户兴趣的物品需要具有以下特点:

    • 比较热门
    • 具有代表性和区分性
    • 启动物品集合需要有多样性

    4)选择启动物品集合的系统

    如何设计一个选择启动物品集合的系统?Nadav Golbandi在论文中提出用一个决策树解决。

    首先,给定一群用户,用这群用户对物品评分的方差度量这群用户兴趣的一致程度。如果方差很小,说明这一群用户的兴趣不太一致,也就是物品具有比较大的区分度,反之则说明这群用户的兴趣比较一致。

    再根据用户的评分方差计算物品的区分度。

    也就是说,对于物品i,将用户分为3类--喜欢物品i的用户,不喜欢物品i的用户和不知道物品i的用户。如果这3类用户集合内的用户对其他的物品兴趣很不一致,说明物品i具有较高的区分度。

    算法首先从所有用户中找到具有最高区分度的物品i,然后将用户分成3类。然后在每类用户中再找到最具区分度的物品,然后将每一类用户又各自分为3类,也就是将总用户分为9类,然后继续这样下去,最终可以通过对一系列物品的看法将用户进行分类。

    在冷启动时,从根节点开始询问用户对该节点物品的看法,然后根据用户的选择将用户放到不同的分枝,直到进入最后的叶子节点,此时对用户的兴趣有了比较清楚的了解,从而可以开始对用户进行比较准确地个性化推荐。

    5)利用物品的内容信息

    就是基于内容的推荐,很适合解决物品冷启动问题。

    物品冷启动对诸如新闻网站等时效性很强的网站的推荐非常重要,因为那些网站中时时刻刻都有新加入的物品,而且每个物品必须能够在第一时间展现给用户,否则经过一段时间后,物品的价值就大大降低了。

    一般来说,物品的内容可以通过向量空间模型表示,该模型会将物品表示成一个关键词向量。

    如果物品的内容是诸如导演、演员等实体,可以直接将实体作为关键词。
    如果内容是文本,需要引入自然语言的技术抽取关键词。如何建立文章、话题和关键词的关系是话题模型研究的重点,代表性的话题模型有LDA。

    LDA有3种元素,文档、话题、词语。详细内容可参考相关论文。

    向量空间模型的优点是简单,缺点是丢失了一些信息,比如关键词之间的关系信息。

    七、推荐系统实例

    推荐系统和其他系统之间的关系

    3种联系用户和物品的推荐系统

    3)推荐系统架构
    推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一类特性和一种任务,推荐系统的任务是将推荐引擎的结果按照一定权重或者优先级合并,排序然后返回。如下图:

    推荐系统架构图

    • 优点:
      • 方便增加或删除引擎,控制不同引擎对推荐结果的影响。
      • 可以实现推荐引擎级别的用户反馈。对不同用户给出不同引擎组合权重。

    4)推荐引擎架构

    • 推荐引擎架构主要包括三部分:
      • 图中A部分负责从数据库或缓存中拿到用户行为数据,通过分析不同行为,生成当前用户的特征向量,如果使用非行为特征,就不需要行为提取和分析模块了,该模块的输出就是用户特征向量。
      • 图中B部分负责将用户的特征向量通过特征-物品相关矩阵转化为初始推荐物品列表。
      • 图中C部分负责对初始的推荐列表进行过滤、排名等处理,从而生成该引擎的最终推荐结果。

    推荐引擎架构图

    • 生成用户特性向量

      • 用户行为的种类
      • 用户行为产生的时间
      • 用户行为的次数
      • 物品的热门程度
    • 过滤模块过滤掉以下物品

      • 用户已经产生过行为的物品
      • 候选物品以外的物品(不符合用户筛选条件的物品)
      • 某些质量很差的物品

    以上,就是所有内容的总结。内容主要来自于《推荐系统实践》,以及相关论文、博客。

    《推荐系统实践》中提到的papaer总结:
    https://book.douban.com/review/5514664/
    参考论文:
    http://t.cn/RjXktmC
    http://t.cn/RjXkiFP
    http://blog.csdn.net/qingqingpiaoguo/article/details/60882309
    https://www.zhihu.com/question/27141495/answer/161027882

     

     

    在这个信息爆炸的时代,每个人都是内容的消费者,也轻而易举地可以成为内容的创造者。在海量的信息中,用户找到所需、所想、所爱的优质内容变得异常困难,个性化推荐也因此应运而生。

    个性化推荐是在大数据分析和人工智能技术的基础上,通过用户行为分析,进行深度计算,从而给用户提供高质量的个性化内容,起到降低信息过载、发掘长尾、提高转化率的作用,最终更好更快地满足用户需求。

    神策智能推荐是神策数据打造的一款基于用户行为分析的全流程智能推荐系统。该系统主要分为两个阶段:召回阶段和排序阶段。因此,在详细讲述召回的方法前,我们先来看看召回阶段的作用和目的。

    一、召回阶段的作用和目的

    召回阶段可以理解为根据用户的历史行为数据,为用户在海量的信息中粗选一批待推荐的内容,挑选出一个小的候选集,相当于粗排序。排序阶段再在此基础上进行更精准的计算,做到给每一个内容进行精确打分,相当于精排序。

    如下图,用户画像、内容分析、机器学习平台是支持召回和排序的三个独立组件,另外,通过点击、观看、收藏、评价等用户行为数据作为数据输入的主要来源。

    举个例子,神策的某个资讯类客户,每天的内容量级为十万以上,在召回阶段根据用户的历史行为数据分析出其兴趣和偏好,再在海量的政治、历史、体育、娱乐等内容中,挑选出一个小的候选集,如用户主要对历史和体育感兴趣,候选集中就主要是历史和体育的内容,娱乐、政治等其他内容就会被过滤掉,排序阶段会以此为基础进行更精准地计算,通过机器学习预估用户的喜欢程度对使用不同的召回方法获得的候选集的内容进行更精细化地打分,使其变得有序,经过这两个阶段后,最终为用户精挑细选出用户最感兴趣的高质量内容。

    综上所述,个性化推荐系统是一个流程:海量 Item——召回(粗排)——候选集合——排序(精排)——排序列表——规则(多样化推荐)——推荐结果。

    事实上,作为信息过滤的第一环,召回对于个性化推荐系统极其重要,神策智能推荐在保障数据源的准确性基础上,使用了多种召回方法加强个性化推荐的推荐精准性。下面将为你详解:

    二、基于深度用户行为分析的召回

    基于深度用户行为分析的召回,能更全面且精细化地解读用户真实需求,并为其推荐。市场上熟知的基于用户行为分析的召回主要通过以下两种思路:

    1.基于内容的协同过滤

    基于内容的协同过滤,简而言之是根据用户喜欢的内容推荐与之相似的内容。比如某个用户喜欢 A 内容,算法就会为用户推荐 A1、A2 等与 A 相似的内容,而不是推荐 Z9 等相关性小的内容。

    举个例子,百度视频会根据用户正在观看或者历史偏好的视频,进行个性化的推荐。如在百度视频首页搜索《知否知否应是绿肥红瘦》就会出现根据主演赵丽颖推荐的相关电视剧。

    2.基于用户的协同过滤

    基于用户的协同过滤,简而言之,推荐相似用户喜欢的内容。比如,A 用户和 B 用户喜欢的内容一致,这种方式就会向 A 用户推荐 B 用户喜欢但是 A 用户没有看的内容。

    举个例子,某咨询类 App 有娱乐、奇趣、健康、美食等内容分类,对于喜欢娱乐新闻的用户可以将所有同样喜欢娱乐内容的用户最近最爱看的一些资讯放在有娱乐新闻偏好的用户的热门流中。

    神策智能推荐在具备多种协同过滤推荐机制的基础上,采用基于行为的深度学习召回模型,再根据用户行为数据训练模型,加强了推荐系统推荐的智能性和准确性。该深度学习召回模型是借鉴谷歌的个性化推荐思路(如下图),并汲取用户行为分析实践经验结合企业的最新实践需求进行了个性化的优化迭代。

    图片来源:谷歌发布的《Deep Neural Networks for YouTube Recommendations 》论文

    相比基于矩阵分解的协同过滤方式,深度学习召回模型有如下优势:

    第一,更全面的行为表达。在模型中结合点击、收藏、搜索等多种行为,能更全面地表示用户行为偏好。

    第二,可添加画像特征,可加入性别、地域等用户画像相关的特征。如果你有额外的一些标签或发生的信息,这个模型是可以兼容的,它可以把所有信息糅杂在同一模型里面去做,而在协同过滤模型里面是完全无法引入的。

    第三,考虑用户的行为顺序。比如用户通常的行为顺序是,先买一个手机,然后再去买一个手机壳;买了一个汽车后可能会买个汽车坐垫。

    第四,组合复杂特征。神经网络可以进行更复杂的特征组合,挖掘更深层次的关联关系。

    三、基于用户画像的召回

    1.利用已有的关注关系

    关注关系就是用户显性化的喜爱偏好。用户的每次浏览、每次点击、每次填写、每次搜索都隐藏了你的用户偏好。如下图,当用户的站内搜索、浏览页面、点击标签、点击按钮等行为的数据都能抓到并进行分析,就能做到给用户的内容更逼近其心中所想和心中所爱。

    再比如,淘宝也会根据用户收藏和历史的搜索行为进行推荐,如下图淘宝的收藏中有运动裤,下面的猜你喜欢就会推荐相关的运动裤。

    2.基于标签构建用户画像

    不同性别、年龄、职业、地区的用户对内容的兴趣偏好有所不同,即使同一性别、年龄、职业的偏好也有很大差异,所谓千人千面,每个用户都有其特征和偏好。因此,很多企业都有自身的标签平台,如纵横小说会根据用户行为数据结合内容标签,构建用户画像标签,通过这种方式召回用户感兴趣的内容。

    四、保障推荐的有效冷启动和推荐多样性的方法

    推荐系统的冷启动场景主要分为三类:

    用户冷启动:即如何给新用户做个性化推荐,事实上,第一次展现给用户的 item 极其重要,决定了用户的第一印象;

    内容冷启动:即如何将新的内容推荐给潜在对它感兴趣的用户;

    系统冷启动:即如何在一个新开发的产品中(无用户、无用户行为,只有一些内容)设计个性化推荐,从而在产品刚发布就让用户体验到个性化推荐服务。

    1.运用自然语言处理技术,解决内容冷启动问题

    关于冷启动,神策智能推荐,会运用自然语言处理技术对新的内容进行语义分析,我们可以这样理解,市面上很多都是文本数据的一些“显式”使用方法,包括在前面介绍的标签也是,所谓显式,是指我们将可读可理解的文本本身作为了相关性计算、召回以及模型排序的特征。这样做的优势是能够清晰地看到起作用的是什么,但是其劣势是无法捕捉到隐藏在文本表面之下的深层次信息。例如,“衣服”和“上衣”指的是类似的东西,“厚外套”和“棉服”具有很强的相关性,类似这样的深层次信息,是显式的文本处理所无法捕捉的,因此我们需要一些更复杂的方法来捕捉,而自然语言处理技术就能捕捉到,运用从词下沉到主题的思路,挖掘更深层次的核心信息。

    神策智能推荐运用自然语言处理技术——基于神经网络的文本语义分析模型(如下图),相比市面上通过打标签的方式推荐,可以做到更深层次的偏好挖掘推荐,举个例子,如果用户阅读了大量包含甄子丹、成龙、李小龙等关键词的文章,可以挖掘出用户对功夫类主题的内容偏好,并为其推荐。

    2.运用 UCB 探索用户的潜在兴趣算法,保证推荐结果的多样性

    在推荐的过程中,需要考虑给新 item 展示的机会,比如给一个喜欢历史分类资讯的用户推荐一些娱乐、政治等其他资讯,解决加强推荐多样性的问题。

    大家所熟知的是通过随机分配一部分流量给新 item 曝光,得到一些反馈,然后模型才能对其有较好的建模能力,这是比较传统的冷启动套路。

    神策智能推荐采用的是 upperconfidence bound(UCB) 策略: 假设有 K 个新 item 没有任何先验,每个 item 的回报也完全不知道。每个 item 的回报均值都有个置信区间,而随着试验次数增加,置信区间会变窄,对应的是最大置信边界向均值靠拢。如果每次投放时,我们选择置信区间上限最大的那个,则就是 UCB 策略。这个策略主要是通过以下两个原理达成更好地推荐:均值差不多时,优先给统计不那么充分的资讯多些曝光;均值有差异时,优先出效果好的。

    五、根据多源数据召回,保障推荐的全面性和精准性

    企业产生数据的方式多种多样,推荐系统的个性化精准推荐,离不开对业务和用户的精准把控,只有获取足够全面、颗粒度足够细的数据才能更精准的了解用户。神策智能推荐支持企业结合业务角度和时事热点等多方面,利用多种数据源的整合与综合分析,如支持将热门、编辑精选、最新、本地化内容等多类数据进行综合,吸取不同数据源的特点,并将这些内容放入到候选集里,为排序提供足够全面且详尽的内容。

    比如,某个资讯类 APP 的编辑会在热门流中精选出部分内容,形成一个精选内容集,就是一个精选出来的数据源,可将其放入候选集中,再次推荐增加曝光。再比如,当出了某些热门事件,资讯类 APP 就可以通过编辑打标签、手动筛选或通过某个简单的程序抓取相关的内容,将其归为一类放入内容池,再经过一系列操作后进行推荐。

    最后,我们整体上回顾一下前面介绍的召回方法(如下图)。

    事实上,神策智能推荐是以数据为根基,4 种主要召回的方法为关键,保障召回的候选集的全面、准确、个性化,为后面的排序打下良好基础。这里引用神策数据架构师房东雨的一句话,“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已”,这也是神策智能推荐如此强调数据根基的原因,因为如果你的数据根基没有做好,那所有的工作都是徒劳的。事实上,为企业建立良好的数据根基也是神策数据一直在做的事,如果你有需要或疑问都可以通过 4006509827 电话联系我们,会有专业的人员为您解答。

     

    如何搭建一套个性化推荐系统?

    个性化推荐系统,设计的巧妙就可以立竿见影地提升运营效率和用户转化率,尤其在内容分发、电商、社交等领域实践相当出彩(微博、各新闻门户、头条、京东、探探等都取得了不错的成绩),个性化推荐已经成为一个产品的基础建设。

        本文从整体上介绍一个完整的推荐系统所需的模块(不深入到细枝末节),核心包括内容源、内容处理、用户挖掘、算法、推荐搜索引擎、ABtest系统。本文将逐一介绍推荐架构的各个模块。

    个性化推荐系统架构图

    一、大量级可推荐内容,即推荐的SKU

        个性化推荐的本质是提升信息筛选的效率,如果信息量级小个性化意义不大(比如一个视频网站每天只能产生10条新闻,再怎么个性化也只是在这10条内循环,对用户来说没有差别),个性化推荐的SKU至少是千级或万级,而且理论上来说,优质内容越多、类别分布越广泛,个性化推荐效果越好。

        这些内容可以是抓取的无版权内容、UGC、版权合作PGC等多种来源,由于来源不同,样式和质量可能千差万别,因此通常需要做内容抓取、清洗、转码等以保证样式统一,还可能需要用户管理体系、反垃圾等配合搭建内容生态。个性化推荐系统各家可能是相近的,推荐的内容不同就产生了不同的用户场景和产品壁垒。内容,本质是一种资源。

    二、内容的标准化处理

        第一步内容已备齐,接下来是把内容处理成机器和算法可理解的特征(比如分类、标签、产品库等)。具体怎么处理要看业务需求,需要的技术:如果是文章、新闻、微博等,就需要自然语言处理;如果是图片、视频,就会涉及到图像识别和处理;如果是歌曲、电影、商品等,机器直接理解内容来打标签难度比较大,最好能建立一套用户打标签的机制,或者通过人工填写或抓取的方式打标签。

        但不管什么内容,首先都要建立一套自己的标签体系,这是定义标准的过程,比如要给电影打标签,先定义一下有多少种电影,通常标签体系会是一个树状或网状结构;其次可能都要收集大量训练样本,比如要实现给图片打标签,首先需要人工标注上万张图片,供机器学习,标注的样本还要不断更新,这里面涉及到大量重复繁琐的人力劳动。所以圈内人经常开玩笑说,“人工智能”重点其实是“人工”。

    三、用户行为日志收集、传输、挖掘、存储

        推荐的基础是数据,前两步挖掘了内容数据,第三步就是挖掘用户行为生成用户画像。

        采集:通常采用前端埋点的方式,上报用户的点击、分享、收藏等等行为。日志采集是数据挖掘非常重要的环节,如果采集有缺失或错误(很可能的事),那么后续不管怎么做都没有效果,同时前端的改动也可能影响日志,如果不有效协同,会对后端有很大影响。

        传输:用于用户兴趣的收集往往越快越好,这样用户的某个操作就能快速反馈到下一步推荐中,所以就需要日志的稳定传输和更新,但由于成本考虑,用户profile不是都能实时更新的,有的可能延时1小时,有的可能1天1更、一周1更,甚至更久。

    挖掘:这一过程是将用户数据计算、挖掘处理成我们想要的特征(俗称“用户画像”,业内通常叫用户profile),用户挖掘通常要与算法结合,而不能凭空挖特征,没有算法应用再牛逼的用户画像也是没有价值的。

        存储:用户的兴趣在一段时间内不会变化太大,因此可以用用户长期留下的行为来积累用户画像,并需要把这些profile存起来。如果用户量很大,那么需要的存储资源也是海量的,那就需要一个能对大量数据进行分布式存储的数据库,并且需要可靠和廉价,例如hdfs(Hadoop Distributed File System),如果想要实时计算用户兴趣,就需要可快速存取的数据库比如redis,所以购买服务器也是微博、今日头条等公司很大的开支。

    当然用户的兴趣不是一成不变的,因此用户兴趣需要随时间“衰减”,设置合理的衰减系数,对用户profile也很重要。

        除此之外,用户行为挖掘还有一个历史性难题——用户冷启动,这个话题我们需要单起一篇文章探讨。

    四、排序算法

        前三步有了内容和用户的数据,第四步可以用算法对两者做match了。个性化推荐本质是在做Top N ranking,通常包括“召回”和“排序”两个模块。举个例子,如果我有10万条信息,但是用户每天可能只能看10条,那么推荐哪10条给用户呢?我可以把这10万条从1-10万排个序,这样用户不管想看多少条,我只要从我排的10000个序里从前往后挑就可以了,这个过程就是“排序”;但这种排法在实时索引中计算量太大,可能会带来较高延时,那么我们先用某种相对简单的方法从这10万中选相对靠谱的1000,再对这1000排序,10万选10000的过程就是“召回”。

        算法方面门道很多,可以参看公众号之前推送的文章,详细介绍目前了推荐系统常用的、最有效的算法。此外,不管什么算法都需要使用内容推荐之后的“动态指标”(比如ctr),但没推荐之前我们如何获得这个动态指标呢?这里涉及到内容的冷启动问题,也会之后单独讨论。

    五、推荐搜索引擎

        怎么还有搜索引擎?是的,你没看错。实际上个性化推荐和搜索是非常相似的领域,两者都是信息筛选方式,也都是在做一种“相关性”rank,目标函数都是很接近的(点击率)。只不过搜索更注重用户当下搜索关键词的相关性,而推荐更注重内容与用户profile的相关性。用户每一次浏览都是一次实时请求,因此需要实时计算当下最符合用户兴趣的内容,这一步就是在线搜索引擎承担的。但由于性能要求,在线索引这步不宜做太耗时的计算,一般是排序算法计算了初始结果,在线引擎做算法调度和归一化排序,此外在线索引还会承担接收请求、输出数据、曝光点击排重等服务,通常还会承担业务和产品需求的二次排序(比如插入广告、打散同类型内容等)。

    六、ABtest系统

        ABtest系统虽不是个性化推荐系统的必需模块,但没有ABtest的推荐系统一定是个假的推荐系统!推荐系统的优化实际上就是一个y=f(x),y是目标函数,首先目标函数一定要十分明确,且是可量化的指标;f(x)是选用的算法、算法特征参数、算法调度等等组成的,其实业界通过有效的算法一直是那么几个,算法原理也就是那么几个,但如何结合自己的产品场景选择特征、参数,就成了个性化推荐精准度的关键因素。如果有ABtest系统,那么我们可以尝试带入多种参数、特征,ABtest实验得出最佳的y,这样推荐系统就可以不断迭代、优化。

        当然,算法的优化不是改改参数这么简单,做推荐的人需要要对数据十分敏感,并能将复杂问题抽象到可量化的指标上,再结合ABtest实验快速迭代。我总结的算法优化的过程是:“数据分析发现问题、合理假设、设计实验、实现、数据分析、得出结论或新的假设”,不断循环反复。其中改改参数只是“实现”那一步,也是最简单的一步,而往往多数人只重视“实现”,却对分析和假设的过程重视程度太低,这样优化的效果是没有保障的,还有些产品、技术人员会陷入盲目ABtest的误区,漫无目的的尝试,经常做ABtest发现AB组数据没有任何差别,甚至产生了ABtest效率低的想法。这些分析思路便拉开了算法工程师之间的差距。

    总结

        有了这6部分,一个完整的个性化推荐系统就已经搭建起来了,整个体系里涉及到算法工程师、自然语言处理/图像处理工程师、服务端工程师/架构师、数据挖掘工程师、数据分析师、产品经理,还需要大量标注审核人员、内容运营,此外还会涉及到前端、客户端技术等的支持。因此想做一个好的个性化推荐系统耗费还是比较大的,但有时候我们并不需要一个系统,可能一些简单的规则就可以实现相对个性化、提升用户使用效率(比如把用户最近浏览过的商品放在前面),因此提升效率的思维和方法才是最重要的,这也是我们需要长期探讨的内容。

     

    千人千面:打造个性化推荐系统

    推荐系统是如何推荐的

    1-利用用户行为数据

    利用用户行为数据进行个性化推荐,其实在个性化推荐系统就已经诞生了,最典型的就是各类排行榜。尽管这些排行榜只是对数据的简单统计,但仍受到了用户的青睐。

    举一个简单的例子,当前我们在电商网站中购物时,如果我们浏览了商品或者将商品加入了购物车,那么在下次打开时,这些商品或者替代品就可能出现在APP的首页。

    对用户行为进行分析最典型的算法就是基于用户的协同过滤算法和基于物品的协同过滤算法。

            2-利用用户标签数据

    标签应用一般分为两种:一种是让作者或者专家给物品打标签;另一种是让普通用户给物品打标签。

    打标签作为一种重要的用户行为,蕴含了很多用户兴趣信息,因此深入研究和利用用户打标签的行为可以很好地指导我们改进个性化推荐系统的推荐质量。同时,标签的表示形式非常简单,便于很多算法处理。

        3-利用上下文信息

     A-时间上下文

    时间是一种重要的上下文信息,对用户兴趣有着深入而广泛的影响。一般认为,时间信息对用户兴趣的影响表现在以下几个方面:

    1)用户兴趣是变化的

    2)物品也是有生命周期的

    3)季节效应

     

    B-地点上下文

    除了时间,地点作为一种重要的空间特征,也是一种重要的上下文信息。不同地区的用户兴趣有所不同,用户到了不同的地方,兴趣也会有所不同,逛街逛累了,希望寻找美食时,你可能会考虑几个因素,如距离、价位、口味、口碑等,而在这些因素中,最重要的因素可能就是距离,

     

        4-利用社交网络数据

    关于社交网络最让人耳熟能详的结论就是六度原理。六度原理讲的是社会中任意两个人都可以通过不超过6个人的路径相互认识,一般来说,熟人之间的推荐可以增加推荐的信任度,提高推荐效果,此外,社交网络可以解决冷启动问题当一个新用户通过社交账号登录网站时,我们可以从社交网站中获取用户的好友列表,然后给用户推荐好友在网站上喜欢的物品。

     

    3四种推荐方式

        1-热门推荐

    就是热门排行榜的概念。这种推荐方式不仅仅在IT系统,在平常的生活中也是处处存在的。这应该是效果最好的一种推荐方式,毕竟热门推荐的物品都是位于曝光量比较高的位置的。

        2-人工推荐

    即通过人工干预推荐内容。相比于依赖热门和算法来进行推荐。一些热点时事等就需要人工加入推荐列表。另一方面,热点新闻带来的推荐效果也是很高的。

        3-相关推荐

    相关推荐有点类似于关联规则的个性化推荐,就是在你阅读一个内容的时候,会提示你阅读与此相关的内容。例如,我在商城上浏览或者购买了苹果手机,下次打开商城时可能会给我推荐苹果周边相关产品。

        4-个性化推荐

    基于用户的历史行为做出的内容推荐。也是本文主要讲述的内容。

     

    4推荐算法

    推荐系统中最经典的算法是基于领域的算法,基于邻域的算法分为两大类,一类是基于用户的协同过滤算法(简称UserCF),另一类是基于物品的协同过滤算法(简称ItemCF)。这里简单说下这两类算法。

    • 基于用户的协同过滤算法

    基于用户的协同过滤(UserCF),通过用户对不同类型的商品的喜好度进行评分,然后根据每类商品的喜好度评分构建一个多维向量,使用余弦公式有来评测用户之间喜好度的相似性,基于此将其他相似用户非常喜欢而该用户还没有了解的产品进行推荐。这部分推荐本质上是给用户推荐其他相似用户喜欢的内容,一句话概括:基于用户的协同算法是向你推荐和你相似的用户也喜欢的商品。


    用户A喜欢物品A、物品C,用户C喜欢物品A、物品C、物品D,而用户C与用户A具有相似的用户属性,则系统向用户A推荐物品D。

     

    • 基于物品的协同过滤算法

     

    基于物品的协同过滤算法(ItemCF),也是目前应用最多的一种算法。基于用户的协同过滤算法虽然得到了应用,但有一些缺陷,一是随着用户数目越来越大,计算用户的相似性难度加大,二是基于用户的协同过滤算法很难对推荐结果做出解释。

    基于物品的协同过滤算法给用户推荐那些和他们之前喜欢的物品相似的物品。比如,该算法会因为你购买过《数据挖掘导论》而给你推荐《机器学习》。不过,基于物品的协同过滤算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。

    用户A喜欢物品A、物品C,用户C喜欢物品A,而物品A和物品C具有相似性,则此时向用户C推荐物品C。

    5如何开始做推荐系统

    • 推荐系统工作原理

    说起如何开始做推荐系统,先看一下推荐系统是如何跟其他系统交互的,见下图

    一般来说,每个产品都有前端的APP/H5/PC,前端系统负责给用户展示网页并和用户交互。网站会通过日志系统将用户在前端上的各种各样的行为记录到用户行为日志中。日志可能存储在内存缓存里,也可能存储在数据库中,也可能存储在文件系统中。而推荐系统通过分析用户的行为日志,给用户生成推荐列表,最终展示到网站的界面上。

    推荐系统联系用户和物品的方式主要有3种(如下图)

    我们将上图用户联系物品抽象成一种:用户通过特征联系物品,就可以设计出一种基于特征的推荐系统。当用户到来之后,推荐系统需要为用户生成特征,然后对每个特征找到和特征相关的物品,从而最终生成用户的推荐列表。因而,推荐系统的核心任务就被拆解成两部分,一个是如何为给定用户生成特征,另一个是如何根据特征找到物品。

     

    用户的特征可以总结为以下几类:

    A-人口统计学特征,如用户的年龄,性别等用户在注册的时候提交的信息;

    B-用户的行为特征,包括用户浏览过什么物品、收藏过什么物品、给什么物品打过什么样的分数等用户行为相关的特征。

    C-用户的话题特征,可以根据用户的历史行为利用话题模型将A话题和B话题聚合成不同的话题,并且计算出每个用户对什么话题感兴趣。

     

    如果要在一个系统中将以上特征都包括在内,系统将变得比较复杂,而且拓展性比较差,一旦以后新增新特征,改动难度大,因此,推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一类特征和一种任务,而推荐系统的任务只是将推荐引擎的结果按照一定权重或者优先级合并、排序然后返回。

     

    • 推荐系统设计

    推荐引擎使用一种或几种用户特征,按照一种推荐策略生成一种类型物品的推荐列表。系统架构如下所示:

    A-基础数据模块:

    该部分负责从数据库或者缓存中拿到用户行为数据,通过分析不同行为,生成当前用户的特征向量。不过如果是使用非行为特征,就不需要使用行为提取和分析模块了。该模块的输出是用户特征向量。

    一般来说,用户的特征包括两种,一种是用户的注册信息中可以提取出来的,主要包括用户的人口统计学特征。另一种特征主要是从用户的行为中计算出来的。

    一个特征向量由特征以及特征的权重组成,在利用用户行为计算特征向量时需要考虑以下因素:

        1.用户行为的种类

        2.用户行为产生的时间

        3.用户行为的次数

        4.物品的热门程度

     

    B-推荐模块

    负责将用户的特征向量通过特征-物品相关矩阵转化为初始推荐物品列表,在得到用户的特征向量后,我们可以根据离线的相关表得到初始的物品推荐列表。

     

    C-排名模块和过滤模块:

    负责对初始的推荐列表进行过滤、排名等处理,从而生成最终的推荐结果。

     

    6推荐系统参考

     

     

    1-淘宝的推荐系统

    这张图应该是淘宝很久之前的一张图,这张图不仅讲了推荐系统的架构流程,也讲了跟这个平台有关系的人,是怎么介入的,我觉得提供的信息很值得参考。

    2-京东的推荐系统

    3-优酷的推荐系统

     

     

    展开全文
  • 个性化推荐系统

    2021-01-20 12:05:30
    1、个性化推荐系统的推荐引擎:其实就是很简单的一个java web代码 响应达到毫秒级,为什么这么快? (1)服务器分布式:请求经过5台ALB(负载均衡服务器),然后分发到40台BLU(响应服务器)进行处理 (2)服务器取数...
  • 简要分析电信运营商数字化营销的挑战与诉求,吸取互联网思维优势,提出个性化推荐助力运营商数字化营销,并介绍运营商个性化推荐的发展历程。描述基于运营商产品、用户行为数据以及大数据平台计算能力,探索运营商...
  • 个性化推荐算法

    2018-06-05 19:37:29
    个人用易语言编写的类头条个性化推荐算法,供大家参考!
  • 文章目录个性化推荐算法实战第01章个性化推荐算法综述1、什么是推荐系统?2、个性化推荐算法在系统中所起到的作用3、如何衡量个性化推荐算法在产品中起到的作用4、推荐算法介绍5、评估指标:个性化召回1、什么是个性...

    个性化推荐算法实战第01章个性化推荐算法综述

    1、什么是推荐系统?

    在介绍推荐算法之前需要先介绍一下什么是信息过载。

    信息过载就是信息的数量远超于人手工可以遍历的数量。比如,当你没有目的性的去逛超市,你不可能把所有的商品都看一遍都有什么。同样,无论是去书店看书,还是在电影网站上搜索电影,这些物品的量级对于没有目的性、需求性的用户而言都是信息过载。

    那么什么是推荐系统呢?

    就是当用户的目的不明确、且该服务对于用户而言构成了信息过载;但该系统基于一定的策略规则,将物品进行了排序,并将前面的物品展示给了用户,这样的系统就可以称之为推荐系统。

    举例说明,在网站购物过程中,无论是天猫或者京东这样的平台,如果我们有明确的需求去搜索框里检索。如希望买啤酒,那么检索结果就是很多种类的啤酒;如果没有明确的需求,就会有猜你喜欢等等模块,这些模块就是推荐系统基于一定的规则策略计算出来的,这些规则策略就是个性化推荐算法。

    2、个性化推荐算法在系统中所起到的作用

    • 推荐系统在工业界落地较成功的三大产品:电商、信息流、地图基于位置服务的(LBS)的推荐

    推荐系统如今在工业界中落地较为成功的有三类产品,分别是电商、地图、基于LBS的推荐。电商中,用户需要面对数以十万计的新闻与短视频,地图中用户需要面对数以百万计的餐馆等等;但是用户首先看到的都不会是全部的内容,只会是几个或者几十个新闻、短视频、餐馆等等,决定从物品海洋里选择哪些展现给用户的就是个性化推荐算法。

    如果推荐的精确,也就是说该推荐系统推荐的恰好是用户想要的、或者是促进了用户的需求,那么就会推动用户在该电商上进行消费、停留、阅读等等。所以,在推荐系统中最为重要的就是个性化推荐算法。

    3、如何衡量个性化推荐算法在产品中起到的作用

    分为线上和线下两个部分。其中线下部分主要依托于模型本身的评估指标,比如个性化召回算法中模型的准确率等等;在线上,基于业务本身的核心指标,比如基于信息流产品中的平均阅读时长等等。

    • 信息流中的点击率 ctr 与停留时长 dwell time

    • 电商中的GMV(Gross Merchandise Volume,网站成交金额)

    4、推荐算法介绍

    包括:个性化召回算法、个性化排序算法
    在这里插入图片描述

    5、评估指标:

    包括:在线评估指标和离线评估指标

    在这里插入图片描述

    个性化召回

    1、什么是个性化召回?

    • 在item全集中选取一部分作为候选集。

      这里就存在一个问题,就是说为什么要选取一部分作为作为候选集,而不是全部?其原因在于:1.不同的用户不会喜欢所有类型的item;2.基于服务性能的考虑,如果选择了全部的item作为候选集,对于后续的排序就将耗费大量的时间,对于整体推荐的后端,服务响应时间将会是灾难性的。

    • 根据用户的属性行为上下文等信息从物品全集中选取其感兴趣的物品作为候选集。

    下面举例说明:

    如果某个推荐系统中,物品全集是如下左图中9个item,这里有两个用户A和B,他们分别对不同的item感兴趣。这里拿信息流产品举例,如果user A对体育类新闻感兴趣,user B对娱乐类新闻感兴趣,那就按照简单的类别召回,得到结果如下右图所示。

    在候选集{a,b,c,…,g,h,i}中为User A,User B选取一部分item作为候选集。

    在这里插入图片描述

    2、召回的重要作用

    1、召回决定了最终推荐结果的天花板

    为什么这么说呢?这里先看一下推荐系统的整体架构,工业中的个性化推荐系统中的策略部分的架构主要由一下三部分构成:召回、排序、以及最后的策略调整部分,其中召回部分包括各路个性化召回之后将所有的item merge进入rank部分,rank只是调整召回完item的展现顺序,rank完之后还有一些策略的调整,比如信息流场景中的控制相同作者的数目等等,所以可以看到个性化召回的候选集是多么的重要,因为最终展现给用户的就是从这个候选集中选出来的。那么就可能会有疑问,为什么不能将所有的item进行排序?这是为了保证后端响应时间。

    在这里插入图片描述

    与用户离的最近的是端,在移动互联网的时代主要的流量集中在了移动app也可以是网站前端。连接接前后端的是WEB API层。WEB层主要给APP端提供API服务,解析端上发来的请求,调用后端rpc服务。得到的结果投全到端上。web api层尽量不做策略业务逻辑,但是会做一些诸如log写实时信息队列,或写分布式存储这样的事情来方便后续的数据分析和模型训练。

    最后是后端的RPC服务。个性化推荐算法主要发挥作用的部分。

    RPC服务的三大策略部分。

    • 第一:个性化召回,基于用户的行为,通过算法模型来为用户精准推荐。或基于用户画像的标签推荐同类型的item。举个栗子,如果某个用户过往经常点击体育类的item,那么用户画像就给她标上体育的lable。那么有较新的体育类新闻,会优先推荐给改用户。召回决定了最终推荐结果的天花板,因为这一步决定了候选集。
    • 第二部分:排序部分。第一部分召回了用户感兴趣的物品集合后,我们需要决策 出展现给用户的顺序。好的顺序可以让用户在列表的开始找到自己的所需,完成转化。因为用户的每一次下拉都是有成本的,如何不能在最初的几屏里,显示用户的所需,用户就很可能流失掉。结合刚才召回所举的例子,给用户召回了体育类的item,不同的item可能会有不同的浏览人数,评论人数,发布时间,不同的字数,不同的时长,不同的发布时间等等,同样该用户也有体育类的细分的倾向性。
    • 第三部分:策略调整部分,基于业务场景的策略调整部分。由于召回和排序大多数是基于模型来做的,所以基于业务场景的策略调整部分可以增加一些规则来fit业务场景。比如在信息流场景中,我们不希望给用户一直连续推荐同一个作者的新闻,我们可以加一些打散的策略。

    2、个性化召回解析

    个性化召回算法分为哪几大类?

    • 基于用户行为的(也就是用户基于推荐系统推荐给他的item点击或者没点。)

      ​ CF(基于邻域的算法:user CF item CF)、矩阵分解、基于图的推荐(graph-based model)——基于图的随机游走算法:PersonalRank

    这一类的个性化召回算法总体来说就是推荐结果的可解释性较强,比较通俗易懂,但是缺少一些新颖性。

    • 基于user profile的

      经过用户的自然属性,也就是说经过用户的偏好统计,那么基于这个统计的类别去召回。推荐效果不错,但是可扩展性较差。也就是说一旦用户被标上了某一个类别或者某几个类别的标签之后,很难迁移到其余的一些标签。

      基于用户的偏好的统计的类别类召回。效果不错,可扩展性比较差。

    • 隐语义模型Latent Factorization Model(LFM)

      新颖性、创新性十足,但是可解释性不是那么强。

      3、工业界个性化召回架构
      在这里插入图片描述

    整体的召回架构可以分为两大类:

    第一大类是离线模型。根据用户行为基于离线的model file算出推荐结果,这些推荐结果可以是用户喜欢哪些item集合,也可以是item之间的相似度文件 ,计算出具有某种lable的item的排序。然后离线计算好的排序的文件写入KV存储。在用户访问服务的时候,Recall部分直接从KV中读取。因为我们直接存储的是item ID,我们读取到的item id的时候还需要去Detail Server中得到每个item id的详情,然后将详情拼接好传给rank。(在线的server recall部分直接调用这个结果,拿到ID之后访问detail server得到详情,再往rank部分传递)

    第二大类是深度学习模型,如果采用深度学习的一些model,这是需要将model file算出来的item embedding的向量也需要离线存入KV中,但是用户在访问我们的KV的时候,在线访问深度学习模型服务(recall server)的User embedding。同时去将user embedding层的向量和item embedding层的向量做最近邻计算,并得到召回。

    展开全文
  • 分析了IPTV视频领域个性化推荐需求,以“虚拟视频用户”为基础建立了IPTV视频用户画像,构建了“离线批处理数据分析+在线流式推荐引擎”架构的个性化推荐系统,实现了IPTV视频的个性化推荐。验证结果证明该方案是...
  • 个性化推荐系统,设计的巧妙就可以立竿见影地提升运营效率和用户转化率,尤其在内容分发、电商、社交等领域实践相当出彩(微博、各新闻门户、京东、探探等都取得了不错的成绩),个性化推荐已经成为一个产品的基础建设...

    个性化推荐系统,设计的巧妙就可以立竿见影地提升运营效率和用户转化率,尤其在内容分发、电商、社交等领域实践相当出彩(微博、各新闻门户、京东、探探等都取得了不错的成绩),个性化推荐已经成为一个产品的基础建设。

    本文从整体上介绍一个完整的推荐系统所需的模块(不深入到细枝末节),核心包括内容源、内容处理、用户挖掘、算法、推荐搜索引擎、ABtest系统。本文将逐一介绍推荐架构的各个模块。

    538f2ab59cd0c1653b7b6faf1756f024.png

    个性化推荐系统架构图

    一、大量级可推荐内容,即推荐的SKU

    个性化推荐的本质是提升信息筛选的效率,如果信息量级小个性化意义不大(比如一个视频网站每天只能产生10条新闻,再怎么个性化也只是在这10条内循环,对用户来说没有差别),个性化推荐的SKU至少是千级或万级,而且理论上来说,优质内容越多、类别分布越广泛,个性化推荐效果越好。

    这些内容可以是抓取的无版权内容、UGC、版权合作PGC等多种来源,由于来源不同,样式和质量可能千差万别,因此通常需要做内容抓取、清洗、转码等以保证样式统一,还可能需要用户管理体系、反垃圾等配合搭建内容生态。个性化推荐系统各家可能是相近的,推荐的内容不同就产生了不同的用户场景和产品壁垒。内容,本质是一种资源。

    二、内容的标准化处理

    第一步内容已备齐,接下来是把内容处理成机器和算法可理解的特征(比如分类、标签、产品库等)。具体怎么处理要看业务需求,需要的技术:如果是文章、新闻、微博等,就需要自然语言处理;如果是图片、视频,就会涉及到图像识别和处理;如果是歌曲、电影、商品等,机器直接理解内容来打标签难度比较大,最好能建立一套用户打标签的机制,或者通过人工填写或抓取的方式打标签。

    但不管什么内容,首先都要建立一套自己的标签体系,这是定义标准的过程,比如要给电影打标签,先定义一下有多少种电影,通常标签体我们系会是一个树状或网状结构;其次可能都要收集大量训练样本,比如要实现给图片打标签,首先需要人工标注上万张图片,供机器学习,标注的样本还要不断更新,这里面涉及到大量重复繁琐的人力劳动。所以圈内人经常开玩笑说,“人工智能”重点其实是“人工”。

    三、用户行为日志收集、传输、挖掘、存储

    推荐的基础是数据,前两步挖掘了内容数据,第三步就是挖掘用户行为生成用户画像。

    采集:通常采用前端埋点的方式,上报用户的点击、分享、收藏等等行为。日志采集是数据挖掘非常重要的环节,如果采集又缺失或错误(很可能的事),那么后续不管怎么做都没有效果,同时前端的改动也可能影响日志,如果不有效协同,会对后端有很大影响。

    传输:用于用户兴趣的收集往往越快越好,这样用户的某个操作就能快速反馈到下一步推荐中,所以就需要日志的稳定传输和更新,但由于成本考虑,用户profile不是都能实时更新的,有的可能延时1小时,有的可能1天1更、一周1更,甚至更久。

    挖掘:这一过程是将用户数据计算、挖掘处理成我们想要的特征(俗称“用户画像”,业内通常叫用户profile),用户挖掘通常要与算法结合,而不能凭空挖特征,没有算法应用再牛逼的用户画像也是没有价值的。

    存储:用户的兴趣在一段时间内不会变化太大,因此可以用用户长期留下的行为来积累用户画像,并需要把这些profile存起来。如果用户量很大,那么需要的存储资源也是海量的,那就需要一个能对大量数据进行分布式存储的数据库,并且需要可靠和廉价,例如hdfs(Hadoop Distributed File System),如果想要实时计算用户兴趣,就需要可快速存取的数据库比如redis,所以购买服务器也是微博、今日头条等公司很大的开支。

    当然用户的兴趣不是一成不变的,因此用户兴趣需要随时间“衰减”,设置合理的衰减系数,对用户profile也很重要。

    除此之外,用户行为挖掘还有一个历史性难题——用户冷启动,这个话题我们需要单起一篇文章探讨。

    四、排序算法

    前三步有了内容和用户的数据,第四步可以用算法对两者做match了。个性化推荐本质是在做Top N ranking,通常包括“召回”和“排序”两个模块。举个例子,如果我有10万条信息,但是用户每天可能只能看10条,那么推荐哪10条给用户呢?我可以把这10万条从1-10万排个序,这样用户不管想看多少条,我只要从我排的10000个序里从前往后挑就可以了,这个过程就是“排序”;但这种排法在实时索引中计算量太大,可能会带来较高延时,那么我们先用某种相对简单的方法从这10万中选相对靠谱的1000,再对这1000排序,10万选10000的过程就是“召回”。

    算法方面门道很多,可以参看公众号之前推送的文章,详细介绍目前了推荐系统常用的、最有效的算法。此外,不管什么算法都需要使用内容推荐之后的“动态指标”(比如ctr),但没推荐之前我们如何获得这个动态指标呢?这里涉及到内容的冷启动问题,也会之后单独讨论。

    五、推荐搜索引擎

    怎么还有搜索引擎?是的,你没看错。实际上个性化推荐和搜索是非常相似的领域,两者都是信息筛选方式,也都是在做一种“相关性”rank,目标函数都是很接近的(点击率)。只不过搜索更注重用户当下搜索关键词的相关性,而推荐更注重内容与用户profile的相关性。用户每一次浏览都是一次实时请求,因此需要实时计算当下最符合用户兴趣的内容,这一步就是在线搜索引擎承担的。但由于性能要求,在线索引这步不宜做太耗时的计算,一般是排序算法计算了初始结果,在线引擎做算法调度和归一化排序,此外在线索引还会承担接收请求、输出数据、曝光点击排重等服务,通常还会承担业务和产品需求的二次排序(比如插入广告、打散同类型内容等)。

    六、ABtest系统

    ABtest系统虽不是个性化推荐系统的必需模块,但没有ABtest的推荐系统一定是个假的推荐系统!推荐系统的优化实际上就是一个y=f(x),y是目标函数,首先目标函数一定要十分明确,且是可量化的指标;f(x)是选用的算法、算法特征参数、算法调度等等组成的,其实业界通过有效的算法一直是那么几个,算法原理也就是那么几个,但如何结合自己的产品场景选择特征、参数,就成了个性化推荐精准度的关键因素。如果有ABtest系统,那么我们可以尝试带入多种参数、特征,ABtest实验得出最佳的y,这样推荐系统就可以不断迭代、优化。

    当然,算法的优化不是改改参数这么简单,做推荐的人需要要对数据十分敏感,并能将复杂问题抽象到可量化的指标上,再结合ABtest实验快速迭代。我总结的算法优化的过程是:“数据分析发现问题、合理假设、设计实验、实现、数据分析、得出结论或新的假设”,不断循环反复。其中改改参数只是“实现”那一步,也是最简单的一步,而往往多数人只重视“实现”,却对分析和假设的过程重视程度太低,这样优化的效果是没有保障的,还有些产品、技术人员会陷入盲目ABtest的误区,漫无目的的尝试,经常做ABtest发现AB组数据没有任何差别,甚至产生了ABtest效率低的想法。这些分析思路便拉开了算法工程师之间的差距。

    总结

    有了这6部分,一个完整的个性化推荐系统就已经搭建起来了,整个体系里涉及到算法工程师、自然语言处理/图像处理工程师、服务端工程师/架构师、数据挖掘工程师、数据分析师、产品经理,还需要大量标注审核人员、内容运营,此外还会涉及到前端、客户端技术等的支持。因此想做一个好的个性化推荐系统耗费还是比较大的,但有时候我们并不需要一个系统,可能一些简单的规则就可以实现相对个性化、提升用户使用效率(比如把用户最近浏览过的商品放在前面),因此提升效率的思维和方法才是最重要的,这也是我们需要长期探讨的内容。

    展开全文
  • 基于评论主题的个性化推荐
  • 个性化推荐模型

    千次阅读 2018-11-09 05:16:44
    个性化推荐模型

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   
     

    个性化推荐模型

    分类: 大数据处理以及数据挖掘 77人阅读 评论(0) 收藏 举报

    集体智慧和协同过滤

    什么是集体智慧

    集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web 应用中利用集体智慧构建更加有趣的应用或者得到更好的用户体验。集体智慧是指在大量的人群的行为和数据中收集答案,帮助你对整个人群得到统计意义上的结论,这些结论是我们在单个个体上无法得到的,它往往是某种趋势或者人群中共性的部分。

    Wikipedia 和 Google 是两个典型的利用集体智慧的 Web 2.0 应用:

    • Wikipedia 是一个知识管理的百科全书,相对于传统的由领域专家编辑的百科全书,Wikipedia 允许最终用户贡献知识,随着参与人数的增多,Wikipedia 变成了涵盖各个领域的一本无比全面的知识库。也许有人会质疑它的权威性,但如果你从另一个侧面想这个问题,也许就可以迎刃而解。在发行一本书时,作者虽然是权威,但难免还有一些错误,然后通过一版一版的改版,书的内容越来越完善。而在 Wikipedia 上,这种改版和修正被变为每个人都可以做的事情,任何人发现错误或者不完善都可以贡献他们的想法,即便某些信息是错误的,但它一定也会尽快的被其他人纠正过来。从一个宏观的角度看,整个系统在按照一个良性循环的轨迹不断完善,这也正是集体智慧的魅力。
    • Google:目前最流行的搜索引擎,与 Wikipedia 不同,它没有要求用户显式的贡献,但仔细想想 Google 最核心的 PageRank 的思想,它利用了 Web 页面之间的关系,将多少其他页面链接到当前页面的数目作为衡量当前页面重要与否的标准;如果这不好理解,那么你可以把它想象成一个选举的过程,每个 Web 页面都是一个投票者同时也是一个被投票者,PageRank 通过一定数目的迭代得到一个相对稳定的评分。Google 其实利用了现在 Internet 上所有 Web 页面上链接的集体智慧,找到哪些页面是重要的。

    什么是协同过滤

    协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。

    协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。当然其中有一个核心的问题:

    • 如何确定一个用户是不是和你有相似的品位?
    • 如何将邻居们的喜好组织成一个排序的目录?

    协同过滤相对于集体智慧而言,它从一定程度上保留了个体的特征,就是你的品位偏好,所以它更多可以作为个性化推荐的算法思想。可以想象,这种推荐策略在 Web 2.0 的长尾中是很重要的,将大众流行的东西推荐给长尾中的人怎么可能得到好的效果,这也回到推荐系统的一个核心问题:了解你的用户,然后才能给出更好的推荐。

    深入协同过滤的核心

    前面作为背景知识,介绍了集体智慧和协同过滤的基本思想,这一节我们将深入分析协同过滤的原理,介绍基于协同过滤思想的多种推荐机制,优缺点和实用场景。

    首先,要实现协同过滤,需要一下几个步骤

    • 收集用户偏好
    • 找到相似的用户或物品
    • 计算推荐

    收集用户偏好

    要从用户的行为和偏好中发现规律,并基于此给予推荐,如何收集用户的偏好信息成为系统推荐效果最基础的决定因素。用户有很多方式向系统提供自己的偏好信息,而且不同的应用也可能大不相同,下面举例进行介绍:


    表 1 用户行为和用户偏好
    用户行为类型特征作用
    评分显式整数量化的偏好,可能的取值是 [0, n];n 一般取值为 5 或者是 10通过用户对物品的评分,可以精确的得到用户的偏好
    投票显式布尔量化的偏好,取值是 0 或 1通过用户对物品的投票,可以较精确的得到用户的偏好
    转发显式布尔量化的偏好,取值是 0 或 1通过用户对物品的投票,可以精确的得到用户的偏好。
    如果是站内,同时可以推理得到被转发人的偏好(不精确)
    保存书签显示布尔量化的偏好,取值是 0 或 1通过用户对物品的投票,可以精确的得到用户的偏好。
    标记标签
    (Tag)
    显示一些单词,需要对单词进行分析,得到偏好通过分析用户的标签,可以得到用户对项目的理解,同时可以分析出用户的情感:喜欢还是讨厌
    评论显示一段文字,需要进行文本分析,得到偏好通过分析用户的评论,可以得到用户的情感:喜欢还是讨厌
    点击流 
    ( 查看 )
    隐式一组用户的点击,用户对物品感兴趣,需要进行分析,得到偏好用户的点击一定程度上反映了用户的注意力,所以它也可以从一定程度上反映用户的喜好。
    页面停留时间隐式一组时间信息,噪音大,需要进行去噪,分析,得到偏好用户的页面停留时间一定程度上反映了用户的注意力和喜好,但噪音偏大,不好利用。
    购买隐式布尔量化的偏好,取值是 0 或 1用户的购买是很明确的说明这个项目它感兴趣。

    以上列举的用户行为都是比较通用的,推荐引擎设计人员可以根据自己应用的特点添加特殊的用户行为,并用他们表示用户对物品的喜好。

    在一般应用中,我们提取的用户行为一般都多于一种,关于如何组合这些不同的用户行为,基本上有以下两种方式:

    • 将不同的行为分组:一般可以分为“查看”和“购买”等等,然后基于不同的行为,计算不同的用户 / 物品相似度。类似于当当网或者 Amazon 给出的“购买了该图书的人还购买了 ...”,“查看了图书的人还查看了 ...”
    • 根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。一般来说,显式的用户反馈比隐式的权值大,但比较稀疏,毕竟进行显示反馈的用户是少数;同时相对于“查看”,“购买”行为反映用户喜好的程度更大,但这也因应用而异。

    收集了用户行为数据,我们还需要对数据进行一定的预处理,其中最核心的工作就是:减噪和归一化。

    • 减噪:用户行为数据是用户在使用应用过程中产生的,它可能存在大量的噪音和用户的误操作,我们可以通过经典的数据挖掘算法过滤掉行为数据中的噪音,这样可以是我们的分析更加精确。
    • 归一化:如前面讲到的,在计算用户对物品的喜好程度时,可能需要对不同的行为数据进行加权。但可以想象,不同行为的数据取值可能相差很大,比如,用户的查看数据必然比购买数据大的多,如何将各个行为的数据统一在一个相同的取值范围中,从而使得加权求和得到的总体喜好更加精确,就需要我们进行归一化处理。最简单的归一化处理,就是将各类数据除以此类中的最大值,以保证归一化后的数据取值在 [0,1] 范围中。

    进行的预处理后,根据不同应用的行为分析方法,可以选择分组或者加权处理,之后我们可以得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 [0,1] 或者 [-1, 1] 的浮点数值。

    找到相似的用户或物品

    当已经对用户行为进行分析得到用户喜好后,我们可以根据用户喜好计算相似用户和物品,然后基于相似用户或者物品进行推荐,这就是最典型的 CF 的两个分支:基于用户的 CF 和基于物品的 CF。这两种方法都需要计算相似度,下面我们先看看最基本的几种计算相似度的方法。

    相似度的计算

    关于相似度的计算,现有的几种基本方法都是基于向量(Vector)的,其实也就是计算两个向量的距离,距离越近相似度越大。在推荐的场景中,在用户 - 物品偏好的二维矩阵中,我们可以将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,或者将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度。下面我们详细介绍几种常用的相似度计算方法:

    • 欧几里德距离(Euclidean Distance)

    最初用于计算欧几里德空间中两个点的距离,假设 x,y 是 n 维空间的两个点,它们之间的欧几里德距离是:

    Figure xxx. Requires a heading

    可以看出,当 n=2 时,欧几里德距离就是平面上两个点的距离。

    当用欧几里德距离表示相似度,一般采用以下公式进行转换:距离越小,相似度越大

    Figure xxx. Requires a heading
    • 皮尔逊相关系数(Pearson Correlation Coefficient)

    皮尔逊相关系数一般用于计算两个定距变量间联系的紧密程度,它的取值在 [-1,+1] 之间。

    Figure xxx. Requires a heading

    sx, sy是 x 和 y 的样品标准偏差。

    • Cosine 相似度(Cosine Similarity)

    Cosine 相似度被广泛应用于计算文档数据的相似度:

    Figure xxx. Requires a heading
    • Tanimoto 系数(Tanimoto Coefficient)

    Tanimoto 系数也称为 Jaccard 系数,是 Cosine 相似度的扩展,也多用于计算文档数据的相似度:

    Figure xxx. Requires a heading

    相似邻居的计算

    介绍完相似度的计算方法,下面我们看看如何根据相似度找到用户 - 物品的邻居,常用的挑选邻居的原则可以分为两类:图 1 给出了二维平面空间上点集的示意图。

    • 固定数量的邻居:K-neighborhoods 或者 Fix-size neighborhoods

    不论邻居的“远近”,只取最近的 K 个,作为其邻居。如图 1 中的 A,假设要计算点 1 的 5- 邻居,那么根据点之间的距离,我们取最近的 5 个点,分别是点 2,点 3,点 4,点 7 和点 5。但很明显我们可以看出,这种方法对于孤立点的计算效果不好,因为要取固定个数的邻居,当它附近没有足够多比较相似的点,就被迫取一些不太相似的点作为邻居,这样就影响了邻居相似的程度,比如图 1 中,点 1 和点 5 其实并不是很相似。

    • 基于相似度门槛的邻居:Threshold-based neighborhoods

    与计算固定数量的邻居的原则不同,基于相似度门槛的邻居计算是对邻居的远近进行最大值的限制,落在以当前点为中心,距离为 K 的区域中的所有点都作为当前点的邻居,这种方法计算得到的邻居个数不确定,但相似度不会出现较大的误差。如图 1 中的 B,从点 1 出发,计算相似度在 K 内的邻居,得到点 2,点 3,点 4 和点 7,这种方法计算出的邻居的相似度程度比前一种优,尤其是对孤立点的处理。


    图 1.相似邻居计算示意图
    图 1 相似邻居计算示意图 

    计算推荐

    经过前期的计算已经得到了相邻用户和相邻物品,下面介绍如何基于这些信息为用户进行推荐。本系列的上一篇综述文章已经简要介绍过基于协同过滤的推荐算法可以分为基于用户的 CF 和基于物品的 CF,下面我们深入这两种方法的计算方法,使用场景和优缺点。

    基于用户的 CF(User CF)

    基于用户的 CF 的基本思想相当简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到 K 邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。图 2 给出了一个例子,对于用户 A,根据用户的历史偏好,这里只计算得到一个邻居 - 用户 C,然后将用户 C 喜欢的物品 D 推荐给用户 A。


    图 2.基于用户的 CF 的基本原理
    图 2 基于用户的 CF 的基本原理 

    基于物品的 CF(Item CF)

    基于物品的 CF 的原理和基于用户的 CF 类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。图 3 给出了一个例子,对于物品 A,根据所有用户的历史偏好,喜欢物品 A 的用户都喜欢物品 C,得出物品 A 和物品 C 比较相似,而用户 C 喜欢物品 A,那么可以推断出用户 C 可能也喜欢物品 C。


    图 3.基于物品的 CF 的基本原理
    图 3 基于物品的 CF 的基本原理 

    User CF vs. Item CF

    前面介绍了 User CF 和 Item CF 的基本原理,下面我们分几个不同的角度深入看看它们各自的优缺点和适用场景:

    • 计算复杂度

    Item CF 和 User CF 是基于协同过滤推荐的两个最基本的算法,User CF 是很早以前就提出来了,Item CF 是从 Amazon 的论文和专利发表之后(2001 年左右)开始流行,大家都觉得 Item CF 从性能和复杂度上比 User CF 更优,其中的一个主要原因就是对于一个在线网站,用户的数量往往大大超过物品的数量,同时物品的数据相对稳定,因此计算物品的相似度不但计算量较小,同时也不必频繁更新。但我们往往忽略了这种情况只适应于提供商品的电子商务网站,对于新闻,博客或者微内容的推荐系统,情况往往是相反的,物品的数量是海量的,同时也是更新频繁的,所以单从复杂度的角度,这两个算法在不同的系统中各有优势,推荐引擎的设计者需要根据自己应用的特点选择更加合适的算法。

    • 适用场景

    在非社交网络的网站中,内容内在的联系是很重要的推荐原则,它比基于相似用户的推荐原则更加有效。比如在购书网站上,当你看一本书的时候,推荐引擎会给你推荐相关的书籍,这个推荐的重要性远远超过了网站首页对该用户的综合推荐。可以看到,在这种情况下,Item CF 的推荐成为了引导用户浏览的重要手段。同时 Item CF 便于为推荐做出解释,在一个非社交网络的网站中,给某个用户推荐一本书,同时给出的解释是某某和你有相似兴趣的人也看了这本书,这很难让用户信服,因为用户可能根本不认识那个人;但如果解释说是因为这本书和你以前看的某本书相似,用户可能就觉得合理而采纳了此推荐。

    相反的,在现今很流行的社交网络站点中,User CF 是一个更不错的选择,User CF 加上社会网络信息,可以增加用户对推荐解释的信服程度。

    • 推荐多样性和精度

    研究推荐引擎的学者们在相同的数据集合上分别用 User CF 和 Item CF 计算推荐结果,发现推荐列表中,只有 50% 是一样的,还有 50% 完全不同。但是这两个算法确有相似的精度,所以可以说,这两个算法是很互补的。

    关于推荐的多样性,有两种度量方法:

    第一种度量方法是从单个用户的角度度量,就是说给定一个用户,查看系统给出的推荐列表是否多样,也就是要比较推荐列表中的物品之间两两的相似度,不难想到,对这种度量方法,Item CF 的多样性显然不如 User CF 的好,因为 Item CF 的推荐就是和以前看的东西最相似的。

    第二种度量方法是考虑系统的多样性,也被称为覆盖率 (Coverage),它是指一个推荐系统是否能够提供给所有用户丰富的选择。在这种指标下,Item CF 的多样性要远远好于 User CF, 因为 User CF 总是倾向于推荐热门的,从另一个侧面看,也就是说,Item CF 的推荐有很好的新颖性,很擅长推荐长尾里的物品。所以,尽管大多数情况,Item CF 的精度略小于 User CF, 但如果考虑多样性,Item CF 却比 User CF 好很多。

    如果你对推荐的多样性还心存疑惑,那么下面我们再举个实例看看 User CF 和 Item CF 的多样性到底有什么差别。首先,假设每个用户兴趣爱好都是广泛的,喜欢好几个领域的东西,不过每个用户肯定也有一个主要的领域,对这个领域会比其他领域更加关心。给定一个用户,假设他喜欢 3 个领域 A,B,C,A 是他喜欢的主要领域,这个时候我们来看 User CF 和 Item CF 倾向于做出什么推荐:如果用 User CF, 它会将 A,B,C 三个领域中比较热门的东西推荐给用户;而如果用 ItemCF,它会基本上只推荐 A 领域的东西给用户。所以我们看到因为 User CF 只推荐热门的,所以它在推荐长尾里项目方面的能力不足;而 Item CF 只推荐 A 领域给用户,这样他有限的推荐列表中就可能包含了一定数量的不热门的长尾物品,同时 Item CF 的推荐对这个用户而言,显然多样性不足。但是对整个系统而言,因为不同的用户的主要兴趣点不同,所以系统的覆盖率会比较好。

    从上面的分析,可以很清晰的看到,这两种推荐都有其合理性,但都不是最好的选择,因此他们的精度也会有损失。其实对这类系统的最好选择是,如果系统给这个用户推荐 30 个物品,既不是每个领域挑选 10 个最热门的给他,也不是推荐 30 个 A 领域的给他,而是比如推荐 15 个 A 领域的给他,剩下的 15 个从 B,C 中选择。所以结合 User CF 和 Item CF 是最优的选择,结合的基本原则就是当采用 Item CF 导致系统对个人推荐的多样性不足时,我们通过加入 User CF 增加个人推荐的多样性,从而提高精度,而当因为采用 User CF 而使系统的整体多样性不足时,我们可以通过加入 Item CF 增加整体的多样性,同样同样可以提高推荐的精度。

    • 用户对推荐算法的适应度

    前面我们大部分都是从推荐引擎的角度考虑哪个算法更优,但其实我们更多的应该考虑作为推荐引擎的最终使用者 -- 应用用户对推荐算法的适应度。

    对于 User CF,推荐的原则是假设用户会喜欢那些和他有相同喜好的用户喜欢的东西,但如果一个用户没有相同喜好的朋友,那 User CF 的算法的效果就会很差,所以一个用户对的 CF 算法的适应度是和他有多少共同喜好用户成正比的。

    Item CF 算法也有一个基本假设,就是用户会喜欢和他以前喜欢的东西相似的东西,那么我们可以计算一个用户喜欢的物品的自相似度。一个用户喜欢物品的自相似度大,就说明他喜欢的东西都是比较相似的,也就是说他比较符合 Item CF 方法的基本假设,那么他对 Item CF 的适应度自然比较好;反之,如果自相似度小,就说明这个用户的喜好习惯并不满足 Item CF 方法的基本假设,那么对于这种用户,用 Item CF 方法做出好的推荐的可能性非常低。

    通过以上的介绍,相信大家已经对协同过滤推荐的各种方法,原则,特点和适用场景有深入的了解,下面我们就进入实战阶段,重点介绍如何基于 Apache Mahout 实现协同过滤推荐算法。

    基于 Apache Mahout 实现高效的协同过滤推荐

    Apache Mahout 是 Apache Software Foundation (ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序,并且,在 Mahout 的最近版本中还加入了对 Apache Hadoop 的支持,使这些算法可以更高效的运行在云计算环境中。

    关于 Apache Mahout 的安装和配置请参考《基于 Apache Mahout 构建社会化推荐引擎》,它是笔者 09 年发表的一篇关于基于 Mahout 实现推荐引擎的 developerWorks 文章,其中详细介绍了 Mahout 的安装步骤,并给出一个简单的电影推荐引擎的例子。

    Apache Mahout 中提供的一个协同过滤算法的高效实现,它是一个基于 Java 实现的可扩展的,高效的推荐引擎。图 4 给出了 Apache Mahout 中协同过滤推荐实现的组件图,下面我们逐步深入介绍各个部分。


    图 4.组件图
    图 4 组件图 

    数据表示:Data Model

    Preference

    基于协同过滤的推荐引擎的输入是用户的历史偏好信息,在 Mahout 里它被建模为 Preference(接口),一个 Preference 就是一个简单的三元组 < 用户 ID, 物品 ID, 用户偏好 >,它的实现类是 GenericPreference,可以通过以下语句创建一个 GenericPreference。

    GenericPreference preference = new GenericPreference(123, 456, 3.0f);

    这其中, 123 是用户 ID,long 型;456 是物品 ID,long 型;3.0f 是用户偏好,float 型。从这个例子我们可以看出,单单一个 GenericPreference 的数据就占用 20 bytes,所以你会发现如果只简单实用数组 Array 加载用户偏好数据,必然占用大量的内存,Mahout 在这方面做了一些优化,它创建了 PreferenceArray(接口)保存一组用户偏好数据,为了优化性能,Mahout 给出了两个实现类,GenericUserPreferenceArray 和 GenericItemPreferenceArray,分别按照用户和物品本身对用户偏好进行组装,这样就可以压缩用户 ID 或者物品 ID 的空间。下面清单 1 的代码以 GenericUserPreferenceArray 为例,展示了如何创建和使用一个 PreferenceArray。


    清单 1. 创建和使用 PreferenceArray
          PreferenceArray userPref = new GenericUserPreferenceArray(2); //size = 2  userPref.setUserID(0, 1L);  userPref.setItemID(0, 101L);  //<1L, 101L, 2.0f>  userPref.setValue(0, 2.0f);  userPref.setItemID(1, 102L);  //<1L, 102L, 4.0f>  userPref.setValue(1, 4.0f);  Preference pref = userPref.get(1);   //<1L, 102L, 4.0f> 

    为了提高性能 Mahout 还构建了自己的 HashMap 和 Set:FastByIDMap 和 FastIDSet,有兴趣的朋友可以参考 Mahout 官方说明。

    DataModel

    Mahout 的推荐引擎实际接受的输入是 DataModel,它是对用户偏好数据的压缩表示,通过创建内存版 DataModel 的语句我们可以看出:

    DataModel model = new GenericDataModel(FastByIDMap<PreferenceArray> map);

    他保存在一个按照用户 ID 或者物品 ID 进行散列的 PreferenceArray,而 PreferenceArray 中对应保存着这个用户 ID 或者物品 ID 的所有用户偏好信息。

    DataModel 是用户喜好信息的抽象接口,它的具体实现支持从任意类型的数据源抽取用户喜好信息,具体实现包括内存版的 GenericDataModel,支持文件读取的 FileDataModel 和支持数据库读取的 JDBCDataModel,下面我们看看如何创建各种 DataModel。


    清单 2. 创建各种 DataModel
          //In-memory DataModel - GenericDataModel  FastByIDMap<PreferenceArray> preferences = new FastByIDMap<PreferenceArray>();  PreferenceArray prefsForUser1 = new GenericUserPreferenceArray(10);   prefsForUser1.setUserID(0, 1L);  prefsForUser1.setItemID(0, 101L);  prefsForUser1.setValue(0, 3.0f);   prefsForUser1.setItemID(1, 102L);  prefsForUser1.setValue(1, 4.5f); … (8 more)  preferences.put(1L, prefsForUser1);   //use userID as the key … (more users)  DataModel model = new GenericDataModel(preferences);  //File-based DataModel - FileDataModel  DataModel dataModel = new FileDataModel(new File("preferences.csv");  //Database-based DataModel - MySQLJDBCDataModel  MysqlDataSource dataSource = new MysqlDataSource();  dataSource.setServerName("my_user");  dataSource.setUser("my_password");  dataSource.setPassword("my_database_host");  JDBCDataModel dataModel = new MySQLJDBCDataModel(dataSource, "my_prefs_table",  "my_user_column", "my_item_column", "my_pref_value_column"); 

    支持文件读取的 FileDataModel,Mahout 没有对文件的格式做过多的要求,只要文件的内容满足以下格式:

    • 每一行包括用户 ID, 物品 ID, 用户偏好
    • 逗号隔开或者 Tab 隔开
    • *.zip 和 *.gz 文件会自动解压缩(Mahout 建议在数据量过大时采用压缩的数据存储)

    支持数据库读取的 JDBCDataModel,Mahout 提供一个默认的 MySQL 的支持,它对用户偏好数据的存放有以下简单的要求:

    • 用户 ID 列需要是 BIGINT 而且非空
    • 物品 ID 列需要是 BIGINT 而且非空
    • 用户偏好列需要是 FLOAT

    建议在用户 ID 和物品 ID 上建索引。

    实现推荐:Recommender

    介绍完数据表示模型,下面介绍 Mahout 提供的协同过滤的推荐策略,这里我们选择其中最经典的三种,User CF, Item CF 和 Slope One。

    User CF

    前面已经详细介绍了 User CF 的原理,这里我们着重看怎么基于 Mahout 实现 User CF 的推荐策略,我们还是从一个例子入手:


    清单 3. 基于 Mahout 实现 User CF
          DataModel model = new FileDataModel(new File("preferences.dat"));  UserSimilarity similarity = new PearsonCorrelationSimilarity(model);  UserNeighborhood neighborhood = new NearestNUserNeighborhood(100, similarity, model);  Recommender recommender = new GenericUserBasedRecommender(model,  neighborhood, similarity); 

    1. 从文件建立 DataModel,我们采用前面介绍的 FileDataModel,这里假设用户的喜好信息存放在 preferences.dat 文件中。
    2. 基于用户偏好数据计算用户的相似度,清单中采用的是 PearsonCorrelationSimilarity,前面章节曾详细介绍了各种计算相似度的方法,Mahout 中提供了基本的相似度的计算,它们都 UserSimilarity 这个接口,实现用户相似度的计算,包括下面这些常用的:
    • PearsonCorrelationSimilarity:基于皮尔逊相关系数计算相似度
    • EuclideanDistanceSimilarity:基于欧几里德距离计算相似度
    • TanimotoCoefficientSimilarity:基于 Tanimoto 系数计算相似度
    • UncerteredCosineSimilarity:计算 Cosine 相似度

    ItemSimilarity 也是类似的:

    1. 根据建立的相似度计算方法,找到邻居用户。这里找邻居用户的方法根据前面我们介绍的,也包括两种:“固定数量的邻居”和“相似度门槛邻居”计算方法,Mahout 提供对应的实现:
      • NearestNUserNeighborhood:对每个用户取固定数量 N 的最近邻居
      • ThresholdUserNeighborhood:对每个用户基于一定的限制,取落在相似度门限内的所有用户为邻居。
    2. 基于 DataModel,UserNeighborhood 和 UserSimilarity 构建 GenericUserBasedRecommender,实现 User CF 推荐策略。

    Item CF

    了解了 User CF,Mahout Item CF 的实现与 User CF 类似,是基于 ItemSimilarity,下面我们看实现的代码例子,它比 User CF 更简单,因为 Item CF 中并不需要引入邻居的概念:


    清单 4. 基于 Mahout 实现 Item CF
          DataModel model = new FileDataModel(new File("preferences.dat"));  ItemSimilarity similarity = new PearsonCorrelationSimilarity(model);  Recommender recommender = new GenericItemBasedRecommender(model, similarity); 

    Slope One

    如前面介绍的,User CF 和 Item CF 是最常用最容易理解的两种 CF 的推荐策略,但在大数据量时,它们的计算量会很大,从而导致推荐效率较差。因此 Mahout 还提供了一种更加轻量级的 CF 推荐策略:Slope One。

    Slope One 是有 Daniel Lemire 和 Anna Maclachlan 在 2005 年提出的一种对基于评分的协同过滤推荐引擎的改进方法,下面简单介绍一下它的基本思想。

    图 5 给出了例子,假设系统对于物品 A,物品 B 和物品 C 的平均评分分别是 3,4 和 4。基于 Slope One 的方法会得到以下规律:

    • 用户对物品 B 的评分 = 用户对物品 A 的评分 + 1
    • 用户对物品 B 的评分 = 用户对物品 C 的评分

    基于以上的规律,我们可以对用户 A 和用户 B 的打分进行预测:

    • 对用户 A,他给物品 A 打分 4,那么我们可以推测他对物品 B 的评分是 5,对物品 C 的打分也是 5。
    • 对用户 B,他给物品 A 打分 2,给物品 C 打分 4,根据第一条规律,我们可以推断他对物品 B 的评分是 3;而根据第二条规律,推断出评分是 4。当出现冲突时,我们可以对各种规则得到的推断进行就平均,所以给出的推断是 3.5。

    这就是 Slope One 推荐的基本原理,它将用户的评分之间的关系看作简单的线性关系:

    Y = mX + b;

    当 m = 1 时就是 Slope One,也就是我们刚刚展示的例子。


    图 5.Slope One 推荐策略示例
    图 5 Slope One 推荐策略示例 

    Slope One 的核心优势是在大规模的数据上,它依然能保证良好的计算速度和推荐效果。Mahout 提供了 Slope One 推荐方法的基本实现,实现代码很简单,参考清单 5.


    清单 5. 基于 Mahout 实现 Slope One
          //In-Memory Recommender  DiffStorage diffStorage = new MemoryDiffStorage(model, Weighting.UNWEIGHTED, false,  Long.MAX_VALUE));  Recommender recommender = new SlopeOneRecommender(model, Weighting.UNWEIGHTED,  Weighting.UNWEIGHTED, diffStorage);   //Database-based Recommender  AbstractJDBCDataModel model = new MySQLJDBCDataModel();  DiffStorage diffStorage = new MySQLJDBCDiffStorage(model);  Recommender recommender = new SlopeOneRecommender(model, Weighting.WEIGHTED,  Weighting.WEIGHTED, diffStorage); 

    1. 根据 Data Model 创建数据之间线性关系的模型 DiffStorage。

    2. 基于 Data Model 和 DiffStorage 创建 SlopeOneRecommender,实现 Slope One 推荐策略。

    总结

    Web2.0 的一个核心思想就是“集体智慧”,基于协同过滤的推荐策略的基本思想就是基于大众行为,为每个用户提供个性化的推荐,从而使用户能更快速更准确的发现所需要的信息。从应用角度分析,现今比较成功的推荐引擎,比如 Amazon,豆瓣,当当等都采用了协同过滤的方式,它不需要对物品或者用户进行严格的建模,而且不要求物品的描述是机器可理解的,是中领域无关的推荐方法,同时这个方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好。基于协同过滤的推荐策略也有不同的分支,它们有不同的实用场景和推荐效果,用户可以根据自己应用的实际情况选择合适的方法,异或组合不同的方法得到更好的推荐效果。

    除此之外,本文还介绍了如何基于 Apache Mahout 高效实现协同过滤推荐算法,Apache Mahout 关注海量数据上的机器学习经典算法的高效实现,其中对基于协同过滤的推荐方法也提供了很好的支持,基于 Mahout 你可以轻松的体验高效推荐的神奇。

    作为深入推荐引擎相关算法的第一篇文章,本文深入介绍了协同过滤算法,并举例介绍了如何基于 Apache Mahout 高效实现协同过滤推荐算法,Apache Mahout 作为海量数据上的机器学习经典算法的高效实现,其中对基于协同过滤的推荐方法也提供了很好的支持,基于 Mahout 你可以轻松的体验高效推荐的神奇。但我们也发现了在海量数据上高效的运行协同过滤算法以及其他推荐策略这样高复杂的算法还是有很大的挑战的。在面对这个问题的过程中,大家提出了很多减少计算量的方法,而聚类无疑是其中最优的选择。所以本系列的下一篇文章将详细介绍各类聚类算法,它们的原理,优缺点和实用场景,并给出基于 Apache Mahout 的聚类算法的高效实现,并分析在推荐引擎的实现中,如何通过引入聚类来解决大数据量造成的海量计算,从而提供高效的推荐。

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • BAT大牛亲授--个性化推荐算法实战:基于二分图的个性化推荐召回算法personal rank(MovieLens数据集电影推荐),所有代码和数据集
  • 51个性化推荐体系.pptx

    2019-07-17 15:51:47
    51个性化推荐体系
  • 达观数据个性化推荐系统实践

    千人学习 2018-12-28 12:51:28
    在当今人工智能浪潮之下,个性化推荐技术更是风靡业界,在金融、传媒、短视频、电商、教育等诸多领域大放异彩,影响人们生活的方方面面。不仅方便了人们获取各种各样的信息,还给企业带来了收益的大幅提升。本次分享...
  • 个性化推荐技术

    2021-01-22 10:27:05
    在这个时代背景下,信息爆炸与长尾问题普遍发生,而解决方案之一是个性化推荐技术,那具体什么是个性化推荐,怎么去实现这一过程呢?这一章读者朋友需要做到的是读完以后,对个性化推荐技术有一个全局宏观的认识,...
  • 个性化推荐系统概述

    万次阅读 2018-11-07 10:47:47
    一、 个性化推荐系统简介 个性化推荐系统是建立在海量数据挖掘基础上的一种智能平台,可以模拟商店销售人员向顾客提供商品信息和建议,为顾客购物提供完全个性化的决策支持和信息服务,它的目标是既满足用户意识到...
  • 文章目录第03章基于图的个性化推荐召回算法Personal Rank1、个性化召回算法Personal Rank背景与物理意义2、Personal Rank算法example解析3、Personal Rank算法公式解析 第03章基于图的个性化推荐召回算法Personal ...
  • 基于热双向传递的个性化推荐

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,991
精华内容 2,796
关键字:

个性化推荐