大语言模型中的嵌入模型

本教程将拆解什么是嵌入模型、为什么它们在NLP中如此重要,并提供一个简单的Python实战示例。

分词器将原始文本转换为token和ID,而嵌入模型则将这些ID映射为密集向量表示。二者合力为LLMs的语义理解提供动力。图片来源:[https://tzamtzis.gr/2024/coding/tokenization-by-andrej-karpathy/]

什么是嵌入模型?

在LLMs的语境中,嵌入模型是一种神经网络,旨在将文本(如单词、短语、句子)表示为连续向量空间中的密集向量。这些向量表示能捕捉文本项之间的语义关系,是现代NLP系统的基石。

例如:

  • "king"和"queen"这两个词的嵌入向量可能在向量空间中非常接近。
  • "king"和"man"之间的向量关系可能与"queen"和"woman"之间的关系类似。

想象完这些语义关系在向量空间中的样子后,我们可能会认为单词直接变成了这些能保留语义关系的向量。这种想法在讨论LLM处理流程中的令牌时可能会引起一些混淆。让我们稍微澄清一下关于分词的内容。

分词器和嵌入模型有什么区别?

在使用BERT、GPT等大语言模型(LLMs)时,经常会遇到两个关键概念:分词器嵌入模型。虽然它们相关,但在处理单词的流程中扮演着不同的角色。

LLMs处理原始文本的一般流程如下:

  1. 原始输入文本:我们输入给模型的纯文本(例如“我爱机器学习”)。
  2. 分词器:将原始文本拆分为更小的单元(令牌)并将其转换为数字ID。
  3. 嵌入模型:将这些数字令牌ID映射到连续向量空间中的密集向量表示,捕捉语义含义。
  4. Transformer模型:使用自注意力层处理嵌入并生成预测(如下一个单词、情感、分类等)。

现在我们对流程中的分词器和嵌入模型有了更清晰的认识,让我们进一步明确什么是分词器,什么是嵌入模型。

什么是分词器?

分词器是流程中的第一个组件,负责:

  • 将文本拆分为令牌:一个令牌可以是一个单词、子词甚至是一个字符。例如,句子“我爱机器学习”可能被分词为:

['我', '爱', '机器', '学习']

  • 将令牌转换为ID:每个令牌被映射到模型词汇表中的唯一数字ID。例如:

['我', '爱', '机器', '学习'] → [101, 2173, 5956, 3627]

分词器使用预定义的词汇表(在模型训练期间构建)以确保训练和推理之间的一致性。分词器通常采用以下技术:

  • WordPiece(BERT使用):将罕见词拆分为更小的子词单元。例如,“unbelievable”可能被分词为["un", "##believable"],其中##表示子词。
  • 字节对编码(BPE)(GPT使用):类似于WordPiece,但编码方式不同。

推荐观看Andrej Karpathy的这个视频:https://youtu.be/zduSFxRajkE?si=KGKPLninpxnHu3jN

什么是嵌入模型?

嵌入模型在分词之后发挥作用,其职责是:

  1. 将令牌ID转换为密集向量:每个令牌ID被映射到连续向量空间中的一个固定大小的向量(例如,BERT-base的向量大小为768)。这些向量称为嵌入。
  2. 捕捉语义含义:生成的嵌入表示令牌的含义,使得相似的单词或令牌在向量空间中更接近。

例如:

  • "king"和"queen"这两个词的嵌入向量可能非常接近。
  • 子词如“un”和“##believable”可能组合成“unbelievable”的有意义嵌入。

嵌入模型本质上是一个查找表,但它也可以编码上下文信息(例如,在BERT等模型中,嵌入是上下文感知的)。

分词器和嵌入模型如何协同工作

让我们在LLM流程的更大背景下连接分词器和嵌入模型:

  1. 分词器:分词器为模型准备输入文本。例如:
输入文本:"我爱机器学习" 
分词器输出:[101, 2173, 5956, 3627]

这里,[101, 2173, ...]是令牌ID。

2. 嵌入模型:令牌ID随后传递给嵌入层,将其转换为密集向量表示:

令牌ID:[101, 2173, 5956, 3627] 
嵌入向量:[[0.1, 0.2, ...], [0.4, 0.5, ...], ...]

这些向量在训练期间学习,表示每个令牌的含义。

3. Transformer层:嵌入通过Transformer层(如自注意力)处理,计算上下文表示并生成预测。

为什么这种区分很重要?

理解分词器和嵌入模型之间的区别至关重要,因为:

  1. 分词器定制:在特定领域任务(如法律或医学文本)中,可能需要自定义分词器来处理专业术语(如“诉讼”、“MRI扫描”)。
  2. 预训练嵌入:你可以微调嵌入层以适应你的领域。例如,在医学文本上训练的嵌入与在一般新闻文章上训练的嵌入会有显著差异。
  3. 错误调试:下游任务中的问题通常源于分词问题,如词汇表外(OOV)单词或次优的分词策略。

一个类比来澄清概念

将LLM想象成一个工厂:

  • 分词器:分词器就像原材料处理器,将文本拆分为工厂可以处理的单元。
  • 嵌入模型:嵌入模型是生产线上的第一台机器,将这些原材料转换为中间产品(密集向量),供工厂的其他部分处理。

没有分词器,嵌入模型就不知道要处理什么。没有嵌入模型,Transformer层就没有有意义的输入。

分词器和嵌入模型的实战示例

from transformers import AutoTokenizer, AutoModel# 第一步:加载分词器和模型
tokenizer 

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

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

相关文章

【从零实现Json-Rpc框架】- 项目实现 - 服务端主题实现及整体封装

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…

AI与玩具结合的可行性分析

文章目录 一、市场需求:教育与陪伴的双重驱动(一)教育需求(二)情感陪伴需求(三)消费升级 二、技术发展:赋能玩具智能化(一)AI技术的成熟(二&#…

基于 RK3588 的 YOLO 多线程推理多级硬件加速引擎框架设计(代码框架和实现细节)

一、前言 接续上一篇文章,这个部分主要分析代码框架的实现细节和设计理念。 基于RK3588的YOLO多线程推理多级硬件加速引擎框架设计(项目总览和加速效果)-CSDN博客https://blog.csdn.net/plmm__/article/details/146542002?spm1001.2014.300…

LeetCode Hot100 刷题笔记(7)—— 贪心

目录 前言 一、贪心 1. 买卖股票的最佳时机 2. 跳跃游戏 3. 跳跃游戏 II 4. 划分字母区间 前言 一、贪心:买卖股票的最佳时机,跳跃游戏,跳跃游戏 II,划分字母区间。 一、贪心 1. 买卖股票的最佳时机 原题链接:121. …

SQL语句的训练

DELECT FROM 蜀国 WHEHE name 刘玄德 AND 创业进度<0.5 AND 存活状态 true&#xff1b; 基础的sql语句 SELECT >选择列FROM >确认数据源JOIN >联合操作WHERE >筛选数据GROUP BY >分组 HAVING >过滤分组的数据DISTINCT >去重ORDEY BY > 排序…

汽车 HMI 设计的发展趋势与设计要点

一、汽车HMI设计的发展历程与现状 汽车人机交互界面&#xff08;HMI&#xff09;设计经历了从简单到复杂、从单一到多元的演变过程。2012年以前&#xff0c;汽车HMI主要依赖物理按键进行操作&#xff0c;交互方式较为单一。随着特斯拉Model S的推出&#xff0c;触控屏逐渐成为…

基于51单片机的模拟条形码识别系统proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1AtAry19X3BgavLqXcM4scg 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C51 是一款常用的 8 位单片机&#xff0c;由 Atmel 公司&#xff08;现已被 Microchip 收…

CD22.【C++ Dev】类和对象(13) 流提取运算符的重载和const成员

目录 1.流提取运算符>>的重载 知识回顾 重载方法 operator<<格式 operator>>格式 使用cin对日期类对象写入数据 如果想指定格式输入 方法1:getchar() 方法2:使用临时变量接收字符 完善operator>>代码(修bug) 2.类中的权限问题(const成员) …

Spring 核心技术解析【纯干货版】- XIX:Spring 日志模块 Spring-Jcl 模块精讲

在现代 Java 开发中&#xff0c;日志是调试、监控和维护应用程序的重要工具。Spring 作为企业级框架&#xff0c;提供了 Spring-Jcl 作为日志抽象层&#xff0c;使开发者可以灵活切换不同的日志实现&#xff0c;而无需修改业务代码。本篇文章将深入解析 Spring-Jcl 模块&#x…

Hadoop集群---运维管理和技巧

一. daemon 守护进程管理 1. NameNode守护进程管理 hadoop-daemon.sh start namenode 2. DataNode守护进程管理 hadoop-daemon.sh start datanode 3. ResourceManager守护进程管理 yarn-daemon.sh start resourcemanager 4. NodeManager守护进程管理 yarn-daemon.sh st…

ngx_log_init

定义在 src\core\ngx_log.c ngx_log_t * ngx_log_init(u_char *prefix, u_char *error_log) {u_char *p, *name;size_t nlen, plen;ngx_log.file &ngx_log_file;ngx_log.log_level NGX_LOG_NOTICE;if (error_log NULL) {error_log (u_char *) NGX_ERROR_LOG_PATH;}…

网络华为HCIA+HCIP 策略路由,双点双向

目录 路由策略&#xff0c;策略路由 策略路由优势 策略路由分类 接口策略路由 双点双向 双点双向路由引入特点: 联系 路由回灌和环路问题 路由策略&#xff0c;策略路由 路由策略:是对路由条目进行控制&#xff0c;通过控制路由条目影响报文的转发路径&#xff0c;即路…

水下成像机理分析

一般情况下, 水下环境泛指浸入到人工水体 (如水库、人工湖等)或自然水体(如海洋、河流、湖 泊、含水层等)中的区域。在水下环境中所拍摄 的图像由于普遍受到光照、波长、水中悬浮颗粒物 等因素的影响&#xff0c;导致生成的水下图像出现模糊、退 化、偏色等现象&#xff0c;图像…

MySQL的数据目录以及日志

1.MySQL数据目录 MySQL服务器的管理信息、业务数据、⽇志⽂件、磁盘缓冲⽂件默认存储在数据⽬录下.数据目录保存了我们用户的信息,以及我们创建的数据库和表的数据.维护了日志文件等.mysqld主要操作的就是我们的数据目录. 如何查看数据目录: ll /var/lib/mysql#ll 是查看指令 …

论文阅读:Dual Anchor Graph Fuzzy Clustering for Multiview Data

论文地址:Dual Anchor Graph Fuzzy Clustering for Multiview Data | IEEE Journals & Magazine | IEEE Xplore 代码地址&#xff1a;https://github.com/BBKing49/DAG_FC 摘要 多视角锚图聚类近年来成为一个重要的研究领域&#xff0c;催生了多个高效的方法。然而&#…

32f4,串口1,usart.c.h2025

usart.c #include "sys.h" #include "usart.h" #include "led.h" // #include "stdlib.h" #include "stdarg.h" #include "stdio.h" //加入以下代码,支持printf函数,而不需要选择use MicroLIB #if 1#pragma…

C语言:一组位操作宏

解析协议时&#xff0c;取得位域的值是一种常见操作&#xff0c;这些宏可以辅助我们工作。 /* ** 将x的第n位置1 ** ** x 0x00000000 ** BIT_SET(x, 7) 0x00000080 */ #define BIT_SET(x, n) ((x) | (1 << (n)))/* ** 将x的第n位置为0 ** ** x 0x00000080 ** …

记一个使用BigDecimal所有类型变为整数的问题

场景 通过 Excel 导入数据&#xff0c;数据中包含金额。数据库类型 decimal(18, 6) 问题 Excel 导入后所有的金额列都被四舍五入。经过测试&#xff0c;只有数据有整数时所有数据才会被四舍五入&#xff0c;全部为浮点类型没有问题。 解决 强制设置小数位数 // RoundingM…

nodejs、socket.io、express + 实时线上聊天系统(自用笔记)

留个链接给自己参考用&#xff1a; socket.io官方文档&#xff1a;介绍 | Socket.IO nodejs基础语法&#xff1a;大前端技能讲解&#xff1a;NodeJS、Npm、Es6、Webpack_nodejs webpack-CSDN博客 socket.io教学&#xff1a;半小时学会socket.io【中英字幕】Learn Socket.Io …

配置网络编辑器

网络断开的原因 1.由于网络未连接的情况 解决方法 方法1&#xff1a;检查网卡配置 cd /etc/syscongfig/network_scripts vi ifcfg_ens31 方法2&#xff1a;打开虚拟机编辑--- 虚拟网络编辑器 查看ip地址是否在可用的网段范围内 修改后重启网络 systemctl restart netwo…