原来word2vec可以这么简单

说到Word2vec,它可谓非结构化数据里面的佼佼者,尤其是在推荐和NLP当中, 足以体现它的优势所在,并且多年一直备受工业界喜爱. 那么word2vec到底是怎么个原理的, 发现身边总是有很多人问, 确不能准确的说出为什么是两个矩阵, 到底是怎么自动反向传播的, 以及对于softMax之后那么大的维度数据,是怎么加速计算的,本文就在这这里做一简单概述.

Word2vec实际是一种浅层的神经网络, 它有两种网路结构,分别是CBOW(Continus Bag of Words)和Skip-Gram.

通常我们可以都看到类似这样的一个图

img
img

对于两种模型都可以表示为输入层(Input),映射层(Projection)和输出层(Output)组成的神经网络.

在输入层,一个词转成one-hot向量,在第一个矩阵上进行计算(W1.shape=(V*N)),然后再通过第二个矩阵(W2.shape=(N*V)),最后输出的就是一个超级巨大的softmax.

对于CBOW(Continuous Bag-of-Words)这种算法,通过周围词来预测中心词,这个也是使用最广泛的,而且效果最好,对于输出的是多个词的one-hot编码,然后进多个词的one-hot求和,然后输入网络进行计算.

对于Skip-Gram,是使用当前词进行周围词的预测,其他的和CBOW一样的.

Word2Vec本质上是一个语言模型,它输出的节点数是V个,对应V个词语,理所当然是一个分类问题, 可惜, 这个分类问题不是那么容易计算的,对于中文文字大概有5000左右,也就是说模型是一个5000类的分类了, 可是对于英文呢,300K的词汇量,想象在分母上指数相加,那个啥,不切合实际吆.

理想总是丰满的,现实却是骨感的,方案是设计出来了,但是这样的计算量,那是现在的计算机能在有限的是时间内计算出来的, 提出该解决方案的作者也是厉害, 不仅提出了解决方案,还搞了两,智商完全碾压我们这些NLP小小兵.

对于第一种方案,其实细想是很简单的, 对于滑动窗口,窗口之外几百万的词完全没必要都在分母上进行计算,按照现实生活中,一个单词仅仅与其周围的单词之间有语义关联,相距太远的就没有什么关联性了,于是乎, 采用的负采样(Negative Sampling)的方案, 对于距离较远的词语,只获取部分词语, 就可以达到预期效果.

而另一种方案更里巧妙至极,作者使用一个哈夫曼树(Hierarchical Softmax),对于每一个叶子结点是一个词语的向量,对于常用词,他的在树中的深度浅一些,生僻词在树上的深度深一些,然后树上的每一个结点是一个矩阵,而每一个词语的向量就是他所在路径向量的相乘.

好了,本文大概就说到这, 站在工程的角度说理论,拒绝繁杂理论推导,争取文章越写越通俗!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值