用BERT进行序列标记

时间:2020-05-10 18:46:50

标签: pytorch lstm huggingface-transformers torchtext

我正在使用由嵌入层和LSTM组成的模型以pytorch + torchtext进行序列标记。我已经把句子标记了。

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

但是,如果我使用Huggingface转换器BertTokenizer.from_pretrainedBertModel.from_pretrained,则分别在句子的开头和结尾添加一个'[CLS]''[SEP]'标记。因此,模型的输出将变成一个比标签/目标序列长两个元素的序列。

我不确定的是:

  1. BertModel是否需要这两个标签才能“正确”嵌入句子的每个标记?
  2. 如果需要它们,我可以在BERT嵌入层之后,在LSTM输入之前将它们取出,以使输出中的长度正确吗?

1 个答案:

答案 0 :(得分:1)

  1. 是的,BertModel需要它们,因为如果不添加这些特殊符号,输出表示将有所不同。但是,根据我的经验,如果您在标签任务上微调BertModel而未添加[CLS][SEP]标记,那么您可能看不到明显的不同。如果您使用BertModel提取固定单词特征,则最好添加这些特殊符号。

  2. 是的,您可以将那些特殊符号嵌入其中。实际上,这是序列标记或标记任务的一般想法。

我建议看一些使用BERT进行序列标记或标记的示例,以使您对建模决策充满信心。您可以使用Huggingface转换器here找到NER标记示例。