本文构造:
- 什么是定名实体辨认(NER)
- 怎么辨认?
cs224d Day 7: 项目2-用DNN处理NER问题
课程项目描述地址
什么是NER?
定名实体辨认(NER)是指辨认文本中具有特定意义的实体,重要包含人名、地名、机构名、专有名词等。定名实体辨认是信息提取、问答体系、句法分析、机械翻译等应用范畴的重要基本对象,作为构造化信息提取的重要步调。摘自 BosonNLP
怎么辨认?
先把解决问题的逻辑说一下,然后解释重要的代码,有兴趣的话,完全代码请去 这里看 。
代码是在 Tensorflow 下建立只有一个隐蔽层的 DNN 来处理 NER 问题。
1.问题辨认:
NER 是个分类问题。
获得如下求导公式:
给一个悼?船我们须要根据高低果断定,它属于下面四类的哪一个,如不雅都不属于,则类别为0,即不是实体,所以这是一个须要分成 5 类的问题:
- • Person (PER)
- • Organization (ORG)
- • Location (LOC)
- • Miscellaneous (MISC)
我们的练习数据有两列,第一列是悼?船第二列是标签。
- EU ORG
- rejects O
- German MISC
- Peter PER
- BRUSSELS LOC
2.模型:
接下来我们用深度神经收集对其进行练习。
模型如下:
在 def test_NER() 中,我们进行 max_epochs 次迭代,每次,用 training data 练习模型 获得一对 train_loss, train_acc ,再用这个模型去猜测 validation data,获得一对 val_loss, predictions ,我们选择最小的 val_loss ,并把响应的参数 weights 保存起来,最后我们是要用这些参数去猜测 test data 的类别标签:
我们建立一个只有一个隐蔽层的神经收集,隐蔽层维度是 100,y^ 就是获得的猜测值,维度是 5:
用交叉熵来计算误差:
J 对各个参数进行求导:
在 TensorFlow 中求导是主动实现的,这里用Adam优化算法更新梯度,赓续地迭代,使得loss越来越小直至收敛。
3.具体实现
- def test_NER():
- config = Config()
- with tf.Graph().as_default():
- model = NERModel(config) # 最重要的类
- init = tf.initialize_all_variables()
- saver = tf.train.Saver()
- with tf.Session() as session:
- best_val_loss = float('inf') # 最好的值瓯,它的 loss 它的 迭代次数 epoch
- best_val_epoch = 0
- session.run(init)
- for epoch in xrange(config.max_epochs):
- print 'Epoch {}'.format(epoch)
- start = time.time()
- ###
- train_loss, train_acc = model.run_epoch(session, model.X_train,
- model.y_train) # 1.把 train 数据放进迭代里跑,获得 loss 和 accuracy
- val_loss, predictions = model.predict(session, model.X_dev, model.y_dev) #
推荐阅读
【51CTO.com原创稿件】云计算慢慢进入深水区,传统的公有云和私有云都已经裸露出必定的局限性,是以混淆云似乎>>>详细阅读
本文标题:用深度神经网络处理NER命名实体识别问题
地址:http://www.17bianji.com/lsqh/35497.html
1/2 1