BertTokenizer的使用方法(超详细)

这篇具有很好参考价值的文章主要介绍了BertTokenizer的使用方法(超详细)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

导入

from transformers import BertTokenizer
from pytorch_pretrained import BertTokenizer

以上两行代码都可以导入BerBertTokenizer,transformers是当下比较成熟的库,pytorch_pretrained是google提供的源码(功能不如transformers全面)

加载

tokenizer = BertTokenizer.from_pretrained('bert_pretrain')

数据

首先定义一些数据:

sents = [
    '人工智能是计算机科学的一个分支。',
    '它企图了解智能的实质。',
    '人工智能是一门极富挑战性的科学。',
]

tokenize

将句子拆分为token,并不映射为对应的id

token = tokenizer.tokenize(sents[0])
print(token)
# 输出:['人', '工', '智', '能', '是', '计', '算', '机', '科', '学', '的', '一', '个', '分', '支', '。']

convert_tokens_to_ids

将token映射为其对应的id(ids是我们训练中真正会用到的数据)

ids = tokenizer.convert_tokens_to_ids(token)
print(ids)
#输出:[8, 35, 826, 52, 10, 159, 559, 98, 147, 18, 5, 7, 27, 59, 414, 12043]

同理convert_ids_to_tokens,就是上述方法的逆过程

encode(从此方法开始,只有transformers可以实现)

convert_tokens_to_ids是将分词后的token转化为id序列,而encode包含了分词和token转id过程,即encode是一个更全的过程,另外,encode默认使用basic的分词工具,以及会在句子前和尾部添加特殊字符[CLS]和[SEP],无需自己添加。从下可以看到,虽然encode直接使用tokenizer.tokenize()进行词拆分,会保留头尾特殊字符的完整性,但是自己也会额外添加特殊字符。

token = tokenizer.tokenize(sents[0])
print(token)
ids = tokenizer.convert_tokens_to_ids(token)
print(ids)
ids_encode = tokenizer.encode(sents[0])
print(ids_encode)
token_encode = tokenizer.convert_ids_to_tokens(ids_encode)
print(token_encode)
# 输出结果:
#['人', '工', '智', '能', '是', '计', '算', '机', '科', '学', '的', '一', '个', '分', '支', '。']
#[8, 35, 826, 52, 10, 159, 559, 98, 147, 18, 5, 7, 27, 59, 414, 12043]
#[1, 8, 35, 826, 52, 10, 159, 559, 98, 147, 18, 5, 7, 27, 59, 414, 12043, 2]
#['[CLS]', '人', '工', '智', '能', '是', '计', '算', '机', '科', '学', '的', '一', '个', '分', '支', '。', '[SEP]']

从运行结果可以看到encode确实在首尾增加了特殊词元[cls]和[sep]也就是1和2

encode_plus

返回更多相关信息:

ids = tokenizer.encode_plus(sents[0])
print(ids)
# {'input_ids': [1, 8, 35, 826, 52, 10, 159, 559, 98, 147, 18, 5, 7, 27, 59, 414, 12043, 2], 
#'token_type_ids': [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]}

相关参数介绍:

out = tokenizer.encode_plus(
    text=sents[0],
    text_pair=sents[1],

    #当句子长度大于max_length时,截断
    truncation=True,

    #一律补零到max_length长度
    padding='max_length',
    max_length=30,
    add_special_tokens=True,

    #可取值tf,pt,np,默认为返回list
    return_tensors=None,

    #返回token_type_ids
    return_token_type_ids=True,

    #返回attention_mask
    return_attention_mask=True,   

    #返回special_tokens_mask 特殊符号标识
    return_special_tokens_mask=True,

    #返回offset_mapping 标识每个词的起止位置,这个参数只能BertTokenizerFast使用
    #return_offsets_mapping=True,

    #返回length 标识长度
    return_length=True,
)

for k, v in out.items():
    print(k, ':', v)
#input_ids : [1, 8, 35, 826, 52, 10, 159, 559, 98, 147, 18, 5, 7, 27, 59, 414, 12043, 2, 380, 258, 429, 15, 273, 826, 52, 5, 79, 207, 12043, 2]
#token_type_ids : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
#special_tokens_mask : [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
#attention_mask : [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
#length : 30

batch_encode_plus

以 batch 的形式去编码句子文章来源地址https://www.toymoban.com/news/detail-793792.html

ids = tokenizer.batch_encode_plus([x for x in sents])
print(ids)
# {
#'input_ids': [[1, 8, 35, 826, 52, 10, 159, 559, 98, 147, 18, 5, 7, 27, 59, 414, 12043, 2], [1, 380, 258, 429, 15, 273, 826, 52, 5, 79, 207, 12043, 2], [1, 8, 35, 826, 52, 10, 7, 232, 456, 595, 1373, 267, 92, 5, 147, 18, 12043, 2]], 
#'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]}

