Python 如何阻止BERT将特定单词分解成单词块

Python 如何阻止BERT将特定单词分解成单词块,python,text,nlp,tokenize,bert-language-model,Python,Text,Nlp,Tokenize,Bert Language Model,我使用预先训练好的BERT模型将文本标记为有意义的标记。然而,文本中有许多特定的单词,我不想让BERT模型将它们分解成单词片段。有什么解决办法吗? 例如: tokenizer = BertTokenizer('bert-base-uncased-vocab.txt') tokens = tokenizer.tokenize("metastasis") 创建如下标记: ['meta', '##sta', '##sis'] ['metastasis'] 但是,我想把整句话作为一个标记,如下所示

我使用预先训练好的BERT模型将文本标记为有意义的标记。然而,文本中有许多特定的单词,我不想让BERT模型将它们分解成单词片段。有什么解决办法吗? 例如:

tokenizer = BertTokenizer('bert-base-uncased-vocab.txt')
tokens = tokenizer.tokenize("metastasis")
创建如下标记:

['meta', '##sta', '##sis']
['metastasis']
但是,我想把整句话作为一个标记,如下所示:

['meta', '##sta', '##sis']
['metastasis']
根据讨论,使用我自己的包含特定单词的附加词汇词典的一种方法是使用特定单词修改vocab.txt文件的前1000行([未使用的]行)。例如,我在vocab.txt中将“[unused1]”替换为“transference”,在使用修改后的vocab.txt进行标记化后,我得到以下输出:

tokens = tokenizer.tokenize("metastasis")
Output: ['metastasis']

您可以自由地向现有的预训练令牌化器添加新令牌,但随后需要使用改进的令牌化器(额外令牌)训练您的模型

例如:

如果令牌已经像“whatever”一样存在,则不会添加它

输出:


我想如果我使用这个解决方案

tokenizer.add_tokens(['whatever', 'underdog'])

vocab_大小已更改,这意味着我不能使用变压器的pretrain模型?因为嵌入大小不正确。

可能是
“”。join([x代表令牌中的x])。replace(“##,”)
可以吗?谢谢你的回答,但我不能这样做,因为我想用这些单词来代替其他单词(非特定单词)。例如提取:['extract','##ing']您通常不需要这样做,子单词标记化在解决OOV单词时非常有用,有助于减少词汇表大小。为什么需要添加异常?如果我错了,请修复我,但在我的示例中,“转移”的标记是“meta”和“sta”以及“sis”。然而,我想把“转移”作为一个完整的词,因为它和“元”没有任何关系。你和讨论的链接断了。