Exemplo n.º 1
0
    def get_feed_dict(self, seqs, labels=None, lr=None, dropout=None):
        """

        :param seqs:
        :param labels:
        :param lr:
        :param dropout:
        :return: feed_dict
        """
        word_ids, seq_len_list = pad_sequences(seqs, pad_mark=0)

        feed_dict = {
            self.word_ids: word_ids,
            self.sequence_lengths: seq_len_list
        }
        if labels is not None:
            labels_, _ = pad_sequences(labels, pad_mark=0)
            feed_dict[self.labels] = labels_
        if lr is not None:
            feed_dict[self.lr_pl] = lr
        if dropout is not None:
            feed_dict[self.dropout_pl] = dropout

        return feed_dict, seq_len_list
Exemplo n.º 2
0
def predict_one_batch(seqs, stub, dropout=1.0):
    request = predict_pb2.PredictRequest()
    # request.model_spec.name = 'mnist'  # for test
    request.model_spec.name = 'bi_lstm_crf'
    request.model_spec.signature_name = \
        tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY

    word_ids, seq_len_list = pad_sequences(seqs, pad_mark=0)
    request.inputs['word_ids'].CopyFrom(
        tf.contrib.util.make_tensor_proto(word_ids, shape=[1,
                                                           seq_len_list[0]]))
    request.inputs['sequence_lengths'].CopyFrom(
        tf.contrib.util.make_tensor_proto(seq_len_list, shape=[1]))
    request.inputs['dropout'].CopyFrom(
        tf.contrib.util.make_tensor_proto(dropout, shape=[]))

    # result_future = stub.Predict.future(request, 2.0)
    # e = result_future.exception()
    # if e:
    #     print e
    #     return
    # result = result_future.result()
    result = stub.Predict(request, 2.0)

    logits_proto = result.outputs['logits']
    # logits_shape = [logits_proto.tensor_shape.dim[i].size
    #                 for i in range(len(logits_proto.tensor_shape.dim))]
    # logits = numpy.array(logits_proto.float_val).reshape(logits_shape)
    logits = tf.contrib.util.make_ndarray(logits_proto)

    transition_params_proto = result.outputs['transition_params']
    # transition_params_shape = [transition_params_proto.tensor_shape.dim[i].size
    #                            for i in range(len(transition_params_proto.tensor_shape.dim))]
    # transition_params = numpy.array(transition_params_proto.float_val).reshape(transition_params_shape)
    transition_params = tf.contrib.util.make_ndarray(transition_params_proto)

    label_list = []
    for logit, seq_len in zip(logits, seq_len_list):
        viterbi, viterbi_score = viterbi_decode(logit[:seq_len],
                                                transition_params)
        label_list.append(viterbi)
    return label_list, seq_len_list
Exemplo n.º 3
0
 def get_feed_dict(self, seqs, labels):
     seqs, seqs_len, max_len = pad_sequences(seqs, pad_mark='。')
     labels, _, _ = pad_sequences(labels, pad_mark='O')
     return seqs, seqs_len, labels, max_len
Exemplo n.º 4
0
 def get_feed_dict_seq(self, seqs):
     seqs, seqs_len, max_len = pad_sequences(seqs, pad_mark='。')
     return seqs, seqs_len, max_len