雷哥的博客


  • 首页

  • 分类

  • 归档

  • 标签

总结篇-推荐系统难点

发表于 2019-03-31 | 分类于 推荐系统 , 推荐系统总结篇

达观数据个性化推荐系统实践
刘志强 奇虎360:机器学习与推荐系统实践

整体过程

  • 用户
    推荐系统本质是将人和物品关联起来,而系统对用户的理解也是由浅入深,初来时彼此陌生,需要有一个冷启的过程,逐渐把握用户的喜好。随着用户行为的丰富,系统对用户兴趣的描述也越来越客观,此时便可能得到更准确的用户偏好,进而完成更精准的推荐。然而物极必反,用户对于一个平台的认知与期望也是一样。随着用户的深度使用,势必对推荐系统生出更高的期待和要求。这时,便可能需要系统在满足深度用户某种刁钻的口味,与大众用户的普遍期待中做出某种取舍。用户也就不可避免的出现了流失。因为系统的能力终归有限,而用户的期望无限。
  • 资源
    此外资源也会经历类似的过程,新进场的资源虽然天然有某种内容的属性,但其被用户接受,仍然不可避免需要经历一个过程。过程中有些资源会被淘汰,有些则会成长为热门。在不断地引入新资源的过程中,再热门的资源都会有过期的一天。就好比,再会保养的人,也逃不过岁月的流逝。甚至,为了保持系统的实时性,热门的资源需要主动地让出在系统中的曝光份额

如何精准把握用户兴趣

用户兴趣不仅存在多样性,而且会随着时间的变化而变化

  • 长短期兴趣画像让模型效果稳定提升
  • 通过引入时间因子,基于不同的时间周期做用户画像
    • 比如基于最近半年的或更久的数据做长期用户画像,基于近一个月或三个月做短期用户画像,同时还会有实时用户画像,基于这三种类型用户画像之间的差异化,能够感知用户的兴趣变更
  • 基于用户画像后做一个过滤机制,把推荐过或者质量不佳先过滤。这样做排序时会引入一个时间因子做一个衰减,另外也会做机器学习的预测,可以方便地调整推荐顺序。
  • 接下来做优化,随着时间的推移,对于用户的刻画会更清晰准确

冷启动

  • 主要分为:用户冷启动,物品冷启动,系统冷启动
  • 用户冷启动
    • 和其他领域做映射
      从其他维度或领域的数据来判断新用户对现存物品的喜好。具体解释就是某个用户可能在已有领域current domain和另一领域out domain都有相关行为,可对两个不同领域的行为建立一个mapping,当新用户来的时候,如果在另一领域有相关行为,可用该mapping作出prediction,得到新用户对item的喜好程度
    • 先给用户推荐热门内容,等行为多后再进行个性化推荐
    • 利用注册信息
      根据用户注册账号时填写的性别、年龄、地址等信息,推荐相关性高的内容或者商品
      • 比如说一个人的性别是男、年龄是40岁、职业是老师,那么就会有对应“性别是男、年龄是40岁、职业是老师”的三个相关推荐列表,再根据筛选,确定最终的推荐列表
    • 授权设备信息
      通过授权,可以获得手机中的位置,通讯录,按照app等,然后通过这些信息来做进一步聚合推荐
      • 指的是允许app访问手机的一些信息,比如定位、安装信息、通讯录等,这样就可以推荐通讯录好友喜欢过的内容或商品
      • 或者说你手机里安装过懂球帝,就可以给你推荐足球相关的内容
      • 假如你安装了美丽说、蘑菇街、大姨妈等app,就可以判定你是女性了,更进一步还可以判定你是备孕还是少女
    • 首次登录选标签
      要求用户进来时选择一个或者多个标签,然后收集整理用户感兴趣的范围,去推荐相关性高的内容和商品
    • 绑定社交账号
      利用用户的社交网络账号登录(需要用户授权),导入用户在社交网站上的好友信息,然后给用户推荐其好友喜欢的内容或物品
  • 物品冷启动
    • 对物品分类,可以使用Item-CF方法,推荐给相关用户
    • 设置一定概率的曝光机会,然后根据收益进行调整
  • 系统冷启动
    • 采用专家标注
      对物品进行人工的标记,比如电影可以标记心情、剧情类型、类别、故事时间、地点、观众类型、获奖情况、风格、主旨、画面技术等等。在专家标记了一定样本之后使用自然语言理解和机器学习技术,通过分析用户对电影的评价和电影自身的内容属性对新电影进行自我标记。同时还设置了用户反馈界面,通过用户反馈进行改善

回声室效应

为了满足用户的兴趣。第二部分是重复,如果依赖于内容标签或者内容分类,对于标签或者类目来不断地召回新的推荐结果,这会导致推荐结果没有新鲜感

性能方面

  • 采用离线,近实时,实时三层架构解决,可以参考推荐系统架构篇

其他问题

  • 精准兴趣
    在推荐系统中,我们往往使用用户的点击行为来估计用户的喜好类型。然而用户的每次点击未必都是经过其深思熟虑之后的结果,因此行为本身会存在一个置信度的问题。而这个置信度是未知的
  • 新资源找不到合适用户
    大量优质资源找不到需要的用户,成为层面资源,而低俗的内容大量曝光
  • EE问题

总结篇-推荐系统架构

发表于 2019-03-30 | 分类于 推荐系统 , 推荐系统总结篇

达观数据个性化推荐系统实践
张俊林
GP应用推荐举例

推荐系统应用方向

个性化推荐,相关推荐,热门推荐。。。

推荐系统设计目标

  • 功能:功能上要全面些,包括相关推荐、个性化推荐、热门推荐等还包括混合推荐
  • 效果:效果在不同领域有差异,如在直播领域关注送礼物、打赏收入等,而资讯行业较关注人均点击数量、用户停留时长等;
  • 性能:性能在不同领域也是有差异的,但是必须是快速、稳定的,不允许出现推荐位置的留白,也就是你的推荐系统可以效果不好但是不能空白,在高并发时要求性能稳定快速。其实在实际业务场景中这三者是相互影响,权衡利弊的

系统层次图

  • 基础层,对于服务多家客户来说首先是基础运算平台,全部基于Hadoop和Spark。基础存储平台是基于HBase、MySQL、Redis、HDFS等,传输平台是DgIO,主要基于消息队列的方式。
  • 在组件层有各种各样的组件和算法库,实现多个产品服务都可以复用。对于这些组件也有相应的研发团队进行升级和维护,如文本分类、标签、语义理解都是由文本组处理,对于搜索引擎性能、相关性等的优化升级是由搜索组完成,组件都是共同使用共同维护。
    • 组件层有一系列小的组件,基于组件可以做一些模型层的事情,比如推荐相关的做用户画像,因为对于不同行业的用户画像有不同的标准,我们拿到的就是用户id和行为数据,刻画用户画像主要基于向量方式。物品画像主要解决流向,就是物品来了如何及时曝光,这时就需要依据其初始信息进行预估打分,对于已经曝光的物品会记录一段时间的收益情况(点击率、收藏数据等)形成物品画像做一些过滤信息。趋势分析主要是物品曝光后接下来是怎么样的,用户关系主要是基于用户行为分析的,主要做社交关系的推荐。物品关系主要是做算法方面的处理。
  • 算法层主要是包括基于内容的推荐、矩阵分解、协同过滤、深度学习等。基于内容推荐如标签召回、热门召回、内容召回,深度学习各行业都在使用。
  • 组合层,对各种单一推荐算法的召回结果,使用机器学习的方式进行融合,以达到推荐效果的最优化。
  • 应用层,目前提供三种推荐,同时还有推荐理由,就是可解释性

