Wordpiece可以将词转化为多个词片段,比如:Nanostructured 被切分为 ['Nan', '##ost', '##ru', '##cture', '##d'],相比直接使用空格进行分词表示的方式,通过种排列组合的方式组成更多的单词,可以把词的本身的意思和时态分开,有效的减少了词表的数量[1]。被切分出来的词叫做Subword,十分形象。

Transformers包中自带了tokenizer方法可以帮助我们实现Wordpiece,但是被切的词汇会改变原有的句子长度,在做序列标注的时候,经过token转化的句子长度无法和标签长度进行对应,此时一种解决方法是记录其词首的位置,用于后期的标注。

本文为其记录句首词的小trick,常见于序列标注任务中。使用numpy的累加方法cumsum来获取其词首位置。

import numpy as np
from transformers import BertTokenizerbert_class = 'pretrained_model/bert-base-cased'  # 提前下好的预训练模型的位置
tokenizer = BertTokenizer.from_pretrained(bert_class, do_lower_case=False)
sentences = []  # 存储结果的列表
line = 'Nanostructured Pt-alloy electrocatalysts for PEM fuel cell oxygen reduction reaction' 样例句子tokens = line.strip().split(' ')  # 按照空格进行分词subwords = list(map(tokenizer.tokenize, tokens))
"""
[['Nan', '##ost', '##ru', '##cture', '##d'], ['P', '##t', '-', 'alloy'], ['electro', '##cat', '##aly', '##sts'], ['for'], ['P', '##EM'], ['fuel'], ['cell'], ['oxygen'], ['reduction'], ['reaction']]
"""
subword_lengths = list(map(len, subwords))
# [5, 4, 4, 1, 2, 1, 1, 1, 1, 1]subwords = ['[CLS]'] + [item for indices in subwords for item in indices]
# ['[CLS]', 'Nan', '##ost', '##ru', '##cture', '##d', 'P', '##t', '-', 'alloy', 'electro', '##cat', '##aly', '##sts', ...]
# cls直接加到句首,并且列表token_start_idxs = 1 + np.cumsum([0] + subword_lengths[:-1])
# 基于cumsum方法对长度进行累加,获取词首index,整体+1,相当于加入了cls标记占位的影响sentences.append((tokenizer.convert_tokens_to_ids(subwords),token_start_idxs))
# 存入结果,这里可以携程循环用于data loader中

参考:

[1]  一文读懂BERT中的WordPiece: https://www.cnblogs.com/huangyc/p/10223075.html

