美文网首页
1. tokenizer

1. tokenizer

作者: yoyo9999 | 来源:发表于2022-04-28 22:15 被阅读0次
    from transformers import AutoTokenizer
    tokenizer = AutoTokenizer.from_pretrained('microsoft/deberta-base')
    t1 = ' Today we released the new model: multilingual generative pre-trained transformer.'
    t2 = 'The checkpoints are available on Huggingface model page.'
    encoded_texts = tokenizer(
            t1,
            t2,
            truncation='only_second',
            max_length=20,
            padding="max_length",
            return_offsets_mapping=True,
            return_token_type_ids=True
            )
    
    print(encoded_texts)
    ====================================
    {
    'input_ids': [1, 2477, 52, 703, 5, 92, 1421, 35, 7268, 41586, 20181, 3693, 1198, 12, 23830, 40878, 4, 2, 133, 2], 
    'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
    'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
    'offset_mapping': [(0, 0), (0, 6), (6, 9), (9, 18), (18, 22), (22, 26), (26, 32), (32, 33), (33, 38), (38, 46), (46, 52), (52, 57), (57, 61), (61, 62), (62, 69), (69, 81), (81, 82), (0, 0), (0, 3), (0, 0)]
    }
    
    • input_ids: 对应词汇表id

    • token_type_ids: token 对应的句子id,值为0或1(0表示对应的token属于第一句,1表示属于第二句)。形状为(batch_size, sequence_length)。

    • 'attention_mask': 可选参数。各元素的值为 0 或 1 ,设置来避免在 padding 的 token 上计算 attention (1不进行masked,0则masked)。形状为(batch_size, sequence_length)。

    • 'offset_mapping': 对应token位置和原始位置的map,即当前token在原文本中的start,end位置。注意, [start, end)左闭右开 。如例子中,'Today'->start:0 end:6。
      具体来看,我们将 encoded_texts['input_ids']转为token,以及encoded_texts['offset_mapping']如下,(忽略Ġ)。
      encoded_texts['offset_mapping']Today对应中原始位置索引为从0到6。其它依次为下一个token的原始位置索引。

    converted2txt = tokenizer.convert_ids_to_tokens(encoded_texts['input_ids'])
    print(converted2txt)
    =================================
    ['[CLS]', 'ĠToday', 'Ġwe', 'Ġreleased', 'Ġthe', 'Ġnew', 'Ġmodel',
     ':', 'Ġmult', 'ilingual', 'Ġgener', 'ative', 'Ġpre', '-', 'trained', 
    'Ġtransformer', '.', '[SEP]', 'The', '[SEP]']
    
    print(encoded_texts['offset_mapping'])
    =====================================
    [(0, 0), (0, 6), (6, 9), (9, 18), (18, 22), (22, 26), (26, 32), 
    (32, 33), (33, 38), (38, 46), (46, 52), (52, 57), (57, 61), 
    (61, 62), (62, 69), (69, 81), (81, 82), (0, 0), (0, 3), (0, 0)]
    

    各种bert输入格式:

    bert: [CLS] + tokens + [SEP] + padding

    roberta: [CLS] + prefix_space + tokens + [SEP] + padding

    distilbert: [CLS] + tokens + [SEP] + padding

    xlm: [CLS] + tokens + [SEP] + padding

    xlnet: padding + tokens + [SEP] + [CLS]

    另外,用sequence_ids参数来区分第一句和第二句。例如,

    sequence_ids = encoded_texts.sequence_ids()
    print(sequence_ids)
    
    #输出:
    [None, 0, 0, 0, 0, 0, 0, 0, 0, None, 1, 1, 1, 1, 1, 1,  None]
    

    这里None对应了special tokens,然后01分表代表第一句和第二句。

    Inference

    [1] HuggingFace-Transformers

    相关文章

      网友评论

          本文标题:1. tokenizer

          本文链接:https://www.haomeiwen.com/subject/qnkkyrtx.html