UKPLab / emnlp2017-bilstm-cnn-crf

BiLSTM-CNN-CRF architecture for sequence tagging
Apache License 2.0
825 stars 263 forks source link

Errors occurs when run RunModel.py #10

Closed yingdongucas closed 6 years ago

yingdongucas commented 6 years ago

I have installed dependencies in the requirements.txt, but error occurs when using the command "python RunModel.py models/EN_NER.h5 input.txt".

When using tensorflow as backend, the error is as follows: Traceback (most recent call last): File "RunModel.py", line 22, in lstmModel.loadModel(modelPath) File "/home/pinkee/Desktop/vulnerability/emnlp2017-bilstm-cnn-crf/neuralnets/BiLSTM.py", line 574, in loadModel model = keras.models.load_model(modelPath, custom_objects=create_custom_objects()) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/models.py", line 176, in load_model model.model._make_train_function() File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/engine/training.py", line 760, in _make_train_function self.total_loss) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/optimizers.py", line 562, in get_updates grads = self.get_gradients(loss, params) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/optimizers.py", line 85, in get_gradients grads = [clip_norm(g, self.clipnorm, norm) for g in grads] File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/optimizers.py", line 14, in clip_norm g = K.switch(n >= c, g c / n, g) TypeError: unsupported operand type(s) for : 'IndexedSlices' and 'int'

When using theano as backend, the error is as follows: Traceback (most recent call last): File "RunModel.py", line 34, in lstmModel.loadModel(modelPath) File "/home/pinkee/Desktop/vulnerability/emnlp2017-bilstm-cnn-crf/neuralnets/BiLSTM.py", line 574, in loadModel model = keras.models.load_model(modelPath, custom_objects=create_custom_objects()) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/models.py", line 142, in load_model model = model_from_config(model_config, custom_objects=custom_objects) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/models.py", line 193, in model_from_config return layer_from_config(config, custom_objects=custom_objects) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/utils/layer_utils.py", line 42, in layer_from_config return layer_class.from_config(config['config']) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/models.py", line 1091, in from_config model.add(layer) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/models.py", line 332, in add output_tensor = layer(self.outputs[0]) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 572, in call self.add_inbound_node(inbound_layers, node_indices, tensor_indices) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 635, in add_inbound_node Node.create_node(self, inbound_layers, node_indices, tensor_indices) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 166, in create_node output_tensors = to_list(outbound_layer.call(input_tensors[0], mask=input_masks[0])) File "/home/pinkee/Desktop/vulnerability/emnlp2017-bilstm-cnn-crf/neuralnets/keraslayers/ChainCRF.py", line 360, in call y_pred = viterbi_decode(x, self.U, self.b_start, self.b_end, mask) File "/home/pinkee/Desktop/vulnerability/emnlp2017-bilstm-cnn-crf/neuralnets/keraslayers/ChainCRF.py", line 163, in viterbi_decode y = _backward(gamma, mask) File "/home/pinkee/Desktop/vulnerability/emnlp2017-bilstm-cnn-crf/neuralnets/keraslayers/ChainCRF.py", line 220, in _backward go_backwards=True) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/backend/theano_backend.py", line 1136, in rnn go_backwards=go_backwards) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/theano/scan_module/scan.py", line 773, in scan condition, outputs, updates = scan_utils.get_updates_and_outputs(fn(*args)) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/keras/backend/theano_backend.py", line 1124, in _step output, new_states = step_function(input, states) File "/home/pinkee/Desktop/vulnerability/emnlp2017-bilstm-cnn-crf/neuralnets/keraslayers/ChainCRF.py", line 213, in _backward_step y_t = batch_gather(gamma_t, y_tm1) File "/home/pinkee/Desktop/vulnerability/emnlp2017-bilstm-cnn-crf/neuralnets/keraslayers/ChainCRF.py", line 39, in batch_gather indices = tf.pack([tf.range(batch_size), indices], axis=1) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py", line 1086, in range limit = ops.convert_to_tensor(limit, dtype=dtype, name="limit") File "/home/pinkee/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 669, in convert_to_tensor ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py", line 176, in _constant_tensor_conversion_function return constant(v, dtype=dtype, name=name) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py", line 165, in constant tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape, verify_shape=verify_shape)) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/tensor_util.py", line 441, in make_tensor_proto tensor_proto.string_val.extend([compat.as_bytes(x) for x in proto_values]) File "/home/pinkee/anaconda2/lib/python2.7/site-packages/tensorflow/python/util/compat.py", line 65, in as_bytes (bytes_or_text,)) TypeError: Expected binary or unicode string, got Subtensor{int64}.0

How to solve the errors? Thank you!

nreimers commented 6 years ago

Hi, Tensorflow sadly doesn't work with the character-based word embeddings (which are used for the pre-trained model).

Theano should work, but I think with the most recent version of theano there might be a problem? Which version of theano do you have? I developed the code for theano==0.9.0

Further I can recommend to try the docker version of this script: https://github.com/UKPLab/emnlp2017-bilstm-cnn-crf/tree/master/docker

This will install all needed dependencies and you can run the code within the docker container. Issues with different versions of the deep learning frameworks will always be an issue, as these frameworks develop so rapidly. So often after 1/2 - 1 year, old code is no longer running. Here is docker a great solution to ensure that code is also runnable after a longer period of time, as you can exactly control your environment.

yingdongucas commented 6 years ago

@nreimers Thank you very much for your solution, it perfectly works. I am using theano 0.9.0 now.

nreimers commented 6 years ago

Great to hear, that it works now.

Sadly it is quite hard to keep code up-to-date with the most recent versions of the different deep learning frameworks, so sadly I don't know why it breaks with the latest version of theano.