特征工程|四种主流的embedding特征技术

在我们的业务场景中会有海量的稀疏类特征,海量意味着数量巨大,稀疏意味着即使在很大的训练数据里,大量特征出现频次也非常低,一个比较典型的稀疏特征就是ID类特征。

起初在推荐系统中是抛弃了这些ID类的特征的,但其实其中也包含了大量的信息。如果在user或者item量不大的情况下,可以直接使用其对应的Onehot特征进行使用,但是如果数据量特别大时,这种方式就显然不合理了(无论是计算量还是数据存储、在线计算服务等),所以就催生了Embedding相关的嵌入式itemid、userid向量表示。

我们常说的embedding特征其实包含两个意思(其实本质是一样的):

  • 1、基于一些模型比如word2vec、graph embedding方法等产出item、user的embedding作为user维度、item维度的一部分特征传入模型使用
  • 2、深度模型产出的中间结果,比如双塔模型,我们最终算法的user 和 item的余弦相似度,但是会依赖中间产出的user、item embedding;又比如Youtube DNN中会依赖用户的行为序列特征,比如点击序列,但是点击序列是没有办法被网络直接使用的,所以就要借助embedding去实现

本文并不打算把Embedding技术的前世今生拿出来去介绍,主要介绍几种典型的embedding技术算法方案。从word2vec到deepwalk,从dssm到youtubeDNN是一个逐渐演变和递进的过程,网络变得更加的复杂,效果也更好,但是在不同的场景中还要选择适合自己业务的算法进行应用。

1. word2vec

Word2vec的出现改变了OneHot的高维稀疏的困境,自此稀疏的ID类特征便开始进行了应用。w2v可谓是embedding届的祖师爷了。

word2vec工具中包含两种模型:CBOW和skip-gram。论文中介绍的比较简单,如下图所示,CBOW是通过上下文的词预测中心词,Skip-gram则是通过输入词预测上下文的词。

图片CBOW和skip-gram

因为实际中使用skip-gram的比较多,所以这里只介绍一个skip-gram模型的过程,关于CBOW可以参考上面的链接。

图片Skip-gram

从输入层到隐藏层:

从隐藏层到输出层:

其中:

  • 表示的是输入词
  • 表示输出层第个词实际落在了第个神经元
  • 表示输出层第个词应该落在第个神经元
  • 表示输出层第个词实际落在了第个神经元上归一化后的概率
  • 表示输出层第个词实际落在了第个神经元上未归一化的值

因为输出层共享权重,所以:

其中 表示第个单词的输出向量,其值为输出权重矩阵的第 列。

损失函数变为:

注意⚠️

  • 经验上一般选择使用skip-gram模型,因为效果较好
  • 在Word2vec模型中,如果选择使用CBOW时,最终产出的word embedding为 单词的输出向量()表示,如果选择使用skip-gram时,最终产出的word embedding为单词的输入向量()表示,因为更倾向于选择靠近中心词一端的权重矩阵。

2. deepwalk

DeepWalk是2014年提出的一种Graph Embedding 算法,是首次将NLP w2v和graph embedding进行结合。论文中提到优秀的社群表示需要有下面的特征:适应性,社群内相似性,低维和连续性。

  • 适应性:网络表示必须能适应网络的变化。网络是一个动态的图,不断地会有新的节点和边添加进来,网络表示需要适应网络的正常演化
  • 社群内相似性:属于同一个社区的节点有着类似的表示,网络中往往会出现一些特征相似的点构成的团状结构,这些节点表示成向量后必须相似
  • 低维:代表每个顶点的向量维数不能过高,过高会有过拟合的风险,对网络中有缺失数据的情况处理能力较差
  • 连续性:低维的向量应该是连续的

Deepwalk算法的核心步骤分为两步:

  • 随机游走采样节点序列
  • 使用Skip-gram model学习表达向量

整个算法的流程为:

图片Random Walk算法流程图

