Word2Vec学习笔记

这周开始学习word2vec,现在把网课相关内容整理如下:

1、词向量模型

以前统计文本,基本上基于词频,或者TFIDF,面临两个问题:1)两个词调换顺序,但是词频等不变,即改变位置不会影响计算结果;2)词义相近,但会出现截然不同的结果(自然语言处理与NLP被认为是两个词),其实有些词的词义是一致的,在空间上或是向量层面上的表达应该是一致的。

一个词向量的维度通常都是较高的,基本上是50-300维之间的,量的差别导致计算复杂性,计算速度不一。通常,数据的维度越高,能提供的信息也就越多,从而计算结果的可靠性就更值得信赖。

如何来描述语言的特征?通常都在词的层面上构建特征,Word2Vec就是要把词转换成向量。一份训练好的50维的某一个词的词向量大致长这样:其中数值的含义比较难解释,可以类比成降维完的结果也没法解释,计算机认识就行了。

Word2Vec学习笔记

词向量模型中的输入:前后几个词,输出:类似于softmax多分类任务,n个词的概率,概率最大的就是预测词。中间是神经网络

对于输入,在输入神经网络之前是从不限制维数的(下图是4维)很多词的大表(语料库大表)中查找输入词语对应的嵌入向量,大表的每一个词的向量是随机进行初始化(跟神经网络的权重初始化是一样的)。特别的,在word2vec模型计算过程中,前向传播计算损失函数,反向传播通过损失函数更新权重参数矩阵,连输入也会一块更新,也就是每次都会把输入的词向量更新。

Word2Vec学习笔记

2、训练数据构建

训练数据不用局限手里的文本,一切可利用的文本(只要是正常逻辑表达的),都可以当成训练数据。中文需要先进行分词操作再构建数据集。

文本是[单词1,单词2,单词3,单词4,单词5......单词n],如滑动窗口大小是3,平移一个单位的话,训练样本为:

数据1:输入 单词1,单词2 ---->输出 单词3

数据2:输入 单词2,单词3 ---->输出 单词4

数据3:输入 单词3,单词4 ---->输出 单词5

3、CBOW与Skip-Gram模型

CBOW:输入是上下文,输出是中间词。Skip-Gram:通过当前词,预测上下文。

Word2Vec学习笔记

Skip-Gram模型所需训练数据集:

Word2Vec学习笔记

如果一个语料库稍微大一些,可能的结果简直太多了,最后一层相当于个很多类别的分类任务,计算相当费时,怎么解决?

初始方案:输入两个单词(A、B),看他们是不是前后对应的输入和输出(如输出概率值0.9,标签指定为1),相当于二分类

出发点非常好,但是此时训练集构建出的标签全为1,无法进行好的训练。

4、负采样方案

改进方案:加入一些负样本(负采样模型)

Word2Vec学习笔记

负样本是人为构造出来的,不是训练样本中的,反之,正样本是训练样本中的上下文。

负样本个数为5比较合适。

5、词向量训练过程

1、初始化词向量矩阵

Embedding-词向量大表,Context-output,也可看成是input2,target是输出

Word2Vec学习笔记

Word2Vec学习笔记

2、通过神经网络反向传播来计算更新,此时不光更新权重参数矩阵W,也会更新输入数据(input 和output)

Word2Vec学习笔记