用CRF做命名实体识别(一)
用CRF做命名实体识别(二)
用CRF做命名实体识别(三)
用BILSTM-CRF做命名实体识别
博客园的markdown格式可能不太方便看,也欢迎大家去我的简书里看
摘要
本文主要讲述了关于人民日报标注语料的预处理,利用CRF++工具包对模型进行训练以及测试
目录
- 明确我们的标注任务
- 语料和工具
- 数据预处理
1.数据说明
2.数据预处理- 模型训练及测试
1.流程
2.标注集
3.特征模板
4.CRF++包的使用说明- 总结与展望
正文
1.明确我们的标注任务
这篇文章主要是介绍用CRF模型去提取人民日报语料的时间、人物、地点及组织机构名,也就是提取TIME、PERSON、LOCATION、ORGANIZATION四种实体。训练我们直接使用CRF++工具包。
2.语料和工具
人民日报1998中文标注语料库
CRF++安装包
3.数据预处理
3.1 数据说明
首先打开下载的人民日报标注语料的文件,要转为utf-8格式。我们需要提取的实体是时间、人名、地名、组织机构名,根据语料库的词性标记说明,对应的词性分别为/t、/nr、/ns、/nt。
3.2 数据预处理
语料库里的姓名标注是将姓和名分开标注的,因此需要合并姓名
合并姓名前:
'19980101-01-001-002/m中共中央/nt总书记/n、/w国家/n主席/n江/nr某某/nr'
合并姓名后:
'19980101-01-001-002/m中共中央/nt总书记/n、/w国家/n主席/n江某某/nr'
需要将中括号里的内容合并
合并中括号前:
'[中国/ns 政府/n]nt 顺利/ad 恢复/v 对/p 香港/ns 行使/v 主权/n ,/w '
合并中括号后:
'中国政府nt顺利/ad恢复/v对/p香港/ns行使/v主权/n,/w'
时间合并
合并时间前:
'1999年/t 12月/t 澳门/ns 的/u 回归/vn 一定/d 能够/v 顺利/ad 实现/v 。/w'
合并时间后:
'1999年12月/t澳门/ns的/u回归/vn一定/d能够/v顺利/ad实现/v。/w'
全角字符统一转为半角字符
人民日报语料有些地方不是两个空格的,例如11042行 '副教授/n 叹/Vg 道/v ,/w 成/v', 中的“叹/Vg” 和“道/v”之间是单空格,需要变成双空格。否则代码运行会报错
4.模型训练及测试
4.1流程

4.2 标注集
用的是BMEWO做标注体系
B代表实体的首部,M代表实体的中部,E代表实体的尾部,W代表单个的实体,O代表非实体
新 O
世 O
纪 O
— O
— O
一 B_TIME
九 M_TIME
九 M_TIME
八 M_TIME
年 E_TIME
新 B_TIME
年 E_TIME
讲 O
话 O
( O
附 O
图 O
片 O
1 O
张 O
) O
中 B_ORGANIZATION
共 M_ORGANIZATION
中 M_ORGANIZATION
央 E_ORGANIZATION
总 O
书 O
记 O
CRF++训练的数据格式如上图所示
4.3 特征模板
特征模板template如下
# Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U05:%x[-2,0]/%x[-1,0]/%x[0,0]
U06:%x[-1,0]/%x[0,0]/%x[1,0]
U07:%x[0,0]/%x[1,0]/%x[2,0]
U08:%x[-1,0]/%x[0,0]
U09:%x[0,0]/%x[1,0]
# Bigram
B
4.4 CRF++包的使用说明
下载工具包之后,打开文件夹

1.在此处新建一个文件夹chinese
2.我们复制crf_learn.exe,crf_test.exe和libcrfpp.dll这三个文件到我们新建的chinese文件夹里面,然后再把之前生成的CRF++数据格式的数据文件train.data放到chinese里面,再把我们自己定义的特征模板文件放到chinese文件夹里面(一共五个文件)
3.在chinese里面打开cmd
敲入以下代码,这便是开始训练模型
crf_learn -a MIRA template train.data model
template就是我们上面定义的特征模板
训练好之后会产生一个model文件
4.自己写几个测试文本,并将其转为CRF++的数据格式,注意标签要全部一样,如下图所示
扬 B
帆 B
远 B
东 B
做 B
与 B
中 B
国 B
合 B
作 B
的 B
先 B
行 B
希 B
腊 B
的 B
经 B
济 B
结 B
构 B
较 B
特 B
殊 B
。 B
同样把这个测试数据的文件test.data放到chinese文件夹里面
5.在chinese里面打开cmd
敲入以下代码,这便是开始模型预测
crf_test -m model test.data >> output.txt
打开output.txt文件你就会看到预测的结果
扬 B O
帆 B O
远 B O
东 B O
做 B O
与 B O
中 B B_LOCATION
国 B E_LOCATION
合 B O
作 B O
的 B O
先 B O
行 B O
希 B B_LOCATION
腊 B E_LOCATION
的 B O
经 B O
济 B O
结 B O
构 B O
较 B O
特 B O
殊 B O
。 B O
5.总结与展望
现在仅仅只是粗暴的把这个流程实现了一遍,测试的效果并不是很好,有部分的人名没有识别出来,还需要再添加特征,以及更改template特征模板,这些还在学习。CRF的原理也不是很懂,也需要去完整的学习一下。后续还会更新
欢迎扫码关注

