语言模型编码中/英文句子格式详解
文章目录
- 前言
- 一、Bert的vocab.txt内容查看
- 二、BERT模型转换方法(vocab.txt)
- 三、vocab内容与模型转换对比
- 四、中文编码
- 总结
前言
最近一直在学习多模态大模型相关内容,特别是图像CV与语言LLM模型融合方法,如llama-1.5、blip、meta-transformer、glm等大模型。其语言模型的中文和英文句子如何编码成计算机识别符号,使我困惑。我查阅资料,也发现很少有博客全面说明。为此,我以该博客记录其整过过程,并附有对应代码供读者参考。
处理语言模型需要将英文或中文等字符表示成模型能识别的符号,为此不同模型会按照某些方法表示,但不同模型转计算机能识别思路是一致的。
一、Bert的vocab.txt内容查看
来源tokenization.py文件内容。
PRETRAINED_VOCAB_ARCHIVE_MAP = {'bert-base-uncased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt",'bert-large-uncased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-uncased-vocab.txt",'bert-base-cased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-cased-vocab.txt",'bert-large-cased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-cased-vocab.txt",'bert-base-multilingual-uncased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-multilingual-uncased-vocab.txt",'bert-base-multilingual-cased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-multilingual-cased-vocab.txt",'bert-base-chinese': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-chinese-vocab.txt",
}
vocab.txt内容:

上图是我截取vocab.txt的内容,基本很多有的符号/数字/运算符/中文/字母/单词等均在该txt文件夹中。
二、BERT模型转换方法(vocab.txt)
加入有2句话,分别为text01与text02(如下),他们会转换vocab.txt中已有的单词形式。其中需要留意:’##符号连接长单词在vocab.txt部件方式,如embeddings表示为['em','##bed','##ding','s']。同时,vocab.txt不存在单词部件会化成最小组件,单个字母(vocab.txt最小部件是字母)。
代码如下:
from pytorch_pretrained_bert import BertTokenizertokenizer = BertTokenizer.from_pretrained('../voccab.txt')text01 = "Here is the sentence I want embeddings for."
text02 = "wish for world peace."
marked_text = "[CLS] " + text01 + " [SEP] " + text02 + " [SEP]"
print('marked_text = ', marked_text)tokenized_text = tokenizer.tokenize(marked_text)
print('tokenized_text = ', tokenized_text)indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)for tup in zip(tokenized_text, indexed_tokens):print("tup = ", tup)
marked_text是将句子使用符号分开表示其句子含义;
tokenized_text表示将句子化成vocab.txt文件提供的部件,其中##bed有单独表示;
tup = (‘[CLS]’, 101)后的内容表示其符号对应的索引。
其结果如下:
marked_text = [CLS] Here is the sentence I want embeddings for. [SEP] wish for world peace. [SEP]
tokenized_text = ['[CLS]', 'here', 'is', 'the', 'sentence', 'i', 'want', 'em', '##bed', '##ding', '##s', 'for', '.', '[SEP]', 'wish', 'for', 'world', 'peace', '.', '[SEP]']tup = ('[CLS]', 101)
tup = ('here', 2182)
tup = ('is', 2003)
tup = ('the', 1996)
tup = ('sentence', 6251)
tup = ('i', 1045)
tup = ('want', 2215)
tup = ('em', 7861)
tup = ('##bed', 8270)
tup = ('##ding', 4667)
tup = ('##s', 2015)
tup = ('for', 2005)
tup = ('.', 1012)
tup = ('[SEP]', 102)
tup = ('wish', 4299)
tup = ('for', 2005)
tup = ('world', 2088)
tup = ('peace', 3521)
tup = ('.', 1012)
tup = ('[SEP]', 102)
总结:最终词汇等内容转为对应的索引数字表达。
三、vocab内容与模型转换对比
从图中可知,vocab的索引值总比模型给出索引值小1,这是因为模型从0开始索引,而vocab展示内容从1开始,因此相差1。

