ch4 n元语法
n元语言模型是根据前面n-1个词猜测下面的单词。
广泛引用于语言识别,手写体识别,机器翻译,拼写更正,残疾人增强交互系统等。
4.1语料中单词数目的计算
自然语言中的统计计算要依赖于语料库。
在计算单词概率是,对于标点符号要不要算在内要根据任务决定。标点符号对于发现单词或者句子边界,对于辨别意义的某些方面起着关键性作用。所以在此类标注、剖析、语音合成中,我们有时要把标点符号当作独立的单词来处理。
在口语语料库中一个句子被叫做话段,一个话段有两种类型的阻断。一种是fragment,一种是有声停顿。单词背从中间断开就是切断,像 emmm 这种就是有声停顿,或者叫过滤成分,要不要把过滤成分看成单词也要看需求。很多语音识别系统会将他看成单词处理。
同一个单词的大小写在处理上也有不同的方式。语音识别中当作一个单词处理,词性标注则分为单独的特征处理。
所以对于n元语言模型我们通常要进行词目还原,文本归一,标点符号分离,缩写词处理等工作。
对于单词的统计我们还需要区分type和token的概念。type就是语料库中不同单词的数目,或者叫词汇容量。token是指使用到的单词数目。
4.2简单的(非平滑的)N元语法
n元语言模型的直觉解释是在计算某个单词概率时不考虑他前面全部的历史而是考虑最接近该单词的若干个单词来近似地逼近该单词的历史。
因此2元语言模型就是假设该单词的概率只依赖于他前面单词的概率,这种假设也称为马尔科夫假设。它说明我们没必要了解很远的过去就能预测某个单位的将来的概率。
通常我们会使用2元语言模型,但是在有充分的训练集的情况下,更好的方案是使用3元语言模型
4.3 训练集与测试集
训练集测试集的产生是因为我们在模型的建立时想要在一些数据上进行训练在另一部分数据上进行测试而产生的。
通常我们会在训练集上建立不同的模型,分别在测试集上进行模拟,看那个模型更好。在度量模型在测试集上拟合程度时使用一个困惑度的概念。
测试集数据必须与训练集数据完全不重合,不然会造成困惑度计算的不准确。
除训练集测试集以外,还有其他的数据分解。比如有时我们需要分出一些附加数据来增强训练集,这个附加数据叫做保留集。有时我们也需要一个以上的测试集。有时我们对一个测试机使用的过于频繁会造成某些特征的频繁调整,所以我们需要一个全新的测试集,通常我们称其为调试集。
这要求我们了解如何划分这三个数据集,因为我们通常会要求我们的训练集足够的的大。通常我们是80%训练集,10%调试集,10%测试集。
1.n元语法对训练语料库的敏感
(1)n元语言模型是非常依赖于语料库的,这也意味着,n增大时,模型对于了的模拟工作会做得更好。
(2)训练模型的上下文越长,用模型生成的句子连贯性越好。n元语法模型的概率矩阵是非常稀疏的,n增大,也更稀疏。
(3)语料库之间也存在差异,用莎士比亚诗训练出来的模型是无法拟合报纸的语料的
针对以上情况我们在训练语言模型时要注意训练集和测试集的划分在文体上不能不同。在进行一般性研究时,我们要平衡语料库是他能够包涵不同的文体,不同的领域。
2.未知词:开放词汇与封闭词汇
封闭词汇就是我们知道文本中可能出现的所有词汇。但现实中我们存在许多的未知词,或者叫表外词。这也就是开放词汇。我们加上伪词来给潜在未登录词建立模型。该模型称为unk
4.4 n元语法的测评:困惑度
测试语言模型最好的方法时·讲模型应用起来,看应用的性能。这种测评叫做端对端的测评,也叫外在评测。但成本很高。所以我们需要一种能快速的对语言模型中实现某种改进的可能性进行评估。这就是内在测评,与任何应用无关。困惑度就是对于n元语言模型一种最常见的内在测评指标。困惑度常常用来快速检验算法。单词序列的条件概率越高,困惑度越低。
4.5平滑
在训练n元语言模型时难免会出现数据稀疏的问题。这会造成零概率n元语法的情况。这些零概率的计数会引起很大的问题。此时我们引入平滑的概念来表示对于那些糟糕估计结果的修正。
1.拉普拉斯平滑
给所有计数加1
2.good-tuning打折法
没看懂
4.6插值法
在解决零频率n元语法问题上我们还可以使用回退法和插值法。
回退法是指在遇到零计数的时候回退到阶数较低的n云·语法模型。插值法是将不同的概率估计混合起来进行加权插值。条件插值中的系数拉姆达的值是根据保留语料库学习得到的。
4.7回退法
回退法就是当我们需要的n元语法模型有零计数时退回到n-1元语法来计算他。katz回退法把打折法作为算法不可分割的一部分。打折法使我们知道周围总共有多少概率量可以设置在我们没有看到的所有事件当中,而回退法告诉我们怎样去分摊这些概率。
4.8实际问题:工具包和数据格式
在实际进行运算时我们会使用对数格式来计算语言模型,以避免下溢;同样进行加法运算要比乘法运算要快
对于n元语法的存储用ARPA格式进行存储,该格式一个ascii文件,列举所有非零的n元语法模型。
对于建立语言模型有两个常用工具包:SRILM和Cambridge-CMU工具包。都是公开的,功能也相似。
4.9语言建模中的高级方法
4.9.1高级平滑方法:kneser-ney平滑法
最普遍的一种方法就是这个,他是带插值的。他的根源被称为绝对折扣的打折方法。
4.9.2基于类别的n元语法
也叫聚类n元语法,是使用了单词的类别的信息的n元语法变体。其中最简单的一种是IBM聚类n元语法。IBM是一种硬聚类,就是一个单词只能属于同一种类别。遂于单词的类别可以使用自动归纳或者手工设计。
4.9.3语言模型的自适应和网络应用
自适应是指在领域以外的大量数据集上进行训练,使训练的模型与某一领域的小量数据进行自适应。这种自适应的数据来源通常是网络,在使用数据时通常是依赖搜索引擎得到的网络计数。
4.9.4长距离信息的使用
最先进的语言识别技术已经采用基于长距离的n元语法技术,有一些采用了5元语言模型。但更高元的模型就没什么效果了。超过六元的上下文几乎是没有用的。
很多语言模型考虑了更加精致的方法,例如我们认为人们喜欢重复前面使用过的单词。所以一个单词被使用一次我们就考虑他很可能被再次使用。这样构建的是隐藏语言模型。
更一般性的事实是,文本倾向于表达大致差不多的事。特定主题的文章倾向于使用相似的单词。这样构建的是基于主题的语言模型。
还有一种语言模型使用潜伏语义索引,他是依赖于文中后面出现的单词与前面的单词在语义上相似。这是我们可以使用触发词,触发词与我们试图预测的单词有很高的相关度。或者我们可以使用跳跃式n元语法或者可变长的n元语法。同时对于概率低的事件进行修剪。
4.10信息论背景
一种研究困惑度的路线是将测试集的概率进行归一化处理。另一种就是将它建立在信息论交叉熵的基础上。熵是信息量的度量单位,可以衡量一个特定语法中的信息量多少。
4.10.1用于比较模型的交叉熵
交叉熵是衡量模型的精确程度的。模型越精准交叉熵越接近真正的熵,所以可以说交叉熵是真是概率熵的上界。交叉熵越低的模型越精准。所以可以推断出困惑度pp就是交叉熵的指数函数。
4.11英文的熵与熵率的均衡性
因为交叉熵可以看作真正熵的上界,所以我们可以根据交叉熵来估计英语的熵。计算英文熵值有两种方法
ch16 语言和复杂性
度杂性的研究除了作为理解自然语言与形式模型之间的关系度量以外,还要研究究竟是什么让一个单独的结构或者句子变复杂的。
16.1chomsky层级
自动机,上下文无关语法等都是用来描写形式语言,形式语言是有限字母表上的符号串的集合。不同形式化方法所写的形式语言具有不同的生成能力,如果一个语法能生成另一个语法所不能生成的语言,那么说这个语法具有更强的生成能力或者说是复杂性。因此我们可以建立语法层级,chomsky就是最常用的层级。由上至下是递归可枚举语言,上下文有关语言,柔性上下文有关语言,上下文无关语言,正则语言。
16.2怎么判断一种语言是不是正则的
我们需要关心这一个问题是因为我们希望知道什么类型的规则可以用来做英文的计算语法。是适合正则表达式还是适合上下文无关规则等。另一个原因是它可以告诉我们自然语言的不同方面的某些形式特征。我们要知道是哪里是语言保持复杂性,是音位系统还是句法系统等。
16.2.1抽吸引理
当我们想证明一个语言是正则语言时最好的方法就是为他建立正则表达式。如果我们想证明一个语言不是正则语言用到的有用的工具就是抽吸引理。
抽吸引理:设:L是一个有限的正则语言。那么,必定存在字符串xyz,使得对n大于等于0有y不等于西塔,并且xynz属于L。
抽吸原理告诉我们如果一种语言是正则的,那么就存在一个字符串y,这个y可以适当的被抽吸。反之不一定成立。
16.2.2英语不是正则语言
具体没看懂
16.3目前已被证明是瑞士德语不是上下文无关的语言
16.4计算复杂性和人的语言处理
为什么句子很难理解:意思太复杂,句子歧义严重,使用罕见单词,书写质量差等。如果一个句子存在多种剖析的可能,那么理解句子的人可能会选择不正确的理解。句子理解的另一类困难可能与人们的记忆有限性有关。