H好菇凉666用万字长文聊一聊 Embedding 技术( 三 )

  • 全局偏移量 :根据全局打分设置的偏移 , 可能和整体用户群和物品质量有相对应的关系 。
  • BiasSVD的预测结果为:
    损失函数为:
    SVD++算法是在BiasSVD的基础上引入隐式反馈(如用户历史浏览、用户历史评分、电影历史浏览、电影历史评分等)作为新的参数 , 其预测结果为:
    其优化如下:
    虽然矩基于矩阵分解的方法原理简单 , 容易编程实现 , 具有较好的扩展性 , 在小规模数据上也有不错的表现 。 但对于如今互联网推荐场景的数据量级 , 矩阵分解方法很难与深度学习算法一战 。
    对于基于内容的embedding方法 , 主要是针对文本类型数据(对图像、音视频等多媒体数据embedding方法 , 感兴趣的可以自行查阅相关技术) 。 下图是从word2vec到BERT的发展历史(最新已经发展到了GPT3了 , 模型更新太快 , 还没来得及用 , 就已经过时了) , 从图中可以看出自从2013年word2vec横空出世后 , 文本embedding方法不断被优化 。 从最开始的静态向量方法(如word2vec、GloVe和FastText)发展为能根据上下文语义实现动态向量化的方法如(ELMo、GPT和BERT) 。 下面主要从分静态向量和动态向量两个方面来介绍相应的方法 。
    H好菇凉666用万字长文聊一聊 Embedding 技术
    本文插图
    1、静态向量 所谓静态向量指的是一旦训练完成后 , 对应的向量便不再发生改变 , 比如一个词经过向量化之后 , 在后续的场景中该词对应的向量不会发生改变 。 这些方法主要包括Word2Vec、GloVe和FastText 。
    A) Word2vec Word2vec是2013年Google发布的无监督词向embedding模型 。 该模型采用CBOW或Skip-gram模型来训练词向量 , 将词从one-hot编码的向量映射成d维稠密向量:
    H好菇凉666用万字长文聊一聊 Embedding 技术
    本文插图
    其中CBOW是采用词的上下文来预测该词 , 而Skip-gram则是采用词来预测其上下文 。 两者网络结构相似 , 通常所得到的词向量效果相差不大;但对于大型语料 , Skip-gram要优于CBOW 。
    B) GloVe GloVe(Global Vectors for Word Representation)是2014年由斯坦福大学提出的无监督词向量表示学习方法 , 是一个基于全局词频统计(count-based & overall statistics)的词表征工具 。 由它得到的词向量捕捉到单词之间一些语义特性 , 比如相似性、类比性等 。 GloVe主要分为三步:
    • 基于语料构建词的共现矩阵表示词和词在特定大小的窗口内共同出现的次数 。 如对于语料:I play cricket, I love cricket and I love football , 窗口为2的的共现矩阵可以表示为:

    H好菇凉666用万字长文聊一聊 Embedding 技术
    本文插图
    构造词向量和贡献矩阵之间的关系:
    H好菇凉666用万字长文聊一聊 Embedding 技术
    本文插图
    其中 , 和是要求解的词向量 , 和是两个词向量的偏差项 。
    • 最终 GloVe 的 loss function 如下:
    其中 , 表示语料库中词个数 。 在语料库中 , 多个单词会一起出现多次 , 表示权重函数主要有以下原则:
      • 非递减函数 , 用于确保多次一起出现的单词的权重要大于很少在一起出现的单词的权重
      • 权重不能过大 , 达一定程度之后应该不再增加
      • , 确保没有一起出现过的单词不参与loss的计算
    通过实验 , 作者得到了效果相对较好的,, 此时对应 曲线如下图:
    H好菇凉666用万字长文聊一聊 Embedding 技术
    本文插图
    CBOW和Skip-gram是local context window的方法 , 缺乏了整体的词和词的关系 , 负样本采样会缺失词的关系信息 。 此外 , 直接训练Skip-gram类型的算法 , 很容造成高曝光词汇得到过多的权重 。