文章目录

  • 基本概念
    • 语句s=w1w2...wms=w_1w_2...w_ms=w1​w2​...wm​的先验概率
    • 历史基元*
    • 问题解决方法
    • 如何划分等价类*
      • 题型十二:根据n-gram划分句子*
    • n-gram的应用
      • 音字转换问题
      • 汉语分词问题*
  • 参数估计*
    • 题型十三:给定训练语料根据n-gram求取句子的概率*
  • 数据平滑
    • 基本思想*
    • 加1法*
      • 题型十四:加1法实操
    • 减值法/折扣法*
      • Good-Turing(古德图灵)估计法
      • Back-off方法/后退方法/Katz后退法
      • 绝对减值法
      • 线性减值法
      • 四种减值法的比较
    • 删除插值法
  • 语言模型的自适应*
    • 问题
    • 基于缓存的语言模型*
    • 基于混合的语言模型*
    • 基于最大熵的语言模型*
  • 语言模型的应用
    • 采用基于语言模型的分词方法*

基本概念

语句s=w1w2...wms=w_1w_2...w_ms=w1​w2​...wm​的先验概率

p(s)=p(w1)×p(w2∣w1)×p(w3∣w1w2)×...×p(wm∣w1...wm−1)=∏i=1mp(wi∣w1...wm−1)=p(w1,w2,...,wm−1)p(s)=p(w_1)\times p(w_2|w_1)\times p(w_3|w_1w_2)\times...\times p(w_m|w_1...w_{m-1}) \\ =\prod_{i=1}^mp(w_i|w_1...w_{m-1}) \\ =p(w_1,w_2,...,w_{m-1})p(s)=p(w1​)×p(w2​∣w1​)×p(w3​∣w1​w2​)×...×p(wm​∣w1​...wm−1​)=i=1∏m​p(wi​∣w1​...wm−1​)=p(w1​,w2​,...,wm−1​)
其中,当i=1i=1i=1时,p(w1∣w0)=p(w1)p(w_1|w_0)=p(w_1)p(w1​∣w0​)=p(w1​)。

需要说明的是:

  1. wiw_iwi​可以是字、词、短语或词类等等,称为统计基元。通常可以以词代之。
  2. wiw_iwi​的概率通过w1,...,wi−1w1,...,w_{i-1}w1,...,wi−1​决定,由特定的一组w1,...,wi−1w_1,...,w_{i-1}w1​,...,wi−1​构成的一个序列,称为wiw_iwi​的历史。

历史基元*

  1. 随着历史基元的数量增加,不同的“历史”(路径)按指数级增长,对于第i(i>1)i(i\gt1)i(i>1)个统计基元,历史基元的个数为i−1i-1i−1;
  2. 如果有LLL个不同的基元(假设L为词汇集大小),理论上每个单词都有可能出现在1到i−1i-1i−1的每一个位置上,那么,iii基元就有Li−1L^{i-1}Li−1种不同的历史情况
  3. 我们必须考虑在所有的Li−1L^{i-1}Li−1种不同的历史情况下产生第iii个基元的概率,那么,模型中有LmL^mLm(m个位置,每个位置都有L种可能性)个自由参数ppp。

自由参数的数量过于庞大。

我的理解是:要计算出每一句话的先验概率的话,离不开每个词的概率,这里的概率是条件概率,也就是已知前面的词的情况下,这个词在这个位置出现的概率。参考传统机器学习方法,如朴素贝叶斯,都会实现准备好这些概率。然而正如上文所叙述的那样,随着每一句句子中统计基元的增加,所要计算、储存的自由参数是庞大的。

问题解决方法

设法减少历史基元个数,将w1w2...wi−1w_1w_2...w_{i-1}w1​w2​...wi−1​映射到等价类S(w1w2...wi−1)S(w_1w_2...w_{i-1})S(w1​w2​...wi−1​),使得等价类的数目远远小于原来不同历史基元的数目,则有p(wi∣w1,...,wi−1)=p(wi∣S(w1,...,wi−1))p(w_i|w_1,...,w_{i-1})=p(w_i|S(w_1,...,w_{i-1}))p(wi​∣w1​,...,wi−1​)=p(wi​∣S(w1​,...,wi−1​))如何划分这个等价类是值得探究的。

