CBOW(continue bag of words)
取滑动窗口大小为C的词,词汇表大小为V,构成输入的one_hot向量,W(c,v)矩阵,经过一个全连接层,W(v,n),将V维的one hot 向量映射到N 维空间上
再然后,用一个参数为W(n,v)的全连接层,将原来的N维空间,映射到C维空间,去预测中心词的概率。
前向结构:
1. input_layer C个V维的向量。
2.input_layer ---> hidden_layer 全连接,将C个V维向量转化成C个N维的向量
3.activation(input_layer) 将C个N维向量均值为1个N维向量
4.activation(hidden_layer) ----> output_layer 全连接层,将1个N维向量转化成1个V维向量
5.activation(output_layer) 将1个V维向量,softmax,取argmax,得到一个one_hot.
这样训练后,得到的W(v,n) 和 W(n,v)即为我们所熟知的词向量
SKIP-GRAM
与CBOW类似,只是用1个词预测上下文。
前向结构:
1. input_layer 1个V维的向量。
2.input_layer (look up) 将1个V维向量W(v,1)通过look up 找到W(v,n)中的W(n,1)相当于W(v,1)乘上W(v,n)的转置矩阵,得到W(n,1)
3.hidden_layer ----> output_layer, 全连接层,W(n,1)乘上W(v,n)得到W(v,1)
5.activation(output_layer) 将1个V维向量,softmax,取argmax,得到一个one_hot.
(1对1的预测,预测多次)
训练的优化:
目标函数:,求最小值
两种方法,层次softmax 和 负采样
1,层次softmax
利用huffman编码,层次Softmax使用一种二叉树结构来表示词典里的所有词,V个词都是二叉树的叶子结点,而这棵树一共有V−1个非叶子结点。
pi即为从根节点到目标叶子节点的每个二分类的概率。
2.负采样
原本的softmax概率将所有除了中心词意外的词,分为负例,所以计算复杂度较高,
而负采样则随机选取一些非中心词,作为负例,将词表大小的影响转换成常数。
具体算法推荐该篇博客:https://blog.csdn.net/love_linney/article/details/72860275