当前位置:首页 > Java入门 > 正文内容

结构化互评模式(结构化算法)

abcsky884个月前 (01-26)Java入门47

本文分享给大家的是:

最近高产似母猪,写了个基于AP的中文分词器,在Bakeoff-05的MSR语料上F值有96.11%最重要的是,只训练了5个迭代;包含语料加载等IO操作在内,整个训练一共才花费23秒应用裁剪算法去掉模型中80%的特征后,F值才下降不到0.1个百分点,体积控制在11兆。

结构化互评模式(结构化算法)

如果训练一百个迭代,F值可达到96.31%,训练时间两分多钟数据在一台普通的IBM兼容机上得到:

本模块已集成到HanLP 1.6以上版本开源,文档位于项目wiki中,欢迎使用!【hanlp1.7新版本已经发布,可以去新版本查到看使用】结构化预测关于结构化预测和非结构化预测的区别一张讲义说明如下:

更多知识请参考Ne网站推广计划怎么写好ubig的讲义《The Structured Perceptron》本文实现的AP分词器预测是整个句子的BMES标注序列,当然属于结构化预测问题了感知机二分类感知机的基础形式如《统计学习方法》所述,是定义在一个超平面上的线性二分类模型。

作为原著第二章,实在是简单得不能再简单了然而实际运用中,越简单的模型往往生命力越顽强这里唯一需要补充的是,感知机是个在线学习模型,学习一个训练实例后,就可以更新整个模型。

打开凤凰新闻,查看更多高清图片多分类怎么把二分类拓展到多分类呢?可以用多个分类器,对于BMES这4种分类,就是4个感知机了每个感知机分别负责分辨“是不是B”“是不是M”“是不是E”“是不是S”这网站推广计划怎么写好4个二分类问题。

在实现中,当然不必傻乎乎地创建4个感知机啦把它们的权值向量拼接在一起,就可以输出“是B的分数”“是M的分数”“是E的分数”“是S的分数”了取其最大者,就可以初步实现多分类但在分词中,还涉及到转移特征和HMM-viterbi搜索算法等,留到下文再说。

平均感知机平均感知机指的是记录每个特征权值的累计值,最后平均得出最终模型的感知机为什么要大费周章搞个平均算法出来呢?前面提到过,感知机是个在线学习模型,学习一个训练实例后,就可以更新整个模型假设有10000个实例,模型在前9999个实例的学习中都完美地得到正确答案,说明此时的模型接近完美了。

可是最后一个实例是个噪音点,朴素感知机模型预网站推广计划怎么写好测错误后直接修改了模型,导致前面9999个实例预测错误,模型训练前功尽弃有什么解决方案呢?一种方案是投票式的,即记录每个模型分类正确的次数,作为它的得票训练结束时取得票最高的模型作为最终模型。

但这种算法是不实际的,如果训练5个迭代,10000个实例,那么就需要储存50000个模型及其票数,太浪费了最好用的方法是平均感知机,将这50000个模型的权值向量累加起来,最后除以50000就行了,这样任何时候我们只额外记录了一个累加值,非常高效了。

关于平均感知机的详情请参考《200行Python代码实现感知机词性标注器》虽然那篇文章是讲解词性标注的,但相信作为万物灵长的读者一定拥有举一反三的泛化能力语言网站推广计划怎么写好模型HMM我们不是在讲解感知机分词吗?怎么跟HMM扯上关系了?

其实任何基于序列标注的分词器都离不开隐马尔科夫链,即BMES这四个标签之间的Bigram(乃至更高阶的n-gram)转移概率作为其中一员的AP分词器,也不例外地将前一个字符的标签作为了一个特征该特征对预测当前的标签毫无疑问是有用的,比如前一个标签是B,当前标签就绝不可能是S。

这种类似于y[i-1]的特征在线性图模型中一般称为转移特征,而那些不涉及y[i-1]的特征通常称为状态特征viterbi由于AP分词器用到了转移特征,所以肯定少不了维特比搜索从序列全体的准确率考虑,搜索也是必不可少的。

给定隐马尔可夫模型的3要素,我用Java写了网站推广计划怎么写好一段“可运行的伪码”:

上述实现是个重视条理胜于效率的原型,古人云“过早优化是魔鬼”相信聪明的读者一定能看懂这里面在干什么特征提取定义字符序列为x,标注序列为y转移特征转移特征就是上面说的y[i-1]状态特征我一共使用了7种状态特征:。