整体架构

  • 在线部分
    • 召回:通过召回环节,将给用户推荐的物品降到千以下规模
    • 粗排:如果召回阶段返回的物品还是太多,可以加入粗排阶段,这个阶段是可选的,粗排可以通过一些简单排序模型进一步减少往后续环节传递的物品
    • 精排:使用复杂的模型来对少量物品精准排序
    • 其他逻辑:即使精排推荐结果出来了,一般并不会直接展示给用户,可能还要上一些业务策略,比如去已读,推荐多样化,加入广告等各种业务策略。之后形成最终推荐结果,将结果展示给用户
  • 近线部分
    主要目的是实时收集用户行为反馈,并选择训练实例,实时抽取拼接特征,并近乎实时地更新在线推荐模型。这样做的好处是用户的最新兴趣能够近乎实时地体现到推荐结果里
  • 离线部分
    通过对线上用户点击日志的存储和清理,整理离线训练数据,并周期性地更新推荐模型。对于超大规模数据和机器学习模型来说,往往需要高效地分布式机器学习平台来对离线训练进行支持
  • GP应用推荐举例

在线部分

  • 召回阶段
    将物料从千万级别,降低到百级别

总结篇-推荐算法总结

发表于 2019-03-26 | 分类于 推荐系统 , 推荐系统总结篇

相关文章

  • 自己总结
    CTR模型演进
    xDeepFM模型
  • 网络文章
    算法粗略介绍:搜索与推荐中的深度学习匹配:推荐篇
    探索推荐引擎内部的秘密
    张俊林-推荐系统召回模型
    FM、FFM与DeepFM
    WDL论文笔记
    ESMM
    CTR模型演进

算法分类

  • 分类方法1

    • 传统
      • 协同过滤
      • 矩阵分解(MF)
      • 因式分解机(FM)
    • 基于embedding(深度学习兴起后)
      • word-embedding:skip-gram等
      • graph-embedding:DeepWalk,TransE等
    • 基于深度神经网络
      • Deep & Wide
  • 分类方法2

    • 线性
      • LR
      • 在排序模型方面很多基于LR模型,现在很多都是基于深度学习来做,不同模型都有不同的应用场景,并不是单一使用一种场景。LR模型利用人工特征工程,相对于深度学习的优点是可以感知的,是可以debug的
    • 非线性
      • FM,FFM,GBDT+LR,XGboost+LR
      • LR模型对于特征处理是线性的,利用Xgboost+LR或者GBDT+LR由线性向非线性转化,能够做到多特征组合,对推荐效果也有不同程度的提升
    • 神经网络
      • DeepFM,Wide&Deep
      • 目前还有利用Wide&Deep,可以从特征工程中解放出来,在特征选取方面不需要做很多工作,但是在调参方面工作量比较大

GBDT+LR

  • LR特征工程很难,那能否自动完成呢?模型级联提供了一种思路,典型的例子就是Facebook 2014年的论文中介绍的通过GBDT(Gradient Boost Decision Tree)模型解决LR模型的特征组合问题。思路很简单,特征工程分为两部分
    • 一部分特征用于训练一个GBDT模型,把GBDT模型每颗树的叶子节点编号作为新的特征,加入到原始特征集中
    • 再用LR模型训练最终的模型
  • GBDT模型能够学习高阶非线性特征组合,对应树的一条路径(用叶子节点来表示)
    • 通常把一些连续值特征、值空间不大的categorical特征都丢给GBDT模型
    • 空间很大的ID特征(比如商品ID)留在LR模型中训练,既能做高阶特征组合又能利用线性模型易于处理大规模稀疏数据的优势
  • 树模型缺点
    • 基于树的模型适合连续中低度稀疏数据,容易学到高阶组合
    • 但是树模型却不适合学习高度稀疏数据的特征组合
      • 一方面高度稀疏数据的特征维度一般很高,这时基于树的模型学习效率很低,甚至不可行;
      • 另一方面树模型也不能学习到训练数据中很少或没有出现的特征组合(比如训练数据完全没有特征x和特征y的训练数据出现)

协同过滤

探索推荐引擎内部的秘密

  • 基于协同过滤的推荐可以分为三个子类:基于用户的推荐(User-based Recommendation),基于项目的推荐(Item-based Recommendation)和基于模型的推荐(Model-based Recommendation)
  • 基于用户的协同过滤推荐
    • 基于用户的协同过滤推荐的基本原理是,根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,在一般的应用中是采用计算“K- 邻居”的算法;然后,基于这 K 个邻居的历史偏好信息,为当前用户进行推荐
  • 基于项目的协同过滤推荐
    • 基于项目的协同过滤推荐的基本原理也是类似的,只是说它使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户
  • 基于协同过滤的推荐机制是现今应用最为广泛的推荐机制,它有以下几个显著的优点:
    • 它不需要对物品或者用户进行严格的建模,而且不要求物品的描述是机器可理解的,所以这种方法也是领域无关的。
    • 这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好
  • 存在以下几个问题:
    • 方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。
    • 推荐的效果依赖于用户历史偏好数据的多少和准确性。
    • 在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。
    • 对于一些特殊品味的用户不能给予很好的推荐。
    • 由于以历史数据为基础,抓取和建模用户的偏好后,很难修改或者根据用户的使用演变,从而导致这个方法不够灵活。

MF

  • MF(Matrix Factorization,矩阵分解)模型是个在推荐系统领域里资格很深的老前辈协同过滤模型了。核心思想是通过两个低维小矩阵(一个代表用户embedding矩阵,一个代表物品embedding矩阵)的乘积计算,来模拟真实用户点击或评分产生的大的协同信息稀疏矩阵,本质上是编码了用户和物品协同信息的降维模型
  • 当训练完成,每个用户和物品得到对应的低维embedding表达后,如果要预测某个 $User_i 对 Item_j 的评分的时候,只要它们做个内积计算 〈User_i,Item_j 〉$ ,这个得分就是预测得分