如何划分等价类*

将两个历史映射到同一个等价类,当且仅当这两个历史最近的n−1(1≤n≤l)n-1(1\le n\le l)n−1(1≤n≤l)个词相同。

该情况下的语言模型被称为n元文法(n-gram)模型。

  1. n=1,即出现在第i位上的基元wiw_iwi​独立于历史,一元文法也被写为uni-gram或者monogram;
  2. n=2,2-gram(bi-gram),第iii位上的词wiw_iwi​仅与他前面的一个历史词wi−1w_{i-1}wi−1​有关,$被称为1阶马尔可夫链;
  3. n=3,3-gram(tri-gram),被称为2阶马尔可夫链;

以二元文法为例,我们可以近似认为,一个词的概率只依赖于它前面的一个词。于是有:
p(s)=∏i=1mp(wi∣w1...wm−1)=∏i=1mp(wi∣wi−1)p(s)=\prod_{i=1}^mp(w_i|w_1...w_{m-1})=\prod_{i=1}^mp(w_i|w_{i-1})p(s)=i=1∏m​p(wi​∣w1​...wm−1​)=i=1∏m​p(wi​∣wi−1​)
当最近的n−1n-1n−1个词相同时,两个历史就归为了一个等价类,那么完全可以把第i个统计基元依赖到身前的n−1n-1n−1个词。

为了保证条件概率在i=1i=1i=1时有意义,同时为了保证句子内所有字符串的概率和为1,即∑sp(s)=1\sum_sp(s)=1∑s​p(s)=1,可以在句子首尾两端增加两个标志<BOS>w1w2...wm<EOS><BOS>w_1w_2...w_m<EOS><BOS>w1​w2​...wm​<EOS>。

题型十二:根据n-gram划分句子*

那么二元文法的概率可以写成

n-gram的应用

音字转换问题


拼音对应了很多汉字的可能性,通过贝叶斯公式将其转化,就得到了另一种形式。由于固定汉字对应的拼音也是固定的,所以这一项直接就是1,所以最后回到了求语句的先验概率,把音对应的所有字给找出来,然后找哪种组合最为常见。

微软拼音的输入法是基于n-gram开发的。

汉语分词问题*

还是通过贝叶斯变换,转化求解对象:

其与音字转换问题最大的区别在于对于Seg的先验概率涉及到的每一个条件概率的内容。

总结一下,如果汉字的总数为N,
对于一元语法来说:

  1. 样本空间为N;
  2. 只选择使用频率最高的汉字;

对于二元语法来说:

  1. 样本空间为N2N^2N2,因为是一个二元组;
  2. 效果比一元语法明显提高。

对于汉字而言,四元语法比较合适;

参数估计*

训练语料:用于建立模型,确定模型参数的已知语料。

对于n-gram,参数p(wi∣wi−n+1...wi−1)p(w_i|w_{i-n+1}...w_{i-1})p(wi​∣wi−n+1​...wi−1​)都可以用最大似然估计求得(用相对频率计算概率的方法),其公式为:
p(wi∣wi−n+1i)=f(wi∣wi−n+1i−1)=c(wi−n+1i)∑wic(wi−n+1i)p(w_i|w_{i-n+1}^i)=f(w_i|w_{i-n+1}^{i-1})=\frac{c(w_{i-n+1}^{i})}{\sum_{w_i}c(w_{i-n+1}^i)}p(wi​∣wi−n+1i​)=f(wi​∣wi−n+1i−1​)=∑wi​​c(wi−n+1i​)c(wi−n+1i​)​
其中,f(wi∣wi−n+1i−1)f(w_i|w_{i-n+1}^{i-1})f(wi​∣wi−n+1i−1​)为在给定wi−n+1i−1w_{i-n+1}^{i-1}wi−n+1i−1​的条件下,wiw_iwi​出现的相对频度,分子为wi−n+1i−1w_{i-n+1}^{i-1}wi−n+1i−1​与wiw_iwi​同时出现的次数,分母∑wic(wi−n+1i)\sum_{w_i}c(w_{i-n+1}^i)∑wi​​c(wi−n+1i​)是历史串wi−n+1i−1w_{i-n+1}^{i-1}wi−n+1i−1​在给定语料中出现的次数,相当于c(wi−n+1i−1)c(w_{i-n+1}^{i-1})c(wi−n+1i−1​)。

