【问题标题】:transformers AutoTokenizer.tokenize introducing extra characters变压器 AutoTokenizer.tokenize 引入额外的字符
【发布时间】:2021-12-23 13:05:16
【问题描述】:

我正在使用 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)))

【问题讨论】:

  • 变形金刚使用subword tokenization。您可以在线阅读。

标签: python huggingface-transformers huggingface-tokenizers


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-04-18
    • 2021-08-03
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    相关资源
    最近更新 更多