SVD,MF,FISM,SVD++

  • CF本质就是解决矩阵填充问题
  • 矩阵填充一般是用SVD分解来解决
    • SVD就是在解决以下问题(Loss)
    • svd有以下缺点:
      • missing data(就是没打分的,占比99%)和observed data(观测到的、已打分的)有一样的权重
      • 没有加正则,容易过拟合
    • 注意和MF的区别,这边没没有使用embedding,user,item词嵌入的概念。而是用数学的方法求解的
  • MF
    • user和item分别用一个embedding表示,然后用户对item的偏好程度用这两个embedding的内积表示
    • 使用L2-loss(其它loss也可以)和正则:
  • FISM(Factored Item Similarity Model)
    • 用user作用过的item的embedding的和来表示user,item用另一套embedding下的一个embedding来表示,最后两者的内积表示user对该item的偏好
      • 这个模型也叫item-based的CF,因为把括号里的东西展开后,其实就是找用户作用过的item和item[j]的相似度
  • SVD++
    • 很简单,另外用一个user的embedding,和上述的FISM的方法,融合来表示user。这曾经是netflix比赛中连续三年效果最好的单模型

FM

张俊林-推荐系统召回模型

  • 从LR到SVM再到FM模型
    LR模型简单易懂,但不能捕获更高维的特征,比如特征组合这类特征,所以不能很好拟合较复杂的场景(欠拟合)

  • 加入特征组合(提升模型复杂度)

    • 虽然这个模型看上去貌似解决了二阶特征组合问题了,但是它有个潜在的问题:它对组合特征建模,泛化能力比较弱
    • 尤其是在大规模稀疏特征存在的场景下,这个毛病尤其突出,比如CTR预估和推荐排序
    • 这些场景的最大特点就是特征的大规模稀疏。所以上述模型并未在工业界广泛采用
    • 主要原因:由于数据稀疏,$x_i x_j$的权重参数$w_{i,j}$很多为0,导致不能学习
      • 在训练数据里两个特征并未同时在训练实例里见到过,意味着 $x_i and x_j$ 一起出现的次数为0,如果换做SVM的模式,是无法学会这个特征组合的权重的
  • FM模型
    对于因子分解机FM来说,利用特征的嵌入方式,最大的特点是对于稀疏的数据具有很好的学习能力。现实中稀疏的数据很多

    • 觉得可以看做是LR和MF的组合
    • 核心:这本质上是在对特征进行embedding化表征
    • 和SVM模型最大的不同,在于特征组合权重的计算方法。FM对于每个特征,学习一个大小为k的一维向量,于是,两个特征 $x_i 和 x_j 的特征组合的权重值,通过特征对应的向量 v_i 和 v_j 的内积 <v_i,v_j>$来表示。

    • 为什么模型泛华能力强,能够解决稀疏数据的问题

      • 在训练数据里两个特征并未同时在训练实例里见到过,意味着 $x_i and x_j$ 一起出现的次数为0,如果换做SVM的模式,是无法学会这个特征组合的权重的。
      • 但是因为FM是学习单个特征的embedding,并不依赖某个特定的特征组合是否出现过,所以只要特征 x_i 和其它任意特征组合出现过,那么就可以学习自己对应的embedding向量
        • 于是,尽管 $x_i and x_j$ 这个特征组合没有看到过,但是在预测的时候,如果看到这个新的特征组合,因为 $x_i 和 x_j$ 都能学会自己对应的embedding,所以可以通过内积算出这个新特征组合的权重。
        • 这是为何说FM模型泛化能力强的根本原因
    • 上式只是对数据的拟合函数,还要根据具体问题比如回归还是分类设以不同的Loss方法进行求解。以及数学求解的方法需要另参考其他资料

    • 算法的效率

      • 粗略的看
        从FM的原始数学公式看,因为在进行二阶(2-order)特征组合的时候,假设有n个不同的特征,那么二阶特征组合意味着任意两个特征都要进行交叉组合,所以可以直接推论得出:FM的时间复杂度是n的平方。但是如果故事仅仅讲到这里,FM模型是不太可能如此广泛地被工业界使用的。因为现实生活应用中的n往往是个非常巨大的特征数,如果FM是n平方的时间复杂度,那估计基本就没人带它玩了
      • 数学公式演示改进(细节也可以参考论文资料等)
        FM如今被广泛采用并成功替代LR模型的一个关键所在是:它可以通过数学公式改写,把表面貌似是 $O(kn^2 ) 的复杂度降低到 O(kn)$

MF到FM的转换理解

  • 本质上,MF模型是FM模型的特例,MF可以被认为是只有User ID 和Item ID这两个特征Fields的FM模型,MF将这两类特征通过矩阵分解,来达到将这两类特征embedding化表达的目的
  • 而FM则可以看作是MF模型的进一步拓展,除了User ID和Item ID这两类特征外,很多其它类型的特征,都可以进一步融入FM模型里,它将所有这些特征转化为embedding低维向量表达,并计算任意两个特征embedding的内积,就是特征组合的权重

FFM(Field-aware FM)

  • 核心思想

    • FM模型的某个特征,在和任意其它特征域的特征进行组合求权重的时候,共享了同一个embedding特征向量
    • FFM模型是做得更细腻一些,在做特征组合的时候使用的embedding不同的特征向量。
    • 这意味着,如果有F个特征域,那么每个特征由FM模型的一个k维特征embedding,拓展成了(F-1)个k维特征embedding
    • 这个就是Field-aware的深层含义吧
  • 算法效率问题

    • FM模型可以通过公式改写,把本来看着是n的平方的计算复杂度,降低到 $O(k*n)$
    • 而FFM无法做类似的改写,所以它的计算复杂度是 $O(k*n^2$ ) ,这明显在计算速度上也比FM模型慢得多
    • 所以,无论是急剧膨胀的参数量,还是变慢的计算速度,无论从哪个角度看,相对FM模型,FFM模型是略显笨重的。
    • 正因为FFM模型参数量太大,所以在训练FFM模型的时候,很容易过拟合,需要采取早停等防止过拟合的手段
  • 数学公式

    • 其中$f_i和f_j$分别代表第i个特征和第j个特征所属的field

