美文网首页
原来word2vec可以这么简单

原来word2vec可以这么简单

作者: 雍珑庚 | 来源:发表于2020-08-21 22:20 被阅读0次

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

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

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

    img

    <figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 14px;">img</figcaption>

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

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

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

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

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

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

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

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

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

    相关文章

      网友评论

          本文标题:原来word2vec可以这么简单

          本文链接:https://www.haomeiwen.com/subject/jtzpjktx.html