壹:语料库
一、什么是语料库
1. 定义
语料库(corpus)一词在语言学上意指大量的文本,通常经过整理,具有既定格式与标记。
2. 种类
共时语料库与历时语料库。
通用语料库与专用语料库。一般把抽样时仔细从各个方面考虑了平衡问题的平衡语料库称为通用语料库。
二、语料库加工
1. 文本处理
垃圾格式问题,大小写,标记化,句点、单撇号、连字符,词干化,句子边界。
2. 格式标注与数据标注
三、语料库应用——统计分析
1. Zipf法则
2. 搭配抽取
用频率方法识别固定搭配,用均值和方差方法识别灵活的搭配。
3. 小结
- 语料库是语言集合的采样
- 语料库能够呈现语言的一般规律
- 语料库的加工/标注是NLP建模的基础,一般规模越大,模型性能越好
四、语料库加工——抽取与对齐
1. 基于共现的双语词典自动获取 ![](https://i-blog.csdnimg.cn/blog_migrate/f39a30a379d77af3774119c396cf6415.png)
改进:删除高频干扰词,引入词性处理间接共现(无效),迭代,引入词典
2. 基于长度的双语句子自动对齐
问题的形式化描述如下:
利用贝叶斯公式进行转换。假设对齐句对中源于言和目标语的句子长度服从正态分布,则可以估计出第一项概率。
那么第二项p(match)如何计算呢?由于不同的对齐模式有不同的概率,查找已对齐的双语语料库可以进行估计,最后利用动态规划求解最优路径。
贰:语言是什么
一、语言与自然语言处理
1. 概念
- 语言:一个用于人类交际的、具有任意性语音符号的系统。
- 自然语言处理:利用计算机为工具对人类特有的书面形式和口头形式的语言进行各种类型处理和加工的技术—冯志伟,1996。是一门集语言学、数学、计算机科学和认知科学等于一体的综合性交叉学科。
2. 语言起源
- 神授说
- 人创说:柏拉图认为源自对外界声音的模仿;伊壁鸠鲁认为从各种抒发情感的叫喊演变过来;社会契约说,等等。
- 恩格斯提出了劳动创造了语言,语言起源于劳动的观点。
- 普遍认为:人类有声语言的产生大约是在距今四五万年前的旧石器时代晚期,也就是晚期智人时期。
二、现代语言学——索绪尔的奠基工作
费尔迪南·德·索绪尔,现代语言学之父,把语言学塑造成为一门影响巨大的独立学科。
1. 索绪尔的观点
- 区分了语言和言语这两个不同的概念
- 区分了语言的“能指”与“所指”
- 主张将共时性的研究与历时性的研究区分开来,指出语言学重点在共时研究(内在性质而非演变过程)
- 指出语言是一个系统,它有自己固有的秩序
2. 语言和言语
- 言语:指说话这种行为和说出来的具体的话。
- 语言:是从言语中概括出来的各言语要素的综合,是约定俗成的体系,有统一的语法规则和语音习惯,具有社会性。
- 语言是一般,是规则;言语是特殊,是结果。
3. 能指与所指
- 用A代表B,则A是代表B的符号,A是符号的能指(形式),B是符号的所指(内容)。
- 语言符号是音义结合的统一体。
4. 语言符号的特点
- 任意性:所指与能指联系具有任意性
- 线性:书写、口述、理解,都有先后过程
- 稳定性:短期、局部
- 渐变性:长期、全局
- 社会性:只存在于社会之中,离开了社会就没有语言(不是索绪尔关心的,为什么)
5. 语言系统的两种基本关系
- 组合关系:由词构成句子,横向,又称线性序列关系。
- 聚合关系:具有替换关系的同类性质语言单位,纵向。
6. 语言系统的层级关系
叁:中文分词
一、分词
1. 分词的提出
- 词是自然语言中能够独立运用的最小单位,也是语言信息处理的基本单位(但不是最小的)。
- 分词就是将句子转换成词序列。
- 自动分词是正确的中文信息处理的基础。
二、分词算法——基于字符串匹配
1. 正向最大匹配分词FMM
- 大规模真实语料中99%的词例长度在5个字以内。
- 错误切分率为1/169,往往不单独使用,而是与其它方法配合使用。
2. 逆向最大匹配分词BMM
- 与FMM类似,区别在于从文本末尾倒着进行,匹配失败时去掉第一个字。
- 实验表明:逆向最大匹配法比最大匹配法更有效,错误切分率为1/245。
- 改进:增加知识、增加歧义词表、增加排歧规则等。
3. 双向匹配法
- 双向最大匹配法是将正向最大匹配法(FMM)得到的分词结果和逆向最大匹配法(BMM)得到的结果进行比较,从而决定正确的分词方法。
- 可有效处理分词歧义。
4. 最少分词法
- 等价于最短路径,效果优于单向的最大匹配。
- 缺点:忽略组合歧义,未解决大部分交叉歧义。
- 实现方法:动态规划算法。
5. 最大词频分词
- 正确率可达到92%,简便易行,效果一般好于基于词表的方法。
6. 中文分词的数据结构——词图
三、分词歧义
1. 交集型切分歧义
- 汉字串ABC,满足AB、BC同时构成词,此时造成交集型歧义。
2. 组合型切分歧义
- 汉字串AB,满足A、B、AB同时构成词,此时造成组合型歧义。
3. 真歧义和伪歧义
- 真歧义指存在两种或两种以上的可实现的切分形式。如句子“必须/加强/企业/中/国有/资产/的/管理/”和“中国/有/能力/解决/香港/问题/”中的字段“中国有”是一种真歧义。
- 伪歧义一般只有一种正确的切分形式,如“ 建设/有 ”、“ 中国/人民 ”、“ 各/地方 ”、 “ 本/地区 ”等。
四、新词与未登录词
- 虽然一般的词典都能覆盖大多数的词语,但有相当一部分的词语不可能穷尽地收入系统词典中,这些词语称为未登录词或新词。
- 新词的出现,使得自动分词结果中出现过 多的“散串”,从而影响了分词的准确率。研究还显示,60%的分词错误是由新词导致的。
- 较成熟
• 中国人名、译名
• 中国地名 - 较困难
• 商标字号
• 机构名 - 很困难
• 专业术语
• 缩略语
• 新词语
肆:中文分词——统计建模
一、基于N元文法的分词
N元文法是自然语言处理领域赫赫有名的一个模型。
1. 原理部分
- 在进行推导时,有这样的一个步骤,最终得到待求的最优分词序列是概率最大的序列。这里绕了一大圈,感觉上似乎没什么必要。
- 一种解释是这样的:模型中存在不少假设,有些假设难以给出合理性说明,特别是从实验结果上。相比于直接通过假设进行规定,通过推导一定程度上相当于对假设的检验,增强了模型的合理性。
- 在求P(Seg)时,涉及到句子中各个词的联合概率,联合概率无法直接求解,这里转化为条件概率,结合有限历史假设,转化为概率之积。
- 另外,在具体程序实现过程中,记得将概率连乘转成对数之和,避免连乘导致的下溢。
2. N元文法
- 一元文法(unigram)等价于最大词频分词。
- 二元文法(bigram)也称为一阶马尔科夫链。
- 随着N元文法的N的增大,模型效果越来越好,但随之而来的是参数的爆炸,模型复杂度是N的指数级。
- 为了处理庞大的参数空间与实际有限样本之间落差,常用的方法有等价类映射、数据平滑等。后者应用更为广泛。
二、基于HMM的分词/词性标注一体化
1. 原理部分
- 隐马尔科夫HMM的内容此处不作详细介绍,在之后的第伍章会有讲解,大致思想是由隐状态确定观测序列,状态之间以一定概率转移,不同状态的观测结果概率不同。
- 这里最后一步推导如果细究可能会觉得哪里不对(给定词性序列下出现目标句子的概率和出现分词序列的概率),大概作了某些假设?
- 结果推导,目标概率转化为两项概率之积。
- 其中P(T)可通过N元文法计算,而P(W|T)可由独立性假设简化计算,最终转化为下图所示的式子。其中的P(w|t)和P(ti | ti-1)都可通过HMM的参数得到,因此只要构建出HMM模型,就能计算相应的概率。
- 整体的求解思路:首先构建句子的全切分有向图,然后利用Viterbi算法(动态规划)求解最大路径概率,作为分词结果。
三、有字构词的汉语分词方法
1. 基本思想
- 将分词转换成分类问题,将每个词归到“BMES”标记中的一个,B代表词的开头,M代表词中,E为词尾,S为独自成词。
- 判别方法的优势在于可以用上机器学习领域的诸多算法,不用再造轮子。例如最大熵,条件随机场,SVM等。
- 由字构词的分词可以不必单独设计未登录词识别模块。
四、汉语分词的后处理方法
1. 基于转换错误驱动的标注学习
- 构建一个转换的排序表,对一些规律性的错误分词进行纠正。
- 每一条转换由两部分组成:一条重写规则,和一个触发环境。
- 转换表的生成是一个贪心搜索过程。
五、未登录词识别
1. 人名
- 在中文的未登录词中,人名的规律性最强。
- 人名识别的难点在于四方面:一些高频姓名用字本身就是高频字,如马;人名内部成词,如王国维;人名与上下文构成词;人名地名冲突。
- 人名识别可通过姓名库匹配,计算潜在姓名的概率。
2. 地名
- 没有明确规范、规律,且数量大。
3. 未登录词识别
- 转换为序列标注问题,用BIEO进行标注。
- 可采用HMM,最大熵,条件随机场等模型进行标注。
伍:隐马尔科夫模型及其应用
一、基本原理
1. 概述
- 不同于马尔科夫链,隐马尔科夫模型HMM是一个双重随机过程,包含不可观测的状态序列和可观测的输出序列两部分。下面这个例子就是一个典型的HMM问题,其中口袋为不可观测的状态序列,球为输出序列。
假定一暗室中有N个口袋,每个口袋中有M种不同颜色的球。一个实验员根据某一概率分布随机地选取一个初始口袋,从中根据不同颜色的球的概率分布,随机地取出一个球,并向室外的人报告该球的颜色。再根据口袋的概率分布选择另一个口袋,根据不同颜色的球的概率分布从中随机选择另外一个球。重复进行这个过程。
2. 组成部分
- HMM中主要有5个重要参数——状态集合S,输出符号集合K,状态转移矩阵A,发射矩阵B,初始状态概率分布π。有时简记为三元组(A,B,π)。
二、三个基本问题——估值问题
1. 估值问题
估值问题:给定一个观察序列 O 和模型μ=(A,B,π),如何快速地计算出给定模型μ情况下,观察序列O的概率,即𝑃(𝑂 | 𝜇) ?
- 求解估值问题的基本思路如下,转化为状态序列概率与发射概率之积。但直接计算存在一定困难,如果要遍历每种状态序列,那么问题的规模是指数级的(N的T次幂,N为状态数)。
2. 前向算法
- 解决方案——动态规划,前向算法。
- 定义前向变量
,表示在时间t输出了序列O,并且位于状态si的概率。则
只与
有关。
- 简单来说,就是计算每个时刻各个状态的概率,然后根据发射矩阵B计算出产生Ot的概率。由于每个状态只与前一个时刻的状态有关,因此可在相对较短的时间内完成,时间复杂度为
。
3. 后向算法
-
与前向算法类似,区别在于后向算法从后往前。
三、三个基本问题——序列问题
1. 序列问题
序列问题:给定一个观察序列 O 和模型μ=(A,B,π),如何快速有效的选择在一定意义下“最优”的状态序列 𝑄 ,使得该状态序列“最好的解释”观察序列?
- 对于最优状态序列的一种理解:状态序列中的每个状态都单独的具有最优概率。即寻找某时刻的最优状态。
2. 维特比算法
上述想法存在问题:每一个状态单独最优不一定整体的状态序列最优,甚至可能两个最优的状态之间的转移概率为0。
- 下面考虑全局最优的情况,即生成序列O的概率最大的状态序列。
表示在时刻 t 处于状态 j 且已经输出前 t 个序列的最大概率,同样只与前一时刻有关。
四、三个基本问题——参数估计
1. 参数估计
参数估计问题:给定一个观察序列O ,如何根据最大似然估计来求模型的参数值?即如何调节模型μ=(A,B,π)的参数,使得𝑃 (𝑂 | 𝜇) 最大?
2. 最大似然估计
- 有指导学习,相当于直接经验计数。π,A,B的估计都一样。
- 要求状态序列Q已知,适用于有带标注的大规模分词语料的场景(通常是带词性标注)。
3. 期望值最大化算法EM
-
适用于无任何标注语料的场景(但需要一部有词性标注的词典),采用无指导学习方法 。此时状态序列Q是未知的,无法采用最大似然估计。
-
通过随机初始化参数,再进行迭代,最终结果收敛于极大似然估计。
-
根据以下推导,得到连续两个时刻状态关系的概率。
- 这样,就可以用该式重新表示某时刻出现某状态的概率,并改写各参数的计算方式。每次用上一步迭代的参数计算γ,并对参数进行更新。
- 求解——前向后向算法