WDL

  • Wide and Deep Learning
    简单来说,人脑就是一个不断记忆(memorization)并且归纳(generalization)的过程,而这篇论文的思想,就是将宽线性模型(Wide Model,用于记忆,下图左侧)和深度神经网络模型(Deep Model,用于归纳,下图右侧)结合,汲取各自优势形成了 Wide & Deep 模型用于推荐排序

  • Wide Model
    要理解的概念是 Memorization,主要是学习特征的共性或者说相关性,产生的推荐是和已经有用户行为的物品直接相关的物品

    • 通过线性模型 + 特征交叉。所带来的Memorization以及记忆能力非常有效和可解释。但是Generalization(泛化能力)需要更多的人工特征工程
    • 用的模型是 逻辑回归(logistic regression, LR),LR 的优点就是简单(simple)、容易规模化(scalable)、可解释性强(interpretable)。LR 的特征往往是二值且稀疏的(binary and sparse)
    • 总结一下,宽度模型的输入是用户安装应用(installation)和为用户展示(impression)的应用间的向量积(叉乘),模型通常训练 one-hot 编码后的二值特征
      • 缺点:这种操作不会归纳出训练集中未出现的特征对
  • Deep Model
    要理解的概念是 Generalization,可以理解为相关性的传递(transitivity),会学习新的特征组合,来提高推荐物品的多样性,或者说提供泛化能力(Generalization)

    我的理解就是要用DL能够学习各种未出现的特征组合能力,特征模型的泛化能力
    - DNN几乎不需要特征工程。通过对低纬度的dense embedding进行组合可以学习到更深层次的隐藏特征
    - 泛化往往是通过学习 low-dimensional dense embeddings 来探索过去从未或很少出现的新的特征组合来实现的
    - 缺点是有点over-generalize(过度泛化)
    - 当query-item矩阵是稀疏并且是high-rank的时候(比如user有特殊的爱好,或item比较小众),很难非常效率的学习出低维度的表示。这种情况下,大部分的query-item都没有什么关系。但是dense embedding会导致几乎所有的query-item预测值都是非0的,这就导致了推荐过度泛化,会推荐一些不那么相关的物品
    - 相反,linear model却可以通过cross-product transformation来记住这些exception rules,而且仅仅使用了非常少的参数
    - 所以WDL结合LR,这点和 LR 正好互补,因为 LR 只能记住很少的特征组合,能够帮助识别Deep Model中《所有 query-item pair 非零的预测》情况
  • 两者区别与互补

    • Memorization趋向于更加保守,推荐用户之前有过行为的items(只认识出现过的)
    • generalization更加趋向于提高推荐系统的多样性(diversity)
    • 所以WDL结合LR,这点和 LR 正好互补,因为 LR 只能记住很少的特征组合,能够帮助识别Deep Model中《所有 query-item pair 非零的预测》情况
  • GP推荐系统的整体架构

    • 由两个部分组成,检索系统(或者说候选生成系统)和排序系统(排序网络)。
    • 首先,用 检索(retrieval) 的方法对大数据集进行初步筛选,返回最匹配 query 的一部分物品列表,这里的检索通常会结合采用 机器学习模型(machine-learned models) 和 人工定义规则(human-defined rules) 两种方法。从大规模样本中召回最佳候选集之后
    • 再使用 排序系统 对每个物品进行算分、排序,分数 P(y|x)。WDL 就是用在排序系统中

DeepFM

  • FM模型可以用神经网络进行表示

    • 这里需要理解Sparse Feature层和Embeddings层的表示,如何和原始的FM模型等价
      • Sparse Feature层中维数数据可能不一样,有可能是多维的one-hot向量,比如分类的数据,如果是连续的数值型,那么就是本身
        • 即使各个field的维度是不一样的,但是它们embedding后长度均为k
        • 也就是说one-hot只有一位为非0,其实就是通过矩阵相乘后就表示和原始的FM模型是等价了
      • 最终表现就是这个模型
  • DeepFM的模型如下图
    共享整个embedding层,进行多层网络训练,提取高阶特征

    • 左边就是刚才将的FM模型的神经网络表示
    • 右边的则为deep部分,为全连接的网络,用于挖掘高阶的交叉特征。整个模型共享embedding层,最后的结果就是把FM部分和DNN的部分做sigmoid
      $Y=sigmoid(Y_{FM}+Y_{DNN})$
  • DeepFM的结构中包含了因子分解机部分以及深度神经网络部分,分别负责低阶特征的提取和高阶特征的提取

  • 与图像或者语音这类输入不同,图像语音的输入一般是连续而且密集的,然而用于CTR的输入一般是及其稀疏的。Embedding嵌入层就是这个作用

  • 类比DeepFFM
    类似于FFM对于FM模型来说,划分了field,对于不同的field内积时采用对应的隐向量。同样可以把DeepFM进行进化为DeepFFM,即将每一个field embedding为m个维度为k的隐向量(m为field的个数)

  • 类比WDL

    • 简单比较就是将WDL的LR部分替换为FM,FM比LR在特征组合上优势比较大,但也比LR复杂很多

DCN

  • 背景:
    FM、DeepFM和Inner-PNN都是通过原始特征隐向量的内积来构建vector-wise的二阶交叉特征,这种方式有两个主要的缺点:

    • 必须要穷举出所有的特征对,即任意两个field之间都会形成特征组合关系,而过多的组合关系可能会引入无效的交叉特征,给模型引入过多的噪音,从而导致性能下降。
    • 二阶交叉特征有时候是不够的,好的特征可能需要更高阶的组合。虽然DNN部分可以部分弥补这个不足,但bit-wise的交叉关系是晦涩难懂、不确定并且不容易学习的
    • 有没有可能引入更高阶的vector-wise的交叉特征,同时又能控制模型的复杂度,避免产生过多的无效交叉特征呢
  • 概念

    • bit-wise VS vector-wise
      假设隐向量的维度为3维,如果两个特征(对应的向量分别为(a1,b1,c1)和(a2,b2,c2)的话)在进行交互时,交互的形式类似于f(w1 a1 a2,w2 b1 b2 ,w3 c1 c2)的话,此时我们认为特征交互是发生在元素级(bit-wise)上。如果特征交互形式类似于 f(w (a1 a2 ,b1 b2,c1 c2))的话,那么我们认为特征交互是发生在特征向量级(vector-wise)
    • 特征的显示隐式交叉(explicitly VS implicitly)
      显式的特征交互和隐式的特征交互。以两个特征为例xi和xj,在经过一系列变换后,我们可以表示成 wij (xi xj)的形式,就可以认为是显式特征交互,否则的话,是隐式的特征交互
  • 网络架构
    DCN模型以一个嵌入和堆叠层(embedding and stacking layer)开始,接着并列连一个cross network和一个deep network,接着通过一个combination layer将两个network的输出进行组合
    完整的网络模型如图:

  • 嵌入和堆叠层
    将sparse feature转换为Embedding vec,然后combin Dense feature,形成$x_0$

  • 交叉网络
    交叉网络(cross network)的核心思想是以有效的方式应用显式特征交叉。交叉网络由交叉层组成,每个层具有以下公式:
    • 模型本质意义

xDeepFM模型

xDeepFM模型

强化学习基础算法对比总结

发表于 2019-03-15 | 分类于 机器学习 , 强化学习

我的强化学习文章
网络:强化学习算法汇总1
网络:强化学习算法汇总2

