word2evc-基于向量空间中词表示的有效估计目录
概念引入
逻辑回归
线性回归
时间序列分析
神经网络
self-attention与softmax的推导
Huffman Tree(哈夫曼树)
哈夫曼树是一种带权路径长度最短的二叉树,亦称最优二叉树
数字表示权重,图a是常见的二叉树,图b就是图a转换过的最优二叉树。
可以看出,D是最重要的,那么有这样一个规则:最重要的放在最前面,由此构造了图b的哈夫曼树。
它们的带权路径长度分别为:
图a:WPL = 5 * 2 + 7 * 2 + 2 * 2 +13 * 2 = 54
图b:WPL = 5 * 3 + 2 * 3 + 7 * 2 + 13 * 1 = 48
可见,图b的带权路径长度较小,我们可以证明图b就是哈夫曼树。
语言模型
语言模型(language model, LM)在自然语言处理中占有重要的地位,尤其在基于统计模型的语音识别、机器翻译、汉语自动分词和句法分析等相关研究中得到了广泛应用。
概率P:语言模型是计算一个句子是是句子的概率。
比如,对ni hao的判定
你好 P = 0.8
腻浩 P = 0.001
逆号 P = 0.00001
基于专家语法规则的语言模型
在计算机初始阶段,随着计算机编程语言的发展,归纳出的针对自然语言的语法规则。但是自然语言本身的多样性、口语化,在时间、空间上的演化,及人本身强大的纠错能力,导致语法规则急剧膨胀,不可持续。
统计语言模型
统计语言模型就是计算一个句子的概率大小的这种模型。形式化讲,统计语言模型的作用是为一个长度为 m 的字符串确定一个概率分布 P(w1; w2; :::; wm),表示其存在的可能性,其中 w1 到 wm 依次表示这段文本中的各个词。
计算机借助于统计语言模型的概率参数,可以估计出自然语言中每个句子出现的可能性,而不是简单的判断该句子是否符合文法。常用统计语言模型,包括了N元文法模型(N-gram Model)统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性。给定一个词汇集合 V,对于一个由 V 中的词构成的序列 S = ⟨w1, · · · , wT ⟩ ∈ Vn,统计语言模型赋予这个序列一个概率 P(S),来衡量 S 符合自然语言的语法和语义规则的置信度。
通过概率计算
具体公式
求解:
频率+条件概率
举个例子
𝑠𝑒𝑛𝑡𝑒𝑛𝑐𝑒 ={𝑤1, 𝑤2 , … , 𝑤𝑛}
P(A 很 帅)=P(A)*P(很|A)*P(帅|A, 很)
P(A很帅 很 帅)=P(A很帅)*P(很|A很帅)*P(帅|A很帅, 很)(A很帅是个人名)
P(A 很 漂亮)=P(A)*P(很|A)*P(漂亮|A, 很)
平滑操作
因为在数据库统计词语的结果中,一定会出现大量的零(稀疏),从而导致识别的结果出现错误,比如在你的语料库中没有'他'这个字,统计概率就为0,但你不能因为这个的概率为0,就把所有的带’他’的句子统计为概率是0,这是不合理的,所以要对所统计的结果进行平滑操作,避免统计结果稀疏。
Laplace(拉普拉斯)平滑
这是平滑方法中最为简单粗暴的一个方法,原理就是让每个统计的频数至少为1,做法就是将每个统计频率分子加1,分母加所有统计汉字的个数,这样的话就可以把本来概率为0结果变为一个很小的值,也是比较合理。
马尔科夫假设
HMM模型的两个基本的假设
HMM 的定义建立在两个基本假设的前提上,这两个假设是 HMM 的重点,一定要了解模型的 2 个假设。
1齐次马尔科夫假设
齐次马尔科夫假设,通俗地说就是 HMM 的任一时刻 t 的某一状态只依赖于其前一时刻的状态,与其它时刻的状态及观测无关,也与时刻 t 无关。
2观测独立假设
观测独立性假设,是任一时刻的观测只依赖于该时刻的马尔科夫链的状态,与其他观测及状态无关。
HMM模型解决的3个问题
1,评估问题,已知模型参数 λ= (A, B, π),计算某个观测序列发生的概率,即求P(O|λ)
2,解码问题,给出观测序列O和模型λ= (A, B, π),选择一个状态序列S(s1,s2,…st+1),能最好的解释观测序列O
3,学习问题,观测序列O,如何估计模型参数 λ=(π, A, B), 使得P(O|λ)最大? 利用极大似然估计。
换到这里就是
下一个词的出现仅依赖于前面的一个词或几个词
语言模型评价指标:困惑度(Perplexity)
𝑃 (𝑠) = 𝑃 (𝑤1, 𝑤2, … , 𝑤𝑛) = 𝑃(𝑤1)P(𝑤2 𝑤1) … P(𝑤𝑛|𝑤1𝑤2 … 𝑤𝑛−1)
用log与e可以对由困惑度构成的loss有更深刻的表达,更方便计算
摘要大意
- 提出了两种新的模型结构用来计算词向量
- 采用一种词相似度的任务来评估对比词向量质量
- 大量降低模型计算量可以提升词向量质量
介绍
- 传统NLP把词当成最小数据单元处理,比如N-gram
- 这种方法在许多任务中有其局限性,即数据较少
- 数据量较大时,可以采用分布式表示方法,如语言模型的分布式表示效果会超过
N-gram
词的表示方式
两种表示方式
另外还有SVD奇异值分解(对矩阵分解从而得到特征)
分布式表示/稠密表示(通过降维将数据变成二维再通过类似k-means聚类的方法使有联系的词放到一起,从而给出对应的联系概率,由此达到压缩数据的目的,降低计算负担)
评价指标
余弦相似度
余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。这结果是与向量的长度无关的,仅仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为-1到1之间。
注意这上下界对任何维度的向量空间中都适用,而且余弦相似性最常用于高维正空间。例如在信息检索中,每个词项被赋予不同的维度,而一个维度由一个向量表示,其各个维度上的值对应于该词项在文档中出现的频率。余弦相似度因此可以给出两篇文档在其主题方面的相似度。
公式:sim (𝑤𝑜𝑟𝑑1, 𝑤𝑜𝑟𝑑2) = cos(𝑤𝑜𝑟𝑑𝑣𝑒𝑐1, 𝑣𝑜𝑟𝑑𝑣𝑒𝑐2)
注意,词向量之间的联系指标在词的表示方式中已经由模型跑过一遍,所以,在这里能作为数值直接放入
该方法的应用场景:
- 衡量词向量之间的相似程度
- 作为预训练模型提升nlp任务(实体命名识别,文本分类)
词向量训练方式
Log- linear model
将语言模型看成一个多分类问题,相当于线性分类器加上softmax
Y = softmax(Wx+b)
跳字模型
• 语言模型基本思想:句子中下一个词的出现和前面的词是有关系的,所以可以使用前面的词预测下一个词。(类似时间序列)
• Word2vec基本思想:句子中相近的词之间是有联系的,比如今天后面经常出现上午,下午和晚上。所以Word2vec的基本思想就是用词来预测词,skip-gram(跳字模型)使用中心词预测周围词,cbow使用周围词预测中心词。(类似K-means)
输入一个词 w{t},模型使用含有一个隐藏层的神经网络去正确预测 w{t} 的上下文词 w{t2}, w{t1}, w{t+1},w{t+2}
skip-gram(跳字模型)基本形式
通俗解释(见下图)
求最大值
CBOW(bag of word/词袋模型)
CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。比如有一段话,我们的上下文大小取值为4,特定的这个词是"Learning",也就是我们需要的输出词向量,上下文对应的词有8个,前后各4个,这8个词是我们模型的输入。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。
这样我们这个CBOW的例子里,我们的输入是8个词向量,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大),对应的CBOW神经网络模型输入层有8个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某8个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可
CBOW的损失函数
这个损失函数就是给定输入上下文的输出单词的条件概率,一般都是取对数
复杂度的降低
两种方式:层次softmax与负采样
层次Softmax,基本思想是将复杂的归一化概率分解为一系列条件概率乘积的形式,把softmax作为sigmoid计算
我们对子集𝐷1和𝐷2进一步划分。重复这过程,直到集合里只剩下一个word。于是,我们就将原始大小为𝑉的字典𝐷转换成了一颗深度为log𝑉的二叉树。树的叶子节点与原始字典里的word一一对应;非叶节点则对应着某一类word的集合。显然,从根节点出发到任意一个叶子节点都只有一条唯一路径——这条路径也编码了这个叶子节点所属的类别。
同时,从根节点出发到叶子节点也是一个随机游走的过程。因此,我们可以基于这颗二叉树对叶子节点出现的似然概率进行计算。例如,对于训练样本里的一个target word 𝑤𝑡,假设其对应的二叉树编码为{1,0,1,…,1},则我们构造的似然函数为:
乘积中的每一项都是一个逻辑回归的函数。
我们可以通过最大化这个似然函数来求解二叉树上的参数——非叶节点上的向量,用来计算游走到某一个子节点的概率。
通过构造一颗二叉树,将目标概率的计算复杂度从最初的𝑉降低到了log𝑉的量级。不过付出的代价是人为增强了词与词之间的耦合性。例如,一个word出现的条件概率的变化,会影响到其路径上所有非叶节点的概率变化,间接地对其他word出现的条件概率带来不同程度的影响。因此,构造一颗有意义的二叉树就显得十分重要。实践证明,在实际的应用中,基于Huffman编码的二叉树可以满足大部分应用场景的需求。
构造softmax函数
负采样
自然语言处理领域中,判断两个单词是不是一对上下文词(context)与目标词(target),如果是一对,则是正样本,如果不是一对,则是负样本。采样得到一个上下文词和一个目标词,生成一个正样本(positive example),生成一个负样本(negative example),则是用与正样本相同的上下文词,再在字典中随机选择一个单词,这就是负采样(negative sampling)。
负采样的本质:每次让一个训练样本只更新部分权重,其他权重全部固定;减少计算量;(一定程度上还可以增加随机性)
不同于原本每个训练样本更新所有的权重,负采样每次让一个训练样本仅仅更新一部分的权重,这样就好降低梯度下降过程中的计算量。
u0是滑动窗口(联想卷积神经网络里的窗口)上下文词向量的平均数
Vc是正确的中心词向量,Vj是错误的中心词向量
如何采样
比如说 A 和B两个单词;
使用特殊思维模式;假设整个词汇表只有100个单词;A 表示成one-hot向量;B表示成one-hot向量;
模型输入为A的one-hot向量;模型输出为B的one-hot向量;
假设模型的神经网络结构为10010100;输出层100个;
输出层中除了B对应位置的1外,其他全是0;称这为负样本;参数数量为10*100
采样就是从这样负样本中抽样;比如说抽取5个;那么在此次梯度更新中就只更新10*5;更新数量为原来的1/20
重采样(Subsampling of Frequent Word)
使用重采样的原因:
• 想更多地训练重要的词对,比如训练“person”和“Tom”之间的关系比训练“Tom”和“and”之间的关系要有用。
• 高频词很快就训练好了,而低频词需要更多的训练次数
公式:
t为超参数,wi为频率
词频越大,f(wi),p(wi)越大,那么词wi就有更大概率被删除,但若词频小于等于t那么该词就不会被删除
研究成果
• 新的模型结构
• 优化训练方法,加快训练速度
• 使单机训练成为可能
• 成果:训练的词向量,既快又好