Pytorch 基于BERT的序列标记

Pytorch 基于BERT的序列标记,pytorch,lstm,huggingface-transformers,torchtext,Pytorch,Lstm,Huggingface Transformers,Torchtext,我在pytorch+torchtext中使用一个由嵌入层和LSTM组成的模型来执行序列标记。我已经标记了这些句子 如果我使用自训练或其他预训练的单词嵌入向量,这很简单 但是如果我使用Huggingface transformersBertTokenizer.from_pretrained和BertModel.from_pretrained有一个'[CLS]'和'[SEP]'标记分别添加到句子的开头和结尾。因此,模型的输出成为一个比标签/目标序列长两个元素的序列 我不确定的是: BertModel

我在pytorch+torchtext中使用一个由嵌入层和LSTM组成的模型来执行序列标记。我已经标记了这些句子

如果我使用自训练或其他预训练的单词嵌入向量,这很简单

但是如果我使用Huggingface transformers
BertTokenizer.from_pretrained
BertModel.from_pretrained
有一个
'[CLS]'
'[SEP]'
标记分别添加到句子的开头和结尾。因此,模型的输出成为一个比标签/目标序列长两个元素的序列

我不确定的是:

  • BertModel
    是否需要这两个标记来“正确”嵌入句子的每个标记
  • 如果需要,我可以在BERT嵌入层之后、输入到LSTM之前取出它们,以便在输出中长度正确吗
  • 是的,
    BertModel
    需要它们,因为如果不添加这些特殊符号,输出表示形式将不同。然而,根据我的经验,如果您在没有添加
    [CLS]
    [SEP]
    标记的情况下对标签任务进行微调,那么您可能看不到显著的差异。如果您使用
    BertModel
    提取固定的单词特征,那么您最好添加这些特殊符号

  • 是的,你可以去掉那些特殊符号的嵌入。事实上,这是序列标记或标记任务的一般想法

  • 我建议看一看使用BERT的一些序列标记或标记示例,以对您的建模决策充满信心。您可以找到使用Huggingface transformers的示例