推荐系统基础(一)

一、综述

1.推荐系统范式

(1)推荐系统的目标

为用户推荐可能喜欢的标的物,这个过程涉及用户标的物两个因素

根据用户与标的物不同关联形式生成不同的推荐产品形态,即所谓的范式(某种相似性质的对象集合)

(2)范式种类以及对应算法

①完全个性化范式

  • 为每个用户提供个性化的推荐——粒度最细,精确到用户
    • eg:猜你喜欢

1)基于内容的个性化推荐算法

  • 只依赖于用户自己的历史行为而不必知道其他用户的行为

  • 核心:标的物是有描述属性的,用户对标的物的操作行为为用户打上了相关属性的烙印

    这些属性就是用户的兴趣标签

a)基于用户特征的推荐
  • 标的物具备很多的文本特征:eg标签、描述信息、metadata等,将文本信息采用TF-IDF、或者LDA算法转化为特征向量,如果使用标签描述标的物,就可以构建一个以标签为特征的特征向量
  • 有了特征向量,就可以将用户所有操作过的标的物的特征向量(时间加权)平均作为用户的特征向量,利用用户特征向量与标的物的特征向量的余弦(向量的内积运算)计算用户与标的物相似度,从而计算出用户的推荐列表
b)基于倒排索引的推荐(基于标签的召回算法)—可以解决冷启动问题
  • 如果基于标签来表示标的物属性,那么基于用户的历史行为,就可以构建用户的兴趣画像,该画像是==用户对各个标签的偏好,并且有相应的偏好权重
  • 构建完用户画像之后,构建出标签与标的物的倒排索引查询表。基于该倒排索引及用户的兴趣画像,就可以为用户做个性化推荐

2)基于协同过滤的推荐算法:物以类聚,人以群分

#####a)种类

  • 物以类聚(基于物):计算出与每个标的物最相似的标的物列表
  • 人以群分(基于人):将于该用户相似的用户喜欢过的标的物(该用户未曾操作过)推荐给该用户
b)核心
  • 计算标的物之间的相似度与用户之间的相似度
c)步骤
  • 先将用户对标的物的评分(隐式反馈,eg点击等)构建一个矩阵,矩阵的某个元素代表某个用户对某个标的物的评分(隐式反馈值为1,如果某个用户对某个标的物未产生行为,值为0)
  • 行向量是某个用户对所有标的物的评分向量,列向量是所有用户对某个标的物的评分向量
  • 计算用户与用户、标的物与标的物之间的相似度(行向量之间的相似度就是用户之间的相似度;列向量之间的相似度就是标的物之间的相似度)————(可以采用余弦相似度算法)

3)基于模型的推荐算法:矩阵分解、分解机、深度学习

a)步骤(模型训练+预测)
  • 基于用户历史行为数据、标的物metadata信息、用户画像数据等构建一个机器学习模型

  • 利用数据训练模型,求解模型参数

  • 最终利用该模型预测用户对位置标的物的偏好

b)预测方式
  • (矩阵分解)预测标的物的评分,利用评分高低表示对标的物的偏好程度

    • 将用户评分矩阵分解为两个矩阵U、V的乘积

      • U代表用户特征矩阵,U对应的行(就是用户的特征向量)

      • V代表标的物特征矩阵,V对应的列(就是该标的物的特征向量)

  • (logistic回归)利用概率的思路,预测用户对标的物的喜好概率,利用概率值的大小来横向衡量用户对标的物的喜好程度

  • (深度学习)采用分类的思路,将每个标的物看成一类,通过预测用户“消费”的几个标的物所属类别来做推荐

②群组个性化

将用户分组(根据兴趣,将兴趣相似的归为一组,并为每组用户提供一个性化的推荐列表)

  • 将用户聚类,同一类用户兴趣相似,针对他们的排序是一样的,但是不同类的用户列表完全不一样
a)基于用户画像圈人的推荐

基于用户的人口统计学数据或用户行为数据构建用户画像

