一旦提到自然语言处理,想必大家都会接触到经典模型Word2vec,他是根据词语的上下文位置用来将单词矢量化的一个模型,已经被证明所转换的单词具有语义话意义,平时我们在处理文本数据时,经常会遇到数据稀疏导致训练困难的问题,举个例子,有三个单词,dog,cat,bird,如果按找平常one-hot的思维,那么会被转换成如下形式
dog | cat | bird | |
1 | 0 | 0 | |
0 | 1 | 0 | |
0 | 0 | 1 |
试想一下,若语料库有几十万个单词,那么按如上转换方法矩阵的维度会有多大,并且矩阵中大部分数据都是0,这种情况我们称为稀疏矩阵,在训练上处理起来非常困难(你的内存会爆[微笑]),接着我们的google工程师出马了,怎么办呢,压缩呀!把矩阵维度要给搞下来啊,这个过程官方称为Distributed representation(分布式表达),它的思路是通过训练,将每个词都映射到一个较短的词向量上来。所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。这个较短的词向量维度是多大呢?这个一般需要我们在训练时自己来指定。在上面的基础上稍微解释一样,所谓分布式表达就是找到一列通俗的向量去衡量这些词,例如用腿的数量去衡量dog,cat,bird,数字越大代表腿越多,这个是我随便举的一个,意会一下就行。
dog | cat | bird | |
腿的数量 | 0.8 | 0.8 | 0.5 |
行走的速度 | 0.5 | 0.6 | 0.7 |
接下来进入正题了,word2vec分为CBOW和SG模型,先从C