赞
踩
1、命名实体识别由于有标注标签的存在,转化为多分类问题。
标注标签本次训练集中为‘BIO’方式标注
命名实体标注三种:人物,地点,组织机构
标签共7个类别:B-PER,I-PER,B-LOC,I-LOC,B-ORG,I-ORG,O
2、对于文本向量表示,如使用预训练模型BERT的向量:
安装腾讯肖涵博士开发的Bert Server(bert-serving-server)和Client(bert-serving-client)的python包
下载谷歌Bert-base chinese预训练模型
启动bert-serving-server,调用bert-serving-client,对字典集中所有字符进行encode
如不使用,则可以随机初始化一个numpy矩阵作为初始向量表示
3、对于文本序列的特征学习使用bilstm,可以双向获取各节点上下文特征
使用tensorflow 1.14版本构建bilstm模型主流程:
构建静态计算图(input层(输入数据的占位符)-embedding层(Bert或随机)-bilstm层(计算output)-softmax_or_crf层(计算预测标签概率值)-loss层(定义损失函数,计算loss)-optimizer层(定义优化损失函数方式:Adam/RMSProp…)-变量初始化开始层)
其中,softmax_or_crf层(最终分类使用softmax或CRF)
如使用softmax作为最后一层激活函数,则对于各节点,每个节点都在N个标签中选取softmax概率值最大的作为标签,标签选取时不在考虑上个节点的标签类别;
如使用CRF作为最后一层进行分类,则对于各节点,每个节点在N个标签中选取标签时,还同时考虑上个节点的标签与该节点标签的转移概率,最后用维特比算法,根据每个节点标签的likelihood和标签之间的转移概率,计算出最优标签序列
数据集 char sentence PER LOC ORG
训练集:1000043 20864 8144 16571 9277
验证集:112187 2318 884 1951 984
测试集:223832 4636 1864 3658 6185
中文数据集,感谢博文命名实体识别训练集汇总(一直更新)中提供的语料地址
epoch=20
loss:
代码:
1、data_processing数据处理模块:
重点:字向量生成
chardic_embedding.py:
from run.parameters_set import args import numpy as np from data_processing.create_char2id_dic import char_dic from bert_serving.client import BertClient bert_root = 'C:\\Users\\ZCY\\Anaconda3\\NLP_BERT\\chinese_L-12_H-768_A-12\\' bert_config_file = bert_root+'bert_config.json' def chardic_embedding(): embedding_dim = args.embedding_dim if args.char_embedding_init == 'random': embedding_matrix = np.random.uniform(-0.25,0.25,(len(char_dic.keys()),embedding_dim)) embedding_matrix = np.float32(embedding_matrix) elif args.char_embedding_init == 'BERT': embedding_matrix = BertClient().encode(list(char_dic.keys()))#bert_base的维度768,bert_large的维度1024,均不可更改,如需改可以添加隐层的方式更改 #print(embedding_matrix) return embedding_matrix
2、model模块:
重点:
Bilstm_CRF.py
import tensorflow as tf from tensorflow.contrib.rnn import LSTMCell from tensorflow.contrib.crf import crf_log_likelihood from tensorflow.contrib.layers import xavier_initializer from data_processing.create_sentset import tag2id from data_processing.create_char2id_dic import char_dic from data_processing.chardic_embedding import chardic_embedding from run.parameters_set import model_path class Bilstm_CRF(object): def __init__(self,args): self.hidden_dim = args.hidden_dim self.epoch_num = args.epochs self.optimizer = args.optimizer self.learning_rate = args.learning_rate self.gradient_clipping = args.gradient_clipping self.dropout_rate = args.dropout self.CRF_SOFTMAX = args.CRF_SOFTMAX self.embedding = chardic_embedding() self.char_dic = char_dic self.tag2id = tag2id self.model_path = model_path def computing_graph(self): self.input_placeholder() self
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。