可以看出c(wab)c(w_{a}^b)c(wab​)表示waw_awa​到wbw_bwb​这些词同时出现的次数。

题型十三:给定训练语料根据n-gram求取句子的概率*

由于数据系数,所以会引起零概率的问题,可以采用数据平滑来解决。

数据平滑

假定测试语料T由lTl_TlT​个橘子构成(t1...tlT)(t_1...t_{l_T})(t1​...tlT​​),则整个测试集的概率为p(T)=∏i=1lTp(ti)p(T)=\prod_{i=1}^{l_T}p(t_i)p(T)=∏i=1lT​​p(ti​)。
模型p(wi∣wi−n+1i−1)p(w_i|w_{i-n+1}^{i-1})p(wi​∣wi−n+1i−1​)对于测试语料的交叉熵Hp(T)=−1WTlog⁡2p(T)H_p(T)=-\frac{1}{W_T}\log_2p(T)Hp​(T)=−WT​1​log2​p(T)
其中,WTW_TWT​是测试文本T的词数。
模型p的困惑度 PPp(T)PP_p(T)PPp​(T)定义为PPp(T)=2Hp(T)PP_p(T)=2^{H_p(T)}PPp​(T)=2Hp​(T)
n-gram对于英语文本的困惑度范围一般为50~1000,对应于交叉熵范围为6~10bits/word。

基本思想*

数据平滑的基本思想是:调整最大似然估计得概率值,使零概率增值,使非零概率下调,“劫富济贫”,消除零概率,改进模型的整体正确率。

基本目标:测试样本的语言模型困惑度越小越好。

基本约束:∑wi(wi∣w1,w2...wi−1)=1\sum_{w_i}(w_i|w_1,w_2...w_{i-1})=1∑wi​​(wi​∣w1​,w2​...wi−1​)=1(求和符号的下标表示了在该历史下所有出现过的wiw_iwi​)

加1法*

基本思想:每一种情况出现的次数加1。

对于unigram,设w1,w2,w3w_1,w_2,w_3w1​,w2​,w3​三个词,出现概率分别为13,0,23\frac{1}{3},0,\frac{2}{3}31​,0,32​,加1之后,概率分别为26,16,36\frac{2}{6},\frac{1}{6},\frac{3}{6}62​,61​,63​

对于2-gram有:

就是说,分子加了个1,分母加上了全部可能的基元数,也就是除了词汇表数量,对于有限的训练语料来说,是除了<BOS>和<EOS>之外的单词个数。

题型十四:加1法实操


减值法/折扣法*

基本思想:修改训练样本中事件的实际计数,使样本中(实际出现的)不同事件的概率之和小于1,剩余的概率量分配给未见概率。

Good-Turing(古德图灵)估计法

假设N是原来训练样本数据的大小,nrn_rnr​是在样本中正好出现r次的事件的数目(此处事件为n-gram),即出现一次的n-gram有n1n_1n1​个,出现两次的n-gram有n2n_2n2​个,出现r次的n-gram有nrn_rnr​个。

那么,N=∑r=1∞=nrrN=\sum_{r=1}^∞=n_rrN=∑r=1∞​=nr​r(训练数据表面上是几句话,实际上在n-gram是很多n元组),

