我正在使用一个由嵌入层和LSTM组成的模型,在pytorch + torchtext中执行序列标记。我已经对句子进行了标记化。
如果我使用自训练或其他预训练的词嵌入向量,这是直接的。
但如果我使用Huggingface变换器 BertTokenizer.from_pretrained
和 BertModel.from_pretrained
有 '[CLS]'
和 '[SEP]'
token分别添加到句子的开头和结尾。所以模型的输出就变成了一个比labeltarget序列长两个元素的序列。
我不确定的是。
BertModel
来 "正确 "地嵌入一个句子的每个token?是的。BertModel
需要它们,因为如果不添加这些特殊的符号,输出的表示就会不同。然而,我的经验表明,如果你微调了 BertModel
在没有 [CLS]
和 [SEP]
标记,那么您可能不会看到显著的差异。如果您使用 BertModel
以提取 固定的 字功能,那么你最好添加那些特殊符号。
是的,你可以取出那些特殊符号的嵌入。事实上,这也是序列标签或标记任务的一般思路。
我建议你看看一些使用BERT的序列标签或标记的例子,对你的建模决策充满信心。你可以找到使用Huggingface变换器的NER标记例子 此处.