最近在用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. install.php文件建表时设置编码方式

    DROP TABLE IF EXISTS `".$db_prefix."adminlog`;CREATE TABLE `".$db_prefix."adminl ...

  2. SetConsoleScreenBufferSize 函数--设置控制台屏幕缓冲区大小

    SetConsoleScreenBufferSize函数 来源:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686044(v= ...

  3. (转)maven镜像路径配置

    很多maven包无法自动下载怎么办?设置maven镜像setting.xml <mirror> <id>repo2</id> <mirrorOf>cen ...

  4. eclipse 打包 jar 到 Linux上运行

    1.选择需要打包的项目,右键 Export 2.选择Runnable JAR file,然后点击 Next 3.选择jar包运行的main类,以及定义jar包的名字,保存的地方 4.将 导出来的 ja ...

  5. [HNOI2006]超级英雄 网络流+二分版

    刚学网络流的我这里有一道非常好的"网络流练手题"------[HNOI2006]超级英雄. 记得很久以前真的有这个节目来着,还是大兵主持的. 其实这是一道匈牙利板子大水题,但对于我 ...

  6. spring入门之环境搭建

    本人刚刚接触spring,看了一些教程,但是很多概念都不懂(以前没接触过,看着很抽象),所以我觉得通过动手可能会更好的理解并且掌握.看了一些小实例,但是都没有成功,终于在各种尝试之后搭建成功了,现在我 ...

  7. vue获取下拉框值

    vue获取下拉框的值,用vue-modle,只有点击下拉框的值才会赋值到下拉框中,初始时下拉框没有数据,而改用$event就不会出现这样的问题,下面看代码以及图解: v-model解决方式: < ...

  8. Scrapy爬取西刺代理ip流程

    西刺代理爬虫 1. 新建项目和爬虫 scrapy startproject daili_ips ...... cd daili_ips/ #爬虫名称和domains scrapy genspider ...

  9. SMBLoris windows拒绝服务漏洞

    在美国拉斯维加斯举行的2017年度DEF CON黑客大会上,安全研究人员公布了Windows系统上的一个长达20年没有发现的漏洞,该漏洞名为"SMBLoris",黑客可以轻松的使用 ...

  10. 自定义Git之使用centos搭建git 服务器

    Github 公开的项目是免费的,但是如果你不想让其他人看到你的项目就需要收费. 这时我们就需要自己搭建一台Git服务器作为私有仓库使用. 接下来我们将以 Centos 为例搭建 Git 服务器. 1 ...