命名实体识别【代码解析】

    命名实体识别的学习代码选择的是github上star最多的代码:A very simple BiLSTM-CRF model for Chinese Named Entity Recognition 中文命名实体识别 (TensorFlow)。 这也算是学习的第一个大点儿的tf项目吧。

    配合源码作者的博客BiLSTM-CRF模型做基于字的中文命名实体识别

    模型如下图。

    命名实体识别【代码解析】_第1张图片

    一、model.py文件主要是构建模型——类BiLSTM_CRF。

  add_placeholders方法添加占位符。
   这里讲一下tf中占位符的作用。tf.constant用来定义常量。那么tf中变量如何定义呢?就用到了tf.placeholder() 和 feed_dict。
x = tf.placeholder(tf.string)

with tf.Session() as sess:
    output = sess.run(x, feed_dict={x: 'Hello World'})

     tf.placeholder表示一个占位符,至于是什么类型,看自己定义了,这里定义的是tf.string类型,然后呢,在session开始run以前,也就是这个图开始计算以前,就使用feed_dict将对应的值传入x,也就是这个占位符。
     同样的feed_dict可以设置多个tensor。

x = tf.placeholder(tf.string)
y = tf.placeholder(tf.int32)
z = tf.placeholder(tf.float32)

with tf.Session() as sess:
    output = sess.run(x, feed_dict={x: 'Test String', y: 123, z: 45.67})

    lookup_layer_op方法目标在于利用预训练或随机初始化的embedding矩阵将句子中的每个字从one-hot向量映射为低维稠密的字向量(character embedding),在输入下一层之前,设置dropout以缓解过拟合。源码中采用随机初始化embedding矩阵的方式。当然,这种方式较为简单,我们可以在初始化中添加语言知识。例如,进行标记化并使用预先训练的单词级嵌入,然后可以使用此标记的单词嵌入来初始化一个标记中的每个字符。另外,我们可以通过组合低级功能来获得字符嵌入。 

    biLSTM_layer_op方法 可以有效地使用过去和未来的输入信息并自动提取功能。

    命名实体识别【代码解析】_第2张图片

   命名实体识别【代码解析】_第3张图片

   命名实体识别【代码解析】_第4张图片

命名实体识别【代码解析】_第5张图片

 

你可能感兴趣的:(nlp)