在很多个这些样本上去求交叉熵损失,然后最小化这个交叉熵损失。
4D*1是指将各自输入计算的结果拼接在一块。
input的权重矩阵C本质上就是把其中的对应列取出来,既然这样就直接不要矩阵C,直接先对每一个word初始化一个词向量w
projection之前要做一个拼接的操作,这个拼接的操作实在是太麻烦了,这里就直接采用了简单的求和。
NNLM是通过前n-1个词来预测第n个词,CBOW的做法是通过当前词的周边词来预测当前词,例如:我 是 中国 男 孩子,通过"中国"这个词的前后2个词来预测当前这个"中国"。
用求和得到的300维向量去和8w个词做一个softmax,但是如果词量不是8w而是400w,那么计算量还是会很大,所以要对这400w做某种压缩,压缩的方式有如下2种:
input是一个2n+1的窗口在滑动,即前面n 中间1 后面n的这么一个窗口在滑动,和句子的长度没有关系。
非叶子节点都会有一个权重θ,即图中的黄色节点。树中的每个节点都是二分类,二分类器的概率相乘,对其相乘取对数变成求和,让这个求和(概率)越大越好。
树的构造大概会根据每个word出现的频次会给一个权重,两个两个子树去做拼接,造出来这么一个Huffman Tree。
使用霍夫曼树来代替传统的神经网络,可以提高模型训练的效率。但是如果我们的训练样本里的中心词w是一个很生僻的词,那么就得在霍夫曼树中辛苦的向下走很久了。能不能不用搞这么复杂的一颗霍夫曼树,将模型变的更加简单呢?
Negative Sampling就是这么一种求解word2vec模型的方法,它摒弃了霍夫曼树。
样本中只有是一个标准答案,400w-1个错误答案,现在大部分的计算都耗在这400w-1个错误答案上,所以现在对错误答案做采样
在采样前,我们将这段长度为1的线段划分成M等份,这里M>>V,这样可以保证每个词对应的线段都会划分成对应的小块。而M份中的每一份都会落在某一个词对应的线段上。在采样的时候,我们只需要从M个位置中采样出neg个位置就行,此时采样到的每一个位置对应到的线段所属的词就是我们的负例词。
这里如果它刚好抛到标准答案,那就跳过它。我要取V-1个负例出来,我会抛骰子V-1次。
如何在全局语料里面短裙和连衣裙它们是相近的,但是在电商里面我们要体现出来它们的差别,短裙和连衣裙是有差异的服装。