我正在做一个二进制分类任务,想尝试在huggingface BERT模型的最后一个隐藏层上添加lstm层,但是,我无法到达最后一个隐藏层。BERT和LSTM可以合并吗?
tokenizer = BertTokenizer.from_pretrained(model_path)
tain_inputs, train_labels, train_masks = data_prepare_BERT(
train_file, lab2ind, tokenizer, content_col, label_col,
max_seq_length)
validation_inputs, validation_labels, validation_masks = data_prepare_BERT(
dev_file, lab2ind, tokenizer, content_col, label_col,max_seq_length)
# Load BertForSequenceClassification, the pretrained BERT model with a single linear classification layer on top.
model = BertForSequenceClassification.from_pretrained(
model_path, num_labels=len(lab2ind))
这确实是可能的,但是您需要自己实现它。BertForSequenceClassification
类是BertModel
的包装器。它运行模型,获取与[CLS]
令牌对应的隐藏状态,并在其上应用分类器。
在您的示例中,您可以将类作为起点,并在BertModel和分类器之间添加LSTM层。BertModel在元组中返回用于分类的隐藏状态和池化状态。只取原始类中使用的另一个元组成员
虽然它在技术上是可能的,但与使用BertForSequenceClassification
相比,我希望获得任何性能增益。对Transformer层进行微调可以学习任何额外的LSTM层能够学习的内容。