提起Embedding,就不得不提Word2vec,它不仅让词向量在自然语言处理领域再度流行,更为关键的是,自2013年谷歌提出Word2vec以来,Embedding 技术从自然语言处理领域推广到广告、搜索、图像、推荐等深度学习应用领域, 成了深度学习知识框架中不可或缺的技术点。作为经典的Embedding方法,熟悉 Word2vec对于理解之后所有的Embedding相关技术和概念至关重要。

什么是Word2vec?

Word2vec是“word to vector”的简称,顾名思义,Word2vec是一个生成对 “词”的向量表达的模型。
想要训练 Word2vec 模型,我们需要准备由一组句子组成的语料库。
假设其中一个长度为 T 的句子包含的词有 w1,w2……wt,并且我们假定每个词都跟其相邻词的关系最密切(这个假设非常重要)。
根据模型假设的不同,Word2vec 模型分为两种形式,CBOW 模型(图左)和 Skip-gram 模型(图右)。
其中,CBOW 模型假设句子中每个词的选取都由相邻的词决定,因此我们就看到 CBOW 模型的输入是 wt周边的词,预测的输出是 wt。 Skip-gram 模型则正好相反,它假设句子中的每个词都决定了相邻词的选取,所以你可以看到 Skip-gram 模型的输入是 wt,预测的输出是 wt周边的词。
按照一般的经验,Skip-gram 模型的效果会更好一些,所以我接下来也会以 Skip-gram 作为框架,来给你讲讲 Word2vec 的模型细节。

word2vce是怎样生成样本的?

我们从语料库中抽取一个句子,选取一个长度为 2c+1(目标词前后各选 c 个词)的滑动窗口,将滑动窗口由左至右滑动,每移动一次,窗口中的词组就形成了一个训练样本。根据 Skip-gram 模型的理念,中心词决定了它的相邻词,我们就可以根据这个训练样本定义出 Word2vec 模型的输入和输出,输入是样本的中心词,输出是所有的相邻词。
例如:

WORD2VEC模型的结构

有了训练样本之后,我们最关心的当然是 Word2vec 这个模型的结构是什么样的。它的结构本质上就是一个三层的神经网络。

它的输入层和输出层的维度都是 V,这个 V 其实就是语料库词典的大小。假设语料库一共使用了 10000 个词,那么 V 就等于 10000。根据生成的训练样本,这里的输入向量自然就是由输入词转换而来的 One-hot 编码向量,输出向量则是由多个输出词转换而来的 Multi-hot 编码向量,显然,基于 Skip-gram 框架的 Word2vec 模型解决的是一个多分类问题。

隐层的维度是 N,N 的选择就需要一定的调参能力了,我们需要对模型的效果和模型的复杂度进行权衡,来决定最后 N 的取值,并且最终每个词的 Embedding 向量维度也由 N 来决定。
最后是激活函数的问题,这里我们需要注意的是,隐层神经元是没有激活函数的,或者说采用了输入即输出的恒等函数作为激活函数,而输出层神经元采用了 softmax 作为激活函数。

怎样把词向量从Word2vec模型中提取出来?

在训练完 Word2vec 的神经网络之后,可能你还会有疑问,我们不是想得到每个词对应的 Embedding 向量嘛,这个 Embedding 在哪呢?其实,它就藏在输入层到隐层的权重矩阵 WVxN中。我想看了下面的图你一下就明白了。

你可以看到,输入向量矩阵 WVxN 的每一个行向量对应的就是我们要找的“词向量”。比如我们要找词典里第 i 个词对应的 Embedding,因为输入向量是采用 One-hot 编码的,所以输入向量的第 i 维就应该是 1,那么输入向量矩阵 WVxN 中第 i 行的行向量自然就是该词的 Embedding 啦。细心的你可能也发现了,输出向量矩阵 W′ 也遵循这个道理,确实是这样的,但一般来说,我们还是习惯于使用输入向量矩阵作为词向量矩阵。

Word2vec的负采样训练方法

虽然上面给出了Word2vec的模型结构和训练方法,但事实上,完全遵循原始的Word2vec多分类结构的训练方法并不可行。假设语料库中的词的数量为 10000,就意味着输出层神经元有10000个,在每次迭代更新隐层到输出层神经元的权重时,都需要计算所有字典中的所有10000个词的预测误差(prediction error) ,在实际训练过程中几乎无法承受这样巨大的计算量。
为了减轻Word2vec的训练负担,往往采用负采样(Negative Sampling )的方法进行训练。相比原来需要计算所有字典中所有词的预测误差,负采样方法只 需要对采样出的几个负样本计算预测误差。在此情况下,Word2vec模型的优化 目标从一个多分类问题退化成了一个近似二分类问题,如下所示。

