keras实现Bi-LSTM+CRF

来源:互联网 发布:外贸邮箱软件 编辑:程序博客网 时间:2024/04/29 04:06

keras官方版目前还没有实现CRF层,但是网上有大牛实现的扩展包戳这里,取用之。

安装方法1

git clone https://www.github.com/farizrahman4u/keras-contrib.gitcd keras-contribpython setup.py install

安装方法2

pip install git+https://www.github.com/farizrahman4u/keras-contrib.git

我自己在使用方法1的时候一直出错,google了好久也没解决,故改用方法2。
安装完之后就可以直接使用了,上面给出的链接里有example,很容易上手。

代码
下面这部分代码是之前做实验搭baseline写的。

input_layer = Input(shape = (max_len, ))embedding_layer = Embedding(len(vocabulary) + 1, output_dim = embedding_dim, mask_zero = True)bi_lstm_layer = Bidirectional(LSTM(64, return_sequences = True))bi_lstm_drop_layer = Dropout(0.5)dense_layer = TimeDistributed(Dense(len(tag_list)))crf_layer = CRF(len(tag_list), sparse_target = True)input = input_layerembedding = embedding_layer(input)bi_lstm = bi_lstm_layer(embedding)bi_lstm_drop = bi_lstm_drop_layer(bi_lstm)dense = dense_layer(bi_lstm_drop)crf = crf_layer(dense)model = Model(input = [input], output = [crf])model.summary()optmr = optimizers.Adam(lr = 0.001, beta_1 = 0.5)model.compile(optimizer = optmr, loss = crf_layer.loss_function, metrics = [crf_layer.accuracy])check_pointer = ModelCheckpoint(filepath = 'best_model.hdf5', verbose = 1,  save_best_only = True)hist = model.fit(train_x, train_y, batch_size = 32, epochs = 20, verbose = 2, validation_data = [val_x, val_y], callbacks = [check_pointer])model.load_weights('best_model.hdf5')test_y_pred = model.predict(test_x).argmax(-1)test_y_true = test_y[:, :, 0]

注意
keras-contrib在linux python2.7 theano后端的情况下不work!
虽然不知道原因,总之后端改成tensorflow就没有任何问题。