基于条件随机场(CRF)的命名实体识别
很久前做过一个命名实体识别的模块,现在有时间,记录一下。
一、要识别的对象
人名、地名、机构名
二、主要方法
1、使用CRF模型进行识别(识别对象都是最基础的序列,所以使用了好评率较高的序列识别算法CRF)
2、使用规则对相关数据进行后过滤、
三、具体实现
1、训练数据的生成
主要使用了人民日报免费部分,以及一些及它从网上找到的资源(时间长了,记不住了,好像还自己标注了些)
2、模板的生成
使用的是Unigram,由于考虑到要识别的实体一般情况下没有长距离依赖 以及训练时的效率问题,所以模板没有写得过长。经过几次测试,最终确定的模板如下。
#Unigram
U00:%x[-,]
U01:%x[-,]
U02:%x[-,]
U03:%x[,]
U04:%x[,]
U05:%x[,]
U06:%x[,]
U07:%x[-,]/%x[-,]
U8:%x[-,]/%x[-,]
U9:%x[-,]/%x[,]
U10:%x[,]/%x[,]
U11:%x[,]/%x[,]
U12:%x[,]/%x[,] # Bigram
B
3、参数寻优
参数寻优,使用网上提供的python脚本,进行参数寻优。(脚本的具体使用方法不在这里赘述)
4、迭代训练
a)使用初始的训练数据及调优过的参数进行训练
b)使用训练好的model对文本进行实体识别
c)对识别错误的结果进行人工标注,添加到训练集,转至步骤a)
这里的采用了人工干预的方法,来提高识别高性能,可能有些麻烦,但这是个比较有效的方法。
5、总体性能
经测试,总体准确度(Accuracy)在94%以上。
注:没有经过严格的测试,只是取了300篇文章,对其中的实体标注了,然后用模型识别了一遍,统计了Acc,而recall几乎100%,我感觉测试文章比较少,所以这个测试结果可能不太严谨,由于最后领导感觉达到要求了,所以我也没有继续提高。
四、小结
1、首先来说,训练模型使用语料有点偏少,如果有大量的训练语料,第四步迭代训练的压力可能就会比较小。
2、总体来说,这个模块还是很快的做完了,效果也还可以。在这里主要感谢一下人民日报那几个月的免费语料,做模型最怕的就是没有基础数据,特别是人民日报这样的高质量的数据,有了这种高质量的数据,对于机器学习来说是事伴功倍。
转载请注明出处:本文地址 http://www.cnblogs.com/nocml/p/3543236.html
基于条件随机场(CRF)的命名实体识别的更多相关文章
- 用CRF做命名实体识别(一)
用CRF做命名实体识别(二) 用CRF做命名实体识别(三) 用BILSTM-CRF做命名实体识别 博客园的markdown格式可能不太方便看,也欢迎大家去我的简书里看 摘要 本文主要讲述了关于人民日报 ...
- 用CRF做命名实体识别(二)
用CRF做命名实体识别(一) 用CRF做命名实体识别(三) 一. 摘要 本文是对上文用CRF做命名实体识别(一)做一次升级.多添加了5个特征(分别是词性,词语边界,人名,地名,组织名指示词),另外还修 ...
- 使用CRF做命名实体识别(三)
摘要 本文主要是对近期做的命名实体识别做一个总结,会给出构造一个特征的大概思路,以及对比所有构造的特征对结构的影响.先给出我最近做出来的特征对比: 目录 整体操作流程 特征的构造思路 用CRF++训练 ...
- NLP入门(八)使用CRF++实现命名实体识别(NER)
CRF与NER简介 CRF,英文全称为conditional random field, 中文名为条件随机场,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机 ...
- PyTorch 高级实战教程:基于 BI-LSTM CRF 实现命名实体识别和中文分词
前言:译者实测 PyTorch 代码非常简洁易懂,只需要将中文分词的数据集预处理成作者提到的格式,即可很快的就迁移了这个代码到中文分词中,相关的代码后续将会分享. 具体的数据格式,这种方式并不适合处理 ...
- 基于tensorflow的bilstm_crf的命名实体识别(数据集是msra命名实体识别数据集)
github地址:https://github.com/taishan1994/tensorflow-bilstm-crf 1.熟悉数据 msra数据集总共有三个文件: train.txt:部分数据 ...
- DL4NLP —— 序列标注:BiLSTM-CRF模型做基于字的中文命名实体识别
三个月之前 NLP 课程结课,我们做的是命名实体识别的实验.在MSRA的简体中文NER语料(我是从这里下载的,非官方出品,可能不是SIGHAN 2006 Bakeoff-3评测所使用的原版语料)上训练 ...
- Pytorch: 命名实体识别: BertForTokenClassification/pytorch-crf
文章目录基本介绍BertForTokenClassificationpytorch-crf实验项目参考基本介绍命名实体识别:命名实体识别任务是NLP中的一个基础任务.主要是从一句话中识别出命名实体.比 ...
- 8.HanLP实现--命名实体识别
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 8. 命名实体识别 8.1 概述 命名实体 文本中有一些描述实体的词汇.比如人名. ...
随机推荐
- nodejs是单线程
你不妨先思考一个问题:在单核时代,PHP之类多线程或者多进程的,是怎么处理并发的?是排队吗? 答案是:的确就是排队.但是并不是一定要处理完请求1才能去处理请求2:实际上请求的处理过程中,有很多的时间是 ...
- IOS开发之──应用之间调用(1)
iphone应用之间调用步骤: 1)在plist文件中,注册对外接口 在xcode group&files 里面,展开 resources选择<app>info.plist 鼠标右 ...
- _cpluscplus
_cpluscplus是c++中的定义,而c中没有该定义 1.用来判定代码是c类型还是c++类型 2._cplusplus的类型是"long int",值为199711L int ...
- clion 帮助文档 EN
下载时间 2015年10月 下载地址:http://pan.baidu.com/s/1E4fgE 备用地址:链接:http://pan.baidu.com/s/1bn6u5Wj 密码:icn4
- BZOJ 4031: [HEOI2015]小Z的房间 Matrix-Tree定理
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4031 题解: Matrix-tree定理解决生成树计数问题,其中用到高斯消元法求上三角矩 ...
- java.lang.UnsatisfiedLinkError: D:\Tomcat-7.0.59\apache-tomcat-7.0.59\bin\tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
今日上午用Tomcat运行一个小项目,报出以下异常信息: java.lang.UnsatisfiedLinkError: D:\Tomcat-7.0.59\apache-tomcat-7.0.59\b ...
- 30个实用的Linux find命令示例
除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易. 本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令. 首先,在你 ...
- 出现错误:Unable to load configuration. - action - file:/E:/Java/Tomcat7.0/apache-tomcat-7.0.68-windows-x64/apache-tomcat-7.0.68/webapps/SSH2Integrate/WEB-INF/classes/struts.xml:8:43
严重: Exception starting filter struts2 Unable to load configuration. - action - file:/E:/Java/Tomcat7 ...
- uva 10128
动归 转移方程 :dp(i, j, k) = dp(i – 1, j, k) * (i – 2) + dp(i – 1, j – 1, k) + dp(i – 1, j, k – 1) i表示此时排第 ...
- Android Activity初探
原地址:Android Activity初探 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供一个 ...