【问题标题】:Tokenizer didn't add BOS token when encoding the sentenceTokenizer 在编码句子时没有添加 BOS token
【发布时间】:2023-01-26 15:13:02
【问题描述】:

我想用 BOS 和 EOS 令牌对句子进行编码。当我加载一个预训练的标记器时,没有 BOS 标记,所以我将 BOS 标记添加到标记器中。之后,我对句子进行了编码。

model_checkpoint = "facebook/wmt19-en-de"

tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
tokenizer.add_special_tokens({'bos_token' : '<s>'})

tokenizer.encode("Resumption of the session", add_special_tokens = True)

result: [2642, 4584, 636, 9, 6, 9485, 2] # 2642 is not BOS token, and 2 is EOS token.

然而,结果显示 BOS 令牌没有出现在编码的句子中。编码时如何包含 BOS 令牌?

【问题讨论】:

    标签: huggingface-tokenizers


    【解决方案1】:

    即使您已将 bos_token 指定为您选择的字符串,您仍然需要将 tokenizeradd_bos_token 属性设置为 True 以使分词器在其输出的前面粘贴 bos_token

    你可以在实例化AutoTokenizer时这样做:

    tokenizer = AutoTokenizer.from_pretrained(
        model_checkpoint,
        bos_token = '<s>',
        add_bos_token = True
    )
    
    tok_enc = tokenizer.encode("Resumption of the session")
    print(tok_enc)
    print(tokenizer.decode(tok_enc[0]))
    

    输出:

    [50257, 4965, 24098, 286, 262, 6246]`
    <s>
    

    ...或者您可以使用 add_special_tokens 方法并在实例化后设置 add_bos_token 属性:

    tokenizer = AutoTokenizer.from_pretrained(
        model_checkpoint
    )
    
    tokenizer.add_special_tokens({'bos_token' : '<s>'})
    tokenizer.add_bos_token = True
    
    tok_enc = tokenizer.encode("Resumption of the session")
    print(tok_enc)
    print(tokenizer.decode(tok_enc[0]))
    

    输出:

    [50257, 4965, 24098, 286, 262, 6246]
    <s>
    

    请注意,您选择的分词器可能有一个默认的bos_token,这意味着您可以简单地添加add_bos_token = True而不指定bos_token = '&lt;s&gt;'(当然除非您想自定义bos_token)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 2017-08-03
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多