UCAS-AI学院-自然语言处理专项课-第5讲-课程笔记
分类:
文章
•
2024-12-21 07:55:04
UCAS-AI学院-自然语言处理专项课-第5讲-课程笔记
语言模型
传统语言模型
n元文法
- 统计方法于语料库语言学的应用
- 发现语言使用的普遍规律
- 通过机器学习模型自动获取语言知识
- 对未知语言现象进行推测
- 计算一段文字的概率
- 以一段文字为单位?
- 根据句子构成单位的概率计算联合概率?p(w1)×⋯×p(wn)——未描述依赖性
- 基于前文的先验概率p(s)=∏ip(wi∣w1…wi−1)
- p(w1∣w0)=p(w1)
-
wi可以为字、词、短语等,统称统计基元,条件概率中的“条件”称之为历史
- 历史基元增加,概率(路径)计算量指数级增长——需要缩短历史
- 划分等价类——只看前n−1个基元——基于一个n长度的基元序列计算条件概率
-
n元文法模型(n-gram model)
- 通常,n取1到5
-
n=1,只考虑当前位置基元,独立于历史,称之为1元文法(uni-gram,monogram)
-
n=2,只考虑前一个历史基元,称之为2元文法(bi-gram),又被称为1阶马尔科夫链
-
n=3,考虑前两个历史基元,称之为3元文法(tri-gram),又称之为2阶马尔科夫链
- 为保证i=1也同样有意义,句子首尾加入句首标记<BOS>和句尾标记<EOS>
参数估计
- 条件概率的计算
- 基本思路:
- 收集样本(语料)
- MLE估计概率
-
n-gram,p(wi∣wi−1)的MLE估计:p(wi∣wi−1)=f(wi∣wi−1)=∑wic(wi−n+1i)c(wi−n+1i)
- 其中,∑wic(wi−n+1i)为给定预料中出现历史串wi−n+1i−1的次数
-
c(wi−n+1i)为给定历史串的条件下,wi于历史串同时出现的次数
- 零概率问题:未出现在语料的内容会造成整个句子的概率为0(其中一个条件概率项会是0)
数据平滑方法
- 基本思想:调整MLE概率值,零概率增加,非零概率下调,消除零概率,改进模型的整体正确率
- 目标:测试样本的语言模型的困惑度越小越好
- 整个测试及的概率p(T)=∏ip(si)
- 语料交叉熵Hp(T)=wt1log2p(T),n元文法的英文文本一般为6~10bits
- 困惑度PPp(T)=2Hp(T)n元文法的英文文本一般为50~1000
- 约束:∑wip(wi∣wi−n+1i−1)=1
- 加1法(Addition Smoothing)
- 给每一种情况出现的次数加1
- 对bi-gram,有p(wi∣wi−1)=∣V∣+∑wic(wi−1wi)1+c(wi−1wi)
- 减值法 / 折扣法
- 修改样本中事件的实际次数,不同事件概率之和小于1,余量分给未出现事件概率
- Good-Turing估计法
- 引用图灵方法估计概率分布
- 记出现r次的n-gram数目为nr,假设出现次数越多的词组数量越少
- 则有N=∑r∞nrr=∑r∞(r+1)nr+1
- 估计r∗=(r+1)nrnr+1,对Nr+1=0的r保持不变(r∗=r)
- 出现r次的n-gram的概率为pr=Nr∗
- 由上训练样本中所有事件概率之和∑rnrpr=1−Nn1<1
- 概率余量p0=Nn1分给未见事件r=0
-
n0=∣VT∣−∑r>0nr,均分概率n0p0
- 注意最终概率要进行归一化处理
- 后备 / 后退法(Back-off)
- 当某一事件出现频率大于阈值K(通常为0或者1),使用减值法估计概率,否则使用低阶字组概率估计,最后归一化
- p(wi∣wi−1)={drC(wi−1)C(wi−1wi)α(wi−1)pML(wi))if C(wi−1wi)=r>0if C(wi−1wi)=0
- 折扣率dr=rr∗,其中r∗可以由GT法预测
- 归一化因子α(wi−1)=∑r=0pML(wi)1−∑r>0p(wi∣wi−1)
- 绝对减值法(Absolute Discounting)
- 从每个计数r中减去同样的量,余量由未见事件均分
- pr={Nr−bNn0b(R−n0)r>0r=0
-
R为总事件个数,n0为样本中未见事件的数目,b为小于1的常量
- held-out方法估计b的上限b≥n1+2n2n1
- 线性减值法(Linear Discounting)
- 从每个计数r中减去与其成正比的量,余量α被未见事件均分
- pr={N(1−α)rn0αr>0r=0
- α=Nn1
- 很多实验中,绝对减值法优于线性减值法
- 删除插值法(Deleted Interpolation)
- 用低阶文法协助估计高阶文法(低阶插值)
- p(w3∣w1w2)=λ3p′(w3∣w1w2)+λ2p′(w3∣w2)+λ1p′(w3)
- 语料分为两部分,一部分用于计算概率,一部分用于计算系数
语言模型自适应
- 问题
- 训练语料来自不同领域
- n元文法模型独立性假设往往是不成立的
- 基于缓存的语言模型(Cache-based)
- 文本中刚出现的词,在后面句子出现的可能性往往较大(比n元模型预测大)
- 通过线性插值求得:p^(wi∣w1i−1)=λp^cache(wi∣w1i−1)+(1−λ)p^n−gram(wi∣w1i−1)
- 插值系数可以通过EM方法求得
- 缓存中保留前K个词(2000左右),每个词的缓存概率用其在缓存中出现的相对频率
- 缺陷:缓存中词的重要性,独立于该词与目标词的距离
- 改进:概率随距离指数级衰减p^cache(wi∣w1i−1)=β∑j=1i−1Iwi=wjexp(−α(i−j))
- 其中,α为衰减率,β为归一化常数,保证∑wip^cache(wi∣w1i−1)=1
- 基于混合方法的语言模型
- 大规模训练语料本身异源(heterogenous)
- 测试语料一般同源(homogeneous)
- 划分n个子模型,线性插值p^(wi∣w1i−1)=∑j=1nλjp^Mj(wi∣w1i−1)
- 训练语料按照来源、主题、类型等聚类(共n个类)
- 运行时识别测试预料的主题或追几何,确定合适的训练语料子集,利用这些预料建立特定的语言模型
- 利用各个语料子集建立的语言模型和线性插值公式获得完成模型
- 插值系数可以通过EM方法求得
- 插值系数
- 随机化初始系数
- 由插值公式计算新的概率和期望
- 第r次迭代,第j个语言模型在第i类上的系数λijr=∑i=1nλijrpij(w∣h)λijrpij(w∣h)
- 重复上述两步,直到收敛
- 基于最大熵的语言模型
- 通过结合不同信息源信息构建一个语言模型,每个信息元提供一组关于模型参数的约束条件,在所有满足约束的模型中,选择熵最大的模型
- 通常无需模型在所有可能历史成立,只需要训练数据上平均成立即可
- p∗(wi∣wi−1)=Z1exp(∑jλjfj(wi,aj))
- 权重使用GIS算法确定
应用
- 汉语分词和命名实体识别
- 待切分句子S=z1…zm,W=w1…wN
- 最佳切分W=argmaxWp(W∣S)
- 贝叶斯公式:W∝argmaxWp(W)p(S∣W)
- 汉语词汇分为如下几类
- 分词词典中规定的词LW
- 可由词法规则派生出来的词或短语MW
- 与数字相关的实体(日期、时间、货币……)
- 专用名词(人名PN、地名LN、机构名ON)
- 把词序列W转化成词类序列C
- 专有名词按照人名、地名、机构名分类
- 实体名词中时间、日期、货币等分别一类
- 所有的派生词和词表词,每个词一类
- 同时考虑NER的话,还要标明实体边界
- 转换公式W∝argmaxWp(C)p(S∣C)
- 前者可以使用语言模型计算(tri-gram)
- P(C)=p(c1)p(c2∣c1)∏p(c1∣ci−2ci−1)
- p(ci∣ci−2ci−1)=count(ci−2ci−1)count(ci−2ci−1ci)
- 后者可以使用生成模型计算
- 在满足独立性假设的条件下p(S∣C)≈∏ip(wi∣ci)
- 任意一个词类ci生成汉字串wi的概率只与自身有关,与上下文无关
- 对不同类别词,分别计算概率,对于一个词作为一个类的情形,直接令概率为1
- 模型训练
- 词表和派生词表,基本切分语料;专有名词使用专有模块标注;实体名词使用规则+自动机标注,获得初始标记语料
- 使用标记语料,采用MLE估计语言模型概率参数
- 用得到的模型重新切分和标注,得到新的语料
- 直到系统性能不再有明显变化为止
- 分词与词性标注一体化方法
- 假设句子由单词串W组成
- 有标注序列T
- 寻找P(W,T)的分词标注组合
- 基于词性的三元统计模型P1(W,T)=p(W∣T)P(T)≈∏ip(wi∣ti)p(ti∣ti−1ti−2)
- 基于词的三元统计模型P2(W,T)=p(T∣W)P(W)≈∏ip(ti∣wi)p(wi∣wi−1wi−2)
- 满足独立性假设
- 一体化模型P∗(W,T)=αP1(W,T)+βP2(W<T)
-
P(ti∣wi)对分词无帮助,只取语言模型部分
- P∗(W,T)≈αP1(W,T)+β∏ip(wi∣wi−1wi−2)
-
β取词个数与词性个数之比
神经语言模型
背景
- 语言模型:计算句子出现的概率
- n-gram问题
- 典型词语表示:抽象符号
- 等价表示——one-hot
- 任意两个词之间的相似度都是0
- 低维稠密空间体现语义相似性
前馈神经网络语言模型
- 条件概率——向量形式——条件和目标直接拼接——送入网络得到概率
- 连续向量可以捕捉语义相似性,同时很好地处理数据稀疏的问题(不需要平滑)
- 词向量的表示
- 将每一个词映射到一个低维空间的连续实值向量
- 词汇表(LUT)L∈RD×V,一列对应一个词
-
V的大小:词汇表的大小 / 高频词 / 前V个频率最高的词
-
D的大小:人工设定,几十到几百——任务复杂度 / 数据规模
-
L的学习
- 函数的表示——神经网络的设计

- 由词的one-hot表示,从LUT中得到词向量
- 所有的词拼接得到句子的表示x=(L(wt−1),…,L(wt−n+1))
- y=Utanh(Hx+d)+Wx+b
- P(wt∣wt−1,…,wt−n+1)=∑ieyieywt
- 词向量拼接——tanh之后得到的隐层状态与所有词向量内积——Softmax——概率分布
- 取最大概率结果作为理想输出
- 问题:
循环神经网络语言模型
- 每一步接收一个输入,同时处理隐藏状态
- h1=tanh(U⋅w1+W⋅h0)
- 每一步的隐藏状态表示对于所有历史信息的下一个词的预测(ht预测yt+1)
- p(yt+1)=∑ie(htyi)e(htyt+1)
- 问题:
- LSTM——保存记忆
自我注意力机制语言模型
- 更加高效地捕捉历史信息(不受到远距离传递的影响)
- 和所有历史词进行相关性计算,获得向量表达(加权线性组合)
- 若干层——隐藏表示——送入网络预测下一个时刻输出
- 映射到三组值Q、K、V
- 当前输入的Q和所有的K内积,得到权重
- 按权重对所有的V加和得到表示
- Attention(Q,K,V)=softmax(dkQKT)V
应用
- 文章自动生成(GPT-2)
- 代码自动补全
- 自动写诗
文本表示模型
背景
- 文本:由文字和标点组成的字符串
- 短语、句子、段落和篇章都是不同粒度的文本
- 字 / 字符组成词 / 短语,进而形成句子、段落和篇章
- 文本表示:计算机理解文本
向量空间模型
- 核心:将文本视为特征项的集合
- 特征项:VSM中的最小语言单元
- 字、词、短语
- 文本表示为特征项集合(t1,…,tn)
- 文本中每个特征项都有不同的权重(t1:w1,….tn:wn)
- 词语:特征项集合可以视为词表,从预料中统计获得(词袋模型BOW)
- 权重计算
- 布尔变量:出现为1,不出现为0
- 词频(TF):wi=log(tfi+1),取对数用于压缩差距,但是无明确意义的主次会导致较高权重
- 逆文档频率(IDF):wi=idfi=logdfiN,出现越罕见的特征权更能用于区分文档,更加重要
- TF-IDF:tfidfi=tfi⋅idfi
- 长度规范化,消除文本长度对表示的影响
- 1-范数规范化d1=∥d∥1d=∑iwid
- 2-范数规范化d2=∥d∥2d=∑iwi2d
- 最大词频规范化dmax=∥d∥∞d=maxiwid
- 实现相似语义在稠密空间的聚集
表示学习模型
- 文本概念表示模型:
- 以潜在语义分析和潜在狄利克雷分布为代表
- 旨在挖掘文本中的隐含主题或概念
- 文本表示为主题的分布向量
- 深度表示学习模型
- 深度学习模型最优化目标函数
- 分布式向量空间的低维向量表示
词语的表示学习
- 词向量表示:LUT L∈RD×V
- 学习:随机初始化+目标函数优化
- 训练准则:通过上下文知晓一个词
- 学习方法:
- 基于语言模型的方法:由上文得到当前词的预测概率P(w1…wn)=∏tP(wt∣wt−1…wt−n+1)
- 直接学习方法:
- C&W Model
- CBOW / Skip-gram Model
- 负采样与噪声对比估计
- 字-词混合的表示学习
- C&W Model
- 对核心词进行替换(上下文C不变),原始句子的“打分”应该比替换后的句子高score(wi,C)>score(wi′,C)
- 打分过程:句子单词向量拼接表示作为h0,然后线性+非线性变换,两轮后得到分数,h1=f(W0h0+b0),score(wi,C)=W1h1+b1
- 大margin约束:score(wi,C)>score(wi′,C)+1
- 目标函数(反向传播训练)loss=∑(wi,C)∈D∑w′∈V′max(0,1+score(wi′,C)−score(wi,C))
- CBOW / Skip-gram Model
- C&W计算复杂度比较高
- CBOW: Continuous Bag-of-Words
- 词序不影响预测
- 使用上下文词向量的加权求和h=2C1∑i−C≤k≤i+C,k=ie(wk)
- 预测当前词P(wi∣WC)=∑kexp(h⋅e(wk))exp(h⋅e(wi))
- 目标函数(最大似然)L∗=argmaxL∑wilogP(wi∣WC)
- Skip-gram:利用中心词预测所有上下文
- 预测上下文P(wc∣wi)=∑kexp(e(wi)⋅e(wk))exp(e(wi)⋅e(wc))
- 目标函数L∗=argmaxL∑wi∈V∑wc∈WClogP(wc∣wi)
- 负采样与噪声对比估计
- (Skip-gram)为每一个正样本wc从某个概率分布pn(w)中选择K个负样本{w1′,…,wk′},最大化正样本似然,同时最小化所有负样本似然
- 噪声对比估计
- 对wc和负样本{w1′,…,wk′},概率归一化
- 正样本概率p(l=1,w∣wi)=p(l=1)p(w∣l=1,wi)=K+11pθ(w∣wi)
- 负样本概率p(l=0,w∣wi)=p(l=0)p(w∣l=0,wi)=K+1Kpn(w)
- 给定词为正样本概率p(l=1∣w,wi)=p(l=0,w∣wi)+p(l=1,w∣wi)p(l=1,w∣wi)=pθ(w∣wi)+Kpn(w)pθ(w∣wi)
- 给定词为负样本概率p(l=0∣w,wi)==p(l=0,w∣wi)+p(l=1,w∣wi)p(l=0,w∣wi)=pθ(w∣wi)+Kpn(w)Kpn(w)
- 目标函数J(θ)=logp(l=1∣wc,wi)+∑klogp(l=0∣wk,wi)
- 负采样技术
- 目标函数与噪声对比估计相同
- 不对样本集合进行概率归一化,直接采用NNLM输出
- p(l=1∣wc,wi)=1+e−e(wc)⋅e(wi)1
- 简化后的目标函数(最大化目标词判定为正样本以及其他负样本被判定为负样本的概率)J(θ)=logσ(e(wc)⋅e(wc))+∑klog(−e(wk)⋅−e(wc))
- 高效:不需要矩阵相乘,也不需要全词汇表的遍历
- 字-词混合的表示学习
短语的表示学习
- 词袋方法:短语就是词的集合
- 假设短语由i个词语构成phi=w1w2…wi
- 短语的表示即词语表示的平均e(phi)=∑ke(wk)
- 也可以加权平均e(phi)=∑kvke(wk)
- 问题:忽略词序对语义的影响
- 递归Auto-Encoder

- 学习中间表示
- 目标函数,所有结点(整个结构是一个二叉树)重构误差最小化
- 双语约束模型
- 互为翻译的短语(phx,phy),二者语义表示应当一致
- 最小化二者表示的误差
- E(phx,phy;θ)=αErec(phx,phy;θ)+(1−α)Esem(phx,phy;θ)
- 前者为重构误差,后者为语义误差Esem(phx,phy;θ)=Esem(phx∣phy;θ)+Esem(phy∣phx;θ)=21∥f(e(phy))−e(phx)∥2+21∥f(e(phx))−e(phy)∥2
- 变换函数f为两种语言空间的转换
- 目标函数可以加入L2正则化项
- 同时学习两种语言的表示
句子的表示学习
- 词袋方法
- 假设句子由n个词语组成
- 表示可以为词语向量的平均,也可以为其加权平均
- PV-DM模型
- 语料D中有M个句子,每个句子有标号对应,每个句子的表示维度为p,那么存在一个训练集表示矩阵PV∈RM×p
- CBOW的扩展
- 将上下文所在句子视为一个记忆单元
- 对上下文n元组和句子标号作为输入,计算句子及其上下文的平均词向量
- h=2C+11(e(SenID)+∑ke(wk))
- PV-DBOW模型
- Skip-gram的扩展
- 由句子的标号,预测上下文p(wc∣SenID)
- 目标函数一致
- 只能学习训练数据中的句子表示
- Skip-Thought模型
- 类似PV-DBOW
- 利用当前句子预测前一个句子和后一个句子
- 认为连续出现的句子表达意思接近
- RNN,对句子进行编码,同时完成预测
- 泛化性更好
- 目标函数∑k{∑jp(wjk−1∣w<jk−1,hnk)+∑tp(wtk+1∣w<tk+1,hnk)}
- CNN模型
- 词向量输入——顺序地对上下文窗口卷积(局部语义)——池化(高维度)——其他层——固定维度的句子向量表达(全局语义)
- 词向量也参与训练,可以预训练(可以考虑固定)或者随机初始化
文档的表示学习
- 词袋方法
- 假设文档由n个词语构成
- 可以使用词向量的平均或加权平均
- CNN模型
- 将文档视为一个非常长的句子
- 丢失句子之间的顺序关系
- 层次化模型
- 句子使用 LSTM / CNN 得到表示
- 双向LSTM得到句子的双向隐层表示
- 隐层表示加权平均(注意力机制)得到最终表示
动态的表示学习
- 固定的词向量——动态的语义表示
- ELMo
- 预训练上下文相关的词向量表示
- 双向LSTM
- 动态表示:所有隐藏层的加权平均,再对任务加权ELMojtask=γtask∑kwktaskhj,k
- 动态表示替换固定表示进行训练
- GPT
- 在同一个模型上预训练和任务导向的微调
- 深层单向Transformer解码器
- 只使用上文信息
- BERT
- 在同一个模型上预训练和任务导向的微调
- 深层双向Transformer解码器
- 使用掩码语言模型和下句预测模型优化