到了这里,关于BertTokenizer的使用方法(超详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python:列表的详细使用方法

    本篇文章将对列表的使用方法进行详尽说明(本人第一次写文章,若有不当之处,还请指正) 开发环境:Python3.8 1.1、列表的两种表示方法:  列表里可以存储不同的数据类型 1.2、生成各个各样的列表 运行结果:   1.3、查询列表中的元素(索引、切片): 索引: 运行结果:

    2023年04月09日
    浏览(58)
  • SpringBoot+Swagger详细使用方法

    swagger是当下比较流行的实时接口文文档生成工具。接口文档是当前前后端分离项目中必不可少的工具,在前后端开发之前,后端要先出接口文档,前端根据接口文档来进行项目的开发,双方开发结束后在进行联调测试。 1、在pom.xml文件中添加swagger相关依赖 第一个是API获取的

    2024年02月05日
    浏览(36)
  • Linux----tee命令详细使用方法

    【原文链接】Linux----tee命令详细使用方法 tee命令主要作用就是将标准出中的内容在控制台显示的同时并写入文件,如果直接使用重定向符,则只会写入文件,而不会在控制台显示,tee就是为了解决这个问题的。 -a: 通过追加的方式将内容写入文件 如下,通过echo打印hello worl

    2024年02月08日
    浏览(52)
  • Linux----tr命令详细使用方法

    【原文链接】Linux----tr命令详细使用方法 tr命令用于字符转换、替换和删除,主要用于删除文件中的控制符或进行字符串转换等。 -d: 删除字符串 -s: 删除所有重复出现字符序列,只保留第一个,即将重复出现字符串压缩为一个字符串 字符串 含义 a-z或[:lower:] 匹配所有小写字母

    2024年02月07日
    浏览(44)
  • strip()函数详细说明及使用方法

    strip() 函数是Python字符串方法之一,用于处理字符串的前导和尾随空白字符。它返回一个新字符串,该字符串是原始字符串去除前导和尾随空格(包括空格、制表符、换行符等)后的结果。 详细说明 self :表示要操作的字符串对象。 chars :是一个可选参数,用于指定要去除的

    2024年02月07日
    浏览(40)
  • C#中pictureBox控件详细使用方法

    当使用C#中的 PictureBox 控件时,你可以通过以下详细方法使用它: 在窗体上放置 PictureBox 控件: 在 Visual Studio 的窗体设计器中,从工具箱中拖动并放置一个 PictureBox 控件到你的窗体上。 设置 PictureBox 的属性: Image :设置或获取要显示在 PictureBox 上的图像。 SizeMode :设置图像

    2024年02月14日
    浏览(41)
  • 【JavaScript】alert的使用方法 | 超详细

    alert()方法用于显示带有一条指定消息和一个确认的按钮的警告框。 注意: 本应该执行主体部分的p标签,但是并没有执行; 这是因为在script中直接定义alert标签,alert之后的脚本都不会运行; 只有在点击确认之后,关闭警示框之后,才会执行; 此类方法,虽然简单但是不

    2024年02月04日
    浏览(42)
  • midjourney最新完整详细下载使用方法教程

    大家好,我是为宇绸缪,一位设计小学生。是的,装逼给自己起了个花名,也为了激励自己。好吧,我们直入正题。最近爆火的Ai绘图软件midjourney,相信大家已经听说或体验过了,我自己从免费到氪金也是研究了很久,有一点点小小的经验来分享一下。 此次教程针对的是零基

    2024年02月03日
    浏览(110)
  • C#中listView控件详细使用方法

    当使用C#中的 ListView 控件时,你可以通过以下详细方法使用它: 在窗体上放置 ListView 控件: 在 Visual Studio 的窗体设计器中,从工具箱中拖动并放置一个 ListView 控件到你的窗体上。 设置 ListView 的属性: View :设置 ListView 的显示模式。常见的显示模式包括 Details (详细信息)

    2024年02月16日
    浏览(43)
  • C#中Label控件详细使用方法

    当使用C#中的 Label 控件时,你可以通过以下详细方法使用它: 在窗体上放置 Label 控件: 在 Visual Studio 的窗体设计器中,从工具箱中拖动并放置一个 Label 控件到你的窗体上。 设置 Label 的属性: Text :设置 Label 显示的文本内容。 Name :为 Label 指定一个唯一的名称。 AutoSize :

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包