Transformers学习笔记4

2023-10-29

Tokenizer

nlp任务的输入都是raw text,model的输入需要是inputs id,所以tokenzier将句子转换成inputs id,怎么转换呢,有3种方式:

word-based

  1. split the text:

  1. 按照空格来区分

  1. 按照标点来区分

  1. 我们会得到一个非常大的词表,Each word gets assigned an ID, starting from 0 and going up to the size of the vocabulary.

  1. 问题1:词表太大了,负担过重

  1. 问题2:相似词没有做区分,例如dog与dogs他们的标号不一样

  1. 我们可以限制词表为最常出现的10000个词组成,若不在词表中的词可以用[UNK]或者 表示。

  1. 问题1:如果词表设置的太小的话,那么会有太多[UNK]词,显然会影响训练效果

character-based

将text划分为字母

  1. 好处:

  1. 词表变小了:例如只有26个字母和一些特殊字符

  1. 没有未知词[UNK]了

  1. 坏处:

  1. 每个字符没有啥意义(但是因语言而异,例如中文汉字比拉丁字符的意义多)

  1. 每个单词的tokenizer数目变多了,例如good采用word-base时只有一个tokenizer,但是使用character-based时有4个tokenizer

Subword tokenization(推荐)

频繁使用的单词不应该被拆分成较小的子单词,而罕见的单词应该被分解成有意义的子单词。

这样词表小了,[UNK]词也少了,而且近似词之间还有联系

补充

  • Byte-level BPE, as used in GPT-2

  • WordPiece, as used in BERT

  • SentencePiece or Unigram, as used in several multilingual models

创建tokenizer

  1. 特定类型的创建

from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained("bert-base-cased")
  1. 自动创建(推荐)

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
  1. 例子