不同角度分类

  • Model free/Model based
    • Mode based:比如基于MDP(马尔科夫处理过程),必须知道很多的环境状态,比如状态转移矩阵,reward等
    • Model free:不用知道环境的一些信息
  • 基于价值还是基于策略
    • 基于价值,比如V(s),Q(s,a)等,只能处理离散的行为,状态。得到最优值,对连续行为不好处理(Q-Learning,Sarsa,DQN及其变种)
    • 基于策略,能够解决连续行为状态的场景,比如对状态行为进行建模,能够输出该状态行为的价值数值,所以就可以根据所以行为价值值选择最优的进行迭代(Actor-critic,A3C,DDPG等)
    • 只是基于价值的模型(Critic only),只会对整个序列完成后才给reward,对中间好的action损失较多,而基于价值和策略的模型就不会(例如Actor-critic),从Loss函数就能看出来
  • 是否使用函数近似
    • 使用类似神经网络模型逼近V(s),Q(s,a)的真实值,本质就是对参数的求解,一定程度上能够解决连续状态行为的问题
  • 迭代更新策略(MC,TD,DP)
    • 基于采样的MC,TD,区别是迭代关注到后面的几步问题,实用性讲大部分都是基于TD的
    • DP不基于采样,所以状态都需要探索
  • 一套架构与否(行为策略和目的策略是否一致)
    • 行为策略和目的策略分开,或两套深度学习模型,典型的如Actor-critic

Q-Learning

  • 所属范畴
    Model free/基于价值/TD/Off-Policy

  • Q-Table(状态-行为表)
    会有一个状态-行为表,来存储对应的价值,使用的时候只需要查表

  • 更新Q-Table

    • 注意这里是选择s2状态下的最大行为值max $Q(s_2,a)$
  • 算法伪代码

Sarsa

  • 所属范畴
    Model free/基于价值/TD and MC(Sarsa($\lambda$))/On-policy
  • 和QLearning区别
    Q-learning 在从状态s−>s′的时候,考虑到的为 max Q(s′,a′), 在s′状态中选取 a′时,永远考虑的是最大。而对于Sarsa 而言,在从s′状态中选取 a′时,会采取与从s选取a 的策略一样,即采用 greedy 或者 ϵ−greedy

  • 算法伪代码

  • Sarsa($\lambda$)

DQN

  • 所属范畴
    Model free/价值近似函数/TD

  • 和QLearning比较
    在Q-Learning中,我们提到了用Q表来存储当前状态s1下采取的动作action的值(value,在Q表中也称为Q值)。但是在实际过程中,一个状态s1到下一状态s2,这里的s2可能有很多不同的情况,这将会导致Q表存储的值会很多,不仅占内存,且在搜索的时候也是十分耗时的

    • 用神经网络来替代行为策略和目的策略
      • 输入为状态s和动作a,得到所有的动作值(Q值)
      • 只输入状态值,然后输出所有的动作值
  • 伪代码

  • 变种Double DQN, Dueling DQN等

    • DDQN
      使用借鉴的思路,使用两个架构相同的近似价值函数
      • 其中一个用来根据策略生成交互行为并随 时频繁参数 (θ)
      • 另一个则用来生成目标价值

Policy Gradients

  • 可以解决连续行为空间的情况
  • 强化学习是一个通过奖惩来学习正确行为的机制,有学习奖惩值,根据自己认为的高价值选择行为的,如Q Learning、Deep Q Network 等。也有不通过分析奖励值,直接输出行为的方法,如Policy Gradient。Policy Gradient 直接输出动作的最大好处就是,能够在一个连续区间内挑选动作,而基于值的,往往是在所有动作中计算值,然后选择值最高的那个行为

Actor-Critic

  • 所属范畴
    Model free/(基于策略 and 价值/策略近似函数)/TD

  • Actor Critic 为类似于Policy Gradient 和 Q-Learning 等以值为基础的算法的组合

  • Actor Critic 结合了 Policy Gradient(Actor)和 Function Approximation Critic)。Actor 基于概率选择行为,Critic 基于 Actor 的行为评判行为的得分,Actor 根据 Critic 的评分修改选择行为
  • 逻辑
    • 其中Actor 类似于Policy Gradient,以状态s为输入,神经网络输出动作actions,并从在这些连续动作中按照一定的概率选取合适的动作action。
    • Critic 类似于 Q-Learning 等以值为基础的算法,由于在Actor模块中选择了合适的动作action,通过与环境交互可得到新的状态s_, 奖励r,将状态 s_作为神经网络的输入,得到v_,而原来的状态s通过神经网络输出后得到v。
  • QAC算法(最基本的基于行为价值 Q 的 Actor-Critic 算法)

A3C

  • 所属范畴
    Model free/(基于策略 and 价值/策略近似函数)/TD
  • A3C 其实采用了Actor-Critic 的形式,但是引入了并行计算的概念。为了训练一对Actor 和 Critic,我们将Actor 和 Critic 复制成多份,然后放在不同的核中进行训练。其中需要声明一个主要的Actor-Critic (global),不断从多个副本中更新的参数进行学习,获得新的参数,同时副本中的参数也不断从 Actor-Critic (global) 中获得并更新。
  • A3C 是Google DeepMind 提出的一种解决 Actor Critic 不收敛问题的算法。A3C会创建多个并行的环境,让多个拥有副结构的 agent 同时在这些并行环境上更新主结构中的参数。并行中的 agent 们互不干扰,而主结构的参数更新受到副结构提交更新的不连续性干扰,所以更新的相关性被降低,收敛性提高

DDPG(Deep Deterministic Policy Gradient)

  • 所属范畴
    Model free/(基于策略 and 价值/策略近似函数)/TD
  • DDPG算法能较为稳定地解决连续行为空间下强化学习问题
  • DDPG用到的神经网络是怎么样的?它其实有点类似于Actor-Critic,也需要有基于策略Policy 的神经网络 和 基于价值 Value 的神经网络,但是为了体现DQN的思想,每种神经网络我们都需要再细分成俩个。Policy Gradient 这边有估计网络和现实网络,估计网络用来输出实时的动作,而现实网络则是用来更新价值网络系统的。再看看价值系统这边,我们也有现实网络和估计网络,他们都在输出这个状态的价值,而输入端却有不同,状态现实网络这边会拿着当时actor施加的动作当做输入。在实际运用中,DDPG的这种做法的确带来了更有效的学习过程
  • 噪音函数
    • 该算法在学习阶段通过在确定性的行为基础上增加一个噪声函数而实现在确定性行为周围的小范围内探索
    • 该算法还为 Actor 和 Critic 网络各备份了一套参数用来计算行为价值的期待值以更稳定地提升 Critic 的策略指导水平。使用备份参数的网络称为目标网络,其对应的参数每次更新的幅度很小
  • 伪代码

高级推荐模型之二:协同矩阵分解

发表于 2019-02-28 | 分类于 推荐系统 , 推荐模型简介

为什么需要协同矩阵分解

矩阵分解的核心就是通过矩阵,这个二维的数据结构,来对用户和物品的交互信息进行建模(如何融入更多信息)

  • 因为其二维的属性,矩阵往往只能对用户的某一种交互信息直接进行建模,这就带来很大的局限性
  • 思路一,就是通过建立显式变量和隐变量之间的回归关系,从而让矩阵分解的核心结构可以获得更多信息的帮助。
  • 思路二,则是采用分解机这样的集大成模型,从而把所有的特性,都融入到一个统一的模型中去。
  • 思路三,就是我们这周已经讲到的,利用张量,把二维的信息扩展到 N 维进行建模

