• CRF技能词识别过程


    最近在用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)会存在很大比例的非词条的技能词,词频依然可观。
  • 相关阅读:
    程序是访问数据库的组件
    Mac搭建Vue
    Sharding-JDBC基本使用,整合Springboot实现分库分表,读写分离
    随意写写
    maven打包工具assembly打包本地jar的解决办法
    Go语言笔记 (2) 变量命名与多重赋值
    Go语言笔记(1)变量的定义与赋值
    c期末笔记(4)
    c期末笔记(3)
    c期末笔记(2)
  • 原文地址:https://www.cnblogs.com/xpNLP/p/4758527.html
Copyright © 2020-2023  润新知