赞
踩
《NPL基于词典分词(三)》介绍第一个基于序列标注的中文分词器-隐马尔可夫模型,然而效果并不理想。事实上,隐马尔可夫模型假设人们说的话仅仅取决于一个隐藏的{B.M,E,S序列,这个假设太单纯了,不符合语言规律。语言不是由这么简单的标签序列生成,语言含有更多特征.
为了利用更多的特征,线性模型( linear model )应运而生。线性模型由两部分构成: 一系列用来提取特征的特征函数 φ,以及相应的权重向量 w。
分类指的是预测样本所属类别的一类问题。
二分类,将类型class1看作正样本,其他类型全部看作负样本,然后我们就可以得到样本标记类型为该类型的概率 p1。
任意类别数的多分类, 在二分类基础上将另外类型class2看作正样本,其他类型全部看作负样本,同理得到 p2。以此循环,我们可以得到该待预测样本的标记类型分别为类型 class i 时的概率 pi,
最后我们取 pi 中最大的那个概率对应的样本标记类型作为我们的待预测样本类型。总之还是以二分类来依次划分,并求出最大概率结果。
线性模型是传统机器学习方法中最简单最常用的分类模型。如图直线将平面分割为两部分,分别对应男女。
假设样本为姓名,计算它落入哪个区域,就能预测它的性别。这样的区域称为决策区域,它们的边界称为决策边界。二维空间中,如果决策边界是直线,则称为线性分类模型:
y
=
w
x
+
b
y= wx + b
y=wx+b
把二维空间提升到任意维度空间,线性决策边界统称为分离超平面
∑
i
D
w
i
x
i
+
b
=
0
\sum_i^Dw_ix_i+b=0
i∑Dwixi+b=0
其中,w 是权重,b 偏置(截距),可以写成向量的形式:
w
=
[
w
1
.
.
.
w
D
,
b
]
;
x
=
[
x
1
.
.
.
x
D
,
1
]
w=[w_1...w_D, b];x=[x_1...x_D,1]
w=[w1...wD,b];x=[x1...xD,1]
所以判断是否为正样本
ps:sign(x)叫做符号函数,当x<=0,即=-1,反之=1
如果我们知道分离超平面,我们就能快速的判断样本的真假, 找出这个分离超平面其实就是感知机算法。
感知机算法是一种迭代式的算法:在训练集上运行多个迭代,每次读入一个样本,执行预测,将预测结果与正确答案进行对比,计算误差,根据误差更新模型参数,再次进行训练,直到误差最小为止。
下图给出了感知机参数学习的过程
其中红色实心为正例,蓝色空心点为负例。黑色箭头表示权重向量,红色虚线箭头表示权重的更新方向。
其学习的过程
最终把损失函数降到最低时的“分离超平面”,即为我们所要的。
假如数据本身线性不可分,感知机损失函数不会收敛,每次迭代分离超平面都会剧烈振荡(左飞右,右飞左,稳定不到最低点)。这时可以对感知机算法打补丁,使用投票感知机或平均感知机。
使用感知解决人名性别分类例子:
赵伏琴,女
钱沐杨,男
孙竹珍,女
李潮阳,男
(伏,琴) -1
(沐,杨) 1
(竹,珍) -1
(潮,阳) 1
(潮,珍) 1
字符 | 伏 | 琴 | 沐 | 杨 | 竹 | 珍 | 潮 | 阳 |
---|---|---|---|---|---|---|---|---|
w | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
字符 | 伏 | 琴 | 沐 | 杨 | 竹 | 珍 | 潮 | 阳 |
---|---|---|---|---|---|---|---|---|
w | -1 | -1 | 0 | 0 | 0 | 0 | 0 | 0 |
字符 | 伏 | 琴 | 沐 | 杨 | 竹 | 珍 | 潮 | 阳 |
---|---|---|---|---|---|---|---|---|
w | -1 | -1 | 0 | 0 | -1 | 0 | 1 | 0 |
输入x[沐,琴]
s
i
g
n
(
∑
w
)
=
s
i
g
n
(
w
[
沐
]
+
w
[
琴
]
)
=
s
i
g
n
(
−
1
)
=
−
1
sign(\sum w)= sign(w[沐] + w[琴] ) = sign(-1) = -1
sign(∑w)=sign(w[沐]+w[琴])=sign(−1)=−1
对应到自然语言处理问题中,仅依赖标量x进行分类会显不那么准确,往往会伴随结构化预测。现在的自然语言处理中有许多任务是结构化,比如序列标注预测结构是一整个序列,句法分析预测结构是一棵句法树,以及前文提到的中文分词隐马乐可夫{B,M,E,S} 。
{B,M,E,S}标签可有上线的线性模块判断,但也必须必须考虑结构整体的合理程度
要让线性模型支持结构化预测,必须先设计打分函数。打分函数的输入有两个缺一不可的参数: 特征 x 和结构 y。但之前介绍的线性模型的“打分函数”只接受一个自变量 x。
做法是定义新的特征函数 ϕ(x,y),把结构 y 也作为一种特征,输出新的“结构化特征向量”。新特征向量与权重向量做点积后,就得到一个标量,将其作为分数:
s
c
o
r
e
(
x
,
y
)
=
w
ϕ
(
x
,
y
)
score(x,y) = wϕ(x,y)
score(x,y)=wϕ(x,y)
有了每个标签在不同结构的分数,再结结合整个结构算出最大值,取分值最大的结构作为预测结果,得到结构化预测函数:
预测函数与线性分类器的决策函数很像,都是权重向量点积特征向量。那么感知机算法也可以拓展复用,得到线性模型的结构化学习算法。
上面已经讲了结构化感知机的模型公式,看如何运用到序列标注上,我们知道序列标注最大的结构特点就是标签相互之间的依赖性,这种依赖性利用初始状态概率想俩狗和状态转移概率矩阵体系那,那么对于结构化感知机,就可以使用转移特征来表示
其中,Yt 为序列第 t 个标签,Si 为标注集第 i 种标签,N 为标注集大小。
状态特征如下,类似于隐马尔可夫模型的发射概率矩阵,状态特征只与当前的状态有关,与之前的状态无关:
于是,结构化感知机的特征函数就是转移特征和状态特征的合集,我们统一用打分函数来表示:
下面是基于结构化感知机的中文分词步骤
商品 和 服务
商品 和服 物美价廉
服务 和 货币
转移特征 | 状态特征 |
---|---|
y t − 1 y_{t-1} yt−1 | x t − 1 x_{t-1} xt−1 x t x_{t} xt x t + 1 x_{t+1} xt+1 x t − 2 / x t − 1 x_{t-2}/x_{t-1} xt−2/xt−1 x t − 1 / x t x_{t-1}/x_{t} xt−1/xt x t / x t + 1 x_{t}/x_{t+1} xt/xt+1 x t + 1 / x t + 2 x_{t+1}/x_{t+2} xt+1/xt+2 |
根据上术规则分析语料特佂,以第一句“商”为例子
x-商 y-B
/1
/商2
/3品
/4
/商5
商/品6
品/和7
// todo
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。