如何组织更多的二元关系

除了用户和物品这样很明显的二元关系以外,还有其他也很明显的二元关系,如何把这些二元关系有效地组织起来,就变成了一个有挑战的任务

  • 在前面的思路里面可以看到,我们似乎需要选择一个主要的关系来作为这个模型的基础框架,然后把其他的信息作为补充。在这样两类关系中,选择哪一个作为主要关系,哪一个作为补充关系,就显得有一点困难了
  • 这也就让研究人员想出了协同矩阵分解的思路

协同矩阵分解的基本思路

  • 协同矩阵分解的基本思路其实非常直观,那就是有多少种二元关系,就用多少个矩阵分解去建模这些关系
  • 如果协同(如果让这多个矩阵产生关系?)

    • 理论上基于矩阵分解得到的隐变量,相互是独立的,没有关系的
    • 我们必须有其他的假设。这里的其他假设就是,两组不同的用户隐变量其实是一样的。也就是说,我们假设,或者认定,用户隐变量在用户与用户的关系中,以及在用户与物品的关系中,是同一组用户隐变量在起作用
      • 说得直白一些,我们认定从两个矩阵分解出来的两组来自同一个因素(这里是用户)的隐变量是完全一样的。用更加学术的语言来说,这就是将两组矩阵分别投影到了相同的用户空间和物品空间
  • 优点
    我们使用“相同隐变量”这样的假设,可以把这些关系都串联起来,然后减少了总的变量数目,同时也让各种关系互相影响

  • 缺点
    • 使用同样的一组隐变量去表达所有的同类关系,这样的假设存在一定的局限性,比较难找到
    • 不同关系的数据量会有很大的差距。比如,用户和物品关系的数据总量可能要比用户与用户的多。所以,由于用户和物品关系的数据多,两个矩阵分解用的同一组用户隐变量,很可能会更多地解释用户和物品的部分,从而造成了学到的隐变量未必能够真正表达所有的关系

问题

从概念上来看,协同矩阵分解和张量分解之间有怎样的关系?是不是所有的张量分解都可以化为多个协同矩阵分解呢

  • 我的理解是ok的

高级推荐模型之一:张量分解模型

发表于 2019-02-27 | 分类于 推荐系统 , 推荐模型简介

为什么需要张量

  • 矩阵分析的核心思想
    • 用矩阵这种数据结构来表达用户和物品的相互关系
      • 这里,我们一般谈论的都是一些最简单的关系,例如评分、点击、购买等(本文我们依然只是讨论评分)
    • 在这种二元的模式下,矩阵就是最好的表达用户和物品之间关系的数据结构
  • 如何表示更多信息(上下文)
    • 背景
      在真实的场景中,用户和物品的关系以及产生这种关系的周围环境是复杂的。一个矩阵并不能完全描述所有的变量。
      • 例如,用户对于某个物品的评分是发生在某个地点、某个时间段内的。这种所谓的“上下文关系”(Context)往往会对评分产生很大影响。遗憾的是,一个矩阵无法捕捉这样的上下文关系
    • 基于回归的矩阵分解和分解机方法解决
      我们之前讨论过的“基于回归的矩阵分解”和“分解机”,本质上都是在某种程度上绕开这个问题
      • 采用的方法就是,依然用矩阵来表达二元关系,但是把其他信息放进隐变量中,或者是采用基于信息的推荐系统的思路来得到相关信息的建模

除了这种思路,还有没有别的方法,可以把上下文关系融入到对用户和物品的建模中去呢

  • 张量
    从本质上来说,张量就是矩阵的推广。我们可以这么理解:
    • 矩阵是对二维关系建模的一种工具;在二维关系中,用户和物品的评分是唯一能够被建模的变量;
    • 而张量,就是对 N维关系的一种建模。而到了 N 维关系中,理论上,我们可以对任意多种上下文关系进行建
      • 比如,我们刚才提到的时间,就可以组成一个三维的张量,分别为用户、物品和时间。然后,在这个三维的张量中,每一个单元代表着某一个用户对于某一个物品在某一个时间段的评分

基于张量分解的推荐模型

分解多维向量,我理解和之前学习的分解矩阵思想类似:分解为多个矩阵的表示方式

  • CP 分解(CANDECOMP/PARAFAC)

    • CP 分解是把一个三维张量分解为三个矩阵。具体来说,比如我们的三维张量是 N 维用户乘以 M 维的物品乘以 R 维的时间段。那么,分解出来的三个矩阵就分别为 N 维乘以 K 维的用户矩阵,M 维乘以 K 维的物品矩阵,以及 R 维乘以 K 维的时间矩阵。
    • 这三个矩阵中的每一个向量都代表某一个用户、某一个物品和某一个时间段。K 在这里是一个参数,类似于矩阵分解中的隐变量的维度,我们也就可以把这个 K 理解成为隐变量的维度
    • 那么在原始的三维张量中,某一个元素就是这三个矩阵的某三个向量对应元素乘积相加的结果
    • CP 分解的一大好处就是,分解出来的三个矩阵的隐变量维度是一样的,这也就减少了需要调整的参数的个数
  • HOSVD 分解(High Order Singular Value decomposition)

    • 含义
      • 这种分解和 CP 分解最大的不同就是分解出来的三个矩阵的维度不再一样
        • 也就是说,在我们之前的例子中,用户矩阵的维度可以是 N 乘以 A,物品矩阵的维度是 M 乘以 B,时间段矩阵的维度是 R 乘以 C。当然,这样就无法还原之前的 N 乘以 M 乘以 R 的三维张量了
        • 于是在技术上,还需要乘以一个 A 乘以 B 乘以 C 的小张量才能对原始数据进行复原。
      • 所以,通俗地讲,HOSVD 分解就是把一个三维的张量,分解成为三个矩阵和一个更小的张量的乘积
    • 优缺点
      • 好处自然就是给不同的数据以不同的自由度,因为不再限制用户、物品和时间段都必须有一样的维度。
      • 缺点是有了更多的“超参数”需要调整
    • 损失函数
      在一般的分解过程中,我们可以定义“平方差”(Squared Loss),也就是原始数值和预测数值之间的平方差来作为损失函数

求解张量分解

  • 随机梯度下降法(SGD, Stochastic Gradient Descent),也就是把张量的分解问题看作是一个一般的优化问题
  • 另外一种方法,也是在矩阵分解中可以使用的,叫作 ALS(Alternating Least Square)方法
    • 这种方法则是在优化每一轮的时候,按住所有其他的矩阵变量不动,单独优化一个变量

问题:从概念上来看,用张量分解对上下文信息进行建模的最大问题是什么

  • 张量的稀疏性
  • 模型更负责,不易求解

基于隐变量的模型之三:分解机

发表于 2019-02-27 | 分类于 推荐系统 , 推荐模型简介

