我正在向 BERT 模型(Hugging Face 库)输入句子。这些句子使用预训练的分词器进行分词。我知道您可以使用 decode 函数从标记返回到字符串。
string = tokenizer.decode(...)
然而,重建并不完美。如果您使用不加大小写的预训练模型,则大写字母会丢失。此外,如果分词器将一个单词分成 2 个词,则第二个词将以“##”开头。例如,单词“coronavirus”被分成 2 个标记:“corona”和“##virus”。
所以我的问题是:有没有办法获取创建每个令牌的子字符串的索引?例如,以“东京报告新冠病毒病例近370例,创下单日新纪录”为例。第 9 个令牌是与“病毒”对应的令牌。
['[CLS]', 'tokyo', 'to', 'report', 'nearly', '370', 'new', 'corona', '##virus', 'cases', ',', 'setting', 'new', 'single', '-', 'day', 'record', '[SEP]']
我想要告诉我标记“##virus”来自原始字符串中的“病毒”子字符串的东西,它位于原始字符串的索引 37 和 41 之间。
sentence = "Tokyo to report nearly 370 new coronavirus cases, setting new single-day record"
print(sentence[37:42]) # --> outputs 'virus