感知机

线性模型 对于隐马尔科夫模型的优点

隐马模型只能捕捉到当前字符和前一个标签这两个特征.为了能够充分利用文本的结构,提高准确率,可以引入线性模型

线性模型的组成

用于提取特征的特征函数Ø和每个特征的权重w

感知机的引入

通过特征函数抽取出大量样本(特征向量)x,构成样本空间,这时需要将样本空间分类,得出想要的结论。
超平面可以划分样本,方法为为特征向量构造一个对应的权重向量wx中的每一个元素对应w中的一个权重.
如何分离出超平面呢?感知机是一个不错的选择.

感知机的简单原理

读入训练样本(x, y),通过sign函数预测结果.
如果预测失败,则调整权重向量w += yx,继续训练
这里的
x是通过特征模板抽取出来的样本,和权重一样是一个向量,而y是样本的分类
为什么可以这么更新权重向量呢?
预测结果为y=-1,说明
w* x<0, 而实际上y=1,w x>0,所以要想办法增大 w(因为x的元素只有0和1,所以增大w** 相当于增大wx).反之亦然.

损失函数与梯度下降

感知机是迭代式算法,迭代次数取决于优化(减小)一个损失函数的次数.损失函数用于度量训练集的错误程度.
对损失函数求导得到梯度向量,其反方向为损失函数减小最快的方向.设置学习率,一步一步地减小损失函数,直到收敛,称为随机梯度下降
线性模型的损失函数为误分点到超平面的距离.

传统的感知机存在问题,即噪声容易导致分离超平面失败

传统感知机的改进

投票感知机

训练多个模型,乘以其准确率加权平均,比较得出最好的结果,可以一定程度抑制噪声的干扰
但是计算开销较大,还可以改进

平均感知机

记录每次迭代时的权重,将其求和并取平均值.
但并不是所有参数都需要调整,全部调整容易降低效率
可以改进,通过增加时间戳,对每个需要调整的参数,不对其求和,而是通过让该参数加上某个固定的时间差乘以该参数,最后处以总时间来进行平均,减少了运算次数.

结构化感知机

结构化预测即给定一系列模型和打分函数,将模型带入函数中,取的分最高的 模型
输入参数为特征x和结构y,这两者都是向量
打分函数需要兼顾两者score(x, y) = w.Ø(x, y), w,x和y均为向量.

结构化感知机实现序列标注

用特征转移矩阵代替状态转移矩阵,状态特征代替发射矩阵,结构化感知机就和隐马尔科夫模型一样,实现序列标注
同样的,对于序列的最优解的搜索,使用维特比算法求出最优解

结构化感知机实现分词

如果预测的结构为{B,M,E,S}结构,那么可以用于分词
Hanlp中已经封装了结构化感知机分词的工具,其特征模板利用了某字符的前后总共七个字符,远远多于隐马尔科夫模型的假设

具体代码如下:

HanLP.Config.ShowTermNature = False
segment = PerceptronLexicalAnalyzer(msr_model).enableCustomDictionary(True)
text = "人与川普通电话"
print(segment.seg(text))

CustomDictionary.insert("川普", "nrf 1")
segment.enableCustomDictionaryForcing(True)
print(segment.seg(text))

hanlp的感知机分词支持在线学习,或者修改/更换 用户词典也可以做到
用户词典位于pyhanlp/static/data/dictionary/custom/CustomDictionary.txt,windows使用listary,linux用fd命令,很快就能找到

感知机在NLP中的运用

可以求出最佳超平面,故可以用于分类问题(如人名性别判别,文档分类).
另外,通过结构化感知机可以实现序列标注和分词,本质是对文本结构进行分类(如{B,M,E,S}结构)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值