One-hot-encoding

缺点

1.向量维度和向量个数很大,假设有1w个token的话,向量个数和维度就都是1w

2. 语义相近的词的向量并不相似

Word Embedding

核心思想:可以通过上下文理解单词的语义

predection-based方法

使用前一个单词预测下一个单词

使用一个简单的多层MLP网络,输入第Wi-1个单词,输出预测下一个单词Wi。输入输出都是one-hot向量,取隐藏层中的第一层作为Wi-1单词的embedding,记为V(Wi-1)(但隐藏层的维度很小)

实际word2vec算法中采用的网络只有一层隐藏层,总共是三层网络(输入,隐藏,输出)

使用多个单词预测一个单词, sharing parameters

为什么要共享参数?

1.Wi-2和Wi-1输入顺序不同,输出Wi应该是相同的

2.降低参数量

如何使得参数共享?

做法:更新的梯度值相同即可

训练

不同方法变种

CBOW和Skip-gram

NOTE:花括号内{}为解释内容.

  • 输入层:上下文单词的onehot. {假设单词向量空间dim为V,上下文单词个数为C}
  • 所有onehot分别乘以共享的输入权重矩阵W. {V*N矩阵,N为自己设定的数,初始化权重矩阵W}
  • 所得的向量 {因为是onehot所以为向量} 相加求平均作为隐层向量, size为1*N.
  • 乘以输出权重矩阵W’ {N*V}
  • 得到向量 {1*V} 激活函数处理得到V-dim概率分布 {PS: 因为是onehot嘛,其中的每一维度代表着一个单词},概率最大的index所指示的单词为预测出的中间词(target word)
  • 与true label的onehot做比较,误差越小越好

采用交叉熵损失训练网络,得到参数W和W’,其中W矩阵就是我们需要的,也可称为look up table。任何单词的One-hot向量乘以矩阵W便得到其对应的embedding

词嵌入结果展示

相近单词具有相近的嵌入,词嵌入向量之间可以进行加减运算来衡量向量之间的距离

如何使用?

任何一个单词的one-hot表示乘以这个学习出来的矩阵W,都将得到自己的word embedding。

参考链接

word2vec是如何得到词向量的? – 知乎