再次强调:模型对词汇编码实际为人为给出对应表(如:vocab.txt)所对应的索引,用索引值替换词语。
四、中文编码
以上内容已全部告知读者,模型如何编码句子。而该部分内容是拓展,使用中文编码,查看其结果。
代码如下:
from pytorch_pretrained_bert import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('../voccab.txt')
text01 = "the sentence I want embeddings for."
text02 = "愿世界和平。"
marked_text = "[CLS] " + text01 + " [SEP] " + text02 + " [SEP]"
print('marked_text = ', marked_text)
tokenized_text = tokenizer.tokenize(marked_text)
print('tokenized_text = ', tokenized_text)
indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)
for tup in zip(tokenized_text, indexed_tokens):print("tup = ", tup)
结果如下:
marked_text = [CLS] the sentence I want embeddings for. [SEP] 愿世界和平。 [SEP]
tokenized_text = ['[CLS]', 'the', 'sentence', 'i', 'want', 'em', '##bed', '##ding', '##s', 'for', '.', '[SEP]', '[UNK]', '世', '[UNK]', '和', '平', '。', '[SEP]']
tup = ('[CLS]', 101)
tup = ('the', 1996)
tup = ('sentence', 6251)
tup = ('i', 1045)
tup = ('want', 2215)
tup = ('em', 7861)
tup = ('##bed', 8270)
tup = ('##ding', 4667)
tup = ('##s', 2015)
tup = ('for', 2005)
tup = ('.', 1012)
tup = ('[SEP]', 102)
tup = ('[UNK]', 100)
tup = ('世', 1745)
tup = ('[UNK]', 100)
tup = ('和', 1796)
tup = ('平', 1839)
tup = ('。', 1636)
tup = ('[SEP]', 102)
图显示:

