等我草草刷完一遍NLP领域的相关知识,才发现工程实践的综合性太强了,几乎涉及到了NLP的所有!核心知识!而且还要结合KG!暴风哭泣,我好害怕做到一半做不出来。。。啊,我好菜啊。。。我怎么什么都不懂。。。
自然语言:语音、文字
NLP:研究语言能力和语言应用的模型,建立算法框架来实现这样的语言模型,并完善和评测。最终用于设计各种实用系统。
是语言学、计算机科学、统计学的交叉学科。属于AI领域的子领域。
处理粒度:文档库 -> 文章 - > 段落 -> 句子 -> 词
发展历程
以语言学为基础:建立基本语言规则,使用数理逻辑进行推理,建立模型或理解语言——语法语义,形式语言理论
以统计学为基础(目前):在足够大的数据的基础上,分析规则,产生智能。业务知识相对不重要——对材料的数量有要求
未来的趋势是深度学习等AI最新技术
NLP的研究内容
- 信息检索:搜索引擎,要求分词歧义处理、文档质量判断、去重
- 机器翻译
- 文档分类:基于距离的文本聚类
- 问答系统:基于答案库
- 信息过滤
- 自动文摘
- 信息抽取:将无结构的数据整理成结构化的数据以供检索——命名实体抽取
- 文本挖掘
- 舆情分析:情感分析——基于监督的文本分类
- 词库匹配
- 基于正负样本构建分类器
- 机器写作:形式语言处理
- 如自动股评:先分为行情和预测两部分,每一部分都可以有多种文法来自动生成句子
- 文稿机器校对
- OCR或语音识别
困难
场景:语言的多样性、多变性、歧义性
学习:数学模型——概率图模型、隐含马尔科夫过程、最大熵模型、条件随机场
语料:定义、作用、获得途径
基于语言学的理论
描述语言的三种途径:穷举法、文法(产生式系统描述)、自动机法
形式语言
- 集合论
- 字符串——语言是一定规律的字符串的有限或无限的集合
- 连接
- 集合乘积
- 闭包
- 字符串——语言是一定规律的字符串的有限或无限的集合
- 图论(离散数学)
- 形式语法是一个四元组(非终结符,终结符,产生式(推理规则),初始符) ==> 句子
- 推导
- 规约——中间有多次推导
文法的构造:一般来说,根据语言构造文法没有太直接的方法可用,它需要构造者本人所具有的经验。同一种语言可有多种文法。
形式语言的应用:
- 一些结构化语言:如SQL语法图
- 机器写作
自动机理论
四型文法:——类似于数据库的设计范式
- 正则文法——3型文法,顺序线性产生
- 左右线性正则文法是等价的
- 上下文无关文法——2型文法
- 上下文有关文法——1型文法
- 无约束文法——0型文法
越规范越易于处理
有限自动机(DFA):
- M 五元组 (输入符号,状态集合,映射,初始状态,终止状态)
- 对于任意一个正则文法,总可以确定一个对应的DFA
下推自动机(PDA):
- 可看成一个带有附加下推存储器(一个堆栈)的有限自动机
- 七元组
- 对于上下文无关文法,可以构造一个下推自动机。由于正则文法是上下文无关文法的子集,因此也可以出离正则文法
线性界限自动机——对应上下文有关文法
图灵机——对应无约束文法
自动机的应用:
- 单词自动查错纠正
- 编辑距离
- 词性消歧
- 状态转换机
形式语言的缺陷
- 对于汉语这样的大型自然语言系统,难以构造精确的文法
- 语法正确的句子可能是无意义的
- 解决:基于大量预料,采用统计学手段建立模型
统计自然语言处理
只有在数据不够充足的情况下,我们才需要更加借助业务知识。
n元语言模型
通过概率,计算某个句子的概率。——条件概率,为了简化计算并减少空间占用,只计算与前一个字有关的概率
一般步骤
- 收集大量语料:基础工作,工作量最大
- 对语料进行统计分析,得出知识(概率)——例如n元文法
- 针对场景建立算法 ,即使是计算简单的概率也有很多复杂的算法可以运用,有些可以直接标注
- 解释或应用结果
性能评价常用指标:交叉熵、困惑度
数据平滑:加法平滑、古德-图灵估计法、Jelinek-Mercer平滑方法
语言模型的缺陷
- 在训练语言模型时所采用的的语料往往来自多种不同的领域,这些综合型语料难以反映不同领域之间在语言使用规律上的差异,而语言模型恰恰对于训练文本的类型、主题和风格都非常敏感——非常依赖语料库,数据来源是多领域而应用比较专业时效果往往比较差
- n元语言模型的独立性假设前提是当前词出现的概率仅与前面的n-1个词相关,这种假设比较脆弱
应用:——选择最高概率的做出结果输出
- 语音识别歧义消除
- 汉语分词问题
概率图模型
基于图的概率表示,计算联合分布的概率
有向图——贝叶斯网; 无向图——马尔科夫网
不同视角: 图 -> 图导出的独立关系 -> 图导出的因子分解
An Introduction to Conditional Random Fields
分类器
产生式模型:朴素贝叶斯——先估算联合概率密度,再用贝叶斯公式,在少量样本情况下,可以取得更好的精确率
判别式模型:logistics回归——直接估算,在样本增加的情况下,逐渐逼近前者的精确率
两者关系
朴素贝叶斯 ->(序列化) -> 隐马尔可夫 ->(去掉一些限制条件) -> 条件随机场
logistics回归 ->(序列化) -> 条件随机场
马尔科夫及HMM
马尔科夫链的应用:
- 压缩算法
- 排队论
- 语言识别
- 基因预测
- 搜索引擎鉴别网页质量的RP值
隐马尔可夫的应用:
- 语音识别
- 分词
缺陷:
- 只能根据顺序(马尔科夫性)来计算,有些特征没有办法刻画——解决最大熵
- 生成式模型,需要给出状态和符号之间的联合概率分布,把观察符号割裂为相互独立的验资结构,无法提现依赖关系,标注偏置——解决:条件随机场
最大熵模型
在只掌握了未知分布的部分信息的情况下,符合已知知识的可能有多个,但是熵值最大的概率分布最真实地反映了事件的分布情况
数学表达:特征
参数估计:GIS算法
最大熵马尔科夫模型:因为加入了特征,克服了马尔科夫只能适应线性的缺陷
条件随机场(最难理解)
给定随机变量X的条件下,随机变量Y的马尔科夫随机场。
参数化形式
特征模板
前向-后向算法
具体理论部分以后细看吧…这会真滴看不懂
CRF应用:把NLP问题转为标注问题——命名实体识别,标注,句法分析,词法分析
- 收集大量已经标注好的语料
- 建立特征模板,由软件系统自动扫描语料并按模板生成特征函数。对重复出现的特征进行强化
- 训练,参数估计,确立模型
- 给模型输入观测序列,模型预测其标注序列
汉语分词
自动分词,命名实体识别,词性标注
存在的问题
分词规范问题:切分粒度
歧义切分问题:交集型、组合型、多义组合型——问题不大
未登陆词问题:人名、地名、组织名、术语、术语、新词——占比98%,主要关注问题
分词发展
基于词典 -> 最少词数分词 -> 用统计模型解决分词歧义 -> 无词典统计方法分词
词典:——精度不高,但简单性能好
- 正向最大匹配法、逆向最大匹配法、双向匹配法
- 逐词遍历法
- 基于词表的分类法
- 实现:树、散列表、布隆过滤器
统计方法:
- N-最短路径方法
- 基于词的n元语法模型——语言模型
- 由字构词——把分词问题看成标注问题,即CRF——不适用于海量数据
- 基于词感知机算法
- 生成式和判别式相结合
词典其实可以看成一种没有上下文关系,只有词的特殊语料库。
性能指标
- 精确率
- 召回率
- $F$值——前两个指标的调和平均
命名实体识别(发展较差)
- 基于多特征的命名实体识别模型
- 基于CRF
未登录词处理方法(重要)
基于规则的方法、机器学习方法
词性标注
汉语语法分析“三姐妹”:分词(较成熟)、实体命名识别(发展较差)、词性标注(较成熟)。
在工程实现里,词性标注和分词同时完成
- 基于HMM的方法——相比于CRF对语料的要求更宽松,基于较少的标注就可以得到不错的结果,速度也更快
文本分类
选取适当的特征及权重,将文本量化映射为样本空间中的样本。
通过在样本空间构建适当的分类器或聚类解决文本分类问题,通过计算向量余弦计算文本相似度。
文本特征选择方法
- 基于文本频率的特征提取方法——太高太低都不行
- 信息增益法——熵的差值
- $X^2$统计量——关联程度
- 互信息法——共现程度
LDA模型(较难)
抽词建立文档
分类器性能评测
应用:
- 网页自动分类
- 判断垃圾邮件
- 情感分析
句法分析
- 基于PCFG——上下文无关
- 结构分析
- 浅层句法分析——完全句法分析的简化版,包括语块识别与分析和语块依附关系两部分
- baseNP —— 转成标注问题
- 依存关系——以动词为中心
- 判别式
- 序列标注
语义分析
语义消歧
篇章分析
指代消解——技术难度极高
自动抽取文摘—— 给句子打分,抽取每段中的高分句子。句子之间必须做篇章衔接性的处理,即句子消融。过程:对原文进行分词 -> 特征分析统计 -> 计算词的权重 -> 根据主题词计算句子的权重 -> 根据摘要句生成摘要
基于LDA的单文档摘要
多文档摘要:基于单文档抽取的句子,如何解决排列问题,如何上下文融合
问答系统
问题分析 + 信息检索 + 答案抽取
- 基于问题-答案对的问答系统——根据日常经验形成的有问题-答案数据库
- 基于自由文本的问答系统——只有知识库,没有标准答案对。对答案进行分析后,知识库抽取信息对原问题中的句子进行替换,这可能会产生多个句子,所以还需要将这些句子拿去与原文匹配,找出存在的证据。每找出一次证据,给句子加分,最后选出得分最高的句子。
- 极其复杂,几乎用到了NLP中所有技术
- 问题分析:问句分类,主题识别,语法分析,指代消解,命名实体识别,名词短语,动词短语抽取
- 信息检索:文本检索,隐语义析取,相似度计算
- 答案提取:文档摘要
工具
语料库:
- LIAVC:香港城市大学建立
- LDC中文树库
- WordNet
- FrameNet
- EDR
- 北京大学综合型知识语言库
- 知网
- 概念层次网络
词性标注:
- tagger
语言模型:
- SRILM
HMM:
- HTK: 主要用于大规模语音识别系统
最大熵:
- openNLP:有java的API
- MALLET
- NLTK:python
CRF:
- CRF++
分词:
- ICTCLAS/NLPIR
- Jieba——python
- 庖丁解牛——java
命名实体识别:
- Stanford NER: 英文,CRF
问答机器人:
关于语料:要么提供明确的业务逻辑,比如在信息的哪一个部分能够提取到所需的信息;或者提供一个词典,词典中的都是想摘取的信息;要不基于大量标注好的学习材料,建立一个学习模型
顶尖会议及人物
有兴趣可以参加会议相关比赛…