标签:实现 mapping ati 基于 否则 直接 权重 str atm
bert-as-service: Mapping a variable-length sentence to a fixed-length vector using BERT model
默认情况下bert-as-service只提供固定长度的特征向量,如果想要直接获取分类预测结果呢?
bert提供了的run_classifier.py
以训练分类模型,同时bert提供了离线评估的方法。
bert-as-service的强大可以参考:Serving Google BERT in Production using Tensorflow and ZeroMQ
思路:https://github.com/hanxiao/bert-as-service/issues/213
bert-as-service 默认情况下,不会加载分类层
在graph.py#L79中添加
if args.pooling_strategy == PoolingStrategy.CLASSIFICATION:
hidden_size = 768
output_weights = tf.get_variable(
"output_weights", [args.num_labels, hidden_size],
)
output_bias = tf.get_variable(
"output_bias", [args.num_labels])
tvars = tf.trainable_variables()
注意:在加载权重和bias的时候不要定义初始化方法,否则会从初始化方法进行加载,而不是微调模型。
elif args.pooling_strategy == PoolingStrategy.CLASSIFICATION:
# pooled = tf.squeeze(encoder_layer[:, 0:1, :], axis=1)
logits = tf.matmul(pooled, output_weights, transpose_b=True)
logits = tf.nn.bias_add(logits, output_bias)
pooled = tf.nn.softmax(logits, axis=-1)
标签:实现 mapping ati 基于 否则 直接 权重 str atm
原文地址:https://www.cnblogs.com/zyl007/p/12995744.html