可发现,和上面英文句子编码是一样的。
总结
一句话,模型是根据提供对应表,将中/英文句子或符号编译成对应索引,被计算识别。
相关文章:
语言模型编码中/英文句子格式详解
文章目录 前言一、Bert的vocab.txt内容查看二、BERT模型转换方法(vocab.txt)三、vocab内容与模型转换对比四、中文编码总结 前言 最近一直在学习多模态大模型相关内容,特别是图像CV与语言LLM模型融合方法,如llama-1.5、blip、meta-transformer、glm等大…...
【Node.js】路由
基础使用 写法一: // server.js const http require(http); const fs require(fs); const route require(./route) http.createServer(function (req, res) {const myURL new URL(req.url, http://127.0.0.1)route(res, myURL.pathname)res.end() }).listen…...
matlab 2ask 4ask 信号调制
1 matlab 2ask close all clear all clcL =1000;Rb=2822400;%码元速率 Fs =Rb*8; Fc=Rb*30;%载波频率 Ld =L*Fs/Rb;%产生载波信号 t =0:1/Fs:L/Rb;carrier&...
Python利用jieba分词提取字符串中的省市区(字符串无规则)
目录 背景库(jieba)代码拓展结尾 背景 今天的需求就是在一串字符串中提取包含,省、市、区,该字符串不是一个正常的地址;,如下字符串 "安徽省、浙江省、江苏省、上海市,冷运标快首重1kg价格xx元,1.01kg(含)-5kg(不含)续重价…...
MuLogin防关联浏览器帮您一键实现Facebook账号多开
导言: 在当今数字化时代,社交媒体应用程序的普及程度越来越高。Facebook作为全球最大的社交媒体平台之一,拥有数十亿的用户。然而,对于一些用户来说,只拥有一个Facebook账号可能无法满足他们的需求。有时,…...
【C语言】每日一题(半月斩)——day4
目录 选择题 1、设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是( ) 2、运行以下程序后,如果从键盘上输入 65 14<回车> ,则输出结果为( &…...
Are you sure you want to continue connecting (yes/no) 每次ssh进
Lunix scp等命令不需要输入yes确认方法_scp不需要确认-CSDN博客 方法一:连接时加入StrictHostKeyCheckingno ssh -o StrictHostKeyCheckingno root192.168.1.100 方法二:修改/etc/ssh/ssh_config配置文件,添加: StrictHostKeyC…...
网络与信息系统安全设计规范
1、总则 1.1、目的 为规范XXXXX单位信息系统安全设计过程,确保整个信息安全管理体系在信息安全设计阶段符合国家相关标准和要求,特制订本规范。 1.2、范围 本规范适用于XXXXX单位在信息安全设计阶段的要求和规范管理。 1.3、职责 网络安全与信息化…...
在Linux怎么用vim实现把一个文件里面的文本复制到另一个文件里面
2023年10月9日,周一下午 我昨天遇到了这个问题,但在网上没找到图文并茂的博客,于是我自己摸索出解决办法后,决定写一篇图文并茂的博客。 情景 假设现在我要用vim把file_transfer.cpp的内容复制到file_transfer.hpp里面 第一步 …...
CCAK—云审计知识证书学习
目录 一、CCAK云审计知识证书概述 二、云治理概述 三、云信任 四、构建云合规计划 <...
3.springcloudalibaba gateway项目搭建
文章目录 前言一、搭建gateway项目1.1 pom配置1.2 新增配置如下 二、新增server服务2.1 pom配置2.2新增测试接口如下 三、测试验证3.1 分别启动两个服务,查看nacos是否注册成功3.2 测试 总结 前言 前面已经完成了springcloudalibaba项目搭建,接下来搭建…...
Debezium日常分享系列之:Debezium 2.3.0.Final发布
Debezium日常分享系列之:Debezium 2.3.0.Final发布 一、重大改变二、PostgreSQL / MySQL 安全连接更改三、JDBC 存储编码更改四、新功能和改进五、Kubernetes 的 Debezium Server Operator六、新的通知子系统七、新的可扩展信号子系统八、JMX 信号和通知集成九、新的…...
js为什么是单线程?
基础 js为什么是单线程? 多线程问题 类比操作系统,多线程问题有: 单一资源多线程抢占,引起死锁问题;线程间同步数据问题; 总结 为了简单: 更简单的dom渲染。js可以操控dom,而一…...
centos安装redis教程
centos安装redis教程 安装的版本为centos7.9下的redis3.2.100版本 1.下载地址 Index of /releases/ 使用xftp将redis传上去。 2.解压 tar -zxvf 文件名.tar.gz 3.安装 首先,确保系统已经安装了GCC编译器和make工具。可以使用以下命令进行安装: sudo y…...
把短信验证码储存在Redis
校验短信验证码 接着上一篇博客https://blog.csdn.net/qq_42981638/article/details/94656441,成功实现可以发送短信验证码之后,一般可以把验证码存放在redis中,并且设置存放时间,一般短信验证码都是1分钟或者90s过期,…...
【已编译资料】基于正点原子alpha开发板的第三篇系统移植
系统移植的三大步骤如下: 系统uboot移植系统linux移植系统rootfs制作 一言难尽,踩了不少坑,当时只是想学习驱动开发,发现必须要将第三篇系统移植弄好才可以学习后面驱动,现将移植好的文件分享出来: 仓库&…...
地下城堡3魂之诗食谱,地下城堡3菜谱37种
地下城堡3魂之诗食谱大全,让你解锁制作各种美食的方法!不同的食材搭配不同的配方制作,食物效果和失效也迥异。但有时候我们可能会不知道如何制作这些食物,下面为您介绍地下城堡3菜谱37种。 关注【娱乐天梯】,获取内部福…...
HDMI 基于 4 层 PCB 的布线指南
HDMI 基于 4 层 PCB 的布线指南 简介 HDMI 规范文件里面规定其差分线阻抗要求控制在 100Ω 15%,其中 Rev.1.3a 里面规定相对放宽了一些,容忍阻抗失控在 100Ω 25%范围内,不要超过 250ps。 通常,在 PCB 设计时,注意控…...
理解Go中的布尔逻辑
布尔数据类型(bool)可以是两个值之一,true或false。布尔值在编程中用于比较和控制程序流程。 布尔值表示与数学逻辑分支相关的真值,它指示计算机科学中的算法。布尔(Boolean)一词以数学家乔治布尔(George Boole)命名,总是以大写字母B开头。 …...
rv1126-rknpu-v1.7.3添加opencv库
rv1126所使用的rknn sdk里默认是不带opencv库的,官方所用的例程里也没有使用opencv,但是这样在进行图像处理的时候有点麻烦了,这里有两种办法: 一是先用python将所需要的图片处理好后在转化为bin格式文件,在使用c或c进行读取&…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...
