前言

《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∑D​wi​xi​+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,发现估值错误,则以w向量*正例向量,线性决策边界向正例靠
  2. 图2,发现估计错误,则以w向量*反例向量,线性决策边界向反例靠

其学习的过程

  • 损失函数: 从数值优化的角度来讲,迭代式机器学习算法都在优化(减小)一个损失函数( loss function )。损失函数 J(w) 用来衡量模型在训练集上的错误程度,自变量是模型参数 w,因变量是一个标量,表示模型在训练集上的损失的大小。
  • 梯度下降: 给定样本,其特征向量 x 只是常数,对 J(w) 求导,得到一个梯度向量 Δw,它的反方向一定是当前位置损失函数减小速度最快的方向。如果参数点 w 反方向移动就会使损失函数减小,叫梯度下降。
  • 学习率: 梯度下降的步长叫做学习率。
  • 随机梯度下降(SGD): 如果算法每次迭代随机选取部分样本计算损失函数的梯度,则称为随机梯度下降。

最终把损失函数降到最低时的“分离超平面”,即为我们所要的。

假如数据本身线性不可分,感知机损失函数不会收敛,每次迭代分离超平面都会剧烈振荡(左飞右,右飞左,稳定不到最低点)。这时可以对感知机算法打补丁,使用投票感知机或平均感知机。

  • 投票感知机:每次迭代的模型都保留,准确率也保留,预测时,每个模型都给出自己的结果,乘以它的准确率加权平均值作为最终结果。但要求存储多个模型及加权,计算开销较大.
  • 平均感知机:取多个模型的权重的平均

基于感知机的人名性别分类

使用感知解决人名性别分类例子:

1. 标注人名分类语料库

赵伏琴,女
钱沐杨,男
孙竹珍,女
李潮阳,男

2. 利用感知机算法训练线性模型
  1. 提取特性,提取陈姓之外字做为特性x

(伏,琴) -1
(沐,杨) 1
(竹,珍) -1
(潮,阳) 1
(潮,珍) 1

  1. 初始化向量表,标量x都为1,只要关注w就行
字符
w 0 0 0 0 0 0 0 0
  1. 输入x[伏,琴]
    s i g n ( ∑ w ) = s i g n ( w [ 伏 ] + w [ 琴 ] ) = s i g n ( 0 ) = 1 sign(\sum w)= sign(w[伏] + w[琴] ) = sign(0) = 1 sign(∑w)=sign(w[伏]+w[琴])=sign(0)=1
    与-1不相等,即增加w-1
字符
w -1 -1 0 0 0 0 0 0
  1. 循环2次最终得
字符
w -1 -1 0 0 -1 0 1 0
3. 利用线性模型给人名分类。

输入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)
有了每个标签在不同结构的分数,再结结合整个结构算出最大值,取分值最大的结构作为预测结果,得到结构化预测函数:

预测函数与线性分类器的决策函数很像,都是权重向量点积特征向量。那么感知机算法也可以拓展复用,得到线性模型的结构化学习算法。

  1. 读入样本 (x,y),进行结构化预测
  2. 与正确答案相比,若不相等,则更新参数: 奖励正确答案触发的特征函数的权重,否则进行惩罚.

结构化感知机与序列标注

上面已经讲了结构化感知机的模型公式,看如何运用到序列标注上,我们知道序列标注最大的结构特点就是标签相互之间的依赖性,这种依赖性利用初始状态概率想俩狗和状态转移概率矩阵体系那,那么对于结构化感知机,就可以使用转移特征来表示

其中,Yt 为序列第 t 个标签,Si 为标注集第 i 种标签,N 为标注集大小。
状态特征如下,类似于隐马尔可夫模型的发射概率矩阵,状态特征只与当前的状态有关,与之前的状态无关:

于是,结构化感知机的特征函数就是转移特征和状态特征的合集,我们统一用打分函数来表示:

下面是基于结构化感知机的中文分词步骤

1.加载语料库

商品 和 服务
商品 和服 物美价廉
服务 和 货币

2.提供结构化感知机的特征,x是字符,y是{B,M,E,S}
转移特征 状态特征
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

3.使用打分公式计算各状态分数

// todo

4. 通过打分公式预测的状态和实际状态不一样,调节状态
5. 1-4步骤循环10次,提高准确率

主要参考

《线性模型篇之感知机 (PLA) 数学公式推导》
《感知机分类与序列标注》

