06 | Embedding基础:所有人都在谈的Embedding技术到底是什么?
06 | Embedding基础:所有人都在谈的Embedding技术到底是什么?
讲述:王喆
时长16:42大小15.29M
什么是 Embedding?
Embedding 技术对深度学习推荐系统的重要性
经典的 Embedding 方法,Word2vec
什么是 Word2vec?
Word2vec 的样本是怎么生成的?
Word2vec 模型的结构是什么样的?
怎样把词向量从 Word2vec 模型中提取出来?
Word2vec 对 Embedding 技术的奠基性意义
Item2Vec:Word2vec 方法的推广
小结
课后思考
赞 55
提建议
精选留言(53)
- 神经蛙2020-12-04最近刚好看了看Word2Vec,先列一下看了的资料: 1.Numpy实现的基础版 Word2vec https://github.com/YelZhang/word2vec_numpy/blob/495c2bce99fcdfe281bce0918a6765efd3179b07/wordtovec.py 2.公式推导 https://zhuanlan.zhihu.com/p/136247620 https://zhuanlan.zhihu.com/p/108987941 3.Google Word2vec c源码详解 https://blog.csdn.net/jeryjeryjery/article/details/80245924 https://blog.csdn.net/google19890102/article/details/51887344 https://github.com/zhaozhiyong19890102/OpenSourceReading/blob/master/word2vec/word2vec.c **理解有问题的话,麻烦大家指出来,互相进步~** 说一下看了的理解,Google的源码中Skip-gram,中间词预测周围词是一个循环,每次的优化目标词只有一个周围词中的一个。CBOW是将周围词的向量加和求平均作为上下文词向量,来预测中心词。 为什么会出现层次Softmax和负采样的优化方法? 需要先摆一下前向传播和反向传播公式: -- 略去了下标,以及矩阵乘法的先后。 词表长度V,Embedding长度N 输入:X(shape:(1,V)),输入到隐层矩阵W1(shape: V,N), 隐层到输出矩阵W2(shape: N,V) 前向传播: H=X * W1 (shape:1,N) U=H * W2 (shape:1,V) Y=softmax(U) 这里计算Softmax,参与计算的是V个元素。 反向传播: Loss= -sum(y * logY) Loss对W2偏导=(Y-1)*H Loss对W1偏导=(Y-1)*W2*x (由于X是one-hot向量,相乘后实际只有一行是非0) W1更新时只更新一行,W2更新时更新整个矩阵。 原因: 1.前向传播时计算softmax开销大 2.反向传播时更新W2矩阵开销大 于是就有了对Sofmax这里的优化。最近主要看了负采样。 负采样: 每次训练时,需要预测的目标词给分成2类。一类是目标词,另一类是非目标词(个数可人工指定)(负采样而来,采样词频高的词,TensorFlow里面是这样,与原论文不同)。此时就是个二分类问题,Loss就变了。变成了Sigmod的形式。这样在前向传播不用计算Softmax,反向传播时将每次更新的向量变成了很少的几个,而不是原始的V。降低开销。 关于W1和W2哪被用来做词向量,一般是W1。 这里我有点疑惑,用层次Softmax或者负采样优化方法会不会对W2的效果产生影响?因为更新时没有用到所有数据,所以用W1作为词向量?展开
作者回复: 太棒了,很好的资料总结。 W1,W2那个问题,我觉得不会有影响,如果负采样对W2有影响的话,对W1也会有影响。
51 - wolong2020-10-14老师您好,我这边有个问题。假如我们是做商品推荐,假如商品频繁上新,我们的物品库会是一个动态的,Embedding技术如何应对?
作者回复: 非常好的冷启动问题,你有什么想法,想先听听你自己的思考。
共 9 条评论26 - 张弛 Conor2020-10-15计算向量间相似度的常用方法:https://cloud.tencent.com/developer/article/1668762
作者回复: 非常好的文章,很全面了,推荐大家学习。
共 2 条评论24 - 杜军2020-10-14期待王老师的 Graph Embedding 讲解,能否配合一个 notebook 的示例就更完美了14
- Geek_3c29c32020-10-23老师,想问一下,业界利用embedding召回时: 1、是用用户embedding与item embedding的相似性召回还是先计算用户之间的相似性TOPN,然后生成一个user-item矩阵,看看最相似的用户买的多的item得分就更高?; 2、业界用embedding召回如何评价优劣?数据集会划分训练集和验证集吗,来验证购买率,召回率等指标;如果划分,是按照时间划分还是按照用户来划分啊?
作者回复: 1. 一般用前者 2.业界一般直接用线上AB test的结果来衡量embedding召回的优劣。离线指标可以做参考。如果做离线测试,一般采用时间划分,要避免引入未来信息。
12 - 夜枭2021-01-21王老师,关于item2vec有一些业务上的疑问,比如用户的点击item序列,这个item的候选集大概得是一个什么规模才能够线上推荐使用呢,目前在做的item量级比较大的话利用spark处理时耗时也会时间长,导致召回的文章并不能很快的更新,几乎是天级别的,不知道您做业务时是怎么权衡更新的频率和数据量这样一个关系的
作者回复: 这是个好问题。但我觉得你自己思考一下就应该清楚这个问题根本没有什么标准答案。 简单说一下自己的经验,确实embedding相关的模型训练起来都是比较慢的,所以item达到上百万之后,天级别更新是很多公司的选择。 至于如何提高更新频率。这当然是我们希望的,那就得做一些取舍了。做数据的sample?降低embedding的复杂度?或者对于新的物品想起一些规则性的手段生成embedding?只要是你自己想到的方法,都可以尝试。
8 - Vinny2020-12-02老师你好,想请教您个可能与这张内容关联不太大的问题,我是搞nlp的,但是之前在知乎上面看推荐的 user embedding lookup表问题。 像 user id 可能有很多 上千万个,lookup 表的维度就会特别大,而且一些长尾的id 出现交互的次数过少,可能学不到什么好的embedding。 那么工业界是怎么解决这个问题的呢? 之前在知乎上面看一些笼统的说法,比如用hash 让多个id对应一个embdding之类的(但是没有解释这么做的合理性),想请教一下这方面有没有什么推荐的好论文,想去研究下 谢谢!展开
作者回复: 用hash 让多个id对应一个embdding之类的(但是没有解释这么做的合理性)其实没有任何合理性,就是单纯为了减少问题规模。 这是一个工程问题,应该不会有论文专门探讨这个问题。本质上是一个权衡利弊的过程,你想损失一些精度,就做一些截断和丢弃的处理,你想尽量为更多user生成embedding,不在乎训练时间和数据库空间,就保留他们。
共 2 条评论9 - 张弛 Conor2020-10-15老师,有两个问题想请教一下: 1.为什么深度学习的结构特点不利于稀疏特征向量的处理呢? 2.既然输出向量是Multi-hot,那用softmax这种激活函数是否不太好呢?Softmax有输出相加和为一的限制,对于一对多的任务是不是不太合适呢?
作者回复: 第一个问题非常好,我想你能够好好想一下梯度反向传播的过程,再回头看看这个问题。我相信你应该能得出自己的答案。 第二个也非常好,在训练的时候,确实要把最终的label做归一化,比如这样[0, 0.5, 0, 0.5, 0]。这是训练多分类模型的标准做法。另一种做法是把上一个样本拆成两个独立的onehot样本[0, 1, 0, 0, 0] 和 [0, 0, 0, 1, 0],这样训练也可以,就不存在你说的信息丢失的问题。
共 7 条评论9 - Dikiwi2020-10-14相似性一般用欧式距离,cosine距离; 线上快速召回一般有用ANN,比如LSH算法进行近似召回。
作者回复: 赞,ANN的方法也是后续的课程内容。
8 - 阳光明媚2021-01-12常用的相似度度量有余弦距离和欧氏距离,余弦距离可以体现数值的相对差异,欧式距离体现数值的绝对差异;例如,衡量用户点击次数的相似度,欧氏距离更好,衡量用户对各类电影的喜好的相似度,用余弦距离更好。
作者回复: 很好
8 - 浣熊当家2020-10-29请问下老师,同样作为降维的手段,embedding和PCA的本质区别,可不可以理解为, embedding可以得到更为稠密的向量,并且降维后的各维度没有主次排序之分, 而PCA降维后的向量稠密度并不会增加, 而是得到主成分的排序。 所以如果为了提高模型计算的聚合的速度,就要选择embedding, 如果想降低模型的复杂度和防止过拟合,应该选择PCA。
作者回复: 从直观上可以这么理解。但是显然Embedding的优化空间要大得多,因为我们可以使用任何复杂网络生成这个embedding,所以embedding本身可以包含非常多的信息,不仅仅是降维这么简单的目的。 当然,降维肯定是Embedding的一个很重要的目的和理解的方式,但要清楚更多的embedding手段,灵活运用。
共 3 条评论7 - 陈威洋2021-03-09业界常用 余弦相似度方式,文本相似度TD-IDF方式, 想了解更多:https://cloud.tencent.com/developer/article/1668762 对word2vec的学习 Word2Vec是词嵌入模型之一,它是一种浅层的神经网络模型,它有两种网络结构:CBOW和Skip-gram。 CBOW:根据上下文出现的词语预测当前词的生成概率; Skip-gram:根据当前词预测上下文各个词的概率。 注意:在CBOW中,还需要将各个输入词所计算出的隐含单元求和。 Softmax激活函数 输出层使用Softmax激活函数,可以计算出每个单词的生成概率。具体公式f(x) = e^x / sum( e^x_i ),它运用的是极大似然。 由于Softmax激活函数种存在归一化项的缘故,从公式可以看出,需要对词汇表中的所有单词进行遍历,使得每次迭代过程非常缓慢,时间复杂度为O(V),由此产生了Hierarchical Softmax(层次Softmax) 和 Negative Sampling(负采样)两种改进方法。 Negative Sampling(负采样): 每次训练时,需要预测的目标词给分成2类。一类是目标词,另一类是非目标词(个数可人工指定)(负采样而来,采样词频高的词,TensorFlow里面是这样,与原论文不同)。此时就是个二分类问题,Loss就变了。变成了Sigmod的形式。这样在前向传播不用计算Softmax,反向传播时将每次更新的向量变成了很少的几个,而不是原始的V,降低开销。(详细可见评论区) Hierarchical Softmax(分层Softmax): 它不需要去遍历所有的节点信息,时间复杂度变为O(log(V))。 基本原理:根据标签(label)和频率建立霍夫曼树;(label出现的频率越高,Huffman树的路径越短);Huffman树中每一叶子结点代表一个label; 参考:https://blog.csdn.net/qq_35290785/article/details/96706599 embedding和PCA的本质区别: 引用老师的留言:我觉得理解非常正确,embedding虽然有降维的目的,但初衷是希望在最终的vector中保存物品相关性的信息,甚至依次进行运算。而PCA就是单纯找出主成分进行降维,二者的设计动机差别是比较大的。展开
作者回复: 非常好的总结,推荐其他同学参考
共 2 条评论6 - Jay Kay2021-03-04老师有个问题,item2vec所谓的相似性是拟合的一种隐式的共现么?毕竟感觉通过行为序列得到的embedding没有办法反应语义上的相似性。不知道这样的理解对不对。
作者回复: 我觉得你理解的非常正确,其实就是一种共现性。本质上甚至和协同过滤有些相像。 语义这个事情其实不好讲,对于一个物品什么是语义呢?所以在NLP之外,我们也很少提这个概念。
5 - 大龄小学生2020-10-22老师,维度过高为什么不用降维,而用embedding
作者回复: 本质上embedding就是降维的一种方式。比如经典的降维方法PCA,其实也就是用主成分分量来表示一个高维向量。 但是现在embedding的使用方式灵活多了,生成embedding的神经网络可以非常灵活,所以深度学习里面还是embedding用的更广泛一些。
共 3 条评论6 - AstrHan2020-11-25物品embedding和用户embedding如何一起训练,让他们在同一个空间里呢,我理解这样才可以进行物品和用户的相似度计算。
作者回复: 两个方法,一是item embedding生成好后,在利用item embedding生成user embedding。二是使用矩阵分解这类方法生成item和user embedding。
共 4 条评论4 - follow-fate2020-11-24老是您好,在对物品序列做embeding的时候,物品序列对应的标签序列是什么呢?word2vec预测的输出,skip-gram是根据中心词预测周边词,那物品序列做embeding时也是预测序列中的某个特征吗?
作者回复: embedding本质上是一个无监督学习的方法,所以不需要所谓的标签。对于item2vec方法,我们只是希望embedding能够学习到序列中靠近物品的相似性,所以物品的序列本身就是全部的训练样本,不需要再输入label。
4 - wanlong2020-10-20老师您好,非常棒的文章,请教一个问题: 如果要往更深部分的学习,除了朝您说的算法细节,还有对应各个环节实现遇到的工程挑战,并设计相对的优化方向,这样算一个靠谱的掌握了吧?
作者回复: 是的,就是这两个方向,理论细节和实践经验。 特别是实践经验,在数据量大了之后,会遇到很多工程上的问题,需要不断的积累。
4 - 时不时充充电2021-03-06老师,想问个问题,工程实践中,如何评价一个embedding向量的好坏?有没有统一的方法论指导?
作者回复: 可以从14课中看到我的一些思路。总的来说没有统一的方法,最好是能够结合应用场景进行一些效果测试。
3 - Geek_1d26c52021-02-27老师您好,我注意到word2vec模型在生成训练样本的时候跳过了"的"和"了"这样的停用词。请问这样做的原因是因为停用词和附近单词的语义关系不大吗?
作者回复: 停用词是最好要跳过的,因为本身不包含具体语义,学出相似度意义也不大。
3 - 轩2021-01-07老师您好,昨天的提出的一些问题都得到了您的回复,非常感谢。 关于冷启动物品的embedding,我有一些思路,不知是否可行?可业界中也没看到类似做法? 具体而言,拿冷启动物品的标题描述等文字信息喂进rnn吐出embedding,训练好这个rnn之后,就可以冷启动物品入库之时,通过模型获得embedding了,不依赖于用户行为。 至于论据,搜索等都是基于标签标题描述所做,这些文字信息是人类语言关于物品的编码,转换成embedding编码也是可行的? 训练的话,end2end训练,拿点击序列去预测下一个点击。或是拿有充分历史行为的物品训练,预测cosine similarity,应该都可以train这个rnn吧? 之前我负责的业务场景是新闻视频类信息流推荐,内容都很新,大量的冷启动,这是一直以来的一个想法。 由于种种原因,短时间内我没有实践机会了,可经过一段时间的学习,发现对于冷启动好像业界并没有这样做?或是这个想法有些问题?展开
作者回复: 这个做法当然是可行的,就是基于新闻内容的embedding生成,nlp里面很多应用。 但很多实践都证明仅基于内容进行推荐,精确度往往比较低,用于冷启动是可以的,但在新闻出来以后,要尽快想办法把interaction信息融入到模型里面。 不用管业界有没有做过什么的,你管别人干嘛,自己去试,你自己的问题,有谁比你更了解。
共 3 条评论3