其中是输出词向量(即正样本),h是隐层向量,V’wj是负样本词向量。由于负样本集合的大小非常有限(在实际应用中通常小于10),
在每轮梯度下降的迭代中,计算复杂度至少可以缩小为原来的1/1000 (假设词表大小为10000)。
实际上,加快 Word2vec训练速度的方法还有Hierarchical softmax (层级 softmax ),但实现较为复杂,且最终效果没有明显优于负采样方法,因此较少采用,感兴趣的读者可以阅读参考文献,其中包含了详细的Hierarchical softmax 的推导过程。

Word2vec在其他领域的应用——Item2vec

在Word2vec诞生之后,Embedding的思想迅速从自然语言处理领域扩散到 几乎所有机器学习领域,推荐系统也不例外。既然Word2vec可以对词“序列” 中的词进行Embedding,那么对于用户购买“序列”中的一个商品,用户观看 “序列” 中的一个电影,也应该存在相应的Embedding方法,这就是Item2vec方法。

Item2vec的基本原理

矩阵分解部分曾介绍过,通过矩阵分解产生了用户隐向量和物品隐向量,如果从Embedding的角度看待矩阵分解模型,则用户隐向量和物品隐向量就是一种用户Embedding向量和物品Embedding向量。由于Word2vec的流行,越来越多的Embedding方法可以被直接用于物品Embedding向量的生成,而用户Embedding向量则更多通过行为历史中的物品Embedding平均或者聚类得到。利用用户向量和物品向量的相似性,可以直接在推荐系统的召回层快速得到候选集合,或在排序层直接用于最终推荐列表的排序。正是基于这样的技术背景, 微软于2016年提出了计算物品Embedding向量的方法Item2vec。
相比Word2vec利用“词序列”生成词Embedding。Item2vec利用的“物品序列”是由特定用户的浏览、购买等行为产生的历史行为记录序列。
假设Item2vec中一个长度为K的用户历史记录为w1,w2,…,wt,类比 Word2vec, Item2vec的优化目标如下所示。

Item2vec与Word2vec唯一的不同在于,Item2vec摒弃了时间窗口的概念,认为序列中任意两个物品都相关, 因此在ltem2vec的目标函数中可以看到,其是两两物品的对数概率的和,而不仅是时间窗口内物品的对数概率之和。
在优化目标定义好之后,Item2vec剩余的训练过程和最终物品Embedding的产生过程都与Word2vec完全一致,最终物品向量的查找表就是Word2vec中词向量的查找表。

广义上的Item2vec

事实上,Embedding对物品进行向量化的方法远不止Item2vec。广义上讲, 任何能够生成物品向量的方法都可以称为Item2vec。典型的例子是曾在百度、 Facebook等公司成功应用的双塔模型。

在广告场景下的双塔模型中,广告侧的模型结构实现的其实就是对物品进行 Embedding的过程。该模型被称为“双塔模型”,因此以下将广告侧的模型结构 称为“物品塔”。那么,“物品塔”起到的作用本质上是接收物品相关的特征向量。 经过物品塔内的多层神经网络结构,最终生成一个多维的稠密向量。从Embedding 的角度看,这个稠密向量其实就是物品的Embedding向量,只不过Embedding 模型从Word2vec变成了更为复杂灵活的“物品塔”模型,输入特征由用户行为 序列生成的one-hot特征向量,变成了可包含更多信息的、全面的物品特征向量。 二者的最终目的都是把物品的原始特征转变为稠密的物品Embedding向量表达, 因此不管其中的模型结构如何,都可以把这类模型称为“广义”上的Item2vec 类模型。

Item2vec方法的特点和局限性

Item2vec作为Word2vec模型的推广,理论上可以利用任何序列型数据生成 物品的Embedding向量,这大大拓展了 Word2vec的应用场景。广义上的Item2vec 模型其实是物品向量化方法的统称,它可以利用不同的深度学习网络结构对物品 特征进行Embedding化。
Item2vec方法也有其局限性,因为只能利用序列型数据,所以Item2vec在处 理互联网场景下大量的网络化数据时往往显得捉襟见肘,这就是Graph Embedding技术出现的动因。

