如何训练自己的CRF模型

Ansj从5.0版本之后支持训练自己的crf模型,在此之前虽然已经很早支持了CRF模型,但是在用户的自训练上要求苛刻,而且本身实现的CRF从性能到准确率都不如CRF++或者第三方的,好吧.目前我做的是完败,所以另辟蹊径,打不过就嫖呗.只要支持他们训练的模型就可以.下面是一个step by step 教程,希望能对大家有所帮助.

Step by Step

  • 准备训练语料

    训练crf模型之前你需要准备好训练语料,别跟我要语料,语料比程序都难搞,一般针对你的业务场景如果能自己标注一些那是相当好的,可是大多数同学抱着玩票的思想,so为了让整个过程可以run起来,在这里我提供了一份语料供大家测试使用.链接: https://pan.baidu.com/s/1jIy3YSY .以下是语料内容的一个例子:

    在	1998年	来临	之际	,
    我 十分 高兴 地 通过 中央 人民 广播 电台 、 中国 国际 广播 电台 和 中央 电视台 ,
    向 全国 各 族 人民 ,
    向 香港 特别 行政区 同胞 、 澳门 和 台湾 同胞 、 海外 侨胞 ,
    向 世界 各 国 的 朋友 们 ,
    致以 诚挚 的 问候 和 良好 的 祝愿 !
  • 下载训练程序

    下载地址:https://taku910.github.io/crfpp/#download 在这里感谢作者所做的工作.

    加载CRF+生成的crf文本模型,测试使用的CRF++版本为:CRF++-0.58

  • 加工语料

    下载 http://maven.nlpcn.org/org/ansj/ansj_seg/5.0.0/ansj_seg-5.0.0-all-in-one.jar 当然有最新的建议下载最新的,鬼知道旧的版本有什么bug呢.同时将jar包放入到project中.目录结构如下.

    #进入crf目录
    cd /[your_path]]/CRF++-0.58
    # 对下载的crf++进行编译
    make
    # 创建进入目录
    mkdir test
    cd test
    # 下载需要的jar包
    wget http://maven.nlpcn.org/org/ansj/ansj_seg/5.0.0/ansj_seg-5.0.0-all-in-one.jar
    # 下载训练文本到当前目录(test目录),目录结构如下.以本人个人电脑为例
    sunjiandeMacBook-Pro:test Ansj$ pwd
    /Users/sunjian/Documents/src/CRF++-0.58/test
    sunjiandeMacBook-Pro:test Ansj$ ls
    ansj_seg-5.0.0-all-in-one.jar swresult.txt # 对语料进行加工,swresult.txt 是准备训练语料时候下载的文本.是海量提供的.在这里感谢他们所做的贡献.
    java -cp ansj_seg-5.0.0-all-in-one.jar org.ansj.app.crf.MakeTrainFile swresult.txt train.txt

    得到训练文件如下:

    这是crf训练需要的格式.在这里最好训练文件用此方式生成,因为程序对数字和英文字母训练方式进行了优化.

  • 训练模型

    1. 在训练模型之前需要准备特征模板,好吧,这个是CRF++的东西了,在这里不做深入研究,我把我的模板内容列出,如下,保存在test目录下,命名为pattern.txt
    # Unigram
    U01:%x[-1,0]
    U02:%x[0,0]
    U03:%x[1,0]
    U04:%x[-1,0]/%x[0,0]
    U05:%x[0,0]/%x[1,0]
    U06:%x[-1,0]/%x[1,0] # Bigram
    B

    2.至此准备工作完成.目录结构图如下:

  • 开始训练

    执行进入到

    cd /[your_path]]/CRF++-0.58

    ./crf_learn test/pattern.txt test/train.txt test/model -t

    ** 注意:-t 参数是必须的,目前crf++只支持可读文本方式的模型加载* *

时光荏苒,岁月如梭,玩CRF++就是玩命呢,所以建议大家还是用wapiti吧,速度快多了,准确率就差那么一点点,泛化性也好.废话不多说了,经过了很久很久模型训练完毕了.

