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. pandas使用isna函数和any函数计算返回dataframe中包含缺失值的数据行(rows with missing values in dataframe)
  2. matlab中的histc,Matlab histc与矢量箱
  3. 神策军丨成都硬核少女谈成长:从被问题难哭,到成为主力
  4. Codeforces Round #133 (Div. 2) C. Hiring Staff 想法题目
  5. linux名词解释目录文件,linux的常识及术语解释
  6. 多进程和多线程的优缺点
  7. chgrp和chown命令
  8. 在xml里追加结点时添加回车(libxml2)
  9. android 序列化传参数,Android序列化之Parcelable和Serializable的使用详解
  10. 汇编语言上机考试三星题——负数变成绝对值,并以十进制方式输出。
  11. java 代码箭头代表什么_箭头运算符' - '在Java中做什么?
  12. 泥瓦匠聊并发编程基础篇:线程中断和终止
  13. Rxjava+retrofit+okHttp+mvp网络请求数据
  14. Linux日志快速定位
  15. java农夫过河_C语言实现农夫过河代码及解析
  16. Exception获取getMessage()为空
  17. R语言动量和马科维茨Markowitz投资组合(Portfolio)模型实现
  18. 电脑命令大全(转自千语千寻)
  19. 基于PHP+MySQL的汽车维修管理系统
  20. 丹霞地貌峡谷第一景---云台山

热门文章

  1. 《孙子兵法》十三篇注译(1--导读)
  2. QQ批量挂机(python实现)
  3. 基于PHP+MySQL客户信息管理系统的设计与实现
  4. My Neighbor Alice新一轮土地销售分析
  5. 游戏公司的区块链冒险:一周时间从火爆到熄火
  6. 《Java编程培训教程》
  7. 判断时间复杂度和空间复杂度
  8. WiFi、GNSS定位服务实战-OneOS位置服务组件(文末有礼品)
  9. 以太坊实战-attach命令
  10. 全面正面解读:nmn的副作用和危害怎么样?nmn副作用及应对方法?