用CRF做命名实体识别

摘要

本文主要讲述了关于人民日报标注语料的预处理,利用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.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的原理也不是很懂,也需要去完整的学习一下。后续还会更新

也欢迎大家看看我的简书[https://www.jianshu.com/p/12f2cdd86679]

原文地址:https://www.cnblogs.com/lookfor404/p/9189429.html

时间: 2024-08-27 13:10:10

用CRF做命名实体识别的相关文章

基于深度学习做命名实体识别

基于CRF做命名实体识别系列 用CRF做命名实体识别(一) 用CRF做命名实体识别(二) 用CRF做命名实体识别(三) 摘要 1. 之前用CRF做了命名实体识别,效果还可以,最高达到0.9293,当然这是自己用sklearn写的计算F1值, 后来用**conlleval.pl**对CRF测试结果进行评价,得到的F1值是**0.9362**. 2. 接下来基于BILSTM-CRF做命名实体识别,代码不是自己写的,用的github上的一个大佬写的,换了自己的数据集,得到最终的结果是0.92. 3.

用深度学习做命名实体识别(四)——模型训练

通过本文你将了解如何训练一个人名.地址.组织.公司.产品.时间,共6个实体的命名实体识别模型. 准备训练样本 下面的链接中提供了已经用brat标注好的数据文件以及brat的配置文件,因为标注内容较多放到brat里加载会比较慢,所以拆分成了10份,每份包括3000多条样本数据,将这10份文件和相应的配置文件放到brat目录/data/project路径下,然后就可以从浏览器访问文件内容以及相应的标注情况了. 链接:https://pan.baidu.com/s/1-wjQnvCSrbhor9x3G

用深度学习做命名实体识别(七)-CRF介绍

还记得之前介绍过的命名实体识别系列文章吗,可以从句子中提取出人名.地址.公司等实体字段,当时只是简单提到了BERT+CRF模型,BERT已经在上一篇文章中介绍过了,本文将对CRF做一个基本的介绍.本文尽可能不涉及复杂晦涩的数学公式,目的只是快速了解CRF的基本概念以及其在命名实体识别等自然语言处理领域的作用. 什么是CRF? CRF,全称 Conditional Random Fields,中文名:条件随机场.是给定一组输入序列的条件下,另一组输出序列的条件概率分布模型. 什么时候可以用CRF?

NLP入门(八)使用CRF++实现命名实体识别(NER)

CRF与NER简介 ??CRF,英文全称为conditional random field, 中文名为条件随机场,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫(Markov)随机场. ??较为简单的条件随机场是定义在线性链上的条件随机场,称为线性链条件随机场(linear chain conditional random field). 线性链条件随机场可以用于序列标注等问题,而本文需要解决的命名实体识别(NER)任务正好可通过序列标注方

用深度学习做命名实体识别(六)-BERT介绍

什么是BERT? BERT,全称是Bidirectional Encoder Representations from Transformers.可以理解为一种以Transformers为主要框架的双向编码表征模型.所以要想理解BERT的原理,还需要先理解什么是Transformers. Transformers简单来说是一个将一组序列转换成另一组序列的黑盒子,这个黑盒子内部由编码器和解码器组成,编码器负责编码输入序列,然后解码器负责将编码器的输出转换为另一组序列.具体可以参考这篇文章<想研究B

神经网络结构在命名实体识别(NER)中的应用

近年来,基于神经网络的深度学习方法在自然语言处理领域已经取得了不少进展.作为NLP领域的基础任务-命名实体识别(Named Entity Recognition,NER)也不例外,神经网络结构在NER中也取得了不错的效果.最近,我也阅读学习了一系列使用神经网络结构进行NER的相关论文,在此进行一下总结,和大家一起分享学习. 1 引言 命名实体识别(Named Entity Recognition,NER)就是从一段自然语言文本中找出相关实体,并标注出其位置以及类型,如下图.它是NLP领域中一些复

CS224d 单隐层全连接网络处理英文命名实体识别tensorflow

什么是NER? 命名实体识别(NER)是指识别文本中具有特定意义的实体,主要包括人名.地名.机构名.专有名词等.命名实体识别是信息提取.问答系统.句法分析.机器翻译等应用领域的重要基础工具,作为结构化信息提取的重要步骤. NER具体任务 1.确定实体位置 2.确定实体类别 给一个单词,我们需要根据上下文判断,它属于下面四类的哪一个,如果都不属于,则类别为0,即不是实体,所以这是一个需要分成 5 类的问题: ? Person (PER) ? Organization (ORG) ? Locatio

机器学习 - 命名实体识别之Hidden Markov Modelling

概述 命名实体识别在NLP的应用中也是非常广泛的,尤其是是information extraction的领域.Named Entity Recognition(NER) 的应用中,最常用的一种算法模型是隐式马可夫模型(Hidden Markov Modelling)- HMM.本节内容主要是通过介绍HMM的原理,以及应用HMM来做一个NER的实例演示. HMM原理解析 在解释HMM的原理之前,先引用几个HMM的基本概念,第一个是就是隐式状态,在本文中用H表示: 第二个就是显式状态,在本文中用大写

命名实体识别---入门

命名实体识别(Named Entity Recognition,后文简称NER) 是指从文本中识别具有特定类别的实体(通常是名词),例如人名.地名.机构名.专有名词等.命名实体识别是信息 检索,查询分类,自动问答等问题的基础任务,其效果直接影响后续处理的效果,因此是自然语言处理研究的一个基础问题. 传统的方法 NER的问题通常被抽象为序列标注(Sequence labeling)问题.所谓序列标注是指对序列中每个符号赋予一个特定的标签.