推荐系统学习记录二 ——用户特征和Item特征的常用方法

item 特征

item一般是指一个需要打分的个体,搜索中,是等待被搜索的个体;推荐中,是等待被推荐的个体。但是实际的业务中,往往不是这么简单。

  1. 在item中,我们都用过什么特征?
    item的类别
    item的统计类特征
  2. 在统计类特征中,不是只有sum,ratio,average等这样的特征,有的时候我们也会用到平滑,例如在广告推荐中,A广告投放了10次,被点击1次,B广告投放了1000次,被点击了10次,我们并不能说A的ctr是0.1,因为这样会带来很大的偶然性,此时我们可以加入平滑因子。典型的通过设置β因子,通过 β 分布做平滑。

用户特征

  1. 离散值和连续值的特点
  2. 离散值和连续值的相互转化
  3. 离散特征和连续特征
    所有的线性模型都喜欢用离散值,因为连续值中的某个异常点会把模型拉偏。
    可以通过不同线性模型的叠加去处理不同的值,降低模型对数据的敏感度
  4. 用户画像
    用户的特征挖掘如何捕捉到真正有用的用户特征,这是和业务以及建模问题强相关的。
    u2i特征 user to item
    常见的 u2i特征
    u2i特征和特征交叉的区别
    常见的u2i特征偏统计类,例如一个月内某人购买鞋子的数量,而特征交叉是id类特征的交叉。
    u2i大部分情况下刻画的是统计特征,特征交叉偏item

数据的存储和使用

在工业界,大规模数据的存储方式与一般使用支持map-reduce的数据库进行存储,比如Hive
一个数据查询的两个阶段:Mapper,Reduce
均匀哈希分桶和数据倾斜
在线数据存储

  1. 在线和离线的区别?
    离线强调数据量的大,在线强调数据serve/inference过程的快
  2. 为什么要用在线的hbase?
    hbase的性能能满足我们的要求,并且不是一个关系型的数据库
  3. 特征服务平台
    • 如何规范的管理特征
    • 特征实时化的好处
      带来实时信息
      对于新的广告的特征快速从不准确变得准确
      上下文,统计信息更加准确
    • 如何做到特征共用
    • 特征的生命周期
    • 离线特征和实时特征

Embedding(嵌入)

1.什么是embedding?
一开始,embedding是在word2vec中使用的,在nlp中把一个单词映射成一个向量,随后在Deeplearning中得到使用。但是embedding本质上是一个数学问题而不是机器学习的问题,其实就是一个matrix。
对于数据的两种表示方式

  • OneHot representation
    无法考虑到不同维度的关系
    如国王-男=女王-女
    但是在OneHot中是得不到这样的结果的
  • Distributed representation
    密集向量,是一种分布式的表示。可以克服one-hot representation的上述缺点,基本思路是通过训练将每个词映射成一个固定长度的短向量,所有这些向量就构成一个词向量空间,每一个向量可视为该空间上的一个点。此时向量长度可以自由选择,与词典规模无关,这样相近意义的词就会聚集在一起,可以更精准的表现出近义词之间的关系
    2.从FM角度去看embedding(矩阵分解)
    首先来看LR
    Y = W T X Y =W^TX Y=WTX
    FM模型的表达式:
    y = σ ( w ⋅ x + x T ⋅ W ( 2 ) ⋅ x ) y=\sigma(w \cdot x+x^T\cdot W^{(2)}\cdot x) y=σ(wx+xTW(2)x) σ \sigma σ为sigmoid函数,只看括号内的内容时,与LR不同的是,这里有了二阶特征组合,但是对于系数,当 W W W维度很高时,我们如何优雅的学习得到呢?
    此时我们可以通过矩阵分解的方法,把 W W W分解成低秩矩阵
    W ( 2 ) = W T W W^{(2)}=W^TW W(2)=WTW
    y = σ ( w ⋅ x + x T ⋅ W T ⋅ W ⋅ x ) = σ ( < w , x > + < W ⋅ x , W ⋅ x > ) y=\sigma(w\cdot x+x^{T}\cdot W^{T}\cdot W\cdot x)=\sigma( + ) y=σ(wx+xTWTWx)=σ(<w,x>+<Wx,Wx>)
    例如矩阵 W ( 2 ) W^{(2)} W(2)的维度一开始可以是10000*10000,此时参数量太多,学习难度大,我们使用低秩矩阵分解成 10000 ⋅ 10 10000\cdot10 1000010乘以 10 ⋅ 10000 10\cdot10000 1010000的矩阵,就可以解决这样的问题
    从神经网络看FM
    y = σ ( < w , x > + < W ⋅ x , W ⋅ x > ) y=\sigma( + ) y=σ(<w,x>+<Wx,Wx>)
    FM作为预训练的结果直接进入神经网络,也即做embedding
  • 到底什么是Embedding?
    从数学上看,是映射,是从一个向量空间 R m R^{m} Rm到另一个向量空间 R n R^{n} Rn的映射,m和n没有大小关系
    从神经网络的角度看,是层与层之间的矩阵
    从特征的角度看,是一套特征映射到另一种的表示方式

3.从Word2vec(序列化建模)
4.从DeepLearning角度去看embedding

特征工程

  1. 简单模型+复杂特征
    LR
  2. 复杂模型+简单特征
    GBDT DNN…
  • 线性模型的特征工程
    二阶交叉和高阶交叉
    单变量的非线性变换
    特征预处理和归一化(梯度:归一化可以提高梯度下降法求解最优解的速度)

  • 缺失值
    直接填充
    中位数填充

  • 特征选择
    方差过滤法:一般认为方差越大,这个特征越有效
    相关系数法:通过计算协方差相关系数判断,一般认为相关系数越大越有效,通常是看绝对值
    树模型的特征重要性评估

  • 特征降维
    PCA:降噪时用
    SVD:PCA可以看成SVD的特殊情况
    LDA:LDA不同之处在于带label

  • 特征连续化
    怎么进行特征连续化?
    一般有embedding
    embedding和空间变换

  • 特征离散化
    怎么进行特征离散化?
    一般有手动和自动分桶两种方法
    手动分桶:
    统计每个组的情况,根据对业务的理解或者一些常识性的东西分桶。
    统计类分桶
    自动分桶:GBDT+LR
    先在GBDT上训练一个树模型,然后使用这个树模型对特征进编码,将原始特征 x x x对应的叶子结点按照01编码,作为新的特征,叠加到LR模型里再训练一个LR模型
    为什么这样做是有效的?
    因为GBDT是在函数空间对残差进行连续的逼近,精度很高,但是容易过拟合;进行裁剪后,利用叶子结点编码,有效的把连续特征离散化,因此适合LR

  • 特征组合
    如何进行特征组合?
    一般可以凭借对于业务的理解进行组合,也可以通过一些方法自动特征组合,这里是提升模型效果的主要部分。

  • ML Pipeline
    其实模型本身,也是把数据进行映射的过程,包含最开始的特征工程和数据分析,其实可以组合成一个完整的pipeline
    Sklearn Pipeline
    Fit 方法
    Transform 方法

  • 样本不均衡怎么处理?
    1.简单的上下采样(比较粗暴)
    2.基于距离的样本构造(SMOTE)
    3.基于模型信息类(例如训练时发现某个样本的loss很大,那么下个batch就只学这个样本,相当于融入了boosting的思想)

论文推荐:youtube推荐系统的四篇文章

你可能感兴趣的:(推荐系统学习记录二 ——用户特征和Item特征的常用方法)