cs224n - 01 NLP和深度学习入门
1.什么是NLP
- 计算机科学,人工智能,语言学交叉学科
- 自然语言的目标是让计算机处理或者理解自然语言,完成有意义的任务
- 下图为人们对于语言层次的传统描述
1. 从输入开始,通常是语言输入(speech)
2. 接着会在大脑中进行语音(phonetic)和音位分析来理解这句话
3. 对单词结构进行形态分析(Morphogical analysis)
4. 然后试着理解句子的结构,做句法分析(Syntatic analysis)
5. 接着做语义理解(semantic understanding)
6. 语用学以及语篇理解
- 本课程主要内容:
- 形态学分析
- 统计自然语言对形态学的解释:
- 形态学又称词法或者词汇形态学
- 研究词的内部结构,包括曲折变化和构词法两个部分
- 由于词具有语音特征,句法特征和语义特征
- 形态学处于音位学,句法学和语义学的结合部位
- 统计自然语言对形态学的解释:
- 句法分析
- 语义理解
- 形态学分析
NLP的一些应用
- 初级语义理解任务(primitive language understanding task):
- 拼写检查 (Spell checking)
- 手机上的自动填写功能(Autocomplete on your phone)
- 搜索引擎联想同义词(synonyms),以及类似想查询的内容
- 阅读理解,充分理解文本
- 机器翻译
- 复杂对话系统
- 文本分类
- 文本挖掘
人类语言的特殊性
- 传递信息
- 人类语言是符号系统
- 人类语言虽然是符号系统,但是符号传输到大脑的过程是通过连续的声学信号,大脑编码似乎是连续的激活值上的模式
- 另外巨大的词表也导致数据稀疏,不利于机器学习。这构成一种动机,是不是应该用连续的信号而不是离散的符号去处理语言
- 什么是深度学习?
- 机器学习分支
- 计算机自动学习,而不是人工教授,手写代码
- 传统机器学习中,人类需要对专业问题理解透彻,才能手工设计特征,比如地名和机构名识别的特征模板
- 然后把特征交给机器学习算法,比如线性分类器,机器为这些特征调整找到合适的权值,将误差优化到最小
- 在这个过程中一直在学习的其实是人类,而不是机器。机器仅仅做了一道数值优化的题目
- 下图为比例:
- 深度学习是表示学习的一部分,用来学习原始输入的多层特征表示
补: NLP之命名实体识别(Named Entity Recongition):
1.命名实体识别是一项很基础性的任务,就是指从文本中识别出命名性指称项,为关系抽取等任务做铺垫
2.狭义上,是识别出人命、地名和组织机构名这三类命名实体
(时间、货币名称等构成规律明显的实体类型可以用正则表达式等方式识别)
1. 当然,在特定的领域中,会相应地定义领域内的各种实体类型
Eg.
小明 在 北京大学 的 燕园 看了 中国男篮 的一场比赛
PER ORG LOC ORG
4. 汉语作为象形文字,相比于英文等拼音文字来说,针对中文的NER任务来说往往要更有挑战性
(1) 中文文本里不像英文那样有空格作为词语的界限标志,而且“词”在中文里本来就是一个很模糊的概念,中文也不具备英文中的字母大小写等形态指示
(2) 中文的用字灵活多变,有些词语在脱离上下文语境的情况下无法判断是否是命名实体,而且就算是命名实体,当其处在不同的上下文语境下也可能是不同的实体类型
(3) 命名实体存在嵌套现象,如“北京大学第三医院”这一组织机构名中还嵌套着同样可以作为组织机构名的“北京大学”,而且这种现象在组织机构名中尤其严重
(4) 中文里广泛存在简化表达现象,如“北医三院”、“国科大”,乃至简化表达构成的命名实体,如“国科大桥”。
5. NER 的各种方法简要摘取三类方法:
(1) 基于规则的方法:
- 利用手工编写的规则,将文本与规则进行匹配来识别出命名实体
- 例如,对于中文来说,“说”、“老师”等词语可作为人名的下文,“大学”、“医院”等词语可作为组织机构名的结尾,还可以利用到词性、句法信息
- 在构建规则的过程中往往需要大量的语言学知识,不同语言的识别规则不尽相同,而且需要谨慎处理规则之间的冲突问题
- 此外,构建规则的过程费时费力、可移植性不好
(2) 基于特征模板的方法
- 统计机器学习方法将 NER 视作序列标注任务,利用大规模语料来学习出标注模型,从而对句子的各个位置进行标注
- 用的应用到 NER 任务中的模型包括生成式模型HMM、判别式模型CRF等
- 比较流行的方法是特征模板 + CRF的方案
- 特征模板通常是人工定义的一些二值特征函数,试图挖掘命名实体内部以及上下文的构成特点
- 对于句子中的给定位置来说,提特征的位置是一个窗口,即上下文位置
- 而且,不同的特征模板之间可以进行组合来形成一个新的特征模板
- CRF的优点在于其为一个位置进行标注的过程中可以利用到此前已经标注的信息,利用Viterbi解码来得到最优序列
- 对句子中的各个位置提取特征时,满足条件的特征取值为1,不满足条件的特征取值为0;然后把特征喂给CRF
- training阶段建模标签的转移,进而在inference阶段为测试句子的各个位置做标注
(3) 基于神经网络的方法
- 随着硬件能力的发展以及词的分布式表示(word embedding)的出现,神经网络成为可以有效处理许多NLP任务的模型
- 这类方法对于序列标注任务(如CWS、POS、NER)的处理方式是类似的
- 将token从离散one-hot表示映射到低维空间中成为稠密的embedding
- 随后将句子的embedding序列输入到RNN中,用神经网络自动提取特征,Softmax来预测每个token的标签
- 这种方法使得模型的训练成为一个端到端的整体过程,而非传统的pipeline,不依赖特征工程,是一种数据驱动的方法
- 但网络变种多、对参数设置依赖大,模型可解释性差
- 此外,这种方法的一个缺点是对每个token打标签的过程中是独立的分类,不能直接利用上文已经预测的标签(只能靠隐状态传递上文信息)
- 进而导致预测出的标签序列可能是非法的,例如标签B-PER后面是不可能紧跟着I-LOC的,但Softmax不会利用到这个信息
- 学界提出了 LSTM-CRF 模型做序列标注,LSTM层后接入CRF层来做句子级别的标签预测,使得标注过程不再是对各个token独立分类
5. BiLSTM+CRF自行阅读
参考: https://blog.csdn.net/ARPOSPF/article/details/
81106212
深度学习的历史
- 请参考Paper: 深度学习综述(Deep Learning)
为什么需要研究深度学习:
- 手工特征耗时耗力,还不易拓展
- 自动特征学习快,方便拓展
- 深度学习提供了一种通用的学习框架,可用来表示世界、视觉和语言学信息
- 深度学习既可以无监督学习,也可以监督学习
课程作业:
- 四次编程练习,使用Tensorflow
为什么NLP难?
- 人类语言充满歧义
- 语言依赖上下文
Deep NLP = Deep Learning + NLP
- 将自然语言处理的思想与表示学习结合起来,使用深度学习的方法解决NLP目标
- 层次: 语音,词汇,语法,语义
- 工具: 词性标注,命名实体识别,句法/语义分析
- 应用: 机器翻译,情感分析,客服系统,问答系统
NLP表示层次: 形态级别
- 传统方法在形态级别的表示是词素
- 深度学习中把词素也作为向量
- 多个词素向量构成相同纬度语义更丰富的词向量
NLP工具:句法分析
NLP语义层面的表示:
- 传统的方法是手写大量规则函数: 叫做Lambda calculus
- 深度学习中华,每个句子,短语与逻辑表述都是向量,神经网络负责它们的合并
情感分析
- 传统方法是请一两百个工人,手工搜集“情感极性词典”在词袋模型上做分类器
- 深度学习复用了RNN来解决这个问题,它可以识别“反话”的情感极性
QA问答系统
- 传统反复方法是手工编写大量的逻辑规则,比如正则表达式
- 深度学习依然使用了类似的学习框架,把事实储存在向量里
客服系统
- 最著名的例子得数GMail的自动回复
机器翻译
- 传统方法在许多层级上做了尝试,词语、语法、语义之类
- 这类方法试图找到一种世界通用的“国际语”(Interlingua)来作为原文和译文的桥梁
- 将原文映射为向量,由向量构建译文
- :所有层级的表示都是向量
参考:
- http://www.hankcs.com/nlp/cs224n-introduction-to-nlp-and-deep-learning.html