由于N=∑r=0∞nrr∗=∑r=0∞nr+1(r+1)N=\sum_{r=0}^∞n_rr^*=\sum_{r=0}^∞n_{r+1}(r+1)N=∑r=0∞​nr​r∗=∑r=0∞​nr+1​(r+1),

所以r∗=(r+1)nr+1nrr^*=(r+1)\frac{n_{r+1}}{n_r}r∗=(r+1)nr​nr+1​​,

那么Good-Turing估计在样本中出现r次的事件的概率为pr=r∗Np_r=\frac{r^*}{N}pr​=Nr∗​。
对于2-gram来说,没有出现过的bigram的个数为n0=|VT|−∑r>0nrn_0=|V_T|-\sum_{r\gt0}n_rn0​=|VT​|−∑r>0​nr​,其中VTV_TVT​是该语料的词汇量。如果r最多出现了7次,因为不存在r=8的情况,所以无法得到r=7时的修正概率和r*。

Back-off方法/后退方法/Katz后退法

基本思想:当某一事件在样本中出现的频率大于阈值K(通常K取0或1)时,运用最大似然估计的减值法来估计其概率。否则,使用低阶的,即(n-1)gram的概率来代替n_gram,而这种代替需要受归一化因子的作用。

另一种理解方式:对于每个计数r>0r\gt0r>0的n元文法的出现次数减值,把因减值而节省下来的剩余概率更加低阶的(n-1)gram分配给未见事件。


绝对减值法

基本思想:从每个计数r中减去同样的量,剩余的概率量由未见事件均分。

设RRR为所有可能事件的数目(当事件为n-gram时,如果统计基元为词,且词汇集的大小为L,则R=LnR=L^nR=Ln,每以bigram为例,每个词都可以和其余L个词组合)

线性减值法

基本思想:从每个计数r中减去与该计数成正比的量,剩余概率量α\alphaα被n0n_0n0​个未见事件均分。

四种减值法的比较


本质上都是对非0事件的概率削减,将多出来的部分分配给0概率事件。

关注:

  1. 计数公式
  2. 概率计算公式

删除插值法

基本思想:用低阶语法估计高阶语法,即当trigram的值不能从训练数据中准确估计时,用bigram来替代。插值公式为:

系数的确定:

  1. 将训练语料分为两部分,即从原始语料中删除一部分作为留存数据
  2. 第一部分用于估计上述三个概率;
  3. 第二部分用于计算系数:使得语言模型对留存数据的困惑度最小。

语言模型的自适应*

问题

  1. 在训练语言模型时所采用的语料往往来自多种不同领域,这些综合性语料难以反映不同领域之间在语言使用规律上的差异。语言模型对训练文本的类型、风格和主题十分敏感。
  2. n元语言模型的独立性假设的前提是一个文本中的当前词出现的概率只与它前面相邻的n-1个词相关,但这种假设在很多情况下不成立。

基于缓存的语言模型*

该方法针对的问题是:在文本中刚刚出现过的一些词在后边的句子中再次出现的可能性往往较大,比标准的n-gram模型预测的概率要大。针对这种现象,cache-based自适应方法的基本思路是:语言模型通过n-gram的线性插值求得。

基于混合的语言模型*

该方法针对的是:由于大规模训练语料本身是异源的,来自不同领域的语料无论在主题方面还是在风格方面或者两者都有一定的差异,而测试语料一般是同源的,因此,为了获得最佳性能,语言模型必须适应各种不同类型的语料对其性能的影响。

基于最大熵的语言模型*

基本思想:通过结合不同信息源的信息构建一个语言模型;每个信息源提供一组关于模型参数的约束条件,在所有满足约束的模型中,选择熵最大的模型。

语言模型的应用

采用基于语言模型的分词方法*

未登录词即没有被收录在分词词表中但必须切分出来的词,包括各类专有名词(人名、地名、企业名等)、缩写词、新增词汇等等。



