基于条件随机场的命名实体抽取

24 篇文章 2 订阅
13 篇文章 0 订阅

本文地址: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%以上。当然其实可以再提高的,特征这块做的太过薄弱,可是毕竟是做项目,不能耗费太长时间。

好了,就写这些,如果有什么问题可以留言,勿喷。 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值