如何阻止 BERT 将特定的单词拆成单词片断?

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

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

tokenizer = BertTokenizer('bert-base-uncased-vocab.txt')
tokens = tokenizer.tokenize("metastasis")

创建这样的标记

['meta', '##sta', '##sis']

但是,我想把整个单词保留为一个标记,像这样。

['metastasis']
python text nlp tokenize bert
2个回答
1
投票

你可以在现有的预训练标记器中添加新的标记,但是你需要使用改进的标记器(额外的标记)来训练你的模型。

例子:如果已经存在 "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

0
投票

根据讨论结果 此处有一种方法可以使用我自己的附加词汇词典,其中包含了特定的单词,那就是用特定的单词修改vocab.txt文件的前1000行([未使用]行)。例如,我将vocab.txt文件中的'[unused1]'替换为'metastasis',然后用修改后的vocab.txt进行标记化,得到如下输出。

tokens = tokenizer.tokenize("metastasis")
Output: ['metastasis']
© www.soinside.com 2019 - 2024. All rights reserved.