赞
踩
本文地址:http://blog.csdn.net/nocml/article/details/8496534
转载请注明出处
先声明,本人是菜鸟,这篇文章中的做法也是我的菜鸟做法,如果有大牛看到还请指点一二。勿喷。
首先下载CRF++,这个开源工具还是很好用的,当然内存释放可能存在一些问题。
下载地址:http://crfpp.googlecode.com/svn/trunk/doc/index.html#download
http://download.csdn.net/detail/nocml/4988379(这个我编译通过了,上传到CSDN了)
然后我们要下载语料,我用的是人民日报免费的那一个月的语料,
语料下载地址:
语料下之后要加工语料。下面是我加工后的格式:
每句话后一个空行 , 标记符号上图也显示了。本来想把处理后的语料上传到网上的,发现在太大了,上传不了,所以不想自己处理语料的请留邮箱哈。我可以发给你们。
语料处理完了,然后就是用CRF++训练了,这个很好办,我用的命令是crflearn -f 2 模版名 语料名 训练后的文件名 (crf_learn -f 2 template train_seg.part1.txt model_f2_all_ANSI_newTempalte)
我用的模版是:
#Unigram
U00:%x[-3,0]
U01:%x[-2,0]
U02:%x[-1,0]
U03:%x[0,0]
U04:%x[1,0]
U05:%x[2,0]
U06:%x[3,0]
U07:%x[-3,0]/%x[-2,0]
U8:%x[-2,0]/%x[-1,0]
U9:%x[-1,0]/%x[0,0]
U10:%x[0,0]/%x[1,0]
U11:%x[1,0]/%x[2,0]
U12:%x[2,0]/%x[3,0]
# Bigram
B
至此,我们得到了训练后的文件,然后才开始入正题,我们既然是做应用,总不能也用CRF++给我们的test.exe吧,这里我们要使用libcrfpp.dll, 由于我所做的项目是C#的,所以我又写了dll,在我写的dll中调用libcrfpp.dll对输入信息进行实体提取,直接返回抽取的结果。其实CRF++是开源的,我们也可以直接改其中的代码来实现我们想要的功能。
这里要说明的是由于语料较少,所以训练出来的准确度较低,没办法,谁让我们穷呢,只能用得起免费的语料,不过穷人有穷人的做法。我们可以在训练时把拟合度调小些,让训练出来的数据不要拟合的太厉害,抽取出来的结果可能会就误判,误判不怕,我们再对抽取结果进行规则提取,这个是个狠活儿,一定要多下功夫,做好了准确率会大幅提升。
最后我做的实体抽取准确率在94%以上。当然其实可以再提高的,特征这块做的太过薄弱,可是毕竟是做项目,不能耗费太长时间。
好了,就写这些,如果有什么问题可以留言,勿喷。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。