BERT tokenization 处理英文句子 Wordpiece之后的处理技巧相关推荐

  1. 基于朴素贝叶斯和预训练Bert模型的中文句子情感分类实践

    基于朴素贝叶斯和预训练Bert模型的中文句子情感分类实践 1.任务介绍   本次实践选题为AI研习社2019年9月份举办的中文对话情感分析任务,并在原任务基础上进行了拓展.任务首先给定一中文语句数据集 ...

  2. python输入一个英文句子、翻转句子中单词的顺序_ODOA(1) 翻转句子中单词的顺序(C语言实现)...

    动动手才发现自己现在的在C/C++方向的几个问题: 对自己的入门语言C语言变得非常陌生 编程的思维固定在找既有的方法,主要原因是python写多了,基本上所有常见的问题,都有现成的方法,让自己变得懒惰 ...

  3. 输入一个英文句子,翻转句子中单词的顺序 例如输入“I am a student.”,则输出“student. a am I”。

    package com.atguigu.java; //输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.句子中单词以空格符隔开. //为简单起见,标点符号和普通字母一样处理. //例如 ...

  4. C语言反序输出英文句子,C++实现英文句子中的单词逆序输出的方法

    本文实例讲述了C++实现英文句子中的单词逆序输出的方法.分享给大家供大家参考,具体如下: #include "stdafx.h" #include #include #includ ...

  5. 编写一个函数,该函数能判断一个英文句子str(带空格)中是否含有某个单词w,如“How old are you?”含有“old”。在main函数中输入一个英文句子,再输入一个单词,如果英文句子中含有那

    题目要求: 编写一个C程序,实现以下功能: 编写一个函数,该函数能判断一个英文句子str(带空格(升级版))中是否含有某个单词w,如"How old are you?"含有&quo ...

  6. 吴军《谷歌面试题:倒置英文句子》

    吴军<谷歌面试题:倒置英文句子> 问题是这么说的:给你一个英语的语句,比如"London bridge is falling down",把它完全倒装过来," ...

  7. Word英文句子之间空两格的方法,有截图

    给英文句子后面空两格的方法: 正常空一格写完后,用开始,替换功能:查找内容. 替换为. +空格.在审阅模式下就能看到所有的句号后面多了一个空格.完美 但是还要回去修改下FIG, etc. 之类的被误伤 ...

  8. c语言英文版孤独怎么说,孤独的伤感的英文句子

    都说孤独是一个的寂寞,而寂寞是一群人的孤独.有些些伤感孤独的句子能表达你的心情呢?下面是学习啦小编带来的孤独的伤感的英文句子,欢迎大家阅读! 孤独的伤感的英文句子 1.i would like now ...

  9. python输入一个英文句子 输出单词个数_编写程序,给出一个英文句子,统计单词个数。_学小易找答案...

    [简答题]叙述pass语句的作用. [简答题]吹风机不工作,可以用万用表检测吗?在网上搜索关键词,吹风机不工作怎么办? [单选题]以下代码运行结果正确的是哪一项?() x=2 if x:print(T ...

  10. [校招] 英文句子单词反转 - 哔哩哔哩 2020

    [校招] 英文句子单词反转 - 哔哩哔哩 2020 描述 原地翻转句子中单词的顺序,但单词内字符的顺序不变.要求:空间复杂度O(1),时间复杂度O(n). 输入 英文句子中单词以一个空格符隔开.为简单 ...

最新文章

  1. 《人工智能爱好者俱乐部》祝大家元旦快乐!
  2. PHP5 加速模块OPcache
  3. python有什么作用-大数据学习之python语言有什么作用?
  4. MongoDB学习(翻译7)
  5. CentOS 7配置LNMP开发环境及配置文件管理详解
  6. linux 命令 echo 使用说明
  7. Httpclient 实现带参文件上传
  8. MQ的引言|不同MQ的特点|RabbitMQ安装
  9. tensorflow.python.framework.errors_impl.NotFoundError: libnvinfer.so.5: cannot open shared object fi
  10. 拟牛顿法-DFP算法举例与matlab代码实现(转载+整理)
  11. java并发编程-Executor框架
  12. 使用Linux的tzselect功能,查看各个洲都有哪些国家(地区)
  13. 错误与异常_1-5选择题
  14. 浅谈12306核心模型设计思路和架构设计阅读心得
  15. Java常用工具类总结
  16. C语言蓝桥杯刷题:等差素数列
  17. 程序员应该写文档吗?
  18. 讯飞语音包实现Android语音识别
  19. Postman两个接口数据关联
  20. X的N次方求解——pow(x,n)实现

热门文章

  1. 最长公共子序列(LCS) 过程图解
  2. CyanogenMod ROM 首次官方兼容小米
  3. 迅为-4418开发板-驱动-PWM输出实验
  4. 四、Spyder 下使用 Scrapy 开发爬虫之腾讯视频抓取
  5. 36氪独家|「秦汉胡同」完成1亿元A轮融资,将发力线上内容产品和女性生活学习服务社群...
  6. Android 开发者的下半场
  7. SWUST大二周赛 之农夫山泉有点甜
  8. 全球及中国影视产业渠道建设分析与投融资风险分析报告2021-2027年
  9. 反病毒引擎设计(一):绪论 本文来自:剑盟反病毒技术门户(www.janmeng.com)
  10. 笔记本电脑内外网(无线和本地网络)优先顺序选择