CBOW: Continous Bag Of Words; Context词预测中心词;
Skip-gram: 中心词预测Context词;
最原始的训练网络是Context词的WordEmbedding首尾相连,输入浅层神经网络,输出层是word个数个节点的softmax;每次context词们做输入,中心词做softmax输出的label;缺点:最后一层softmax节点数太多(等于词库大小),训练速度慢;
Hierarchical Softmax:哈夫曼树,为了将词频高的词放到浅层,以减少计算次数;x为输入词的词向量,θ[i]为叶子节点词路径上的某个中间节点的分类面,sigmoid(x*θ[i])是往左走的概率,1-sigmoid(x*θ[i])是往右走的概率: CBOW: 输入词是某个上下文词,叶子节点是中心词;Skip-gram: 输入词是中心词,叶子节点是某个上下文词;
Negative Sampling: a为输入词,b为预测词,c[1]、c[2]等为负采样词,则最大化Likelihood: p(b|a)(1-p(c[1]))(1-p(c[2]))... p是用a的词向量和b(或c[i])的分界面向量θ点乘进sigmoid得到的概率;CBOW: a为某个上下文词,b为中心词;Skip-gram:a为中心词,b为上下文词; (很像LogisticRegression, 区别是每次一个正例和几个负例一起算极大似然,且每个词都有一个分类面,且除了训练分类面还要训练词向量;训练的目标是让上下文的词pair互为对方的"正例",不在上下文的词pair互为对方的"负例";上下文词们确定后,该上下文可能出现的中心词,对应他们的分类平面>0部分围成的区域,因此这些中心词的词向量们长得类似(因为都在同一个区域内))
以上两者,每个词都有词向量x和分界面向量θ这两个向量;
以上两者的本质,都是求极大似然概率;学到的都是上下文共现信息;
学习item向量:任何基于co-occurrence矩阵的算法模型,都可以套用word2vec算法的思路加以改进。比如,推荐系统领域的协同过滤算法:协同过滤算法是建立在一个user-item的co-occurrence矩阵的基础上,通过行向量或列向量的相似性进行推荐。如果我们将同一个user购买的item视为一个context,就可以建立一个item-context的矩阵。进一步的,可以在这个矩阵上借鉴CBoW模型或Skip-gram模型计算出item的向量表达,在更高阶上计算item间的相似度。
sentence-embedding的3种方法:
1. word-embedding做max-pooling或sum-pooing等;
2. sentence-id作为一个特殊词,来加入训练,该句子里的词和该sentence-id互为上下文关系;
3. RNN
Glove?
多机分布式并行:
1. 有人用ps-lite来存放embedding,worker来push梯度和pull权重;
2. 网易有道:也是用parameter-server来多机训练;
3. 我们:AllReduce同步更新1百万词表(400MB,半分钟更新完),每3分钟更新一次;每轮save几次模型,永不停止(直到kill掉),所以没有末尾同步问题;
4. Google原始论文:参数服务器DistBelief

实验评价标准是单词预测正确与否的Accuracy

本文深入探讨了CBOW和Skip-gram模型在词嵌入中的应用,包括Hierarchical Softmax和Negative Sampling技术,以及如何将word2vec算法应用于item向量学习。此外,还介绍了三种sentence-embedding的方法,并讨论了多机分布式并行训练策略。
4万+

被折叠的 条评论
为什么被折叠?



