我通过 bert 的 fine-tune 实现文本分类:
module = hub.Module(name="bert_chinese_L-12_H-768_A-12")
inputs, outputs, program = self.module.context(
trainable=True, max_seq_len=max_seq_len)
vocab_path = self.module.get_vocab_path()
# 构建迁移学习任务的网络
# "pooled_output" for classification tasks on an entire sentence.
# "sequence_output" for token-level output.
pooled_output = outputs["pooled_output"]
# 使用 PaddleHub API 定义一个 finetune 的任务
multi_label_cls_task = hub.MultiLabelClassifierTask(
feature=pooled_output,
num_classes=num_class,
config=config
)
但是现在我已经通过 bert service 的接口直接拿到了 embedding 的结果,所以想要用 embedding 的结果直接来代替 hub 加载模型得到 outputs["pooled_output"] 的过程:
module = hub.Module(name="bert_chinese_L-12_H-768_A-12")
inputs, outputs, program = self.module.context(trainable=True, max_seq_len=max_seq_len)
原始模型里面是直接用的 output["pooled_output"],这个打印出来是 variable 的形式,
请问在分类模型里的参数 feature=pooled_output, 要怎么替换成 embedding 的向量呢?
multi_label_cls_task = hub.MultiLabelClassifierTask(
feature=pooled_output,
num_classes=num_class,
config=config
1条答案
按热度按时间rqqzpn5f1#
你想通过BERT服务直接获取样本的句向量,然后自己定义下游的网络进行分类吗?这样做的话就无法对原有模型进行微调,而且你只需要训练一个分类网络,将嵌入尺寸Map到标签数量。