第五章语言模型:n-gram相关推荐

  1. NLP复习资料(2)-三~五章:形式语言、语料库、语言模型

    NLP复习资料-三~五章 1.第三章:形式语言 2.第四章:语料库 3.第五章:语言模型 国科大,宗老师<自然语言处理>课程复习笔记,个人整理,仅供参考. 1.第三章:形式语言 1.语言描 ...

  2. 《自然语言处理(哈工大 关毅 64集视频)》学习笔记:第五章 n-gram语言模型

    视频列表: 31 n-gram语言模型(一) 32 n-gram语言模型(二) 33 n-gram语言模型(三) 34 n-gram语言模型(四) 35 n-gram语言模型(五) 36 n-gram ...

  3. 【Python自然语言处理】读书笔记:第五章:分类和标注词汇

    jupyter 版请见我的github:https://github.com/JackKuo666/Python_nlp_notes [Python自然语言处理]读书笔记:第五章:分类和标注词汇 本章 ...

  4. 【正点原子STM32连载】 第二十五章 TFTLCD(MCU屏)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  5. Foundations of Machine Learning 2nd——第五章SVMs(一)

    Foundations of Machine Learning 2nd--第五章(一) 本章内容 线性分类 可分情况 定义5.1 Geometric margin(几何边距) 优化目标 支持向量 Su ...

  6. 【正点原子STM32连载】 第二十五章 TFT-LCD(MCU屏)实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

    1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视 ...

  7. 王道考研 计算机网络笔记 第五章:传输层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

  8. 数字图像处理——第五章 图像复原与重建

    数字图像处理--第五章 图像复原与重建 文章目录 数字图像处理--第五章 图像复原与重建 写在前面 1 图像退化/复原过程的模型 2 噪声模型 2.1 高斯噪声 2.2 椒盐噪声 3 仅有噪声的复原- ...

  9. c语言逐步搜索法求有根区间,[C语言第五章.ppt

    [C语言第五章 算法举例 基本思想是,根据提出的问题,列举所有可能的情况,并 用问题中给定的条件检验哪些是需要的,哪些是不需要的. 教学进程 列举与试探 列举法常用于解决"是否存在" ...

最新文章

  1. 使用Flink的Savepoint功能
  2. List、Vector、ArraryList、LinkedList
  3. vue表格导出到Excel
  4. 微机原理换行代码_设置段落样式的标记中,用来换行的标记是:
  5. iOS中的异步和多线程概况
  6. lua判断字符不为空或空格_Lua判断字符串前缀是否为指定字符的3种方法
  7. mysql某建表语句
  8. matplotlib库使用
  9. 数建--LINGO软件介绍
  10. 利润表模板excel_年薪60w财务总监:工作八年,这10个Excel必备财务系统,效率翻倍...
  11. 计算机键盘英语单词怎么写,输入单词_如何用电脑键盘打出英文单词需要那种只要一个字母就可以自己弹出单词的那种_淘题吧...
  12. 互联网晚报 | 11月22日 星期一 | 华为正式开启二手机业务;B站通过收购获得支付牌照;字节跳动公益平台正式上线...
  13. 美团校招php笔试题,2018 美团校招笔试题详解
  14. 人的精力是什么?如何强化精力
  15. (无技术)我的网站开发之路及部分服务器商优缺点
  16. mysql 数据类型 查询_MySQL数据类型
  17. 基于TCP的通信为什么需要RETRY
  18. 华为云yum镜像源超慢改用阿里云镜像遇坑解决方法
  19. 别人的面经(算法方向)
  20. ES迁移到OpenSearch

热门文章

  1. Android 屏幕刷新机制 VSync+Choreographer
  2. clearcase下的一些常用命令
  3. 刚发布!新型病毒下,程序员可在家免费学习了!
  4. Linux下的PCI总线驱动
  5. MFC CFileDialog 相对路径
  6. JAVA-仿微信九宫格头像
  7. _snprintf_s与_snprintf
  8. 如何理解变量的声明和定义?
  9. java 计算器 正负号转换_java新手自己实现的计算器,有点乱
  10. php artisan command,从php函数运行artisan命令