矩阵分解和基于回归的隐变量模型存在哪些问题

  • 发展脉络
    • 首先,矩阵分解主要解决了两个问题,那就是从一个大矩阵降维到两个小矩阵,并且寄希望这两个小矩阵能够抓住用户和物品的相关度。
      • 然而,单纯的矩阵分解无法融入很多用户和物品的特性
    • 这就引导我们开发出了基于回归的矩阵分解。
      • 所谓的回归部分,也就是从显式特性出发,建立从显式特性到隐变量之间关系的流程,从而使我们能够把更多的信号放进模型中。
      • 在一定程度上,基于回归的隐变量模型实现了把显式变量和隐变量结合的目的
        • 但是这类模型的学习过程非常麻烦。实际上,因为这类模型复杂的训练流程,其在实际应用中并不常见。

那么,有没有其他思路来统一显式变量和隐变量的处理方式呢?

分解机

  • 核心原理

    • 核心就是认为需要预测的变量(这里我们依然讨论评分)是所有显式变量的一个回归结果
      • 分解机直接借鉴了这一点,也就是说,分解机的输入是所有的显式变量
  • 个人理解

    • 这种推荐模型本质可以看做是个回归模型:需要预测的变量(这里我们依然讨论评分)是所有显式变量的一个回归结果
    • 分解机本质就是增加了更多的特征,比如各个显示变量的两两乘积生成新特征
    • 适当增加模型复杂度,泛化性强:结合了隐变量,比如显示变量的两两乘积用隐变量的乘积来表示(一种显示变量就用隐变量vector表示)
  • 基本思想

    • 第一步:把用户的年龄和物品的种类直接当作特性输入到模型中
    • 第二步:分解机是把这两个特性的数值进行乘积,当作一个新的特性,然后进一步处理这种两两配对的关系
      • 增加了特征(显示变量两两配对)
        分解机在对待显式变量的手法上更进了一步,那就是不仅直接对显式变量进行建模,还对显示变量的两两关系进行建模。当然,在原始的论文中,分解机其实还可以对更加高维的关系进行建模,我们这里局限在两两关系上
        • 把原始特性进行两两配对是构建模型的一种重要的方法,特别是对于非深度学习模型,需要自己做特征工程的模型
        • 两两配对问题
          • 一个问题就是特性空间会急速增长
          • 另一个更严重的问题就是,如果我们的单独特性中,有一些是“类别特性”(Categorical Feature),那么在两两配对之后就会产生大量的 0,从而变成一个巨大的稀疏矩阵

如何建模(如何解决上面问题)

  • 分解机利用了矩阵分解的降维思路
  • 我们不对一个稀疏矩阵直接建模,而是把这个稀疏矩阵分解之后再进行建模
  • 就是先假定,所有特性都对应一个隐变量向量,两个显式特性的乘积是两个特性的隐变量的点积
    • 也就是说,我们把两个显式特性的乘积分解为了两个向量的乘积。这样,我们就不需要直接表示原来的稀疏矩阵。

  • 在这样的思路下,分解机成功地把隐变量和显式变量结合到了一起
    • 当我们的显式特性仅仅是用户 ID 和物品 ID 的时候,分解机的表达退回了最原始的矩阵分解
    • 也就是说,矩阵分解其实可以表达成为特性的两两作用矩阵的分解
  • 在原始的论文中,作者还用分解机模拟了好几种流行的模型
  • 虽然也是为了建立从显式特性到隐变量的关系,但是对比基于回归的矩阵分解而言,分解机的训练过程大大简化了。在实际应用中,我们经常使用“随机梯度下降”(SGD, Stochastic Gradient Descent)来对分解机直接进行求解

思考问题

  • 分解机能够解决“冷启动”的问题吗
    • 个人认为是可以解决的:因为本质就是一个回归模型,由隐变量得到显变量的映射。然后映射到指标(比如说点击率,评论得分)
    • 所以在冷启动问题上,对缺失的变量可以看其分布,然后拿到期望值,这样来处理

基于隐变量的模型之二:基于回归的矩阵分解

发表于 2019-02-26 | 分类于 推荐系统 , 推荐模型简介

基础矩阵分解问题

  • 第一,矩阵分解的矩阵仅仅是对用户和物品的喜好进行了“编码”(Encode),但在融合多种不同的推荐元素方面,表现却很一般
  • 第二,矩阵分解的核心是学习用户的隐向量和物品的隐向量。原则上,这两类隐向量的学习仅能通过训练过程获得。
    • 我们无法获得新来用户或者新来物品的隐向量了,因为这些用户和物品并不在训练集里
    • 冷启动问题
      在推荐系统中,这种情况就叫作不能处理“冷启动”(Cold Start)问题,也就是不能处理“冷”用户和“冷”物品。在这样的场景下,直接使用矩阵分解就会有问题

基于回归的矩阵分解

  • 首先,有一组用户特性和物品特性来表述每一个用户和物品。这些特性不是隐变量,是显式表达的特性
    • 用户特性比如用户的年龄、性别、经常出现的地区、已经表达了喜好的类别等
    • 物品特性比如物品的种类、描述等等
    • 这两组显式的特性就是为了解决我们刚才说的第一个问题(融入更多元素),矩阵分解无法抓住更多的信号。
  • 现在我们有两个独立的部分
    • 一个是基于矩阵分解的部分,这一部分是分解一个已知的评分矩阵,从而学习到用户和物品的隐向量
    • 另外一个部分,就是用户特性和物品特性
  • 关联两部分
    用户的隐向量,其实是从用户的显式特性变换而来的
    • 我们建立一个从显式特性到隐向量的回归模型,使得隐向量受到两方面的制约:从评分矩阵的分解得来的信息和从显式特性回归得来的信息
  • 不怕冷启动
    不再怕“冷启动”了。或者说,在有一部分“冷启动”的情况下,这样的模型可以处理得更好。原因就是我们使用了显示特性来回归隐向量
  • 贝叶斯角度理解
    我们还可以从贝叶斯的角度来理解基于回归的矩阵分解。把用户的隐向量和物品的隐向量看作是两个随机变量。我们可以认为这些随机变量加上了先验概率分布。只不过,这个先验概率分布的均值不是我们经常使用的 0,而是一个以回归函数的结果为均值的高斯分布,这个回归函数就是我们由显式特性得到的。本质上,我们认为显示特性的某种变换成为了隐向量的先验信息

小结

  • 第一,我们简要介绍了矩阵分解的一些问题
  • 第二,我们详细介绍了基于回归的矩阵分解的基本思路,以及这样的模型如何解决了传统矩阵分解关于“冷启动”的难题
  • 第三,如何学习的问题,需要查阅其他资料

基于隐变量的模型之一:矩阵分解

发表于 2019-02-26 | 分类于 推荐系统 , 推荐模型简介

