我正在使用一个预先训练好的 BERT 模型来将文本标记为有意义的标记。然而,文本中有许多特定的单词,我不想让BERT模型将它们分解成单词片段。有什么解决方法吗?比如。
tokenizer = BertTokenizer('bert-base-uncased-vocab.txt')
tokens = tokenizer.tokenize("metastasis")
创建这样的标记
['meta', '##sta', '##sis']
但是,我想把整个单词保留为一个标记,像这样。
['metastasis']
你可以在现有的预训练标记器中添加新的标记,但是你需要使用改进的标记器(额外的标记)来训练你的模型。
例子:如果已经存在 "whatever "这样的代币,那么你需要使用改进的代币器(额外的代币)来训练你的模型。
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
v = tokenizer.get_vocab()
print(len(v))
tokenizer.add_tokens(['whatever', 'underdog'])
v = tokenizer.get_vocab()
print(len(v))
如果已经存在 "whatever "这样的标记,将不会被添加。
输出。
30522
30523
根据讨论结果 此处有一种方法可以使用我自己的附加词汇词典,其中包含了特定的单词,那就是用特定的单词修改vocab.txt文件的前1000行([未使用]行)。例如,我将vocab.txt文件中的'[unused1]'替换为'metastasis',然后用修改后的vocab.txt进行标记化,得到如下输出。
tokens = tokenizer.tokenize("metastasis")
Output: ['metastasis']