b)采用聚类算法的推荐
i)将用户嵌入高维向量,基于用户的向量表示做聚类
  • 基于内容推荐的思路

    • 构建用户的特征向量(TF-IDF、LDA、标签等),该类所有用户的特征向量加权平均就是该类用户的特征向量
    • 利用群组特征向量与标的物特征向量的内积来计算群组与标的物的相似度。为该群组做个性胡推荐
  • 基于用户的协同过滤思路

    • 构建用户与标的物的行为矩阵,矩阵元素就是用户对标的物的评分
    • 原理
      • 先将该组用户所有的特征向量求均值,可以取k个最大的特征向量,其他特征向量忽略不计(设置为0)得到改组用户的特征向量
      • 利用矩阵分解得到每个用户的特征向量
      • 最后就可以基于用户协同过滤的思路为该组用户计算推荐列表
  • 基于词嵌入的方式

    • 将每个用户对标的物的所有操作(购买、观看等)看成一个文档集合,标的物的唯一标志符(id)就是一个单词
    • 类似word2vec方式获得标的物的向量
ii)构建用户关系图,基于图做聚类
  • 顶点是用户,边是用户之间的关系,采用图分割技术,将图分隔成若干个连通子图,这些子图就是用户的聚类
  • 将图嵌入高维向量空间——采用k均值聚类算法来做聚类

③完全非个性化范式(冷启动或者默认的推荐算法)

  • 为所有用户提供完全一样的推荐

    • 基于某个规则对标的物进行降序排列,将排序后的标的物取topN推荐给用户
    • eg:排行榜,最热榜
  • 方便用户发现新热内容,也可以作为“猜你喜欢”推荐中新用户冷启动的默认推荐

  • 可以基于最简单的计数统计生成推荐

④标的物关联标的物范式

为每个标的物关联一组相关或者相似的标的物,作为用户在访问标的物详情页的推荐,每个用户看到的关联推荐标的物一样

a)基于内容的推荐

  • 根据已知的数据和信息利用向量来描述标的物,如果每个标的物都被向量化——利用向量相似度

  • 如果标的物是新闻等文本信息,采用TF-IDF将标的物映射为词向量——通过词向量的相似度计算

  • LDA模型将文章(文档)表示为主题与相关词的概率——计算两个文档的相似福

b)基于用户行为的推荐

  • 矩阵分解算法
    • 将用户的行为矩阵分解为用户特征矩阵和物品特征矩阵,物品特征矩阵的某一列可以看成衡量这对物品的一个向量
  • 嵌入方法
    • 用户的所有行为看成一个文档,每个标的物可以看成一个词,用word2vec的思路,最终训练每个词(标的物)的向量表示,利用向量来计算标的物之间的相似度
    • 将用户对标的物的所有操作行为投射到一个二维表,行是用户,列是标的物,表中元素就是用户对该标的物的操作
  • 购物篮思路——电商、图书推荐
    • 经常一起购买(浏览)的标的物形成一个列表,过去一段时间所有的购物篮构成一个集合
    • 统计完该次数之后,将次数按降序排列,这个列表就可以当做标的物的关联推荐

c)基于标签的推荐

  • 如果标的物是包含标签的,每个标签代表一个维度,总标签的个数就是向量的维度

d)基于标的物聚类的推荐

  • 将标的物按照某个维度聚类,同一类具备某些相似性

⑤笛卡尔积范式

每个用户与每个标的物的组合产生的推荐结果都不相同,不同用户在同一个视频的详情页看到的推荐结果不一样

  • 采用标的物关联标的物范式计算出待推荐的标的物列表,再根据用户兴趣对该推荐列表做重排(调整标的物列表的顺序)、增补(添加用户的个性化兴趣)、删除(过滤掉用户看过的)

(3)总结

  • 当用户访问首页时,可以通过综合推荐(范式1)给用户提供个性化推荐
  • 当用户访问详情页时,通过相似(范式4)提供相似标的物的推荐
  • 用户进入搜索页面未输入搜索内容时,可以通过热门推荐给用户推送新热节目(范式3)

(4)推荐算法3阶段pipeline架构

①召回

将用户可能感兴趣的标的物通过算法从全量标的物库中取出来,一般会采用多个算法召回

  • 热门召回
  • 协同过滤召回
  • 标签召回

②排序

将召回阶段的标的物列表根据用户可能点击的概率大小排序

  • CTR预估