在邓知龙的《基于感知器算法的高效中文分词与词性标注系统设计与实现》中提到,要利用更复杂的字符n-gram、字符类别n-gram、叠字、词典等特征但在我的实践中,除了上述7种特征外,我每减少一个特征,我的AP分词器的准确率就提高一点,也许是语料不同吧,也许是特征提取的实现不同。

总之,主打精简、高效训练迭代数目其实不需要太多,在3个迭代内模型基本就收敛了:

第4个迭代似网站推广计划怎么写好乎帮了倒忙,但万幸的是,我们使用的是平均感知机。权值平均之后,模型的性能反而有所提升。此时模型大小:

模型裁剪《基于感知器算法的高效中文分词与词性标注系统设计与实现》提到的模型裁剪策略是有效的,我将压缩率设为0.2,即压缩掉20%的特征,模型准确率没有变化:

由于我使用了随机shuffle算法,所以每次训练准确率都略有微小的上下波动。此时可以看到模型裁剪过程花了额外的1分钟,裁剪完毕后准确率维持96.11不变。此时模型大小:

裁减掉50%如何呢?

此时模型大小:

可见裁剪了80%的特征,体积从54M下降到11M,模型的准确率才跌了不到0.1个百分点!这说明大部分特征都是没用的,特征裁剪非常有用、非常好用网站推广计划怎么写好!Reference邓知龙 《基于感知器算法的高效中文分词与词性标注系统设计与实现》

扫描二维码推送至手机访问。

版权声明:本文由海南拓宏网络科技工作室发布,如需转载请注明出处。

本文链接:http://www.4blc.com/post/13126.html

分享给朋友:

“结构化互评模式(结构化算法)” 的相关文章

昆明市找工作6000以上的工作(在昆明上班什么工资6000)

今天给各位分享 简历注册免费发招聘 云南京邦达物流科技有限公司Recruiting Talents京东集团2007年开始自建物流,2012年正式注册物流公司,2017年4月25日正式成立京东物流集团京东物流以技术驱动,引领全球高效流通和可持续发展为使命 [1]&n...

去培训机构学java有用吗(培训机构学java学的难受)

今天给各位分享 在培训机构学习JAVA,如何快速从入门到大牛:知识改变命运,对于Java程序员来说,技术不断更新,只有及时充电,才能不被市场淘汰,今天为大家分享Java程序员学习的6个小技巧1、一定要看书现在学习Java变得比以前容易多了,除了有大量的视频教程外,还有专业的java...

java threa the.current.sleep区别(java threa the.current.sleep)

今天给各位分享 当有我们的服务器CPU资源使用率(usr%)较高时,或者是一个基于 JAVA 的 Web 应用运行的比预期慢的时候,我们需要使用 Thread Dumps进行分析线程转储是诊断CPU尖峰,死锁,响应时间差,内存问题,应用程序无响应以及其他系统问题的一项重要工作或者环...

程序员又细分为哪些类?都有什么区别呢(程序员又细分为哪些类?都有什么区别和联系)

今天给各位分享 作者:做块西瓜好难的西瓜籽程序员是指专门从事计算机程序开发的人员在计算机程序开发领域中,程序员的工作可以分为多个领域和职业,每个领域和职业都有自己的特点和要求应用程序员 应用程序员开发的是应用程序,也称为软件程序,包括桌面应用、移动应用和网页应用等。...

程序员阿里巴巴面试条件是什么(阿里巴巴程序员入职要求)

本文分享给大家的是: 大家好,我是马士兵!最近在后台和课堂上有很多小伙伴反应今年的面试问的越来越细,也越来越基础,越来越底层,摆着就是让我们“面试造火箭,入职拧螺丝”!!!(感觉是在故意刁难我们这些技术人员了)需要背的Java面试八股文也是越来越多! 为了帮助到大家 特意给...

回复快乐的话(快乐是什么回复)

今天给各位分享 原标题:快乐神回复求皮解,这是什么意思啊?1.其实她想说,她最好朋友的价钱,她不能少买? 2、找皮肤解决方案,是什么意思? 3、你认为保护大小原则是一种什么样的封建社会思想? 4、这种公寓每月给你1000元。你愿意住在里面吗? 5.也...