NPL基于词典分词(四)相关推荐

  1. NPL基于词典分词(二)

    前言 <NPL基于词典分词(一)>中我们实现了块儿不准的词典分词,词典分词无法消歧.给定两种分词结果"商品 和服 务"以及"商品 和 服务",词典分 ...

  2. NPL基于词典分词(一)

    前言 自然数据处理里很重要的一环节就是中文分词,它指的是将一段文本拆分为一系列单词的过程,这些单词顺序拼接后等于原文本.而中文分词算法大致分为基于词典规则与基于机器学习这两大派. 什么是词 在基于词典 ...

  3. 基于Python实现的词典分词方法或统计分词方法

    资源下载地址:https://download.csdn.net/download/sheziqiong/85787813 资源下载地址:https://download.csdn.net/downl ...

  4. 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词

    基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤 第一次写中文分词程序,欢迎拍砖. publicclass MM ...

  5. 基于词典的前缀扫描中文分词

    说明 中文分词是很多文本分析的基础.最近一个项目,输入一个地址,需要识别出地址中包含的省市区街道等单词.与以往的分词技术不同.jieba/hanlp等常用的分词技术,除了基于词典,还有基于隐马尔科夫/ ...

  6. 基于词典的逆向最大匹配中文分词算法,更好实现中英文数字混合分词

    基于词典的逆向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤.实际分词效果比正向分词效果好 publicclass RMM ...

  7. NLP-基础任务-中文分词算法(1)-基于词典: 机械分词(词典字符串匹配):前向最大匹配、后向最大匹配、双向最大匹配【OOV:基于现有词典,不能进行新词发现处理】

    分词与NLP关系:分词是中文自然语言处理的基础,没有中文分词,我们对语言很难量化,进而很能运用数学的知识去解决问题.对于拉丁语系是不需要分词的. 拉丁语系与亚系语言区别 拉丁语言系不需要分词,因为他们 ...

  8. 基于词典规则的中文分词(C语言实现)

    0 引 言 自然语言处理(Natural Language Processing, NLP)是以语言为对象,利用计算机技术来分析.理解和处理自然语言的一门学科,即把计算机作为语言研究的强大工具,在计算 ...

  9. 中文分词算法—— 基于词典的方法

    1.基于词典的方法(字符串匹配,机械分词方法) 定义:按照一定策略将待分析的汉字串与一个"大机器词典"中的词条进行匹配,若在词典中找到某个字符串,则匹配成功. 按照扫描方向的不同: ...

最新文章

  1. symfony2是什么?
  2. python打开火狐浏览器打不开网页_PHP让指定网页只能在微信内置浏览器打开 附代码...
  3. STM32与宇电设备实现AI-BUS通讯
  4. __call__方法解析
  5. go语言结构体作为函数参数,采用的是值传递
  6. 推荐几个手机网站在线预览测试工具
  7. TensorFlow进阶:CNN对CIFAR10图像分类
  8. windows优化大师怎么用_曾经辉煌的装机必备软件,你用过几个?
  9. 如何正确的寻找电影资源
  10. C#员工考勤管理系统源码 考勤工资管理系统源码
  11. 第二章 让你的kali系统变得更好用
  12. 触发器引起的删除对象报错ORA-00604 ORA-20001的排查
  13. 第05篇:Mybatis的SQL执行流程分析
  14. 文本相似度:Distributed Representations of Sentences and Documents
  15. MySQL实现字符串逗号分割split并获取长度
  16. ECBS多机器人路径规划
  17. Ubuntu不能连接XShell、主机Ping不通虚拟机,但虚拟机能ping通主机
  18. js的toFixed四舍五入偶尔不正确的问题
  19. 语法分析:LL(1)语法分析的实现及扩展的巴科斯范式
  20. 思科AP无线异常及信道相关知识点整理

热门文章

  1. Fast R-CNN网络结构详解
  2. 天纵智能软件快速开发平台便签插件
  3. 美化桌面第二步:两个好用的小插件
  4. 音频算法学习和应用谱图
  5. 短视频矩阵源码系统打包.源码
  6. 说说在 Microsoft Project 中如何把任务列表导出为 excel
  7. 关于sstream的灵活使用
  8. android游戏1024代码,Cocos Creator实现1024游戏,免费提供代码。
  9. DOM操作Select下拉框
  10. IntelliJ IDEA方法注释模板设置(全面和人性化)