万物皆可embedding

embedding

embedding 可以理解为比如降维,或者说把一些复杂难以表达的特征用相对来说可以用数学表达或者更易计算的形式来表达的一种映射。比如把单词转化成向量,把数字(的奇偶正负实复等性质)转化成n维矩阵。

embedding 就是一个用低维的向量表示的一个物体,可以是一个词,一个物品,一个电影等,embedding向量的性质就是能使距离相近的向量对应的物体有近似的含义,复仇者联盟和钢铁侠之间的距离就会很近,复联和乱世佳人的距离就会很远。
能够用低维向量编码,并且能保留其含义。

对于颜色,我们可以把它拆成三个特征维度,用这三个维度的组合理论上可以表示任意一种颜色。同理,对于词,我们也可以把它拆成指定数量的特征维度,词表中的每一个词都可以用这些维度组合成的向量来表示,这个就是Word Embedding的含义。当然,词跟颜色还是有很大的差别的——我们已经知道表示颜色的三个维度有明确对应的物理意义(即RGB),直接使用物理原理就可以知道某一个颜色对应的RGB是多少。但是对于词,我们无法给出每个维度所具备的可解释的意义,也无法直接求出一个词的词向量的值应该是多少。所以我们需要使用语料和模型来训练词向量——把嵌入矩阵当成模型参数的一部分,通过词与词间的共现或上下文关系来优化模型参数,最后得到的矩阵就是词表中所有词的词向量。这里需要说明的是,有的初学者可能没绕过一个弯,就是“最初的词向量是怎么来的”——其实你只要知道最初的词向量是瞎JB填的就行了。嵌入矩阵最初的参数跟模型参数一样是随机初始化的,然后前向传播计算损失函数,反向传播求嵌入矩阵里各个参数的导数,再梯度下降更新,这个跟一般的模型训练都是一样的。等训练得差不多的时候,嵌入矩阵就是比较准确的词向量矩阵了。到处挖坑蒋玉成

word2vec

CBOW:每个词由相邻的词决定
Skip-gram:每个词都决定了相邻的词

word2vec的出现,极大的促进了NLP的发展,尤其是促进了深度学习在NLP中的应用(不过有意思的是,word2vec算法本身其实并不是一个深度模型,它只有两层全连接),利用预训练好的词向量来初始化网络结构的第一层几乎已经成了标配,尤其是在只有少量监督数据的情况下,如果不拿预训练的embedding初始化第一层,几乎可以被认为是在蛮干。在此之后,一大批word embedding方法大量涌现,比较知名的有GloVe和fastText等等,它们各自侧重不同的角度,并且从不同的方向都得到了还不错的embedding表征。

2.2 GloVe

我们既可以对一个序列中的词进行embedding,那自然可以对用户的购买序列中的一个商品,用户观看序列中的一个商品,用户观看序列中的一个电影进行embedding。而广告,推荐,搜索等领域用户数据的稀疏性几乎必然要求对user和item进行embedding后才能进行有效的训练。

在另一个空间表达物体,甚至揭示了物体间的潜在关系

连续特征离散化后做embedding。

id embedding

item embedding

user embedding

time embedding

待补充例子

原文地址:https://www.cnblogs.com/gaowenxingxing/p/12782592.html