BERT和GPT-2编码如何处理<|startoftext|>、<s>等token

数据挖掘 nlp 火炬 伯特 openai-gpt
2022-03-07 10:36:23

据我了解,GPT-2 和 BERT 使用的是字节对编码,这是一种子字编码。由于使用了很多开始/结束标记,例如 <|startoftext|> 和 ,因此我认为编码器应该将标记编码为一个整体。

但是,当我使用 pytorchBertTokenizer时,编码器似乎也将令牌分成几块。这是正确的行为吗?

from pytorch_pretrained_bert import BertTokenizer, cached_path
tokenizer = BertTokenizer.from_pretrained('bert-base-cased', do_lower_case=False) 
tokenizer.tokenize('<s> This is a sentence <|endoftext|>')

结果是:

['<',
 's',
 '>',
 'This',
 'is',
 'a',
 'sentence',
 '<',
 '|',
 'end',
 '##oft',
 '##ex',
 '##t',
 '|',
 '>']
1个回答

BERT 没有使用这种特殊的标记进行训练,因此标记器不会期待它们,因此它将它们拆分为任何其他普通文本,如果你保留它们,它们可能会损害获得的表示。您应该从输入文本中删除这些特殊标记。

在 GPT-2 的情况下,OpenAI 只用 训练它<|endoftext|>,但它必须在标记化之后添加。有些人在标记化之前错误地添加了它,导致出现问题<|startoftext|>特定于库gpt-2-simple