在训练目录test下你可以看到如下文件

其中,model.txt是训练的模型.之后ansj就可以加载他去浪 你的分词了.

结构如下:

Test.java的源码如下:

import java.io.IOException;

import org.ansj.splitWord.analysis.NlpAnalysis;
import org.ansj.util.MyStaticValue; public class Test {
public static void main(String[] args) throws IOException {
//设定模型路径
MyStaticValue.CRF.put(MyStaticValue.CRF_DEFAULT, "/Users/sunjian/Documents/src/CRF++-0.58/test/model.txt") ;
//进行分词
System.out.println(NlpAnalysis.parse("欢迎使用Ansj的CRF功能!"));
}
}

aha 运行它你会得到

Jun 06, 2016 11:12:53 AM DICLOG warn
WARNING: not find library.properties in classpath use it by default !
Jun 06, 2016 11:12:53 AM DICLOG warn
WARNING: init userLibrary warning :/Users/sunjian/Documents/workspace/crf_demo_ansj/library/default.dic because : file not found or failed to read !
Jun 06, 2016 11:12:53 AM DICLOG warn
WARNING: init ambiguity warning :/Users/sunjian/Documents/workspace/crf_demo_ansj/library/ambiguity.dic because : file not found or failed to read !
Jun 06, 2016 11:12:53 AM DICLOG info
INFO: begin init crf model!
Jun 06, 2016 11:12:53 AM org.ansj.app.crf.model.CRFppTxtModel loadModel
INFO: load template ok template : [-1] [0] [1] [-1, 0] [0, 1] [-1, 1]
Jun 06, 2016 11:12:57 AM org.ansj.app.crf.model.CRFppTxtModel loadModel
INFO: load feature ok feature size : 1174017
Jun 06, 2016 11:13:02 AM org.ansj.app.crf.model.CRFppTxtModel loadModel
INFO: load crfpp model ok ! use time :8504
Jun 06, 2016 11:13:02 AM DICLOG info
INFO: load crf use time:8555 path is : /Users/sunjian/Documents/src/CRF++-0.58/test/model.txt
Jun 06, 2016 11:13:02 AM DICLOG info
INFO: init core library ok use time :324
Jun 06, 2016 11:13:03 AM DICLOG info
INFO: init ngram ok use time :292
欢迎/v,使用/v,ansj/en,的/uj,crf/en,功能/n,./m,在/p,这里/r,!

到这里实现了最简单的crf模型加载的分词方式.crf路径的设置可以参考配置文件说明来修正.

from:https://github.com/NLPchina/ansj_seg/wiki/%E5%AE%9A%E5%88%B6%E4%BD%A0%E8%87%AA%E5%B7%B1%E7%9A%84CRF%E6%A8%A1%E5%9E%8B

