def create_crf_model(bert_config, is_training, input_ids, input_mask, segment_ids, labels, num_labels, use_one_hot_embeddings):
    """
        create model
        :param bert_config: bert config
        :param is_training:
        :param input_ids: idx of input data
        :param input_mask:
        :param segment_ids:
        :param labels: idx of labels
        :param num_labels: type of labels
        :param use_one_hot_embeddings:
        :return:
        """
    # representation
    model = modeling.BertModel(
        config=bert_config,
        is_training=is_training,
        input_ids=input_ids,
        input_mask=input_mask,
        token_type_ids=segment_ids,
        use_one_hot_embeddings=use_one_hot_embeddings
    )

    embedding = model.get_sequence_output()
    max_seq_length = embedding.shape[1].value
    used = tf.sign(tf.abs(input_ids))
    lengths = tf.reduce_sum(used, reduction_indices=1)

    crf = CRF(embedded_chars=embedding,droupout_rate=0.5,initializers=initializers, num_labels=num_labels,
                    seq_length=max_seq_length, labels=labels, lengths=lengths,
                    is_training=is_training)
    (total_loss, logits, trans, pred_ids) = crf.add_crf_layer()

    return (total_loss, logits, trans, pred_ids)
예제 #2
0
def create_model(bert_config, is_training, input_ids, input_mask, segment_ids,
                 labels, num_labels, use_one_hot_embeddings):
    """
    创建X模型
    :param bert_config: bert 配置
    :param is_training:
    :param input_ids: 数据的idx 表示
    :param input_mask:
    :param segment_ids:
    :param labels: 标签的idx 表示
    :param num_labels: 类别数量
    :param use_one_hot_embeddings:
    :return:
    """
    # 使用数据加载BertModel,获取对应的字embedding
    model = modeling.BertModel(config=bert_config,
                               is_training=is_training,
                               input_ids=input_ids,
                               input_mask=input_mask,
                               token_type_ids=segment_ids,
                               use_one_hot_embeddings=use_one_hot_embeddings)
    # 获取对应的embedding 输入数据[batch_size, seq_length, embedding_size]
    embedding = model.get_sequence_output()
    max_seq_length = embedding.shape[1].value

    used = tf.sign(tf.abs(input_ids))
    lengths = tf.reduce_sum(
        used, reduction_indices=1)  # [batch_size] 大小的向量,包含了当前batch中的序列长度

    blstm_crf = CRF(embedded_chars=embedding,
                    hidden_unit=FLAGS.lstm_size,
                    cell_type=FLAGS.cell,
                    num_layers=FLAGS.num_layers,
                    droupout_rate=FLAGS.droupout_rate,
                    initializers=initializers,
                    num_labels=num_labels,
                    seq_length=max_seq_length,
                    labels=labels,
                    lengths=lengths,
                    is_training=is_training)
    rst = blstm_crf.add_crf_layer()
    return rst
예제 #3
0
def create_model(bert_config, is_training, input_ids, input_mask, segment_ids,
                 labels, num_labels, use_one_hot_embeddings):
    """
    create model
    :param bert_config: bert cofig
    :param is_training:
    :param input_ids: idx of data
    :param input_mask:
    :param segment_ids:
    :param labels: idx of label
    :param num_labels: number of categories
    :param use_one_hot_embeddings:
    :return:
    """
    # load BertModel, and acuqire the corresponding embedding
    model = modeling.BertModel(config=bert_config,
                               is_training=is_training,
                               input_ids=input_ids,
                               input_mask=input_mask,
                               token_type_ids=segment_ids,
                               use_one_hot_embeddings=use_one_hot_embeddings)
    # acuqire the corresponding embedding
    embedding = model.get_sequence_output()
    max_seq_length = embedding.shape[1].value

    used = tf.sign(tf.abs(input_ids))
    lengths = tf.reduce_sum(used, reduction_indices=1)  # [batch_size]

    crf = CRF(embedded_chars=embedding,
              droupout_rate=FLAGS.droupout_rate,
              initializers=initializers,
              num_labels=num_labels,
              seq_length=max_seq_length,
              labels=labels,
              lengths=lengths,
              is_training=is_training)
    rst = crf.add_crf_layer()
    return rst