标签:layer 向量 hot 关系 第一个 最简 需要 str strong
一直以来感觉好多地方都吧Word Embedding和word2vec混起来一起说,所以导致对这俩的区别不是很清楚。
其实简单说来就是word embedding包含了word2vec,word2vec是word embedding的一种,将词用向量表示。
1.最简单的word embedding是把词进行基于词袋(BOW)的One-Hot表示。这种方法,把词汇表中的词排成一列,对于某个单词 A,如果它出现在上述词汇序列中的位置为 k,那么它的向量表示就是“第 k 位为1,其他位置都为0 ”的一个向量。但是这种表示方法学习不到单词之间的关系(位置、语义),并且如果文档中有很多词,词向量可能会很长。对于这两个问题,第一个问题的解决方式是ngram,但是计算量很大,第二个问题可以通过共现矩阵(Cocurrence matrix)解决,但还是面临维度灾难,所以还需降维。
2.现在较常用的方法就是通过word2vec训练词汇,将词汇用向量表示。该模型涉及两种算法:CBOW和Skip-Gram。
cbow是给定上下文来预测中心词,skip-gram是通过中心词预测上下文,两者所用的神经网络都只需要一层hidden layer.
他们的做法是:
cbow:
将一个词所在的上下文中的词作为输入,而那个词本身作为输出,也就是说,看到一个上下文,希望大概能猜出这个词和它的意思。通过在一个大的语料库训练,得到一个从输入层到隐含层的权重模型。如下图所示,第l个词的上下文词是i,j,k,那么i,j,k作为输入,它们所在的词汇表中的位置的值置为1。然后,输出是l,把它所在的词汇表中的位置的值置为1。训练完成后,就得到了每个词到隐含层的每个维度的权重,就是每个词的向量。
skip-gram
将一个词所在的上下文中的词作为输出,而那个词本身作为输入,也就是说,给出一个词,希望预测可能出现的上下文的词。通过在一个大的语料库训练,得到一个从输入层到隐含层的权重模型。如下图所示,第l个词的上下文词是i,j,k,那么i,j,k作为输出,它们所在的词汇表中的位置的值置为1。然后,输入是l,把它所在的词汇表中的位置的值置为1。训练完成后,就得到了每个词到隐含层的每个维度的权重,就是每个词的向量。
具体的细节在学习过程中感觉这位用户的博客https://www.cnblogs.com/pinard/p/7243513.html 写的挺好的。
对于我上面的理解如果觉得有帮助,点个赞咯~~~~~~
标签:layer 向量 hot 关系 第一个 最简 需要 str strong
原文地址:https://www.cnblogs.com/kjkj/p/9824419.html