• NLP之CRF分词训练(六)


    分三步
    1、先分词
    2、做BEMS标注,同时做词性标注
    3、训练模型

    1、对语料进行分词

    拿到测试部的语料或者其他渠道的语料,先对语料进行分词,我刚刚开始是用NS分词的,等CRF模型训练好后,可以直接用CRF进行分词,分完词后要人工核对分词结果,将分词分得不正确的地方修改好


    2、标注词性,标注BEMS

    BEMS所说是中科院的提出一种标注,也有说BEIS的,hanlp用的是BEMS
    B:开始
    E:结束
    M/I:中间
    S:单独
    BEMS标注已经写了一个方法generateCRF在SegAndSave.class中。
    词性标注只能人工标注了。

    3、训练

    安装CRF++
    ./configure
    make
    make install
    cd /CRF++-0.58/example/seg
    执行crf++的crf_learn指令
    ../../crf_learn -f 3 -c 4.0 template train.data model -t
    产生的model.txt就是我们要的文件,model二进制文件hanlp运行不起来
    eg: 我想听周杰伦的夜曲
    1)分词:我 想听 周杰伦 的 夜曲
    2)BEMS和词性标注(每列用 分隔开,一般键入tab键,windows的tab似乎有问题,可以参考用SegAndSave.class的generateSeg方法):

    分词标注
    我 S
    想 B
    听 E
    周 B
    杰 M
    伦 E
    的 S
    夜 B
    曲 E
    注:周杰伦的词性标注存在争议,周杰伦作为一个整体是nr,但 “周” “杰” “伦” 分别应该标注为什么词性,我还不确定。

    分词和词性同时标注(CRF只预测一列。通常做法是将词性附加在BMES后面:B_nr)
    我 S_rr
    想 B_v
    听 E_v
    周 B_nr
    杰 M_nr
    伦 E_rn
    的 S_ude1
    夜 B_nz
    曲 E_nz

    3)../../crf_learn -f 3 -c 4.0 template train.data model -t
    template用的是例子自带的特征模板,对这个我还不会制作,先用着
    train.data是我们上面整理好的语料
    model是我们训练好的模型文件(二进制名称)
    -t生成model.txt文本模型文件(这个就是我们要的模型了,直接copy到hanlp中使用即可)

    mark

    用43万个句子的语料(约25M,约100个句式)训练了一个音乐的CRF分词模型,在本地用虚拟机,开9个G的内存,跑了90分钟才训练好一个模型,但分词的效果并没有达到想要的效果;本想增大语料(对语料进行复制)以加强每种句式的概率,但发现仅仅是复制一次,即约50M,86万个句子,开了10个G也跑不起来,只能作罢。
    总的来说,CRF能考虑每个字词的上下文,然后进行分词,这样的分词是很合理的,我认为这里的模型分词的结果不理想和音乐的歌名、歌手等专有名词本身没有规律所造成的,也就是说CRF学习到的规律本身就是不正确的。对于音乐这些语料,我觉得已经不适用CRF来分词,反而用字典分词达到的效果要好得多,也易于控制。

    如果要对类似音乐这种语料进行分词,可以这样做

    1)先按正常句子做出分词,即不切分出歌名

    比如播放2002年的第一场雪,切分成“播放 2002年  的 第一场 雪”

    2)通过自定义字典识别出“2002年的第一场雪”这首歌

    “播放 2002年  的 第一场 雪”-->“播放 2002年的第一场雪”

    积累,沉淀
  • 相关阅读:
    机器学习分类
    12.python中高阶函数以及内建函数(map,filter,sorted),和闭包
    python中的异常处理相关语句和迭代器
    和好朋友渐行渐远是什么感觉?
    MDX学习笔记(整理) MDX语法
    Cognos软件介绍文档(原创)
    隐藏
    android::Mutex::Autolock的使用
    Android中sp和wp的使用
    Day 07 字符编码,文件操作
  • 原文地址:https://www.cnblogs.com/hx78/p/7309482.html
Copyright © 2020-2023  润新知