使用BERT进行序列标记

问题描述 投票:0回答:1

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

如果我使用自训练或其他预训练的词嵌入向量,这是直接的。

但如果我使用Huggingface变换器 BertTokenizer.from_pretrainedBertModel.from_pretrained'[CLS]''[SEP]' token分别添加到句子的开头和结尾。所以模型的输出就变成了一个比labeltarget序列长两个元素的序列。

我不确定的是。

  1. 这两个标签是否需要 BertModel 来 "正确 "地嵌入一个句子的每个token?
  2. 如果需要的话,我是否可以在BERT嵌入层之后,LSTM输入之前将它们取出来,这样在输出中的长度就会正确?
pytorch lstm huggingface-transformers torchtext
1个回答
2
投票
  1. 是的。BertModel 需要它们,因为如果不添加这些特殊的符号,输出的表示就会不同。然而,我的经验表明,如果你微调了 BertModel 在没有 [CLS][SEP] 标记,那么您可能不会看到显著的差异。如果您使用 BertModel 以提取 固定的 字功能,那么你最好添加那些特殊符号。

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

我建议你看看一些使用BERT的序列标签或标记的例子,对你的建模决策充满信心。你可以找到使用Huggingface变换器的NER标记例子 此处.

© www.soinside.com 2019 - 2024. All rights reserved.