当数据量小的时候,一般使用CBOW模型
当数据量大的时候,一般使用Skip-Gram模型
一、CBOW模型
- 词袋子模型
- 层次softmax
- 负例采样
1、词袋子模型
词袋子模型是去掉了隐藏层,使用了一个上下文窗口,将映射层的乘法变为的加法。
优点:简单方便快速,预料充足的条件下,对于简单的自然语言处理,任务效果不错。
缺点:无法解决多义词问题<每个词都有唯一的编码>,无法关注词与词之间的顺序。
2、层次softmax<两边预测中间>
使用Huffman Tree编码,是一种最优二叉树,将计算量转变为树的深度,这样每个字或者词都有一个唯一的编码
例如:我喜欢观看巴西足球世界杯
3、负例采样<既可以中间预测两边,又可以两边预测中间,是一种常用的加速工具>
是一种有监督学习
假设有1亿个数据,普通的神经网络 input(1亿)–> output(1亿)
下面是负例采样的步骤:
首先将一亿个词通过TF-IDF,得出每个词的权重,
在将[0,1] 分成10的8次方<不固定>等份。
注释:数据的TF-IDF和为1,不懂自己百度
例如:取500个样例,其中499负样例,1正样例
随机从[1,(10的8次方)-1]中抽取500份,要求其中499份落在负样例区间,最后剩下一个为正样例。
要求:对应的负样例不能重复,例如其中499份不能有重复出现在 红2 空间。
当出现重复或者正样例(红1空间),在重新随机一个。(正样例空间位置不固定)
例如:我的名字叫做张三。
‘’张三‘’是要找到的正样例,499份所落在的空间对应不能是 红1 所在的位置,且不能重复出现一个样例,例如多个太阳等等
最终得到499负样例+1正样例
二、Skip-Gram模型1
大致与层次softmax相同<中间预测两边>