开始学习自然语言处理方面的知识了,仅以此记录下学习历程。
1.1自然语言与编程语言
自然语言是非结构化的,具有歧义性、容错性、易变性、简略性的特点。
1.1.1非结构化
编程语言是结构化比较强的,比如创建类,调用方法,都是遵循一定的格式的,而自然语言中不存在这样的显式结构。
举个例子“苹果的创始人是乔布斯,它的logo是苹果”。计算机需要分析出下面的结论:
-
首先,需要对这句话进行序列化:“苹果 的 创始人 是 乔布斯 , 它 的 logo 是 苹果”;
-
其中,第一个“苹果”指的是苹果公司,第二个“苹果”是水果中的苹果。
-
“乔布斯”是人名。
-
“它”指的是“苹果公司”。
-
苹果公司和乔布斯的关系是“的创始人是”,与苹果的关系是“的logo是”
上述操作涉及到了中文分词、命名实体识别、指代消解和关系抽取等自然语言处理的任务
1.1.2歧义性
汉字存在一词多义的情况。
1.1.3容错性
要处理的文本不一定都是规范的。
1.1.4易变性
经常会有新词汇和旧词新用的情况出现。
1.1.5简略性
交流时经常省略背景或常识,比如“老地方见”。
1.2自然语言处理的层次
文本->词法分析->句法分析->语义分析->篇章分析
1.2.1语音、图像、文本
NLP系统的三大输入源。语音和图像一般经过识别后转化成文本,再进行接下来的处理,分别称为语音识别和光学字符识别。
1.2.2中文分词、词性标注、命名实体识别
这三个任务统称为词法分析。词法分析的主要任务是将文本分割成有意义的词语(中文分词),确定每个词语的词性(词性标注),并且识别出一些较长的专有名词-人名、地名、机构名(命名实体识别–命名实体有什么根本上取决于开发者关心什么)。
1.2.3信息抽取
根据分出的单词和标签,可以提取出高频词、关键词、术语等。还可以根据词语之间的统计学信息抽取出关键短语乃至句子。
1.2.4文本分类与聚类
将文本拆分成一系列词语之后,我们还可以在文章级别做一系列分析。
文本分类:将文本分门别类地整理。
文本聚类:把相似的文本归档到一起,或者排除重复的文档,而不关心具体的类别。
1.2.5句法分析
词语之间的主谓关系、动宾关系、定中关系等。
1.2.6语义分析与篇章分析
相较于句法分析,语义分析侧重于语义而非语法。包括词义消歧(确定一个词在语境中的含义)、语义角色标注(标准句子中的谓语与其他成分的关系)乃至语义依存关系(分析句子中词语之间的语义依存关系)。
1.2.7其他高级任务
除了上述功能外,还有自动问答、自动摘要、机器翻译等。
IR(信息检索)的目标是查询信息,NLP的目标是理解语言。IR检索的未必是语言,可能是以图搜图、听歌搜曲、商品搜索等。
1.3自然语言处理的流派
1.3.1基于规则的专家系统
要求设计者对要处理的问题有深入的了解,对设计者要求比较高,而且,设计的规则之间经常有冲突,遇到冲突时,一般按照优先级处理。随着规则数量增加,团队人数增加,需要考虑的兼容性问题更多,更复杂,成本变高,且难以扩展。
1.3.2基于统计的学习方法
使用统计方法让计算机自动学习语言。所谓“统计”,指的是在语料库上进行的统计;所谓“语料库”,指的是人工标注的结构化文本。
统计学习方法是机器学习的别称,机器学习是当代实现人工智能的主流途径。
1.3.3历史
规则系统->统计方法->深度学习
统计模型:隐马尔可夫模型->感知机->条件随机场->神经网络
特征工程:根据语言学知识为统计模型设计特征模板。
深度学习:指的是深层神经网络,其魅力在于不再依赖专家制定的特征模板,而能够自动学习原始数据的抽象表示,所以主要用来学习。
1.3.4传统方法与深度学习
深度学习在CV领域成绩显著,但是在NLP领域发力不大。截止2015年,词性标注模型中,除了Bi-LSTM-CRF之外,其他的都是传统模型,而且相较于传统模型,准确率并未提升太多;
无论是传统统计模型,还是神经网络,都是统计学习方法,都是机器学习范畴。
1.4机器学习
1.4.1什么是机器学习
机器学习是让机器学会算法的算法。
机器学习算法指导机器自动学习出另一个算法,这个算法被用来解决实际问题。被学习出的算法称为模型。
1.4.2模型
模型是对现实问题的抽象。
f(x)=w*x+b
w和b是参数,x是函数的自变量。
模型指的是包括参数在内的整个函数,但不包括自变量。
x:特征向量,表示一个对象的特征。
w:特征权重。
1.4.3特征
特征指的是事物的特点转化的数值。
在机器学习中,“优先级”可以看作特征权重或模型参数。我们只需要定义一系列特征,让算法根据数据自动决定它们的权重就行了。
为了方便计算机处理,我们把特征处理成数值型的特征,这个过程叫特征提取。
工程上,不需要逐个写特征,而是定义一套模板提取特征,这种模板叫特征模板。
如何挑选特征,如何设计特征模板,这称作特征工程。
1.4.4数据集
如何让机器自动学习?首先要有一些例子,如识别一个名字是男性还是女性,先准备大量例子(人名x及其对应的性别y),作为习题集,希望机器自动从习题集中学习中国人名的规律。“例子”一般称作样本。
习题集在机器学习领域叫做数据集,在NLP领域叫做语料库。大部分数据集不可商用,有些领域的数据集很匮乏,需要我们自行标注。
1.4.5监督学习
如果习题集带标准答案,则此时的学习算法称作监督学习。监督学习算法让机器先做一遍题,然后和标准答案作比较,最后根据误差纠正模型的错误。
经过一次次迭代,不断地修正特征权重,提高模型的准确率,这时候,我们需要的特征的“优先级”(特征权重)也就自动求出求出来了。
这种在带有标签的数据集上迭代学习的过程称作训练,训练用到的数据集称为训练集。训练的结果是一系列参数(特征权重)或模型。利用模型,我们可以为任意一个名字计算一个值(男或女),这个过程称为预测。
样本的选择对于最终模型训练的好坏影响很大。
监督学习时,要用标注数据,含有人工标注的成本。
1.4.6无监督学习
如果只让机器做题,但是不给答案,这种学习叫做无监督学习。这种不含标准答案的习题集叫做无标注(unlabeled)数据集。
机器只能发现样本之间的联系,而无法学习样本与答案之间的关联。
无监督学习一般用于聚类和降维,两者都不需要标注数据。
聚类:
一个样本属于哪个簇,由样本之间的相似度和簇的颗粒度来决定。
降维:
如果样本有n个特征,则对应于n+1维空间中的一个点。为了可视化,需要降至二维或三维空间,在降维的过程中,尽量避免有效信息的损失,这就要求每个维度之间的方差尽量大。
网上有很多未标注的数据集,但是这种无监督学习无法捕捉到用户的标准,与用户心中的答案相去甚远,准确率比较低,无法达到生产要求。
1.4.7其他类型的机器学习算法
半监督学习:综合利用标注数据和丰富的未标注数据。训练多个模型,然后对同一个实例预测,会得到多个结果,进行投票,多数一致,则将该实例与结果放到一起作为新的训练样本,就这样,不断地充实训练集。----启发式半监督学习。
强化学习:现实世界中的事物往往有很长的因果链,所以需要我们正确地执行一系列彼此关联的决策,才能得到最终的成果。这类问题需要一边预测,一边根据环境的反馈规划下次决策。
1.5语料库
语料库是NLP领域的数据集,是我们教机器理解语言不可或缺的习题集。
1.5.1中文分词语料库
指的是由人工正确切分后的句子集合。
1.5.2词性标注语料库
指的是切分并为每个词语指定一个词性的语料。素有词性的集合叫做词性标注集。
1.5.3命名实体识别语料库
通常有人名、地名和机构名。命名实体类型有什么取决于语料库制作者关心什么。
1.5.4句法分析语料库
汉语中常用的句法分析语料库有CTB(Chinese TreeBank,中文树库),里面的每个句子都经过了分词、词性标注和句法标注。
1.5.5文本分类语料库
指的是人工标注了所属分类的文章构成的语料库。以搜狗文本分类语料库为例,包含汽车、财经、IT、军事等领域。标注的过程实际上就是把许多文档整理后放到不同的文件夹中。
1.5.6语料库建设
指的是构建一分语料库的过程,分为规范制定、人员培训与人工标注三个阶段。
成熟的标注软件:brat,支持词性标注、命名实体识别和句法分析。
1.6开源工具
NLTK、CoreNLP、LTP、HanLP。