其中第2步是构建Hierarchical Softmax,第3步对每个节点做次随机游走,第4步打乱网络中的节点,第5步以每个节点为根节点生成长度为t的随机游走,第7步根据生成的随机游走使用Skip-gram模型利用梯度的方法对参数进行更新。

2.1 Random Walks

随机游走算法,其实在文中更精确的是截断式随机游走,也就是长度固定的随机游走。随机游走这一步其实更像是为网络标识的学习来收集训练数据,或者说是进行采样工作。算法的思想其实是很简单的,主要就是对网络中的每个节点作为root随机的找下一个节点进行游走,然后长度为固定好的。然后每个节点可以有好几个Walker,这些都是可以自己设定的参数。

这个算法使其具有了可以高度并行化和适应性的特点,因为每个节点的随机游走都可以并行的同时开始,同时对于网络的部分更新我们也可以只在整个网络更新的小部分进行随机游走。

2.2 Skip-gram

随机游走后需要进行的就是skip-gram算法了,使用random walk生成了大量的训练数据。后面就采用训练word2vec相同的思路来训练就可以了。w2v有两种训练方式,这里使用的是skipgram的方式也就是用一个词来预测它的上下文,这里忽略的词序的信息以及和当前词的距离。

图片Skip-gram

2.3 Hierarchical Softmax

这个也是w2v中的技术,就是为了解决标签过多在使用softmax时带来的计算量大的问题。这里需要我们生成一个二叉树,叶子节点就是每个类别。假设一共有V个类别,原始softmax的计算量就是,使用二叉树后,从根节点到叶子节点的距离就变成了。

图片Hierarchical Softmax

2.4 Power-law Distribution

论文中使用的是w2v中的skip-gram模型进行embedding的学习。那么为什么deepwalk随机游走出来的序列可以套用skip-gram呢?

文中提到网络中随机游走的分布规律与NLP中句子序列在语料库中出现的规律有着类似的幂律分布特征。那么既然网络的特性与自然语言处理中的特性十分类似,那么就可以将NLP中词向量的模型用在网络表示中。

图片幂率分布对比

3. dssm

DSSM模型是2013年微软发布的,其论文全称为:Learning Deep Structured Semantic Models for Web Search using Clickthrough Dara。其发表的本意是用来语义相似度计算。通过对用户的Query历史和Document进行embedding编码,使用余弦相似度计算用户query的embedding和document的相似度,继而达到语义相似度计算的目的。

论文首先介绍了已有的语义分析模型,比如

  • LSA、PLSA、LDA,但是因为他们采用的都是无监督的学习方法,因此在实际的场景中表现的并不好。
  • 通过用户查询和点击序列进行建模的BLTMs和DPMs,BLTMs不仅要求共享主题分布,而且还给每个主题分配相似的词组;DPMs则使用S2Net算法并结合LTR中的piarwise方法。在实验中他们的效果表现要比LSA、PLSA、LDA效果好。然后虽然BLTMs使用了点击数据进行训练,但其使用的是最大似然方法优化目标,该方法对于排序来讲并不是最优的。DPMs则会产生一个巨大的稀疏矩阵,虽然可以通过删除词汇减小维度,但相应的效果也会减弱
  • 结合深度自编码的方法,虽然表现较传统的LSA效果好,但由于其采用的是无监督的学习方法,模型参数的优化是基于重建文档,而不是区分相关性,因此基于深度自编码的方法在效果上并没有显著优于关键词匹配。

因此作者们提出了深层结构化语义模型(Deep Structured Semantic Model,DSSM)。相比之前的提到几个模型DSSM的主要区别在于:

  • 有监督,使用最大似然函数进行优化
  • 使用word-hashing方法解决大规模且稀疏的词典问题
  • 将用户的Query行为和Document映射到同一语义空间中,通过余弦相似度计算相似性

DSSM模型的结构如下图所示:

图片DSSM模型结构

从上图可以看出,输入DSSM的是一个高维的向量,经过若干层的神经网络,输出一个低维的向量,分别用来表示user的query意图和document,最后通过余弦相似度计算Q和D的相似度。

