首页 > 解决方案 > 变压器 AutoTokenizer.tokenize 引入额外的字符

问题描述

我正在使用 HuggingFace 转换器 AutoTokenizer 来标记小段文本。但是,这种标记化在单词中间不正确地拆分并将 # 字符引入标记。我尝试了几种不同的模型,结果相同。

下面是一段文本和从中创建的标记的示例。

CTO at TLR Communications Pty Ltd
['[CLS]', 'CT', '##O', 'at', 'T', '##LR', 'Communications', 'P', '##ty', 'Ltd', '[SEP]']

这是我用来生成令牌的代码

tokenizer = AutoTokenizer.from_pretrained("tokenizer_bert.json")
tokens = tokenizer.tokenize(tokenizer.decode(tokenizer.encode(sequence)))

标签: pythonhuggingface-transformershuggingface-tokenizers

解决方案


这不是一个错误,而是一个特性。BERT 和其他转换器使用 WordPiece 标记化算法将字符串标记为:(1)已知单词;或 (2) 标记器词汇表中未知单词的“单词片段”。

在您的示例中,单词“CTO”、“TLR”和“Pty”不在分词器词汇表中,因此 WordPiece 将它们拆分为子词。例如,第一个子词是“CT”,另一部分是“##O”,其中“##”表示子词连接到前一个子词。

这是一个很棒的功能,可以表示任何字符串。


推荐阅读