通过倒叙的方式讲解word2vec训练词向量的过程, 满足浮躁的初学者理解模型
目标
明确我们的目标, 我们希望能够在给定的大量的文档, 学习出文档中每个词的词向量. 这里对词向量训练好坏的最直观的标准是:
具有相似上下文的词, 它们的词向量越相近
粗糙的流程
训练数据
对于文档中的每个目标词, 我们找出它的上下文, 并且与目标词分别匹配生成一组词对, 例如:
怎样 和 程序猿 谈 一场 不散场 的 爱情
这句话中, 假设我们选择程序猿为目标词时, 能够获得下列词对(考虑到训练量问题, 我们需要设置一个上下文的范围,这里我们这是为两个词)
(程序猿, 怎样)
(程序猿, 和)
(程序猿, 谈)
(程序猿, 一场)
这里,目标词程序猿就是模型的输入, 程序猿 的上下文就是模型的输出.
当然, 我们需要将句子中的每个词都作为目标词重复一次以上步骤, 这样我们就可以得到一堆训练数据了
这就是所谓的Skip-Gram模型
模型
图片来源: http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/
在训练模型前, 我们需要建立一个词典
- 就是把所有训练文档中出现的词放到一个集合里面(注意集合的概念),
- 给集合里面每个词排序,确定每个词的序号
onehot: 一个长度为n的数组,只有一个元素是1.0,其他元素是0.0。
例如在n为4的情况下,标签2对应的onehot标签就是 0.0 0.0 1.0 0.0
然后把每个词的词序转为one hot形式, 假如字典有10000个词, 则one hot的长度为10000, 需要对应的位置的值设置为1.0