一个列向量,只有字典index对应的元素是1,其他都是0.
各个单词比较独立,无法表示词与词之间的关系。
例子1:SJ是一个orange farmer。
例子2:AB是一个apple farmer。
如果使用one hot,词比较独立,orange换成apple,神经网络识别不出AB也是个人名。
而使用词嵌入,orange换成apple,神经网络能推断出AB也是个人名。
先下载别人训练好的模型(词嵌入矩阵),然后用自己的数据训练(哪怕小一点),也能有不错的表现。
已知:
可以看到这两个结果向量是一样的。这就是他们的类比逻辑之所在。
从两个结果向量中可以看出,第1个元素为-2,这个元素代表性别。
这个值很大,是因为男人与女人以及国王与王后之间最大的区别就在于性别。
它构建了一个能够通过上下文来预测未知词的神经网络,在训练这个语言模型的同时学习词嵌入。
e1 e3852都是与词有关的列向量(300*1)。这样6个列向量,调整一下,组成6*300的矩阵。
通过神经网络 调整 E、w、b,从而优化E!
Word2Vec 是一种简单高效的词嵌入学习算法,包括 2 种模型:
Skip-gram (SG):根据词预测目标上下文Continuous Bag of Words (CBOW):根据上下文预测目标词每种语言模型又包含负采样(Negative Sampling)和分级的 Softmax(Hierarchical Softmax)两种训练方法。
训练神经网络时候的隐藏层参数即是学习到的词嵌入。
假设我们的数据集中有这样一个英文句子,l want a glass of orange juice to go along with my cereal。
按照我们前面文章中学到的知识,如果我们想要预测juice这个单词(这个单词称为目标词target word),那么就需要将前面4个单词A glass of orange输入到模型中进行监督型训练(这4个单词称为上下文词context words),当然也可以将前后几个单词作为输入。
skip gram却不是这样做的。skip gram会从句子中随机选取一个单词作为context word,假设选取了orange这个单词。然后再从orange附近随机选取一个单词作为target word,假设恰恰选中了juice。这样一来就可以用(Orange-Juice)这个一词对来进行监督型训练了,也就是说orange是输入x,Juice是标签y。当然,类似的还可以产生很多词对,(Orange->Glass),(Orange->go),等等。选取的范围称之为窗口Window,例如如果将window设置为4,那么就只能在orange这个单词前后4个单词内来随机选取Target word. 有了大量词对之后,我们就可以用类似于上一篇文章中学到的方法来训练词嵌入矩阵表。
后续内容pass,见:http://captainbed.top/5-2-5/