经典的Embedding方法Word2vec相关推荐

  1. 推荐算法之Embedding方法汇总

    前言 推荐算法的效果离不开embedding的使用,embedding是推荐算法中很重要的一个组成部分,不过也是根据不同的业务需求和数据采取不同的embedding方式,在这里我也是稍微总结常用的几种 ...

  2. 深度学习中不得不学的Graph Embedding方法

    原文链接:https://zhuanlan.zhihu.com/p/64200072 深度学习中不得不学的Graph Embedding方法 王喆 ​ 数据挖掘等 3 个话题下的优秀答主 ​ 关注他 ...

  3. Graph Embedding:word2vec更进一步?

    word2vec和由其衍生出的item2vec是embedding技术的基础性方法,但二者都是建立在"序列"样本(比如句子.推荐列表)的基础上的.而在互联网场景下,数据对象之间更多 ...

  4. 词向量经典模型:从word2vec、glove、ELMo到BERT

    前言 词向量技术将自然语言中的词转化为稠密的向量,相似的词会有相似的向量表示,这样的转化方便挖掘文字中词语和句子之间的特征.生成词向量的方法从一开始基于统计学的方法(共现矩阵.SVD分解)到基于不同结 ...

  5. 06_1.Pytorch中如何表示字符串、word embedding、One - hot、Embedding(Word2vec、BERT、Glove)【学习总结】

    1.6.1.如何表示字符串 1.6.1.1.word embedding 1.6.1.1.1.文本表示(Representation) 1.6.1.1.2.独热编码 | one-hot represe ...

  6. 深度学习推荐系统中各类流行的Embedding方法

    Embedding技术概览: 对其它Embedding技术不熟悉,可以看我的上一篇文章:深度学习推荐系统中各类流行的Embedding方法(上) Graph Embedding简介 Word2Vec和 ...

  7. 深度学习推荐系统中各类流行的Embedding方法(下)

    我的个人微信公众号: Microstrong 微信公众号ID: MicrostrongAI 微信公众号介绍: Microstrong(小强)同学主要研究机器学习.深度学习.推荐系统.自然语言处理.计算 ...

  8. Word Embedding与Word2Vec学习

    一.词嵌入背景 Embed这个词,英文的释义为, fix (an object) firmly and deeply in a surrounding mass, 也就是"嵌入"之 ...

  9. Embedding和Word2vec的理解

    文章目录 前言 介绍 背景知识 keras中的Embedding和Word2vec的区别 CBOW和Skip-gram CBOW Skip-gram Skipgram with Negative Sa ...

最新文章

  1. Android怎么不显示手机模型,以编程方式获取Android手机模型
  2. 【c语言】蓝桥杯算法提高 3-3求圆面积表面积体积
  3. Incorrect number of FETCH variables
  4. 批量修改mp3文件的title等
  5. Python LDA主题模型实战
  6. 爬虫的配置、启动和终止
  7. mysql操作语句now_【MySQL数据库开发之二】MySQL 基础语句的书写与操作!
  8. 使用POI导入和导出 Excel文件
  9. linux内核I2C子系统学习(二)
  10. java学习避免死锁
  11. jquery中prop()和attr()的使用
  12. Vector Packet Processor(VPP) - 层二层三转发图谱
  13. 软件测试对计算器的测试,软件测试计算器的测试用例
  14. 给pmbus添加mfr_id, mfr_version, mfr_model节点显示
  15. XMPP tigase 8.0 与 strophe.js 测试Web聊天服务/即时通信
  16. BZOJ 3097 Hash Killer I
  17. php for iis express,iis10.0完整安装包
  18. matlab图片白边_matlab 图像保存时去除白边
  19. Windows中怎么下载桌面便签小工具 便签小工具简单使用教程
  20. 实现永久关闭445服务

热门文章

  1. WebGL(ThreeJS)加载乐高Ldraw模型案例
  2. 联想win10进bios的正确方式,并不是按键!!!!!
  3. 一文讲透商业智能BI 到底是什么[转]
  4. HTML5 Canvas自定义圆角矩形与虚线(Rounded Rectangle and Dash Line)
  5. ORACLE OCM备考之外部表管理使用非压缩属性脚本报错KUP-04095与权限
  6. window下xmind-pro-8破解版
  7. PowerPoint2003常用快捷键
  8. bert获得词向量_NLP中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert
  9. Element-Plus中 “Loding” 组件的按需引用类型问题
  10. html页脚颜色,HTML颜色一览(color)