###③业务调控

根据业务规则以及运营策略对排序后的列表进行进一步增补微调,以满足特定的运营需求

2.排序算法

(1)特征分类

  • 用户侧的特征:用户性别,年龄,地域,购买力,家庭结构
  • 商品侧的特征:商品描述信息、价格、标签等
  • 上下文以及场景特征:位置、页面,是不是周末或者节假日
  • 交叉特征:用户侧特征和商品侧特征的交叉
  • 用户的行为特征:用户点击、收藏、购买、观看等

(2)Logistic回归模型

  • 通过学习用户点击行为来构建CTR预估

w是权重——要学习的模型参数

Fi是特征i的值

(3)GBDT模型

梯度提升决策树

3.推荐召回算法

二、基于内容的推荐算法

1.实现三步骤

  • 基于用户信息、用户操作行为构建用户特征表示
  • 基于标的物信息构建标的物特征表示
  • 基于用户即标的物特征表示,为用户推荐标的物

2,基于用户和标的物特征为用户推荐的核心思想

(1)基于用户历史行为记录做推荐

①定义

  • 计算标的物之间的相似性,然后将用户历史记录中的标的物的相似标的物推荐给用户

②思路

  • 将标的物特征转换为向量化表示
  • 通过余弦相似度计算两个标的物之间的相似度

(2)用户和标的物特征都用显式的标签(倒排索引)

  • 标的物用标签表示,那么每个标签就可以关联一组标的物

  • 根据用户的标签表示,用户的兴趣标签就可以关联到一组标的物,这组通过标签关联到的标的物,就可以作为给用户的推荐候选集

(3)用户和标的物嵌入同一个向量空间,基于向量相似做推荐

  • 计算用户与标的物之间的相似度

3.构建用户特征表示

  • 基于用户对标的物的操作行为(点击、购买、收藏、播放等)构建用户对标的物的偏好画像,也可以基于用户自身的人口统计学特征来表达

(1)用户行为记录做显式特征

  • 记录用户过去一段时间对标的物的偏好

(2)显示的标签特征

  • 标的物用标签描述的,那么这些标签可以用来表征标的物
  • 用户的兴趣画像也可以基于用户对标的物的行为来打标签
  • 每个标的物的标签都可以包含权重,而用户对标的物的操作行为也是有权重的,所以每个用户的兴趣标签也是有权重的

(3)向量式的兴趣特征

  • 利用向量表示标的物,用户的兴趣向量就可以用操作过的标的物的向量的平均向量来表示
  • 表示用户兴趣向量
    • 基于用户对操作过的标的物的评分,以及时间加权获取用户的加权偏好向量
    • 根据用户操作过的标的物之间的相似度,来构建多个兴趣向量

(4)通过交互方式获取用户兴趣标签

(5)人口统计学特征

4.构建标的物特征表示

(1)标的物包含标签信息

  • 将标签按照某种序排列,每个标签看成一个维度,那么每个标的物就可以表示成一个N维的向量(N是标签的个数),如果标的物包含某个标签,向量就在相应的标签分量上的值为1,否则为0,叫做ont-hot编码

5.应用场景——比较古老

  • 完全个性化推荐
  • 标的物关联标的物推荐
  • 其他算法的补充,适应冷启动
  • 主题推荐
  • 给用户推荐标签

6.优缺点

(1)优点

  • 迎合用户口味
  • 直观易懂,可解释性强
  • 更容易解决冷启动
    • 只要用户有一个操作行为,就可以基于内容为用户做推荐,不依赖其他用户行为
  • 算法实现相对简单
    • 基于标签维度实现
    • 也可以将标的物嵌入向量空间,利用相似度做推荐
  • 对于小众领域有很好的推荐效果
  • 适合标的物快速增长的有时效性要求的产品

(2)缺点

  • 推荐范围狭窄,新颖性不强
    • 只依赖于的那个用户的行为,结果会聚集在用户过去感兴趣的标的物类别上
  • 需要知道相关的内容信息且处理起来较难
  • 较难将长尾标的物分发出去
  • 推荐精准度不高

你可能感兴趣的:(推荐系统,推荐算法,python,算法)