一周速成自然语言处理
最近不忙,学一下机器学习和自然语言处理,主要是《自然语言处理入门》一书和斯坦福公开课吴恩达《机器学习》的学习笔记整理。
第一天(何晗 自然语言处理入门)
第一章 新手上路
- 语料库:人工标注的结构化文本(样本的集合,在机器学习领域称为数据集)
- 自然语言处理的层次

中文分词、词性标注和命名实体识别,这3个任务都是围绕词语进行的分析,所以统称词法分析。词法分析的主要任务是将文本分隔为有意义的词语(中文分词),确定每个词语的类别和浅层的歧义消除(词性标注),并且识别出一些较长的专有名词(命名实体识别)。对中文而言,词法分析常常是后续高级任务的基础。
词法分析只能得到零散的词汇信息,计算机不知道词语之间的关系。在一些问答系统中,需要得到句子的主谓宾结构,这就是句法分析得到的结果。
相较于句法分析,语义分析侧重语义而非语法。它包括词义消歧(确定一个词在语境中的含义,而不是简单的词性)、语义角色标注(标注句子中的谓语与其他成分的关系)乃至语义依存分析(分析句子中词语之间的语义关系)。
- 监督学习:非结构化的数据标注为标注数据,放进模型中进行迭代训练,之后再次输入非结构化数据到模型中,就可以自动预测,得到结构化数据。(数据集附带标准答案 y,则此时的学习算法称作监督学习。)
- 无监督学习:只给机器做题,却不告诉它参考答案,此时的学习称作无监督学习,而不含标准答案的数据集被称作无标注的数据集。机器只能发现样本之间的联系,无法学习样本与答案之间的关联。无监督学习一般用于聚类和降维,两者都不需要标注数据。
- 半监督学习:如果我们训练多个模型,然后对同一个实例执行预测,会得到多个结果。如果这些结果多数一致,则可以将该实例和结果放到一起作为新的训练样本,用来扩充训练集。
- 强化学习:现实世界中的事物之间往往有很长的因果链:我们要正确地执行一系列彼此关联的决策,才能得到最终的成果。这类问题往往需要一边预测,一边根据环境的反馈规划下次决策。\
第二章 词典分词
中文分词:将一段文本拆分为一系列单词。是中文信息处理的第一站。
词典:搜狗实验室发布的互联网词库(SogouW),清华大学开放中文词库(THUOCL)
切分算法:
- 完全切分:找出一段文本中的所有单词。由于词库中含有单字,所以结果中也出现了单字。
- 正向最长匹配:在以某个下标为起点递增查词的过程中,优先输出更长的单词。
- 逆向最长匹配:从后向前扫描,保留最长的单词
- 双向最长匹配:融合两种匹配方法的复杂规则集:
- 同时执行正向和逆向最长匹配,若两者的词数不同,则返回词数更少的那一个。
- 否则,返回两者中单字更少的那一个。
- 当单字数也相同时,优先返回逆向最长匹配的结果。
字典树:速度又快、内存又省的数据结构。字符串集合常用宇典树(trie树、前缀树)存储,这是一种字符串上的树形数据结构。字典树中每条边都对应一个字, 从根节点往下的路径构成一个个字符串。字符串就是一 条路径,要查询一个单词,只需顺着这条路径从根节点往下走。如果能走到特殊标记的节点,则说明该字符串在集合中,否则说明不存在。
- 混淆矩阵:假阳(FP),预测是+,正确是-;假阴(FN),预测是-,正确是+
- 评价指标:
- 精确率(P):预测结果中正类数量占全部结果的比率(TP/(TP+FP))
- 召回率(R):正类样本被找出来的比例(TP/(TP+FN))
- F1:精确率和召回率的调和平均(2*P*R/(P+R))
第三章 二元语法和中文分词
语言模型:是对语言现象的数学抽象。准确的讲,给定一个句子 w,语言模型就是计算句子的出现概率 p(w) 的模型,而统计的对象就是人工标注而成的语料库。
马尔可夫链:给定时间线上有一串事件顺序发生,假设每个事件的发生概率只取决于前一个事件,那么这串事件构成的因果链被称作马尔可夫链。
马尔可夫链假设每个单词出现的概率只取决于前一个单词
二元语法模型:基于马尔科夫假设,每次计算只涉及连续两个单词的二元接续,因此语言模型可以化简为下面的二元语法模型:
n元语法模型:每个单词的概率仅取决于该单词之前的n-1个单词
- 平滑策略:n越大,数据稀疏的问题越严峻。利用低阶 n 元语法平滑高阶 n 元语法,所谓平滑,就是字面上的意思:使 n 元语法频次的折线平滑为曲线。最简单的一种是线性插值法:
- 中文分词语料库:语言模型只是一个函数的骨架,函数的参数需要在语料库上统计才能得到。为了满足实际工程需要,一个质量高、分量足的语料库必不可少。以下是常用的语料库
第二天(吴恩达 机器学习公开课)
监督学习的任务(有正确答案)
回归:预测连续的数值输出(将训练集作为输入,通过机器学习算法输出一个函数h)
分类:预测一个离散值(根据多维特征)
无监督学习的任务
- 聚类:分簇,但是不知道每簇的含义
- 鸡尾酒会算法:声源分离
代价函数与梯度下降——Batch梯度下降算法
线性回归算法中,模型所预测的值与训练集中实际值之间的差距就是建模误差
- 代价函数也被称作平方误差函数,目的是使得代价函数的值最小
给θ0和θ1设置初始值,梯度下降函数会逐渐向局部最优解靠近,返回局部最优解
- 不同的初始值也许到达的点不同
梯度下降法可以最小化代价函数,找到使得代价函数最小的θ0和θ1(收敛到全局最优解)
多个变量的线性回归(使用梯度下降处理多元线性回归)
特征缩放:对于取值范围差别较大的变量,可以采用均值归一化的方法对其进行缩放
- 目的是避免收敛过程太曲折
- 均值归一化:减去平均值,再除以(max-min),使得变量的取值都在-1,1之间
学习率:梯度下降的更新规则(α)
学习率太小,会让收敛速度很慢;学习率太大,可能会跳过最优,不是每一个迭代都会变小,还有可能不会收敛。
对于学习率一般这么选择:0.001~0.003~0.01~0.03~0.1~0.3这样三倍选择。
特征和多项式回归
正规方程:直接求解出最优解对应的θ值(对代价函数求导)
Logistic回归算法——针对离散数值的预测
算法的输出范围[0,1]
函数原型如下图(h函数):其中g函数称为Sigmoid函数或者Logistic函数
z=0 —-> h(x) = g(z) = 0.5 ——决策边界 (也可以是曲线)
- 现在假设我们有一个模型:h(x) = g( θ0 + θ1x1 + θ2x2) ,并且参数θ是向量[-3 1 1]。则当-3+x1+x2 大于等于0,即x1+x2大于等于3 时,模型将预测 y=1。
逻辑回归的代价函数
分开y=1
分开y=1

合起来表示
逻辑回归的多分类问题
可以将其看做成二类分类问题:保留其中的一类,剩下的作为另一类。例如,对于下面这个例子,可以分别计算其中一类相对于其他类的概率。最终选择输出最大的那种分类。
过拟合(无法泛化到新样本中)
图一是欠拟合,图二是好的拟合,图三是过拟合
正则化(过拟合的解决办法)
保留所有的特征,但减小参数j的量级