用CRF做命名实体识别(一)的更多相关文章
- 用CRF做命名实体识别(二)
用CRF做命名实体识别(一) 用CRF做命名实体识别(三) 一. 摘要 本文是对上文用CRF做命名实体识别(一)做一次升级.多添加了5个特征(分别是词性,词语边界,人名,地名,组织名指示词),另外还修 ...
- 使用CRF做命名实体识别(三)
摘要 本文主要是对近期做的命名实体识别做一个总结,会给出构造一个特征的大概思路,以及对比所有构造的特征对结构的影响.先给出我最近做出来的特征对比: 目录 整体操作流程 特征的构造思路 用CRF++训练 ...
- 用深度学习做命名实体识别(二):文本标注工具brat
本篇文章,将带你一步步的安装文本标注工具brat. brat是一个文本标注工具,可以标注实体,事件.关系.属性等,只支持在linux下安装,其使用需要webserver,官方给出的教程使用的是Apac ...
- 用深度学习做命名实体识别(七)-CRF介绍
还记得之前介绍过的命名实体识别系列文章吗,可以从句子中提取出人名.地址.公司等实体字段,当时只是简单提到了BERT+CRF模型,BERT已经在上一篇文章中介绍过了,本文将对CRF做一个基本的介绍.本文 ...
- NLP入门(八)使用CRF++实现命名实体识别(NER)
CRF与NER简介 CRF,英文全称为conditional random field, 中文名为条件随机场,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机 ...
- 用深度学习做命名实体识别(六)-BERT介绍
什么是BERT? BERT,全称是Bidirectional Encoder Representations from Transformers.可以理解为一种以Transformers为主要框架的双 ...
- PyTorch 高级实战教程:基于 BI-LSTM CRF 实现命名实体识别和中文分词
前言:译者实测 PyTorch 代码非常简洁易懂,只需要将中文分词的数据集预处理成作者提到的格式,即可很快的就迁移了这个代码到中文分词中,相关的代码后续将会分享. 具体的数据格式,这种方式并不适合处理 ...
- Pytorch: 命名实体识别: BertForTokenClassification/pytorch-crf
文章目录基本介绍BertForTokenClassificationpytorch-crf实验项目参考基本介绍命名实体识别:命名实体识别任务是NLP中的一个基础任务.主要是从一句话中识别出命名实体.比 ...
- 基于条件随机场(CRF)的命名实体识别
很久前做过一个命名实体识别的模块,现在有时间,记录一下. 一.要识别的对象 人名.地名.机构名 二.主要方法 1.使用CRF模型进行识别(识别对象都是最基础的序列,所以使用了好评率较高的序列识别算法C ...
随机推荐
- java和mysql的length()区别及char_length()
一. mysql里面的有length和char_length两个长度函数,区别在于: length: 一个汉字是算三个字符,一个数字或字母算一个字符. char_length: 不管汉字还是数字或者是 ...
- pip使用国内镜像源
windows版 1.在windows文件管理器中,输入 %APPDATA% 2.在该目录下新建pip文件夹,然后到pip文件夹里面去新建个pip.ini文件 3.在新建的pip.ini文件中输入以下 ...
- 主流的RPC框架有哪些
RPC是远程过程调用的简称,广泛应用在大规模分布式应用中,作用是有助于系统的垂直拆分,使系统更易拓展.Java中的RPC框架比较多,各有特色,广泛使用的有RMI.Hessian.Dubbo等.RPC还 ...
- post和updatebatch区别 delphi
Post是确认当前的修改,而UpdateBatch是把已经确认但是没有存盘的数据写入数据库如果不是使用批量更新的方式的时候,Post的时候,确认的修改直接写入数据库. 我弄了一个例子是ado的.往数据 ...
- .net下使用NPOI读取Excel表数据
这里只写MVC下的情况 public ActionResult Index() { var path = Server.MapPath(@"/content/user.xlsx") ...
- luogu 2115 破坏(01分数规划)
题意:给出一个序列,删除一个连续的子串后使得剩下的平均值最小. 典型的01分数规划,令f(x)=(sum1[i]+sum2[j])/(i+j).sum1表示前缀和,sum2表示后缀和,那么我们就相当于 ...
- 洛谷P2894[USACO08FEB]酒店Hotel(线段树)
问题描述 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 <= N & ...
- Period II FZU - 1901(拓展kmp)
拓展kmp板题 emm...我比较懒 最后一个字母进了vector两个1 不想改了...就加了个去重... 哈哈 #include <iostream> #include <cst ...
- 常州day1p3
给定一个 n 行 m 列的方格,每个格子里有一个正整数 a,1 ≤ a ≤ k,k ≤ n∗m 假设你当前时刻站在 (i,j) 这个格子里,你想要移动到 (x,y),那必须满足以下三个条件 1:i & ...
- 微信小程序语音识别
语音识别现在已经发展的很成熟了,经过比对发现百度对开发者比较友好,提供很多种语言的SDK,对python来说直接安装 pip install baidu-aip 文档写的也不错 具体参考:http: ...