定制你自己的CRF模型的更多相关文章

  1. CRF模型

    CRF的全称是Conditional Random Fields,由CMU教授John Lafferty 提出,原文标题:Conditional R andom Fields: Probabilist ...

  2. HMM、MEMM、CRF模型比较和标注偏置问题(Label Bias Problem)

    本文转自:http://www.cnblogs.com/syx-1987/p/4077325.html 路径1-1-1-1的概率:0.4*0.45*0.5=0.09 路径2-2-2-2的概率:0.01 ...

  3. HMM,MEMM,CRF模型的比较

    本文参考自:http://blog.csdn.net/happyzhouxiaopei/article/details/7960876 这三个模型都可以用来做序列标注模型.但是其各自有自身的特点,HM ...

  4. HMM,MEMM,CRF模型

    HMM,MEMM,CRF模型之间关系密切,需看: 参考文献: http://www.cnblogs.com/kevinGaoblog/p/3874709.html http://baike.baidu ...

  5. 标注偏置问题(Label Bias Problem)和HMM、MEMM、CRF模型比较<转>

    转自http://blog.csdn.net/lskyne/article/details/8669301 路径1-1-1-1的概率:0.4*0.45*0.5=0.09 路径2-2-2-2的概率:0. ...

  6. 零基础入门--中文命名实体识别(BiLSTM+CRF模型,含代码)

    自己也是一个初学者,主要是总结一下最近的学习,大佬见笑. 中文分词说到命名实体抽取,先要了解一下基于字标注的中文分词.比如一句话 "我爱北京天安门”. 分词的结果可以是 “我/爱/北京/天安 ...

  7. NLP(二十五)实现ALBERT+Bi-LSTM+CRF模型

      在文章NLP(二十四)利用ALBERT实现命名实体识别中,笔者介绍了ALBERT+Bi-LSTM模型在命名实体识别方面的应用.   在本文中,笔者将介绍如何实现ALBERT+Bi-LSTM+CRF ...

  8. 机器学习 —— 概率图模型(Homework: CRF Learning)

    概率图模型的作业越往后变得越来越有趣了.当然,难度也是指数级别的上涨啊,以至于我用了两个周末才完成秋名山神秘车牌的寻找,啊不,CRF模型的训练. 条件随机场是一种强大的PGM,其可以对各种特征进行建模 ...

  9. NLP —— 图模型(二)条件随机场(Conditional random field,CRF)

    本文简单整理了以下内容: (一)马尔可夫随机场(Markov random field,无向图模型)简单回顾 (二)条件随机场(Conditional random field,CRF) 这篇写的非常 ...

随机推荐

  1. 【Android开发日记】之基础篇(一)——TextView+SpannableStringBuilder

    TextView是控件中最最基础的一个控件,也是最简单的一个控件.但如果仅此,我不会专门为TextView写一篇文章.最近发现了Android中有趣的一个类,那就是标题上写的SpannableStri ...

  2. Tomcat手动指定jdk路径

    Windows系统: 修改bin下的setclasspath.bat,在开头处添加: rem set specific jdkset JAVA_HOME=%CATALINA_HOME%\jdk1.8. ...

  3. python_day3学习笔记

    set集合 python的set是一个无序不重复元素集,基本功能包括关系测试和消除重复元素. 集合对象还支持并.交.差.对称差等. sets 支持 x in set. len(set).和 for x ...

  4. css 三(清除浮动专题)

    1.  三个关于浮动的概念  不浮动float:none; 清除周围的浮动元素   float:both   这是清除浮动的本意 清除子元素浮动对父元素的影响  clearfix    很多人都理解成 ...

  5. (1)ansible基本配置

    1)ansible安装 yum install epel-release -y yum install ansible -y 2)ansible语法 语法: ansible <host-patt ...

  6. php 正则验证字符串是否为数字

    PHP 正则验证字符串是否为数字 方法一: php中利用正则表达式验证字符串是否为数字一件非常容易的事情,最主要的是如何写好正则表达式以及掌握正则表达式的写法,在此利用正则表达式的方式来列举一下判断数 ...

  7. 如何学习Docker

    如何学习Docker 学习Docker,如果没有云计算的基本知识,以及内核的基本知识,那么学习并理解起来会稍吃力.作为容器,Docker容器的优势在哪,不足在哪,最好了解容器的实现是怎样的(简单了解) ...

  8. 转:攻击JavaWeb应用[6]-程序架构与代码审计

    转:http://static.hx99.net/static/drops/tips-429.html 攻击JavaWeb应用[6]-程序架构与代码审计 园长 · 2013/08/12 16:53 注 ...

  9. vue组件scoped CSS及/deep/深度选择器

    参考链接:https://vue-loader.vuejs.org/zh/guide/scoped-css.html#%E5%AD%90%E7%BB%84%E4%BB%B6%E7%9A%84%E6%A ...

  10. 深度学习应用系列(二) | 如何使用keras进行迁移学习,以训练和识别自己的图片集

    本文的keras后台为tensorflow,介绍如何利用预编译的模型进行迁移学习,以训练和识别自己的图片集. 官网 https://keras.io/applications/ 已经介绍了各个基于Im ...