skip-gram是上一个博客中所说的Word2vec 的方法,他们都是使用模型来训练一个嵌入矩阵E。
skip-gram
假设有一句话为 i like playing basketball. 那么skip-gram 要做的就是在这句话中选择出一个上下文词,假设这个词为playing。 然后再给定一个数字n(窗口),在上下文词的前n个词与后n个词。中间选择出目标词。 比如假如数字给定为2的话。playing前面的两个词为 i 和 like。后面的两个词只有一个basketball.。 那么我们的目标词就在这三个词之间选择。可以得到以下单词组合
playing i
playing like
playing basketball
根据这个组合来训练一个模型。
其中input为context的one-hot化向量, out-put 是一个和one-hot向量维度一样的一个概率向量。 概率最大的元素所在的位置,就是target单词在语料库所在的位置。 这个模型并不是为了预测精确度,而是为了训练隐层里面的参数矩阵,作为嵌入矩阵。
负采样:
skip-gram方法最难之处在于,训练一个网络的时候,最后使用softmax。这样就加大了参数量与运算开销。为了解决这个问题负采样方法就应运而生了。
比如有一句话 i have a glass of orange juice.
在这句话中选择一个上下文单词, 假设这个单词为orange
然后再从预料库中随机选择出单词。作为orange的负样本,标签为0。在预料库中选择单词一般都与单词的频数相关的。
然后再从这句话中选择一个单词(juice)作为正样本,标签为1。
那么就得到以下数据组合
将 context和word经过one-hot化之后作为模型输入项,输出端口由segmoid函数。输出两个概率。这样相对于softmax就大大减少了参数量。 我们训练这个模型的目的依然是为了获取隐层的参数矩阵。作为嵌入矩阵。