首页 > 解决方案 > 使用 BERT 进行序列标记

问题描述

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

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

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

我不确定的是:

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

标签: pytorchlstmhuggingface-transformerstorchtext

解决方案


  1. 是的,BertModel需要它们,因为没有添加这些特殊符号,输出表示会有所不同。BertModel但是,我的经验表明,如果您在没有添加标记的情况下对标记任务进行微调[CLS][SEP]那么您可能看不到显着差异。如果你BertModel用来提取固定词的特征,那么你最好加上那些特殊的符号。

  2. 是的,您可以取出那些特殊符号的嵌入。事实上,这是序列标注或标注任务的一般思路。

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


推荐阅读