google 两篇关于 word2vec 的论文:
[1]Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient Estimation of Word Representations in Vector Space. In Proceedings of Workshop at ICLR, 2013.
[2]Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean. Distributed Representations of Words and Phrases and their Compositionality. In Proceedings of NIPS, 2013.
google word2vec 项目地址
---------------------
1. 背景
(1) 机器学习数据预处理方法:
在 word2vec 出现之前,机器学习数据预处理的 自然语言处理的方法 一般是把 字词 转为 离散的单独的符号,也就是 One-Hot Encoder。具体内容参照我的上一篇博客:数据预处理1:独热编码(One-Hot)。鉴于该篇博客介绍的 One-Hot 编码的缺点,2013年,Google开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注。
(2) 现有方法存在的问题:
(1) 城市编码是随机的,向量之间相互独立,看不出城市之间可能存在的 关联关系。
(2) 其次,向量维度的大小取决于语料库中字词的多少。如果将世界所有城市名称对应的向量合为一个矩阵的话,那这个矩阵过于稀疏,并且会造成 维度灾难。
2. Word2Vec
定义:
word2vec 也叫 word embeddings,中文名 “词向量”,作用就是将 自然语言中的字词 转为 计算机可以理解的 稠密向量(Dense Vector)。
功能:
对于One-Hot 编码的维度灾难 (产生的是稀疏向量),用 Vector Representations 可以有效解决这个问题。
(1) Word2Vec 可以将 One-Hot Encoder 转化为低维度的连续值,也就是稠密向量,
(2) 并且其中 意思相近的词 将被映射到 向量空间中 相近的位置。 如果将 embed 后的城市向量 通过 PCA 降维后可视化展示出来,那么结果如下。
模型:
Word2Vec 模型其实就是简单化的神经网络。Word2Vec 方法由两部分组成。
1. 首先是将高维独热形式表示的单词映射成低维向量。例如将 10,000 列的矩阵转换为 300 列的矩阵。这个过程被称为词嵌入。
2. 第二个目标是在保留单词上下文的同时,从一定程度上保留其意义。
Input Layer:是 One-Hot Vector,
Hidden Layer: 没有激活函数,也就是线性的单元。这一层输出一个 dense vector,作为下一层的输入。
Output Layer:维度跟 Input Layer 的维度一样,用的是Softmax回归。
input layer —> hidden layer 网络的参数计算 (词嵌入过程):
上图中,乘号右边的矩阵 代表 hidden layer 的权重。设 input layer神经元数目(insize) 是 a ,hidden layer神经元数目 (outsize) 是 b ,weights数目 w,则有以下关系:w=a*b。 因此,权重矩阵的维度是 a*b。
上图中,乘号左边的绿色的元素 代表 输入向量中的一个神经元,右边绿色的一行元素 代表 该输入神经元 与 hidden layer所有神经元连接的一组weights。
下图是示例。
矩阵代表以上计算过程仍然存在缺点,因此被做简化。
缺点:
我们来看一下上图中的矩阵运算,左边分别是1 x 5 和5 x 3 的矩阵,结果应该是1 x 3的矩阵,按照矩阵乘法的规则,结果的第一行第一列元素为0 x 17 + 0 x 23 + 0 x 4 + 1 x 10 + 0 x 11 = 10,同理可得其余两个元素为12,19。如果10000个维度的矩阵采用这样的计算方式是十分低效的。
解决:
为了有效地进行计算,这种稀疏状态下不会进行矩阵乘法计算。上面的例子中,左边向量中取值为1的对应维度为3(下标从0开始),那么对应的就是矩阵的第3行(下标从0开始)—— [10, 12, 19]。这样模型中的隐层 权重矩阵 便成了一个”查找表“(lookup table)。进行矩阵计算时,直接去查 输入向量中 取值为1的 维度下 对应的那些 权重值。隐层的输出 就是 每个输入单词 的“嵌入词向量”。
3. 分类
(1) CBOW模式:
定义:给定 上下文,来预测 input word。
应用:对 小型数据库 比较合适。
t 代表语句中的位置。
(2) Skip-Gram模式:
定义: 给定 input word 来预测 上下文。
应用:在 大型语料 中表现更好。
例子:
对同样一个句子:Hangzhou is a nice city。如果要构造一个语境与目标词汇的映射关系,其实就是 input 与 label 的关系。
CBOW可以制造的映射关系为:[Hangzhou,a]—>is,[is,nice]—>a,[a,city]—>nice
Skip-Gram可以制造的映射关系为:(is,Hangzhou),(is,a),(a,is), (a,nice),(nice,a),(nice,city)