Word2vec

预备知识:
LR、贝叶斯公式、赫夫曼编码、统计语言模型、n-gram模型、神经概率语言模型、词向量、词袋模型、softmax、负采样,可以参考word2vec中的原理

Word2vec将词映射到K维向量空间,并且词向量能和语义相对应。

语言概率模型

计算一个句子的概率的概率模型,基于一个语料库来构建。生成一个句子可以利用贝叶斯公式进行链式分解,求得生成的概率。通常是先计算好词串出现次数,将概率值存起来,下次计算一个句子的概率时,找到概率值进行连乘
image.png

n-gram模型
n-gram是语言概率模型中的一种

它作了一个n-1阶马尔科夫假设,认为一个词出现的概率只和它前面的n-1个词相关,同时根据大数定律,将概率计算进行了简化
image.png

对于机器学习而言,通常是构建一个目标函数,然后对这个函数进行优化,求得最优参数解,得到模型,利用模型进行预测
对于语言模型来说,目标函数可以利用最大似然,设为:p(w|context(w))连乘(给定的语料库样本出现的可能性最大,此时参数最可信),这个时候里面的待定参数能够通过不断优化求得。利用这种方法计算的参数比语言概率模型所需要计算的参数少得多

n-gram模型利用极大似然估计优化模型:
image.png

n-gram的优点:

  1. 常见的Bigram,Trgram 实现简单,能够很好地应用在一些经典场景中,例如检查拼写错误(极大似然句子概率)。
  2. 常见搜索引擎的输入下拉帮助,就是通过n-gram来实现的。
  3. 可解释性强,易于理解和调试。
  4. 易于增量实现和并行训练。

n-gram的缺点:

  1. 需要解决数据稀疏性的问题(没有出现过的词语的概率会被置为0),一般有平滑算法,back-off算法,Interpolation算法。
  2. 由于是离散型变量,没有办法度量词语之间相似度。
  3. 模型巨大,与|V| 词库大小呈指数增长。

神经网络也能够用来构造这样的一个目标函数,并对参数进行训练,同时能利用训练出的词向量来度量词语之间的相似度,并且自带平滑功能,不需要想n-gram那样使用平滑算法进行平滑处理

真正测试/训练的时候,网络的输入和输出都是向量。因此要将输入的文本和单词变成向量的形式。这个时候会涉及到词向量

词向量:将自然语言进行数学化

  • one-hot representation:最简单的词向量构造方法,词典的长度为N的话,那么每一个词的词向量的维度都是N,向量的分量只有一个1,对应着它在词典中的位置,其它全为0。缺点:维度过高、不能刻画词与词之间的相似性
  • Distributed representation:通过训练,将每一个词映射到一个固定长度的短向量中,把词的信息分布到各个分量中,并且语义相近的词向量见距离越近

神经概率语言模型

四个层:输入层、投影层、隐藏层、输出层
image.png

对于给定的语料库,每一个(context(w),w)为一个训练样本
image.png

对于每一层的输入输出:
  • 输入层:词的上下文,输入形式为向量形式,这里一个词向量维度为m,n-1个词输入
  • 投影层:对输入的n-1个词进行拼接,得到一个维度为(n-1)m的向量
  • 隐藏层:利用双曲正切函数tanh作为激活函数,隐藏层规模nh为可调参数
  • 输出层:矩阵运算得到y为一个长度为N的向量,但是分量不能代表每个词出现的概率,必须要进行一个softmax归一化,归一化后,p(w|context(w))就可以表示为:
    image.png

那么,目标函数就能够确定了(最大对数似然),目标函数的待确定参数包括:词向量+神经网络参数,通过优化可求解,最后能够得到语言概率模型,顺便训练出来了每个词的词向量

这里面涉及到的参数:

  • n:词的上下文的词数,通常不超过5
  • m:词向量长度,通常为10-100量级
  • nh:用户指定,通常不用取太大,一般100量级
  • N:语料库词典的大小,通常10000-100000量级

整个模型的计算集中在隐藏层和输出层的矩阵运算,以及输出层上的softmax归一化运算。
Word2vec的工作就是针对这一部分进行优化

softmax需要对语料库中每个词语(类)都计算一遍输出概率并进行归一化,当语料库的词汇量很大时,运算量会非常大。(上述过程其实可以看做一个多分类问题。给定特征,根据softmax归一化结果中,从N个分类概率中挑一个词)

不用softmax怎么样?比如SVM中的多分类的问题中,其中有一种方法是由二分类组合而来的:
image.png

这是一种二叉树结构,应用到word2vec中被称为Hierarchical Softmax(使用二分类近似多分类,使用Huffman编码构造一连串的二分类。比如给定一个词,先判断这个词是名词吗,然后判断是不是水果,再判断是不是橘子。树中每个叶子结点代表词,非叶子结点的中间结点会被赋予一些合适的向量,叶子结点(真正的词)会共用这些抽象结点的向量)

Word2vec两种模型

  • CBOW:已知词w上下文context(w)前提下,预测当前词w
  • Skip-gram :已知当前词w,预测其上下文context(w)
    image.png

关于这两种模型,Word2vec给出了两套框架,分别是:

  • 基于Hierarchical Softmax (使用Huffman树)
  • 基于Negative Sampling(随机负采样)

1、基于Hierarchical Softmax的Word2vec的两种模型

CBOW