每一层的输出可以表示为:

其中:

  • 表示第 层的权重矩阵
  • 表示第 层的偏置,特别的第一层的偏置为0

最终输出的结果为:

这里采用的激活函数为tanh,其表达形式为:

余弦相似度的计算公式为:

其中:

  • 、 分别表示用户查询低维向量和文档低维向量

论文的另一个出色的点在于抛弃了传统的Bag-of-word模型,因为其会带来高维度的向量特征,这里使用word hashing技术来代替词袋模型,word hashing基于n-gram,比如一个单词,使用word hashing技术进行拆分,首先在其两端补充标记符 “#”,假设n=3,则“#good#” 可以表示为:#go、goo、ood、od#。

但采用word hashing技术会带来一个问题就是:词汇冲突,即两个表达含义不同的词拥有相同的n-gram向量表示。但是论文作者也提到了这种概率很小,冲突的概率在0.0044%,如下图所示:

图片词汇冲突统计

在用户的一次查询中,我们假设用户点击的doc是和query相关的,这样就可以使用有监督的方法进行模型的训练,这里采用的是最大似然函数(maximize the conditional likelihood),其中要学习的参数是权重矩阵和偏置。

这里通过softmax函数计算用户query doc之后被点击的后验概率,表达式如下:

其中:

  • 表示的是平滑因子
  • 表示的整个候选文档库(其中用户在一次查询中点击的结果用表示,未点击的结果用 表示,这里对未点击的进行负采样,比例为1:4)

论文中特意提到采用不同的采样比例对结果影响不大

模型训练采用最大似然函数,优化目标是最小化下列损失函数:

其中

  • 表示神经网络的参数

详细参考:[从DSSM语义匹配到Google的双塔深度模型召回和广告场景中的双塔模型思考](

4. youtube dnn

Youtube2016年发表在RecSys上的论文介绍其自己在推荐系统上的深度学习实践,包括召回和推荐。

其整个推荐系统的架构如下图所示,其中candidate generation为生成候选池的神经网络,主要负责从大量的内容中产出少量的用户感兴趣的候选集合,ranking为排序的神经网络,最终推荐少量用户感兴趣的内容给用户。

图片系统框架

两阶段推荐方法允许我们从大量视频中进行推荐,同时确保设备上出现的少量视频是个性化的,并且适合用户。此外,这种设计允许混合由其他来源生成的候选源。

深度学习召回模型的网络结构如下图所示:

图片深度学习召回模型

使用到的特征包括:

  • 观看序列视频的平均embedding、搜索关键词的平均embedding、其他序列embedding
  • 用户的地理位置信息、设备信息(embedding编码之后的)
  • 人口统计学特征(年龄、性别、登录状态等,并将其进行归一化到[0,1])

然后将所有特征进行拼接,得到网络的原始输入特征。

这里需要注意的是,论文中将推荐问题看成了多分类问题来进行模型的训练,如下面公式所示:

其中:

  • 表示
  • 表示上下文
  • 表示时刻看到的视频
  • 表示 的embedding编码
  • 表示 的embedding编码

排序模型的网络结构图如下所示:

图片排序模型的网络结构

整个结构分为:

  • 特征输入拼接层:序列embedding特征,类别特征的embedding,连续特征的处理之后进行拼接
  • 三层的神经网络:每层神经网络激活函数使用的是ReLU,最优得结构为:
  • 输出层:在训练时,采用得时加权得逻辑回归,在线预测时,采用的是

论文中提出的召回和排序模型结构相比较矩阵分解类召回、树模型排序等取得了不错的效果,这也说明深度学习推荐系统是工业界的主流趋势,我们应该拥抱深度学习推荐系统。

论文中很值得借鉴和思考的点其实在上面的内容中已经介绍到了,主要包括:

  • 经典的三层的网络结构
  • 序列特征的处理方式
  • 连续特征的处理方式
  • 离线模型的评估和模型的优化扩展对比
  • 在线实验ABTest
  • CTR类模型中label的选取
  • … …

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值