什么是隐变量

  • 就是“隐藏的变量”或者叫“隐藏的参数”,这里主要是指我们假定实际的数据是由一系列的隐含变量产生的
  • 我们通过模型的假设,知道隐变量之间的关系,但暂时并不知道隐变量的取值。因此需要通过“推断”(Inference)过程来确定隐变量的实际取值
  • 隐变量往往还带有“统计分布”(Distribution)的假设。什么意思呢?就是隐变量之间,或者隐变量和显式变量之间的关系,我们往往认为是由某种分布产生的

    • 举例:高斯混合模型
      高斯混合模型假设数据是由多个不同的高斯分布产生的,每一个高斯分布有自己的均值和方差
      • 对于每一个数据点,我们就有一个隐含的变量,来表达当前这个数据点究竟来自哪一个高斯分布
      • 两个高斯分布的均值和方法其实也不知道

    高斯混合模型,几乎是最简单的隐变量模型,但也给我们了展示了使用隐变量模型对数据建模的灵活性以及训练的复杂性

矩阵分解作为隐变量模型

  • 关系矩阵(用户,物品,评分)
    在推荐系统中,有一种最普遍的数据表达,那就是用户和物品的交互,比如评分、点击等等
    • 这里我们用评分作为一般性的讨论。对于每一个用户,如果我们用一个向量来表达其对所有可能物品的评分,那么把所有用户的向量堆积起来,就可以得到一个矩阵
    • 这个矩阵的每一行代表一个用户,每一列代表一个物品,每一个交叉的元素代表某一个用户对于某一个商品的评分
    • 特点
      这个矩阵的数据其实非常稀少。因为在一个现实的系统中,一个用户不可能对所有的物品都进行评分
    • 补全任务
      我们的任务其实就是根据有评分的用户物品交互,对那些还没有评分信息的物品进行预测。如果我们能够“补全”(Complete)整个矩阵里的其他元素

如何补全(矩阵分解)

  • 核心
    我们可以看到,矩阵分解的核心其实就是刚才的假设,用隐向量来表达用户和物品,他们的乘积关系就成为了原始的元素。不同的假设可以得到不同的矩阵分解模型

  • 效果
    在这样的一个假设下,一个原本 1 百万乘以 1 万的矩阵就可以被分解为 1 百万乘以 100 的用户矩阵和 100 乘以 1 万的物品矩阵的乘

  • 降维
    原本是需要对整个矩阵,也就是 1 百万乘以 1 万个数据进行建模,而现在缩减到了两个小一些的矩阵 1 百万乘以 100 和 100 乘以 1 万

    • 对比来看,之前对于每一个用户,我们需要一万个元素来表达用户对于这一万个物品的评分喜好;现在,对每个用于仅仅需要保存 100 个元素
    • 这一百个元素的数值并不代表任何意义。从这个层面上理解矩阵分解,也就能够帮助我们知道,这个方法其实是一种“降维

如何学习

  • 目标函数
    前面讲到,矩阵里的每一个元素来自于两个隐向量的点积,我们就可以利用这一点来构造一个目标函数。
    • 利用最小二乘法的原理(Least Square)来拟合求解这些隐向量
    • 这个目标函数其实就是说,这两个隐向量的点积一定要与我们观测到的矩阵数值相近。这里的“相近”是用这两个数值的误差,在这里也就是平方差(Square Error)来衡量的

小结

  • 第一,我们简要介绍了隐变量模型的基本原理
  • 第二,我们详细介绍了矩阵分解作为隐变量模型的假设和原理
  • 第三,我们简要地讨论了如何求解矩阵分解里的隐变量

简单推荐模型之三:基于内容信息的推荐模型

发表于 2019-02-25 | 分类于 推荐系统 , 推荐模型简介

背景

  • 对于基于流行度预测的推荐的问题
    • 推荐结果不是个性化的。因为流行度预测是一种全局的预测,每个人得到的推荐结果是一样的
  • 而协同过滤的问题
    • 强烈依赖相似用户以及相似物品的定义
    • 而且对于新用户或者新物品来说有数据稀缺的问题

因此,在实际应用中,往往不能在整个系统中单独使用协同过滤

基于内容信息的推荐系统

  • 定义
    基于内容信息的推荐系统,其实就是用特征(Feature)来表示用户、物品以及用户和物品的交互,从而能够把推荐问题转换成为监督学习任务

特征工程

  • 特征工程(物品信息)
    需要将用户和物品的所有信号用特征来表示
    • 物品的文本信息
      • 用 TF-IDF 的方法来形成文本向量。当然,因为文本信息的噪声相对比较大,并且数据维度也比较大(维度等于文本所对应语言的词汇量),很多时候我们都寻求降低这部分数据的维度,降低到一个固定的维度。这种时候,很多所谓“降维”的工具就很有必要了
      • 用“话题模型”(Topic Model)对文本进行降维的。也就是说,我们针对每一个文字描述都可以学习到一个话题的分布,这个分布向量可能是 50 维、100 维等等
      • 使用各种“词嵌入向量”(Word Embedding)的方法来为文字信息降维,从而能够使用一个固定的维度来表达文字信息
    • 物品的类别信息
      • 直接获取分类,比如新闻的分类,或者通过其他渠道得到直接的分类
      • 使用ML的手段,来得到分类
    • 知识图谱挖掘信息
      • 利用知识图谱进行知识的深挖
      • 举个例子,某一篇新闻文章是关于美国总统特朗普的,于是这篇文章可能就会自动被打上美国总统、美国政治等其他标签。这种通过一些原始的信息来进一步推断更加丰富的知识信息,也是重要的物品类别特征的处理工作
  • 特征工程(用户信息)
    • 最基础、最首要的肯定是用户的基本特性,包括性别、年龄、地理位置
    • 还有围绕这三个特性发展出来的三大种类的特性。比如,不同性别在文章点击率上的差异,不同年龄层在商品购买上的差异,不同地理位置对不同影视作品的喜好等
    • 我们可以为用户进行画像(Profiling)
      • 有显式的用户画像,比如用户自己定义的喜好,或者用户自己认为不愿意看到的物品或者类别
      • 隐式的:通过用户的“隐反馈”(Implicit Feedback),来对用户的喜好进行建模

目标函数

对于究竟在哪种场景中使用什么样的目标函数,这依然是当前的一个主要研究方向

  • 基于评分
    纯粹的基于评分(Rating)的协同过滤推荐系统一样,我们可以设置监督学习的目标函数是拟合评分。当然,已经有很多学者指出评分并不是推荐系统的真正目标。
  • 基于点击率,购买率
    在实际系统中比较常见的目标函数有点击率和购买率,也有一些相对比较复杂的目标函数,比如预测用户在某一个物品上的停留时长

总结

  • 背景:基于流行度和协同过滤的缺点
  • 如何构建特征工程,包括物品和用户
  • 目标函数的确定很重要
123…7
雷哥

雷哥

不积跬步无以至千里

66 日志
18 分类
16 标签
GitHub
© 2019 雷哥
由 Hexo 强力驱动
主题 - NexT.Gemini