Coder Social home page Coder Social logo

ner_demo's Introduction

NER(中文实体命名识别)

光健字: 中文命名实体识别 NER BILSTM CRF IDCNN BERT

摘要:对中文命名实体识别一直处于知道却未曾真正实践过的状态,此次主要是想了解和实践一些主流的中文命名实体识别的神经网络算法。通过对网上博客的阅读了解,中文命名实体识别比较主流的方法是BILSTM+CRF、IDCNN+CRF、BERT+BILSTM+CRF这几种神经网络算法,这个demo也用Keras实现了这几个算法,并且采用几个比较通用的数据集进行训练测试。这个demo是以了解和学习为目的的,所以未得出任何结论

注意:由于算力和时间的问题,对神经网络的参数未进行太多调试,所以模型现在的参数并不是最佳参数

主要库的版本

本项目是基于keras(Using TensorFlow backend)以下是主要库的版本

  • python = 3.6.8

  • keras == 2.2.4

  • keras_contrib == 0.0.2

  • keras_bert == 0.80.0

  • tensorflow == 1.14.0

项目目录结构

  • data 数据目录
    • 具体请查看数据目录文件夹下的README文件
  • DataProcess 数据处理文件夹
    • 具体请查看数据处理文件夹下的README文件
  • Pubilc 公共工具
    • path 定义文件(文件夹)的路径
    • utils 工具
      • 创建log
      • keras的callback调类
  • Model 模型(总共定义了5个模型,具体结构请查看Model文件夹下的README文件)
    • BERT+BILST+CRF
    • BILSTM+Attention+CRF
    • BILSTM+CRF
    • IDCNN+CRF(1)
    • IDCNN+CRF(2)
  • log 记录数据

运行项目

注意:需要用到bert网络的需要提前下载BERT预训练模型解压到data文件夹下

  • 直接在IDE里运行项目

    • 直接运行 train.py文件
  • 命令行

    • python train.py

运行结果

运行GPU: GeForceRTX2080Ti(GPU显存 10.0G, 算力7.5)

训练周期为15个周期,提前停止条件:2个周期验证集准确率没有提升。

BERT采用batch_size=32 因为值为64的时候所使用GPU内存不够

以下数据基于MSRA数据集,以8:2的拆分(训练集:测试集)。测试结果

模型 准确率 F1 召回率
IDCNN_CRF 0.988 0.860 0.871
IDCNN_CRF_2 0.990 0.872 0.897
BILSTM_Attention_CRF 0.987 0.850 0.848
BILSTMCRF 0.989 0.870 0.863
BERT_BILSTM_CRF 0.996 0.954 0.950

很显然BERT+BILIST+CRF的组合效果会好很多

提示:log文件夹里有每个训练周期记录的数据

ner_demo's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ner_demo's Issues

为什么用BERTBILSTMCRF模型时报错

Traceback (most recent call last):
File "train.py", line 101, in
info_list = train_sample(train_model=model, epochs=10, log=log)
File "train.py", line 51, in train_sample
model = model_class.creat_model()
File "/root/NER_DEMO-master/Model/BERT_BILSTM_CRF.py", line 39, in creat_model
trainable=True)
File "/root/miniconda3/envs/tf/lib/python3.6/site-packages/keras_bert/loader.py", line 169, in load_trained_model_from_checkpoint
**kwargs)
File "/root/miniconda3/envs/tf/lib/python3.6/site-packages/keras_bert/loader.py", line 58, in build_model_from_config
**kwargs)
File "/root/miniconda3/envs/tf/lib/python3.6/site-packages/keras_bert/bert.py", line 91, in get_model
dropout_rate=dropout_rate,
File "/root/miniconda3/envs/tf/lib/python3.6/site-packages/keras_bert/layers/embedding.py", line 56, in get_embedding
)(embed_layer)
File "/root/miniconda3/envs/tf/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 663, in call
inputs, outputs, args, kwargs)
File "/root/miniconda3/envs/tf/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1708, in set_connectivity_metadata
input_tensors=inputs, output_tensors=outputs, arguments=kwargs)
File "/root/miniconda3/envs/tf/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1796, in _add_inbound_node
input_tensors)
File "/root/miniconda3/envs/tf/lib/python3.6/site-packages/tensorflow/python/util/nest.py", line 515, in map_structure
structure[0], [func(*x) for x in entries],
File "/root/miniconda3/envs/tf/lib/python3.6/site-packages/tensorflow/python/util/nest.py", line 515, in
structure[0], [func(*x) for x in entries],
File "/root/miniconda3/envs/tf/lib/python3.6/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1795, in
inbound_layers = nest.map_structure(lambda t: t._keras_history.layer,
AttributeError: 'tuple' object has no attribute 'layer'

CRF层出错

你好,这是什么原因造成的呢?
Traceback (most recent call last):
File "D:/研究生/NER_DEMO-master/NER_DEMO-master/train.py", line 108, in
info_list = train_sample(train_model='BERTBILSTMCRF', epochs=15, log=log)
File "D:/研究生/NER_DEMO-master/NER_DEMO-master/train.py", line 52, in train_sample
model = model_class.creat_model()
File "D:\研究生\NER_DEMO-master\NER_DEMO-master\Model\BERT_BILSTM_CRF.py", line 51, in creat_model
x = self.crf(x)
File "D:\Application\python3.6\lib\site-packages\keras\engine\base_layer.py", line 443, in call
previous_mask = _collect_previous_mask(inputs)
File "D:\Application\python3.6\lib\site-packages\keras\engine\base_layer.py", line 1311, in _collect_previous_mask
mask = node.output_masks[tensor_index]
AttributeError: 'Node' object has no attribute 'output_masks'

bug: in f1score, recall metricts

I am so sorry to found that your f1score and recall are wrong.
yours:
f1score = f1_score(pre, test_label, average='macro')
recall = recall_score(pre, test_label, average='macro')

but:
def f1_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary',
sample_weight=None, zero_division="warn")
def recall_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary',
sample_weight=None, zero_division="warn")

the position of y_true and y_pred is reversed.
it is cost a long time for finding this difference when i use my DIY metricts.

用自己的数据集和标签怎么改

我按照data2的格式修改了我的数据集 并且在vocab.py里修改了实体类别 但我试验抛出的结果显示正确率没问题 但召回率和F值只有0.0几 请问下问题出在那里 歇息大佬

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.