最近在用CRF做未登录技能词识别,虽然艰难,但是感觉很爽,效率非常高。
(1)数据准备:
选取30000行精语料作为训练数据。每一个br作为一条数据。使用已有的技能词典对数据进行无标注分词。
(2)训练数据标注:
对分词后的语料进行标注。如果某分词结果在技能词典中,则该词作为技能词进行标注;如果某分词结果不在词典中,则该词作为与技能无关词进行标注。标注规则如下:
标注采用3列,4-tag方式标注:B:技能词开头字;M:技能词中间字;E:技能词结尾字;A:与技能词无关字。
(3)修改模板:
技能词查找仍属分词系列,故未修改模板。
(4)数据训练:
使用CRF++工具进行模板+训练文本的训练。
(5)测试数据准备:
采用与训练文本同样的方式进行标注。使用模板+测试文本进行测试。
(6)测试数据生成结果:
测试生成标注列与通过词典进行标注的结果进行比较,第一次测试5000条数据共有141471个特征,标注错误数为3750个,错误率为0.0265。
(7)技能词识别成果:
将测试数据中生成的B、M、E进行合成,组成技能词。新技能词采用人工过滤计算比例。

训练:
crf_learn -f 3 -c 4.0 template 4train_text.data yuanbin_crf_model
测试:
crf_test -m yuanbin_crf_model 4test_text.data >>yuanbin_crf_final

 
实验结果:

第一次训练(train:10w;test:all):

100000条数据共迭代826次,耗时885.93s。
标注错误率:0.0166197028394
技能词识别数:11395
字典技能词识别率:0.32576

新词数:7683
新词中技能词比例:0.522
技能词整体识别率:((11395 * 0.32576) +(7683 *  0.522))/ 11395 = (3712 + 4011)/11395 =7722/11395 = 0.68
第二次训练:(train:10w;test:all;英文单独过滤,不经过CRF;丢弃'能力','及','思维','我';丢弃'管理','能力','处理','制作';丢掉标点符号,丢掉的部分可以抑制技能词的不断扩展)
100000条数据共迭代852次,耗时1085.97s。
标注错误率:0.0258394960395
技能词识别:7683
字典技能词识别率:0.848887153456 
新词中技能词比例(汉语):306 技能词比例:0.27
技能词整体识别率:(7683 * 0.85 + 1152 *  0.31)/ 7683 = (6530.55 + 357.12)/7683 =7722/7683 = 0.90
提高的原因:第一遍扩展了相当大一部分词典,所以第二次遍历词典词汇识别率很高,识别的新词数量减少。新技能词识别率低可能跟语料有一定关系。
 
第三次训练:(train:all;test:all)
580000条数据共迭代999次,耗时2932s。
标注错误率:0.0137764605234
技能词识别:7192
字典技能词识别率:0.790183537264
新词数(汉语):1114 
新词中技能词比例:0.93
技能词整体识别率:7192* 0.79 + 1114 *  0.93)/ 7192 = (5681.68 + 1037)/7192 =6178.68/7192 = 0.86
下降的原因:训练语料增加,字典包含的技能词的比例会减少,新词识别增多,且新技能词识别率较高。
 
第四次实验:(test:all;key_word_line加入了'熟悉','精通','熟练','了解','能够','掌握','建立'  ,'使用','分析','项目','页面','非常','通过','进行','运用', '负责','设计','组织','知识','深入','根据','擅长','指导' ,'拥有','懂得')
没有训练(为了保证训练的精度)
标注错误率:0.0232847543088
技能词识别:14873
字典技能词识别率:0.46836549452
新词数(汉语):7040
新词中技能词比例:0.914
技能词整体识别率:14873* 0.47 + 7040*  0.914)/ = (6990.31 + 6432)/14873=13422.31/14873=0.9024615
提升的原因:相比之下,key_word_line的数量增加了三倍,所以新词量增加很多,相应字典技能词的比例就减少。新词中的真实技能词的比例依然能达到90%以上,说明标注的效果非常好。
 
总结:
CRF能够有效识别新的技能词,在经过两次测试以后,新词的识别率都在90%以上,说明词典的扩充提高了数据标注的准确度,从而提高了新词识别的效率。
最终结果还是存在很多意义相同但说法不同的词汇。通过词条过滤有以下两个问题:(1)词条量不够,会把很多很好的词过滤掉;(2)冗余太多,占用系统资源;(3)会存在很大比例的非词条的技能词,词频依然可观。

