• Transformers 源码阅读之BertTokenizerFast分词模型


    数据集准备

    bert-base-chinese下载预训练语言模型及其他词表,由于使用的是pytorch,因此下载pytorch_model.bin即可。

    如果要使用英文模型,就下载能区分大小写的或者是不能区分大小写的,对于uncased,初始化时必须要把lower设为true。

    特殊符号

    BERT在执行分词任务时会生成以下几种特殊符号:

    • [CLS]:第一个句子的首位,如果要对整个句子进行分类,通常会取其对应的输出向量作为句子的表示(认为它融合了整个句子的信息,所以它对应的单词不是start而是classification)
    • [SEP]:两个句子的分隔符
    • [UNK]:未知字符
    • [PAD]:不足长度的字符填充,也就是padding操作
    • [MASK]:字符遮掩

    直观理解

    在深入模型细节之前,我们先用一个简单的例子看一看BertTokenizerFast究竟是用来干什么的,需要什么样的输入,又会给出怎样的输出。

    tokenizer = BertTokenizerFast.from_pretrained("./bert-base-chinese/",
                                                  do_lower_case=True)
    text = "hello,世界"
    text2 = "你好,world"
    tokens = tokenizer.tokenize(text)
    tokens2 = tokenizer.tokenize(text2)
    encodes = tokenizer.encode_plus([tokens, tokens2],
                                    add_special_tokens=True,
                                    return_offsets_mapping=True,
                                    max_length=16,
                                    truncation=True,
                                    padding="max_length",
                                    is_split_into_words=True,
                                    return_tensors="np")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述
    在这里插入图片描述

    • tokens很简单,就是对文本进行分词,可以看到对中英文混合的情况处理得非常好
    • input_ids也很好理解,就是根据词表建立起了分出的token到id的映射,101对应[CLS],只在开头出现一次;102对应[SEP],会出现两次;由于max_length是16,因此最后要补五个0对应的[PAD];其他就很简单了,比如8701对应着"hello",这意味着如果你打开vocab.txt这个文件,可以在第8702行找到它。
    • token_type_ids用于标识当前token属于哪一个句向量,前六个就是第一句,后五个就是第二句,其他就是0
    • attention_mask:[PAD]对应0,其他对应1,其实就是反映了句子的实际长度
    • offset_mapping:每一个token具体占了几个char,中文都是一个char,英文就看单词的长度,[PAD]全都是0
  • 相关阅读:
    【Node.js+koa--后端管理系统】设计标签创建、查询、接口 | 标签绑定到动态
    iptables 防火墙配置
    【Linux】命令行参数和环境变量
    网络原理-IP/数据链路层协议
    GO语言规范
    AES简写
    LeetCode刷题(python版)——Topic53最大子数组和
    3d测试环境搭建
    fastjson 1.2.80 漏洞浅析及利用payload
    stencilJs学习之构建 Drawer 组件
  • 原文地址:https://blog.csdn.net/jining11/article/details/125557677