我正在做一个二进制分类任务,我想尝试在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))
发布于 2021-01-18 20:43:58
的确,这是可能的,但您需要自己实现它。BertForSequenceClassification
类是BertModel
的包装器。它运行模型,获取与[CLS]
标记相对应的隐藏状态,并在此基础上应用分类器。
在您的示例中,您可以将类作为起点,并在BertModel和分类器之间添加一个LSTM层。BertModel在元组中返回用于分类的隐藏状态和池化状态。只需获取原始类中使用的其他元组成员即可。
虽然这在技术上是可行的,但与使用BertForSequenceClassification
相比,我希望获得任何性能上的提升。Transformer层的微调可以学习额外的LSTM层能够学习到的任何东西。
https://stackoverflow.com/questions/65763465
复制相似问题