CBOW (Continuous Bag-of-Words Model ),根据上下文的词语预测当前词语的出现概率的模型,其学习目标是最大化对数似然函数:
image.png

网络结构:输入层、投影层、输出层

image.png

  • 输入层:包含context(w)中的2c个词的词向量(context(w)为词w的前后各c个词构成)
  • 投影层:将输入层的2c个向量进行累加求和,得到一个m为的向量:
    image.png
  • 输出层:输出层对应一颗二叉树,叶子结点为预料库中的词,各词在预料库中出现的次数作为权值构成这个Huffman树。非叶子结点相当于一个神经元(感知机,我认为逻辑斯谛回归就是感知机的输出代入f(x)=1/(1+e^x)),二分类决策输出1或0,分别代表分到左边或者是右边。于是每个词语都可以被01唯一地编码,并且其编码序列对应一个事件序列,于是我们可以计算条件概率

    在开始计算之前,还是得引入一些符号:
  1. p^w:从根结点出发到达w对应叶子结点的路径.
  2. l^w:路径p^w中包含结点的个数
  3. {p_1}^w,{p_2}^w,{p_3}^w...{p_{l^w}}^w路径p^w中的各个节点
  4. {d_2}^w{d_3}^w...{d_{l^w}}^w词w的Huffman编码({d_i}^w\in{0,1}),{d_j}^w表示路径p^w第j个节点对应的编码(根节点不对应编码)
  5. {\theta_1}^w{\theta_2}^w...{\theta_{l^{w-1}}}^w路径p^w中非叶节点对应的向量,向量维度为m(与词向量相同),{\theta_j}^w表示路径p^w第j个非叶子结点对应的向量

从根结点出发,到达代表w词的叶子节点的路径,可以看作是经过了多次二分类,每次分类的将其视作是一次逻辑回归:
image.png

写成整体的形式为:
image.png

那么得到词w的条件概率p(w|context(w))就可以求解为:
image.png

我们的目标函数取对数似然:
image.png

目标就是最大化这个函数,用到随机梯度上升法:先求函数对每个变量的偏导数,每取一个样本,就代入偏导数表达式得到函数在该维度的增长梯度,然后让对应参数加上这个梯度,对目标函数的所有参数做一次刷新,函数在这个维度上就增长了。观察目标函数\zeta,函数中的参数包括向量x^w, {\theta_{j-1}}^w, w \in C, j=2,3...l^w.计算函数\zeta关于这些向量的梯度:

关于{\theta_{j-1}}^w的梯度计算:

image.png

那么{\theta_{j-1}}^w的更新公式为:

image.png

其中\eta为学习率

关于x^w的梯度计算:

image.png

但是x^w在模型中,并不是代表每个词的向量,而是上下文词向量的和。Word2vec利用这个梯度,对词向量v(\hat{w}),\hat{w} \in context(w)进行更新:

image.png

这里没有将其平均后更新到每个词向量上,而是直接贡献到每个词的词向量上。

Skip-gram

Skip-gram和CBOW模型的网络结构一样,也包括了三层:输入层,投影层,输出层。只是逆转了CBOW的因果关系而已,即已知当前词语,预测上下文。
image.png
  • 输入层:当前词w的词向量
  • 投影层:恒等投影,其实是多余的,将输入层的词向量传递给输出层
  • 输出层:输出层也是对应一颗Huffman树(与CBOW模型一样)
    那么概率函数被定义为:
    image.png

    (词袋模型,认为每个u之间无序)
    其中:
    image.png

    与CBOW一样:
    image.png

    对数似然函数为:
    image.png

关于{\theta_{j-1}}^w的梯度计算:

image.png

那么{\theta_{j-1}}^w的更新公式为:

image.png

关于x^w的梯度计算:

image.png

那么x^w的更新公式为:

image.png

2、基于Negative Sampling的两种模型

从机器学习的角度来理解,在分类任务的训练中,不但要给正例,还要给负例。对于Hierarchical Softmax,负例是二叉树的其他路径。对于Negative Sampling,负例是随机挑选出来的,不再使用Huffman树,能大幅度提高性能。

CBOW

在给定的一个context(w)中,正样本是w,其它词就是负样本。假设我们通过某种采样方法获得了负例子集NEG(w)。对于正负样本,分别定义一个标签:
image.png

表示词\hat{w}的标签,正样本标签为1,负样本为0

对一个给定的正样本(context(w),w),我们希望能够最大化:
image.png

其中:
image.png

写成整体表达式为:
image.png

这时,g(w)可表示为:
image.png

那么我们希望,当u是正样本时,\sigma({x_w}^T\theta^u)越大越好,当u是负样本时,\sigma({x_w}^T\theta^u)越小越好。类似于逻辑回归,\sigma({x_w}^T\theta^u)等于模型预测样本为正例的概率,当答案就是正的时候,我们希望这个概率越大越好,当答案是负的时候,我们希望它越小越好,这样模型的分类效果才好。增大正样本的概率同时降低夫样本的概率

那么对于一个给定的语料库C,函数
image.png

是我们整体的优化目标,取对数,方便计算
image.png

梯度计算:
image.png

image.png

image.png

更新公式:
image.png

image.png
Skip-gram

一样的类似Hierarchical Softmax从CBOW过渡到Skip-gram模型,颠倒样本的x和y部分,也即对(w,context(w)),我们希望最大化:


image.png

其中:


image.png

image.png

image.png

image.png

梯度计算:


image.png

image.png

更新公式:
image.png

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容