1. Word2Vec简介
Word2Vec全拼为:Word toVector,也就是将自然语言中的词转换为K维实数向量,用词向量来表示一个词,通过词与词之间的距离(Cos距离或者欧氏距离)来判断它们之间的语义相似度,其采用一个三层的神经网络,输入层-隐层-输出层。(核心技术是哈夫曼编码,因为哈夫曼编码中高频词的编码比较短,有利于提高计算的效率,哈夫曼的构建是根据语料库中各个词的词频建立起来的)这三层神经网络本身是对语言模型进行建模,但也同时获得一种单词在向量空间上的表示,而这个表示正是我们想要的。
2.背景
2.1词向量
词向量有两种表示方式:one-hotrepresentation和distributed representation
One-hotrepresentation:
向量的长度为词典的大小,只有一个分量为1,其他的都为0.
如:词典总共有三个词,[我,爱,学习],对应的词向量为
我:[1,0,0]
爱:[0,1,0]
学习:[0,0,1]
优点:表示简单
缺点:维数灾难(当词典很大时,向量维度要很大)
词汇鸿沟(无法刻画词与词之间的关系)
Distributedrepresentation:
用一个固定维度(如50或者100)的向量表示一个词,且一般情况下向量都经过归一化。
如:词典总共有三个词,[我,爱,学习],对应的词向量为
我:[0.8,0.6]
爱:[0.6,0.8]
学习:[0,1.0]
优点:维度固定
词向量之间的距离(欧式距离或者cos距离)表示词之间的相似性
缺点:需要训练,并且不同语料库和不同的训练方法得到的词向量可能不一样。
2.2softmax
回归解决多分类
3.模型
3.1CBOW
ContinuousBag-of-Words Model, 利用上下文预测当前词的概率
(1) Softmax
要计算一个词在上下文中的概率,然后依次将语料库进行分类(这个分类很随意),然后计算在分类中概率。
最大化目标函数:
输入层:上下文的词向量向量
投影层:对上下文向量进行求和
输出层:一棵二叉树,以语料中词频构造的哈夫曼树。然后根据二叉树不断更新参数使得目标函数取得最大值。
最大化目标函数:左边的为负类,右边的为正类。
正类的概率为:
负类的概率为:
最大化:
使用随机梯度上升法(求导获得当前状态下更新最快的方向,然后根据向该方向迈进一定的步数,这个步数就是更新的快慢,也叫学习率)
(2) 负采样(用来提高训练速度并改善所得词向量的质量,不使用哈夫曼树,而是用正负样本代替,对应的向量和为待训练的向量,每个词有一个)
正样本:当前词
负样本:非当前词
随机负采样的作用在于提高正样本的概率,而降低负样本的概率,这样既可以提高计算的效率,也可以盖上所得词向量的质量。
最大化
3.2 Skip-Gram
输入一个词,预测周围的词,允许某些词被跳过。
最大化目标函数:
(1) Softmax
目标函数:
使用随机梯度上升法,分别更新
(2) 负采样
最大化
推荐博客:Word2vec中的数学原理详解