语言模型编码中/英文句子格式详解

news2025/6/26 13:29:17

文章目录

  • 前言
  • 一、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 BertTokenizer

tokenizer = 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)

图显示:
在这里插入图片描述
可发现,和上面英文句子编码是一样的。

总结

一句话,模型是根据提供对应表,将中/英文句子或符号编译成对应索引,被计算识别。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1085837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序员如何用海外平台接单?

作为一名能力超群的码农,基本工资肯定是到位的。 那你是否想过锦上添花,试着找找兼职呢? 相信不少人已经在接单平台上接单了, 但是,在众多接单平台中,海外平台是个什么样的存在呢?怎么在海外…

c/c++--编译指令(预处理之后) #pragma

1. #pragma 作用 #pragma 用于指示编译器完成一些特定的动作#pragma 的功能或作用 随编译器不同而变化。 即 不同的编译器可能以不同的方式解释同一条 #pragma 指令 2. 用法 常见用法示例 2.1 #pragma message 参考链接 自定义编译信息输出到终端(一般和#if配合使用&#…

收银系统商品定价设计思考

一、背景 因为门店系统里商品总共也就几万款,一直以来都是根据条码由总部统一定价销售,现在有加盟店,各门店也有进行各自促销活动的需求,这就需要放开门店自主定价权,所以近段时间系统在商品定价上做了扩展。 二、商…

【Debian系统】:安装debian系统之后,很多命令找不到,需要添加sudo之后才能使用,以下解决方法

项目场景: 问题描述 解决方案: 1.临时解决方案 2.永久解决方案 1.首先打开编辑: 2.打开之后最后一行添加代码: 3.最后运行一遍 .bashrc 4.已经可以了,可以试试reboot,重启一下机子 一点一滴才能成长 …

基于SpringBoot的城镇保障性住房管理系统

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 房屋类型管理 房源信息管理 房源申请管理 住房分配 房源申请 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上…

神秘的锦衣卫

在看明朝电视剧经常听到的一句台词:锦衣卫办案,闲杂人等速速离开。锦衣卫是明朝特务机构,直接听命于皇帝,是亲军卫之一,也是最重要的一卫。 1、卫所制 卫所制是明代最主要的军事制度,其目标是寓兵于农、屯…

Jetson Orin NX 开发指南(8): Mavros 的安装与配置

一、前言 由于 Jetson 系列开发板常作为自主无人机的机载电脑,而无人机硬件平台如 PX4 和 ArduPilot 等通过 MAVLink 进行发布无人机状态和位姿等信息,要实现机载电脑与 MAVLink 的通信,必须借助 Mavros 功能包,因此,…

c# 弹出背景透明图

1. 在窗体中添加 picturebox 控件 2. 在 picturebox 中添加 “png ” 背景透明图,或者GIF图,属性设置如下 3. 在窗体初始化中,添加如下代码 this.BackColor Color.LimeGreen; this.TransparencyKey Color.LimeGreen; 此功能可以用来展示…

【MySQL入门到精通-黑马程序员】MySQL基础篇-DCL

文章目录 前言一、DCL-介绍二、DCL-管理用户二、DCL-权限控制总结 前言 本专栏文章为观看黑马程序员《MySQL入门到精通》所做笔记,课程地址在这。如有侵权,立即删除。 一、DCL-介绍 DCL英文全称是Data Control Language(数据控制语言&#x…

国际邮箱推荐:不容错过的企业邮箱选择

企业邮箱哪个好?Zoho Mail一款“界面纯净、永久无广告”的企业邮箱,适用于任何企业邮件和个人邮件往来。我们提供的Zoho Mail产品,可以帮助企业人员轻松管理电子邮件,从而更加智能、更加高效的工作。 Zoho Mail突出的功能特性&…

UDP和TCP特点(部分)对比:

传输层的两个主要协议:TCP 和 UDP UDP和TCP特点(部分)对比: UDP:无连接, 不可靠传输, 面向数据报, 全双工。 TCP:有连接, 可靠传输, 面向字节流…

利达卓越:推动互联网金融创新发展

随着信息技术的迅猛发展,互联网金融洗尽铅华,浴火蜕变,逐渐崭露头角成为金融领域的一股重要力量。对此,利达卓越积极推动互联网金融创新发展! 互联网金融是指传统金融机构与互联网企业利用互联网技术和信息通信技术实现资金融通、支付、投资和信息中介服务的新型金融业务模式。…

【JVM系列】- 启航·JVM概论学习

启航JVM概论 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正&#xff0c…

Vue3 + Nodejs 实战 ,文件上传项目--实现图片上传

目录 技术栈 1. 项目搭建前期工作(不算太详细) 前端 后端 2.配置基本的路由和静态页面 3.完成图片上传的页面(imageUp) 静态页面搭建 上传图片的接口 js逻辑 4.编写上传图片的接口 5.测试效果 结语 博客主页:専心_前端,javascript,mys…

记一次惊险的CDH6.3.2集群断电后重启的过程

重启服务 systemctl restart cloudera-scm-server.service systemctl restart cloudera-scm-agent.service查看服务是否启动,显然结果是failed systemctl status cloudera-scm-server.service查看异常 journalctl -xe去看服务日志 发现是这个位置错误 SqlExcep…

018-第三代软件开发-整体介绍

第三代软件开发-整体介绍 文章目录 第三代软件开发-整体介绍项目介绍整体介绍Qt 属性系统QML 最新软件技术框架 关键字: Qt、 Qml、 属性、 Qml 软件架构 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object …

Java Day1

day01 一、Markdown 基础语法1.标题2. 字体3. 引用 >4. 分隔线 --- ***5. 图片 ![]()6.超链接7.列表8.表格9.代码 代码名称 二、计算机三、常用快捷键1. Win 系列2. Ctrl 系列3. ALt 系列 四、 基本的DOS命令1. 打开方式:2. 常用DOS命令 五、计算机语言发展史第一…

黑马JVM总结(三十二)

(1)类加载器-线程上下文1 使用的应用程序类加载器来完成类的加载,不是用的启动类加载器,jdk在某些情况下要打破,双亲委派的模式,有时候需要调用应用程序类加载器来完成类的加载,否则有些类它是找…

Linux C select 的学习

一. select 系统调用 1. 函数说明 #include <sys/select.h> #include <sys/time.h>int select(int nfds, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);nfds: 是一个整数值&#xff0c;是指集合中所有文件描述符的范围&#…

JavaScript使用类-模态窗口

**上节课我们为这个项目获取了一些DOM元素&#xff0c;现在我们可以继续&#xff1b;**这个模态窗口有一个hidden类&#xff0c;这个类上文我们讲了&#xff0c;他的display为none&#xff1b;如果我们去除这个hidden的话&#xff0c;就可以让这个模态窗口展现出来。如下 cons…