命名实体识别(NER)实战demo-LSTM+CRF

命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。

该篇面向的更多是开始做命名实体识别的小白,推荐几篇对NER介绍非常详细的文章
流水的NLP铁打的NER:命名实体识别实践与探索
命名实体识别的一点经验

简介

最开始接触知识图谱的时候可能更多理解的是概念,对实战没有很多认识,之后慢慢有开始学习知识图谱的构建。认识到其实命名实体识别本质是多分类任务(定义好实体类别后,对每个字词进行分类),具体的分类基于标签体系(常见的标签体系有IO,BIO,BMEWO,BMWEO+),一般标签体系越复杂,准确性越高。

命名实体识别时,网上找了大量资源,但最初的学习效果并不好,看了很多内容还是不知道真正该怎么做。直到b站看到一个视频TensorFlow:BERT框架项目实战,其中一节内容是医学糖尿病数据命名实体识别,详细介绍了code和模型,让我收获很多。具体资源可以在自然语言处理实战项目(基于深度学习)找到,唐宇迪老师讲的真的很清晰透彻!之前很多东西都是跟着老师视频学的(PS:b站有很多视频,因为直接买课程的话会比较贵)。

糖尿病NER
BiLSTM+CRF

于是乎找到NER的code后拿来开始跑,但其中碰到了许多问题,最终解决后想把整个过程记录下来,感兴趣的uu可以一起学习呀~

项目资源

来自唐宇迪老师的项目资源 NLP通用框架BERT

可以直接在百度网盘下载

链接: https://pan.baidu.com/s/13SrM1V08eeVeFfgRbqWe_w 提取码: uphm

项目文件

用的是tensorflow,主要是keras做

  • data
    – test_data.data
    – train_data.data
  • model
    – config.pkl
    – crf.h5
  • train.py(主函数)
  • bilsm_crf_model.py(LSTM+CRF模型)
  • process_data.py(数据处理函数)
  • val.py(预测函数)

代码运行过程中的问题

环境配置

TensorFlow 1.14.0 + Keras 2.2.5 on Python 3.6.

我用的IDE是Pycharm,用的是anaconda下新建的环境(也可以用已有的编译器,但是相关库的版本对应问题可能不太好解决,对于NER任务的话,主要是python、tensorflow、keras版本)

1、对于版本对应问题,可以看这篇文章 tensorflow + python + keras 版本对应关系

2、对于pycharm中配置anaconda,可以看这篇文章 Anaconda+pycharm+tensorflow安装和环境配置(win10)

  • cmd输入conda create --name ner python=3.6创建一个环境,ner是环境名,名字起什么都可以,这里选择的是python3.6
  • 输入conda info --envs看我们现有的环境(ner是否创建成功)
  • 输入activate ner激活环境
  • 输入pip install命令安装相应版本的tensorflow和keras
  • pycharm中新建project项目,选择interpreter时选anaconda下的python.exe

3、需要下载CRF相关库,这里直接根据 keras-contrib : Keras community contributions 进行即可,命令“pip install git+https://www.github.com/keras-team/keras-contrib.git”

这里需要注意要提前下载git,直接pip install会报错,需要用conda install git

报错及解决方法

1、TypeErmor: Tensors in list passed to ‘values’ of ‘ConcatV2’ 0p have types [bool,float32] that don’t all match.
请添加图片描述
解决方法:将mask_zero=True删除 ,因为只有第一次运行会报这个错误,之后再运行就不会了,所以第一次可以删除后再恢复

2、importEPror: Failed to impont 'pydot '. Please install 'pydot '. For example with 'pip install pydot .
请添加图片描述
解决方法:

conda install graphviz
conda install pydotplus
pip install pydot

3、AttributeError: ‘str’ object has no attribute 'deco
请添加图片描述
找到对应文件,例如下图中所示的就是saving.py文件
请添加图片描述
找到所有的decode相关代码,将decode改为encode即可,例如:

将query = query.decode(errors=‘replace’)改成query = query.encode(errors=‘replace’)

  • 2
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
命名实体识别Named Entity RecognitionNER)是自然语言处理中的一个重要任务,其目的是从文本中识别出具有特定意义的实体,如人名、地名、组织机构名等。 下面是bilstm+crf模型命名实体识别的流程: 1. 数据预处理:首先需要将文本数据转化为模型能够处理的格式,通常是将每个词转化为对应的向量表示,这可以通过使用预训练的词向量或者自己训练词向量来实现。同时还需要对文本进行标注标注出每个词是否属于命名实体、属于哪种类型等信息。 2. 模型搭建:使用bilstm+crf模型来进行命名实体识别。其中bilstm是一个双向LSTM网络,它可以同时考虑前后文信息,从而提高模型的准确性。而CRF(Conditional Random Field)则是用来对模型输出的标签序列进行约束,从而提高模型的稳定性和鲁棒性。 3. 模型训练:将预处理好的数据集用于模型训练,通过不断调整模型参数,使得模型训练集上的表现达到最优。 4. 模型评估:使用测试集来评估模型的性能,通常使用准确率、召回率、F1值等指标来评估模型的效果。 5. 模型应用:将模型应用到实际场景中,对文本进行命名实体识别,得到每个实体的类型和位置信息。 总的来说,使用bilstm+crf模型进行命名实体识别,可以提高模型的准确性和稳定性,适用于各种类型的文本数据,是目前命名实体识别领域的主流方法之一。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZFour_X

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值