bert 是单标签还是多标签 的分类_用BERT进行多标签分类

我想用BERT model对Tensorflow进行多标签分类。在

为此,我想修改来自BERT github repository的示例run_classifier.py,这是一个关于如何使用BERT进行简单分类的示例,使用pre-trained weights given by Google Research。(例如使用BERT-Base, Cased)

我有X不同的标签,它们的值为0或1,所以我想在原始的BERT模型中添加一个新的密集层,大小为X,并使用sigmoid_cross_entropy_with_logits激活函数。在

所以,对于理论部分,我认为我没问题。在

问题是,我不知道如何使用现有的BertModel类附加一个新的输出层,并用数据集重新训练这个新层。在

这是来自run_classifier.py的原始create_model()函数,我想我必须在这里进行修改。但我有点不知所措。在def create_model(bert_config, is_training, input_ids, input_mask, segment_ids,

labels, num_labels, use_one_hot_embeddings):

"""Creates a classification model."""

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)

output_layer = model.get_pooled_output()

hidden_size = output_layer.shape[-1].value

output_weights = tf.get_variable(

"output_weights", [num_labels, hidden_size],

initializer=tf.truncated_normal_initializer(stddev=0.02))

output_bias = tf.get_variable(

"output_bias", [num_labels], initializer=tf.zeros_initializer())

with tf.variable_scope("loss"):

if is_training:

# I.e., 0.1 dropout

output_layer = tf.nn.dropout(output_layer, keep_prob=0.9)

logits = tf.matmul(output_layer, output_weights, transpose_b=True)

logits = tf.nn.bias_add(logits, output_bias)

probabilities = tf.nn.softmax(logits, axis=-1)

log_probs = tf.nn.log_softmax(logits, axis=-1)

one_hot_labels = tf.one_hot(labels, depth=num_labels, dtype=tf.float32)

per_example_loss = -tf.reduce_sum(one_hot_labels * log_probs, axis=-1)

loss = tf.reduce_mean(per_example_loss)

return (loss, per_example_loss, logits, probabilities)

这里是相同的函数,我做了一些修改,但是哪里缺少一些东西(还有错误的东西?)在

^{pr2}$

我在代码中修改了其他一些我没有问题的地方:用于加载和分析自定义数据集的数据处理器

将labels变量的类型从数值改为数组

如果有人知道我的错误,我会很高兴地指出我应该怎么做。在

注意事项:我发现this article与我要做的非常一致,但是它使用PyTorch,我无法将其转换为Tensorflow。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值