bilstm_crf_model.py 文件源码

python
阅读 19 收藏 0 点赞 0 评论 0

项目:deeplearning 作者: fanfanfeng 项目源码 文件源码
def __init__(self):
        self.embedding_size = nlp_segment.flags.embedding_size
        self.num_tags = nlp_segment.flags.num_tags
        self.num_hidden = nlp_segment.flags.num_hidden
        self.learning_rate = nlp_segment.flags.learning_rate
        self.sentence_length = nlp_segment.flags.max_sentence_len
        self.word2vec_path = nlp_segment.word_vec_path

        self.model_save_path = nlp_segment.model_save_path
        self.hidden_layer_num = 1
        self.max_grad_norm = nlp_segment.flags.max_grad_norm

        self.input_x = tf.placeholder(dtype=tf.int32,shape=[None,self.sentence_length],name="input_x")
        self.labels = tf.placeholder(dtype=tf.int32,shape=[None,self.sentence_length],name='label')
        self.lengths = tf.placeholder(dtype=tf.int32,shape=[None],name='lengths')
        self.dropout = tf.placeholder(dtype=tf.float32,name='dropout')

        with tf.name_scope("embedding_layer"):
            self.word_embedding = tf.Variable(data_loader.load_w2v(),name="word_embedding")
            inputs_embed = tf.nn.embedding_lookup(self.word_embedding,self.input_x)
            # ?????????,????(batch_size, n_steps, n_input)????????n_steps???,
            # ????????(batch_size, n_input), ????LSTM???????
            inputs_embed = tf.unstack(inputs_embed, self.sentence_length, 1)

        features = self.bi_lstm_layer(inputs_embed)

        with tf.variable_scope('Softmax') as scope:
            self.W = tf.get_variable(shape=[self.num_hidden *2,self.num_tags],
                                     initializer=tf.truncated_normal_initializer(stddev=0.01),
                                     name='weights',
                                     regularizer= l2_regularizer(0.001))
            self.b = tf.Variable(tf.zeros([self.num_tags],name='bias'))

            scores = tf.matmul(features,self.W) + self.b
            self.scores = tf.reshape(scores, [-1, self.sentence_length, self.num_tags])

        with tf.name_scope("crf"):
            log_likelihood,self.trans_form = crf.crf_log_likelihood(self.scores,self.labels,self.lengths)

        with tf.name_scope("output"):
            self.loss = tf.reduce_mean(-1.0 * log_likelihood)

        self.global_step = tf.Variable(0,name="global_step",trainable=False)
        self.optimizer = tf.train.AdamOptimizer(self.learning_rate)

        t_vars = tf.trainable_variables()
        grads,_ = tf.clip_by_global_norm(tf.gradients(self.loss,t_vars),self.max_grad_norm)
        self.trans_op = self.optimizer.apply_gradients(zip(grads,t_vars),self.global_step)
        self.saver = tf.train.Saver()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号