斯坦福cs224n-2017 winter笔记
主要内容
什么是NLP
自然语言处理(NLP)是一门计算机科学、人工智能和语言学的交叉学科。
NLP的目的是处理或者“理解”自然语言,从而完成一些有意义的任务,如订票、购物、QA等等。
完全理解和表达语言的意思是非常困难的,perfect language understanding is AI-complete。
NLP涉及的层次
输入主要有两个来源:语音和文本。所以第一级是语音识别和OCR或分词,接下来是形态学,再下面是句法分析和语义分析,最后是discourse processing,需要根据上文语境理解下文。
这门课主要集中在画圈的三个部分,中间的两个最为重要。
NLP应用
一个小子集:拼写检查、关键词检索、文本挖掘、文本分类、机器翻译、复杂对话系统等。
在工业界的应用,包括搜索、广告投放、自动/辅助翻译、情感/舆情分析、语音识别、聊天机器人等等。
人类语言的特殊之处
人类语言是离散的、明确的符号系统,但又允许出现各种变种(如颜文字、随意的拼写错误等)。
语言符号有多种形式,但不同的形式中意义保持不变。
虽然人类语言是明确的符号系统,但是大脑编码似乎是连续的激活值上的模式,符号传输到大脑的过程是通过连续的声光信号。另外,巨大的词表会导致数据稀疏(sparsity),不利于机器学习,所以我们希望去探索一种连续编码的模式。
什么是DL
深度学习(DL)是机器学习的一个子集。
传统的机器学习方法,大多是人类对专业问题理解很透彻,然后人工设计输入特征,比如地名和机构名识别的特征模板(Finkel et al., 2010)。之后将特征交给某个机器学习算法,比如线性分类器等,算法为这些特征找到合适的权重,将误差优化到最小。
在这个过程中,是人类一直在学习,而机器只是进行了数值优化的工作。
而深度学习是表示学习的一部分,试图自动的学习原始输入的多层特征表示。
DL的历史
为啥研究DL
语音识别中的DL
突破性研究参考 Context-Dependent Pre-Trained Deep Neural Networks for Large-Vocabulary Speech Recognition
计算机视觉中的DL
突破性研究参考 ImageNet Classification with Deep Convolutional Neural Networks
为什么NLP很难
人类语言充满歧义,人类语言的解读依赖于现实世界、常识以及上下文等。
Deep NLP = Deep Learning + NLP
用深度学习的方法解决NLP问题,提高了很多方面的效果:
- 层次:语音、词汇、语法、语义
- 工具:词性标注、命名实体识别、句法分析
- 应用:机器翻译、情感分析、对话系统、问答系统
NLP表示层级:形态级别
传统方法在形态级别的表示是词素:
深度学习中把词素用向量表示,多个词素向量构成相同维度、语义更丰富的词向量:
NLP工具:句法分析
神经网络能够准确的进行句法分析,判断句子结构,参考 A Fast and Accurate Dependency Parser using Neural Networks
NLP表示层级:语义级别
传统方法是手写的大量规则函数,称为Lambda calculus
,没有语言的相似性或模糊性的概念:
深度学习中,每个词、短语和逻辑表达都是向量,神经网络进行向量合并:
NLP应用:情感分析
传统方法是通过大量的人工搜集情感极性词典,在词袋模型上做分类器。
深度学习使用RNN解决这个问题(同样可用于形态学、语法、逻辑语义问题):
上图并不是RNN的工作流程,仅是为了方便理解。
NLP应用:QA系统
传统方法是通过总结大量的特征工程,编写大量逻辑规则,如正则表达式之类:
深度学习方法仍然采用和前面提到的类似的深度学习框架,将事实存储在向量中:
NLP应用:对话系统
一个成功的案例是Gmail的自动回复系统。
这是神经语言模型(Neural Language Models)的一次成功应用,神经语言模型是基于RNN的:
NLP应用:机器翻译
传统方法在很多层级上都做过尝试,传统的MT系统是非常庞大复杂的,并且有试图寻找一种通用的中介语来作为源语和目标语之间的桥梁。
而深度学习方法,即神经机器翻译(Neural Machine Translation,NMT),将源语映射为向量,然后由向量构造目标语(参考Sutskever et al. 2014,Bahdanau et al. 2014,Luong and Manning 2016):
总结:所有层级表示都是向量
深度学习的根本强项在于,将所有的语言形式用向量表达,通过一些变形操作又可以将向量变成矩阵或更高阶的阵列(即张量tensor),所以向量是一种具有强大表达能力的灵活的数据结构。
附
词向量,一般想正经做点儿东西的话,怎么也得300维、1000维或者更多维这样的级别。
试图将词向量按照高维空间表示的含义映射到二维空间上的常用方法:PCA(主成分分析),t-SNE(一种非线性降维),但低维投影还是会遗漏大量信息。