tokenizer("Using a Transformer network is simple")
{'input_ids': [101, 7993, 170, 11303, 1200, 2443, 1110, 3014, 102],
'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0],#标记token属于哪个句子
'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]}#标记哪些token是padding的,这种不需要关注上下文

保存tokenizer

tokenizer.save_pretrained("directory_on_my_computer")

encoding

把text变为input ids就是encoding,步骤:

  1. split the text into words,也叫tokens

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")

sequence = "Using a Transformer network is simple"
tokens = tokenizer.tokenize(sequence)

print(tokens)
['Using', 'a', 'transform', '##er', 'network', 'is', 'simple']
  1. convert those tokens into numbers,使用我们from_pretrained下载的词汇表

ids = tokenizer.convert_tokens_to_ids(tokens)

print(ids)
[7993, 170, 11303, 1200, 2443, 1110, 3014]

decoding

把tokens变成text

decoded_string = tokenizer.decode([7993, 170, 11303, 1200, 2443, 1110, 3014])
print(decoded_string)
'Using a Transformer network is simple'

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Transformers学习笔记4 的相关文章

随机推荐

  • 计算机提示xinput1_4.dll丢失的解决方法,哪种更值得推荐

    最近我在使用某个游戏时遇到了一个问题 就是出现了xinput1 4 dll文件缺失的错误 这个错误让我无法正常启动游戏 让我感到非常困扰和沮丧 经过一番努力 我终于成功修复了这个问题 也总结了一些解决方法 大家可以对比一下哪种更值得推荐 x
  • react 属性验证与默认属性

    类组件属性验证与默认属性 通过static定义类的属性 属性验证可以引入模板自带的prop types来进行类型判断 当然你也可以自己写一个类型判断的方法 然后对类的propTypes属性进行类型编写 propTypes 这个属性名不可自定
  • 【AWS实验】 使用 Lake Formation 设置数据湖

    文章目录 实验概览 目标 实验环境 任务 1 探索实验环境 任务 1 1 在 S3 存储桶中创建文件夹 任务 1 2 加载 AWS Cloud9 IDE 任务 1 3 将数据复制到 S3 存储桶 任务 2 设置 AWS Lake Forma
  • jq的ajax里面的datagrid,详解jquery easyui之datagrid使用参考

    本文介绍了jquery easyui之datagrid使用 具体如下 创建datagrid 在页面上添加一个div或table标签 然后用jquery获取这个标签 并初始化一个datagrid 代码如下 页面上的div标签 js代码 mag
  • ES配置与使用

    一 单机版安装 地址 www elastic co 下载tar格式 或者复制链接 wget url下载 启动 bin elasticsearch 二 插件 解决页面问题 GitHub下载 elasticsearch head 需要node环
  • RISC-V新进展!deepin 成功适配VisionFive 2

    RISC V指令集是基于精简指令集计算 RISC 原理建立的开放指令集架构 ISA RISC V则是在指令集不断发展和成熟的基础上建立的全新指令 RISC V指令集完全开源 设计简单 拥有模块化的设计 完整的工具链 易于移植Unix系统 以
  • WebService+Rxjava

    最近公司有了个新项目 是之前有个项目需要迭代 由于这个项目比较老 所以用的是WebService的接口 我之前都是写的是restful的接口 没有接触过WebServiece 看到之前的代码我也有点闷逼 于是就花了几天去研究了下WebSer
  • 补码乘法,补码乘法计算详细解说

    1 补码与真值得转换公式 补码乘法因符号位参与运算 可以完成补码数的 直接 乘法 而不需要求补级 这种直接的方法排除了较慢的对2求补操作 因而大大加速了乘法过程 首先说明与直接的补码乘法相联系数学特征 对于计算补码数的数值来说 一种较好的表
  • CMake 学习笔记(子目录 续)

    这篇博客接着上篇 我们的目录结构和上一个例子完全相同 CMakeLists txt MathFunctions CMakeLists txt MathFunctions cxx MathFunctions h mysqrt cxx mysq
  • STM32的Bootloader实现和遇到的情况

    目录 0 概述 1 keil设置 2 IAP跳转函数 3 APP重定向中断向量表 3 1 标准库 3 2 HAL库 4 一些小问题 4 1 从IAP跳转到APP后运行异常 4 2 没有SCB gt VTOR设置中断向量表 0 概述 实际中通
  • opencv---曲线断点检测(八邻域断点检测)

    前言 该方法适用于激光照射的背景图像 没有交叉 仅限一条曲线断裂检测 原始图像 原始图像越干净 简单 检测效果越好 原始图像越干净 简单 检测效果越好 原始图像越干净 简单 检测效果越好 原始图像越干净 简单 检测效果越好 预处理 很重要
  • Java怎么设置代理ip

    在Java中设置代理IP可以通过使用Java系统属性来实现 具体步骤如下 1 设置代理地址和端口号 System setProperty https proxyHost 代理地址 System setProperty https proxy
  • vue3-vite使用lib-flexible(amfe-flexible)总结

    创建完vue3项目也安装了flexible插件页面就是不转化rem 搞了好久才发现还要另外配置文件 记录一下 安装插件 安装postcss pxtorem npm install postcss pxtorem save dev 安装lib
  • Arduino ESP32和ESP8266开发板安装教程

    视频教程链接 https www bilibili com video BV1dT411G7XX 1 安装第三方Arduino Package 下面以安装ESP32和ESP8266为示例 方式1 在线安装 第1步 打开ArduinoIDE
  • window配置weex项目的android studio环境

    weex 虽然做的是前端的工作但是越往后面觉的如果不会一门移动端的框架是多么的无力 于是就开始了之前非常看好的weex框架 该框架起初是由阿里巴巴内部开源的 后面移交给apache成长历程可谓是一波三折 和react native比起来有些
  • 第十二届蓝桥杯省赛B组(C/C++)试题G砝码称重

    题目 原题链接 问题描述 有一架天平和 n 1 n 100 n 1 leq n l
  • 数据结构 每日一练:编程

    先来个简单的练练手吧 欢迎大佬们交流探讨 给出一个有序的整数数组 A 和有序的整数数组 B 请将数组 B 合并到数组 A 中 变成一个有序的升序数组 数据范围 m n属于 0 100 注意 1 保证 A 数组有足够的空间存放 B 数组的元素
  • LeetCode 42. 接雨水

    题目链接 42 接雨水 思路分析 与程序员面试金典 面试题 17 21 直方图的水量相同 class Solution public int trap vector
  • js中字符串常用方法

    1 concat 用于将一个或多个字符串拼接成一个新字符串 不改变原字符串 返回结果为新字符串 2 slice 提取某个字符串的一部分 并返回一个新的字符串 且不改变原字符串 只有一个参数时 取值范围为指定位置到字符串结尾 两个参数时取头不
  • Transformers学习笔记4

    Tokenizer nlp任务的输入都是raw text model的输入需要是inputs id 所以tokenzier将句子转换成inputs id 怎么转换呢 有3种方式 word based split the text 按照空格来