CRF技能词识别过程的更多相关文章

  1. CRF++地名实体识别(特征为词性和词)

    http://x-algo.cn/index.php/2016/02/29/crf-name-entity-recognition/ 类似使用CRF实现分词和词性标注,地域识别也是需要生成相应的tag ...

  2. 机器学习&数据挖掘笔记_13(用htk完成简单的孤立词识别)

    最近在看图模型中著名的HMM算法,对应的一些理论公式也能看懂个大概,就是不太明白怎样在一个具体的机器学习问题(比如分类,回归)中使用HMM,特别是一些有关状态变量.观察变量和实际问题中变量的对应关系, ...

  3. 基于HTK语音工具包进行孤立词识别的使用教程

    选自:http://my.oschina.net/jamesju/blog/116151 1前言 最近一直在研究HTK语音识别工具包,前几天完成了工具包的安装编译和测试,这几天又按耐不住好奇,决定自己 ...

  4. [转]Kaldi命令词识别

    转自: http://www.jianshu.com/p/5b19605792ab?utm_campaign=maleskine&utm_content=note&utm_medium ...

  5. 【文智背后的奥秘】系列篇——基于CRF的人名识别

    版权声明:本文由文智原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/133 来源:腾云阁 https://www.qclou ...

  6. 如何用kaldi做孤立词识别-初版

    ---------------------------------------------------------------------------------------------------- ...

  7. OpenCV开发笔记(五十五):红胖子8分钟带你深入了解Haar、LBP特征以及级联分类器识别过程(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  8. yesno孤立词识别kaldi脚本

    path.sh主要设定路径等 export KALDI_ROOT=`pwd`/../../.. [ -f $KALDI_ROOT/tools/env.sh ] && . $KALDI_ ...

  9. 使用TensorFlow 来实现一个简单的验证码识别过程

    本文我们来用 TensorFlow 来实现一个深度学习模型,用来实现验证码识别的过程,这里识别的验证码是图形验证码,首先我们会用标注好的数据来训练一个模型,然后再用模型来实现这个验证码的识别. 1.验 ...

随机推荐

  1. 整理的 matplotlib 绘图笔记

  2. MyBatis 详解(一对一,一对多,多对多)

    1.什么是MyBatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且 ...

  3. javascript中typeof和instanceof用法的总结

    今天在看相应的javascript书籍时,遇到了typeof和instanceof的问题,一直不太懂,特地查资料总结如下: JavaScript 中 typeof 和 instanceof 常用来判断 ...

  4. 阿里云有对手了!CDN横评:腾讯云优势明显

    如今,云计算产品越来越多,像国内的BAT三大巨头都提供了云主机(腾讯云CVM.阿里云ECS.百度云BCC),另外还有存储.数据库.安全等相关云服务.在这其中,CDN也是一项重要的云服务,CDN指的是内 ...

  5. RabbitMQ入门-初识RabbitMQ

    初识RabbitMQ 要说RabbitMQ,我们不得不先说下AMQP.AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面 ...

  6. ASP.NET MVC 开发微信支付H5(外置浏览器支付)

    H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付. 主要用于触屏版的手机浏览器请求微信支付的场景.可以方便的从外部浏览器 ...

  7. hexo博客MathJax公式渲染问题

    这个问题自己很早以前便碰到了,用MathJax语法写的一些公式,在本地Markdown编译器上渲染是没问题的,可是部署到hexo博客中就出现问题了,之前我是使用图片代替公式应付过去了,今天从网上找了一 ...

  8. 最通俗易懂的javascript变量提升

    a = 'ghostwu'; var a; console.log( a ); 在我没有讲什么是变量提升,以及变量提升的规则之前, 或者你没有学习过变量提升,如果按照现有的javascript理解, ...

  9. ORA-01036: 非法的变量名/编号 解决方案

    今天又一次遇到了 ORA-01036: 非法的变量名/编号 的问题,之前在项目中也遇见过这个问题,但是具体怎么解决的忘记了,今天又是遇见了,花了半个小时才解决.我今天遇到的情况是这样的: 存储过程中有 ...

  10. java大数常用的方法

    创建大数对象: BigInteger a=new BigInteger("123"); BigInteger a=BigInteger.valueOf(); 常用方法: multi ...