当前位置: 首页 > news >正文

前端大模型入门:编码(Tokenizer)和嵌入(Embedding)解析 - llm的输入

LLM的核心是通过对语言进行建模来生成自然语言输出或理解输入,两个重要的概念在其中发挥关键作用:TokenizerEmbedding。本篇文章将对这两个概念进行入门级介绍,并提供了针对前端的js示例代码,帮助读者理解它们的基本原理/作用和如何使用。

1. 什么是Tokenizer?

Tokenizer 是一种将自然语言文本转化为模型可以处理的数字表示的工具。自然语言是由词、子词或字符组成的,而模型无法直接处理这些符号,它们只能处理数字。因此,Tokenizer的主要任务就是将文本转换为一系列数字。

1.1 Tokenizer的工作原理

Tokenizer通过查表的方式,将每个单词、子词或者字符映射为一个唯一的整数ID。这些整数ID作为模型的输入,帮助模型将语言处理为结构化的形式。

以句子“我喜欢学习”为例,一个简单的Tokenizer可能将其分解为每个汉字,并为每个汉字分配一个唯一的整数ID,如下:

  • “我” -> 1
  • “喜欢” -> 2, 3
  • “学习” -> 4, 5

在实际应用中,很多语言模型使用更复杂的分词方式,如子词分割。子词分割允许模型将罕见词分割为多个子词单元,从而提升泛化能力。例如,常见的子词分割方法包括BPE(Byte Pair Encoding)WordPiece,这些方法可以将长词拆分为更小的、频率更高的子词,增强模型处理罕见词汇的能力。

1.2 Tokenizer的种类

  • 词级别(Word-level)Tokenizer:将每个词作为一个Token。适用于语言如英文等分隔明确的文本,但对于中文等无空格分隔的语言不太适合。
  • 子词级别(Subword-level)Tokenizer:基于统计方法,将文本分割为高频子词单元。BPE和WordPiece是常见的子词分割算法。
  • 字符级别(Character-level)Tokenizer:将每个字符视为一个Token。这种方法适用于字符构成较复杂的语言(如中文),但会导致较长的序列输入。

1.3 为什么需要Tokenizer?

  • 将文本转化为数字:语言模型需要处理的是数字而不是文本。Tokenizer将文本符号转换为数字ID,是进入模型的第一步。
  • 词汇管理:通过分词,Tokenizer建立了一个词汇表,其中每个词或子词都对应一个唯一的ID。这让模型可以在推理时迅速查找词的表示。
  • 提升模型的泛化能力:通过分词,特别是子词分词,模型能够处理罕见词和新词,因为它可以将新词拆解为更小的子词单元,避免出现完全未知的词。

1.4 Tokenizer 示例代码 

        其实python相关的库比较多,这里就用一个0依赖的js库来测试,自己也可以子串匹配实现。

npm install @lenml/tokenizers
import { fromPreTrained } from "@lenml/tokenizer-llama3";
const tokenizer = fromPreTrained();
const tokens = tokenizer.apply_chat_template([{role: "system",content: "你是一个有趣的ai助手",},{role: "user",content: "好好,请问怎么去月球?",},]
) as number[];// 转化成token的数组
console.log(tokens);const chat_content = tokenizer.decode(tokens);// 还原了的数据
console.log(chat_content);

2. 什么是Embedding?

Embedding 是将Tokenizer生成的整数ID转化为稠密的向量表示的过程。与Tokenizer将文本转换为离散的整数ID不同,Embedding生成的是连续的实数值向量,这些向量能够捕捉词之间的语义关系。

2.1 Embedding的工作原理

在Embedding阶段,语言模型通过查表的方式,将每个整数ID映射到一个高维向量空间中的向量。这个向量通常是一个固定维度的向量(例如,300维、512维或768维),用来表示单词或子词的语义特征。

例如,经过Tokenizer处理的文本“我喜欢学习”可能会生成整数ID序列 [1, 2, 3, 4, 5]。在Embedding阶段,这些ID会被转换为稠密向量表示,如:

  • “我” -> [0.25, -0.34, 0.15, ...]
  • “喜欢” -> [0.12, 0.57, -0.22, ...], [0.11, -0.09, 0.31, ...]
  • “学习” -> [0.33, -0.44, 0.19, ...], [0.09, 0.23, -0.41, ...]

这些向量并不是随机生成的,它们是在模型的训练过程中被学习得到的。Embedding向量的维度固定,但向量的数值根据模型对词语上下文的理解不断更新和优化,最终形成一个语义丰富的向量表示。

2.2 Embedding的种类

  • 词向量(Word Embedding):如Word2Vec、GloVe等方法,通过静态词向量将词语映射到向量空间中。这些方法的Embedding是静态的,即同一个词在不同上下文中具有相同的向量。
  • 上下文相关的Embedding:如BERT、GPT等方法生成的Embedding,是基于上下文的动态向量。同一个词在不同的上下文中可能有不同的向量表示,从而更加精准地捕捉语言中的多义性和语境变化。

2.3 为什么需要Embedding?

  • 捕捉词之间的语义关系:通过Embedding,模型可以将语义相似的词表示为相近的向量。例如,“猫”和“狗”的向量在空间中可能非常接近,而“猫”和“车”的向量则会相距较远。
  • 连续性表示:与离散的整数ID不同,Embedding向量是连续的。这使得模型能够更好地进行计算和优化,因为连续的数值表示可以更容易进行梯度计算和模型学习。
  • 语义压缩:Embedding将高维的语言信息压缩到一个固定的向量空间中,这样模型就可以高效地处理输入并捕捉到其中的重要语义特征。

2.4 使用 TensorFlow.js实现一个嵌入层

接下来,我们用 TensorFlow.js 来实现一个简单的Embedding层。

首先安装 TensorFlow.js:

npm install @tensorflow/tfjs

然后我们创建一个简单的Embedding层,将Token IDs转换为对应的Embedding向量。

const tf = require('@tensorflow/tfjs');// 假设词汇表大小为10000,嵌入维度为300
const vocabSize = 10000;
const embeddingDim = 300;// 创建一个Embedding层
const embeddingLayer = tf.layers.embedding({inputDim: vocabSize, outputDim: embeddingDim});// 输入是之前Tokenizer的Token IDs
const tokenIds = tf.tensor([[1045, 2293, 4083]]);  // Batch size为1,三个Token// 使用Embedding层将Token IDs转化为Embedding向量
const embeddings = embeddingLayer.apply(tokenIds);embeddings.print();  // 输出Embedding结果

在这个示例中,我们定义了一个词汇表大小为10000、嵌入维度为300的Embedding层。tokenIds代表之前从Tokenizer生成的Token ID序列,经过Embedding层后,生成对应的300维度的稠密向量。

注意下tfjs在浏览器和nodejs的时候不同的backend性能和表现有点差异,但基本可用,详细接口参考TensorFlow.js API 

另外有时候进行向量化比较吃资源,或者需要处理大量文本和超高向量时,可使用各个AI平台提供的接口,一般叫做嵌入/向量化/句向量等

3. Tokenizer和Embedding的关系

在LLM中,TokenizerEmbedding是文本处理的两个连续步骤:

  1. Tokenizer负责将文本分割为Token,并将这些Token映射为离散的整数ID。
  2. Embedding则将这些整数ID进一步转化为稠密的向量表示,以便模型能够进行深度学习和优化。

它们的关系可以简单总结为:Tokenizer将语言中的离散符号表示成模型可以识别的离散ID,而Embedding则将这些离散ID转化为连续的向量,以便捕捉词之间的语义关系。

4. 总结

在大规模语言模型(LLM)中,TokenizerEmbedding是两个基础且关键的步骤。Tokenizer通过分词和映射,将文本转化为模型可以处理的数字序列。而Embedding则将这些数字序列进一步转化为语义丰富的向量表示。这两个步骤共同构成了LLM处理自然语言输入的基础,为模型的语义理解和生成提供了强大的支持。

对于初学者来说,理解Tokenizer和Embedding的作用及其背后的原理,将为深入学习LLM及其应用打下坚实的基础。

看了这么多,作为前端的你,还不赶紧npm install一下然后测试测试? ps: tfjs有cdn版本,简单测试可以直接用url引入,可能比安装更简单就是要等待

相关文章:

前端大模型入门:编码(Tokenizer)和嵌入(Embedding)解析 - llm的输入

LLM的核心是通过对语言进行建模来生成自然语言输出或理解输入,两个重要的概念在其中发挥关键作用:Tokenizer 和 Embedding。本篇文章将对这两个概念进行入门级介绍,并提供了针对前端的js示例代码,帮助读者理解它们的基本原理/作用和如何使用。 1. 什么是…...

一文读懂 JS 中的 Map 结构

你好,我是沐爸,欢迎点赞、收藏、评论和关注。 上次聊了 Set 数据结构,今天我们聊下 Map,看看它与 Set、与普通对象有什么区别?下面直接进入正题。 一、Set 和 Map 有什么区别? Set 是一个集合&#xff0…...

C++校招面经(二)

欢迎关注 0voice GitHub 6、 C 和 Java 区别(语⾔特性,垃圾回收,应⽤场景等) 指针: Java 语⾔让程序员没法找到指针来直接访问内存,没有指针的概念,并有内存的⾃动管理功能,从⽽…...

Python Web 面试题

1 Web 相关 get 和 post 区别 get: 请求数据在 URL 末尾,URL 长度有限制 请求幂等,即无论请求多少次,服务器响应始终相同,这是因为 get 至少获取资源,而不修改资源 可以被浏览器缓存,以便以后…...

java日志框架之JUL(Logging)

文章目录 一、JUL简介1、JUL组件介绍 二、Logger快速入门三、Logger日志级别1、日志级别2、默认级别info3、原理分析4、自定义日志级别5、日志持久化(保存到磁盘) 三、Logger父子关系四、Logger配置文件 一、JUL简介 JUL全程Java Util Logging&#xff…...

ARM驱动学习之PWM

ARM驱动学习之PWM 1.分析原理图: GPD0_0 XpwmTOUT0定时器0 2.定时器上的资源: 1.5组32位定时器 2.定时器产生内部中断 3.定时器0,1,2可编程实现pwm 4.定时器各自分频 5.TCN--,TCN TCMPBN 6.分频器 24-2 7.24.3.4 例子&#xff1…...

我的AI工具箱Tauri版-VideoClipMixingCut视频批量混剪

本教程基于自研的AI工具箱Tauri版进行VideoClipMixingCut视频批量混剪。 VideoClipMixingCut视频批量混剪 是自研AI工具箱Tauri版中的一款强大工具,专为自动化视频批量混剪设计。该模块通过将预设的解说文稿与视频素材进行自动拼接生成混剪视频,适合需要…...

postgres_fdw访问存储在外部 PostgreSQL 服务器中的数据

文章目录 一、postgres_fdw 介绍二、安装使用示例三、成本估算四、 远程执行选项执行计划无法递推解决 参考文件: 一、postgres_fdw 介绍 postgres_fdw 模块提供外部数据包装器 postgres_fdw,可用于访问存储在外部 PostgreSQL 服务器中的数据。 此模块…...

什么是3D展厅?有何优势?怎么制作3D展厅?

一、什么是3D展厅? 3D展厅是一种利用三维技术构建的虚拟展示空间。它借助虚拟现实(VR)、增强现实(AR)等现代科技手段,将真实的展示空间数字化,呈现出逼真、立体、沉浸的展示效果。通过3D展厅&a…...

Linux下的CAN通讯

CAN总线 CAN总线简介 CAN&#xff08;Controller Area Network&#xff09;总线是一种多主从式 <font color red>异步半双工串行 </font> 通信总线&#xff0c;它最早由Bosch公司开发&#xff0c;用于汽车电子系统。CAN总线具有以下特点&#xff1a; 多主从式&a…...

【Python】pip安装加速:使用国内镜像源

【Python】pip安装加速&#xff1a;使用国内镜像源 零、使用命令行设置 设置全局镜像源 随便使用下面任一命令即可&#xff01; 阿里云&#xff1a; pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/豆瓣&#xff1a; pip config set global.in…...

SpringBoot lombok(注解@Getter @Setter)

SpringBoot lombok(注解Getter Setter) 使用lombok注解的方式&#xff0c;在编译生成的字节码文件中就会存在setter/getter等方法&#xff0c;减少代码量&#xff0c;方便了代码的维护 添加依赖 <dependency><groupId>org.projectlombok</groupId><artif…...

descrTable常用方法

descrTable 为 R 包 compareGroups 的重要函数&#xff0c;有关该函数以及 compareGroups 包的详细内容见&#xff1a;R包compareGroups详细用法 加载包和数据 library(compareGroups)# 加载 REGICOR 数据&#xff08;横断面&#xff0c;从不同年份纳入&#xff0c;每个变量有…...

回归预测 | Matlab实现ReliefF-XGBoost多变量回归预测

回归预测 | Matlab实现ReliefF-XGBoost多变量回归预测 目录 回归预测 | Matlab实现ReliefF-XGBoost多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.ReliefF-xgboost回归预测代码&#xff0c;对序列数据预测性能相对较高。首先通过ReleifF对输入特征计算权…...

年度最强悬疑美剧重磅回归,一集比一集上头

纽约的夜晚&#xff0c;平静被一声枪响打破&#xff0c;一场离奇的谋杀案悄然上演。《大楼里只有谋杀》正是围绕这样一桩扑朔迷离的案件展开的。三位主角&#xff0c;赛琳娜戈麦斯饰演的梅宝、史蒂夫马丁饰演的查尔斯、马丁肖特饰演的奥利弗&#xff0c;这些性格迥异的邻居因为…...

AI一点通: 简化大数据与深度学习工作流程, Apache Spark、PyTorch 和 Mosaic Streaming

在大数据和机器学习飞速发展的领域中&#xff0c;数据科学家和机器学习工程师经常面临的一个挑战是如何桥接像 Apache Spark 这样的强大数据处理引擎与 PyTorch 等深度学习框架。由于它们在架构上的固有差异&#xff0c;利用这两个系统的优势可能令人望而生畏。本博客介绍了 Mo…...

Python知识点:深入理解Python的模块与包管理

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; 深入理解Python的模块与包管理 Python的模块和包是代码组织、复用和分发的基本…...

倒排索引(反向索引)

倒排索引&#xff08;Inverted Index&#xff09;是搜索引擎和数据库管理系统中常用的一种数据结构&#xff0c;用于快速检索文档集合中的文档。在全文搜索场景中&#xff0c;倒排索引是一种非常高效的手段&#xff0c;因为它能够快速定位到包含特定关键词的所有文档。 1、基本…...

openCV的python频率域滤波

在OpenCV中实现频率域滤波通常涉及到傅里叶变换(Fourier Transform)和其逆变换(Inverse Fourier Transform)。傅里叶变换是一种将图像从空间域转换到频率域的数学工具,这使得我们可以更容易地在图像的频域内进行操作,如高通滤波、低通滤波等。 下面,我将提供一个使用Py…...

探索视频美颜SDK与直播美颜工具的开发实践方案

直播平台的不断发展&#xff0c;让开发出性能优异、效果自然的美颜技术&#xff0c;成为了技术团队必须面对的重要挑战。本篇文章&#xff0c;小编将深入讲解视频美颜SDK与直播美颜工具的开发实践方案。 一、视频美颜SDK的核心功能 视频美颜SDK是视频处理中的核心组件&#xf…...

[具身智能-190]:具身智能常见的仿真平台与常见的模型算法,包括传统算法与AI算法。

在具身智能的开发中&#xff0c;仿真平台与模型算法是相辅相成的两个核心部分。仿真平台为算法提供了安全、高效、低成本的“练兵场”&#xff0c;而算法则是赋予机器人智能的“大脑”。以下为你梳理当前主流的仿真平台以及两类核心的模型算法&#xff1a;传统算法与AI算法。&a…...

Beyond Compare 5终极激活指南:免费获取永久授权密钥的完整教程

Beyond Compare 5终极激活指南&#xff1a;免费获取永久授权密钥的完整教程 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen Beyond Compare 5作为业界领先的文件对比工具&#xff0c;其强大的功…...

路由器、交换机、光猫有什么区别?网络设备基础入门

路由器、交换机、光猫有什么区别&#xff1f;网络设备基础入门前言一、光猫、路由器、交换机分别是干什么的二、三者最核心的区别到底是什么1.它是否直接面对运营商网络&#xff1f;2.它是否负责“让多台设备上网”&#xff1f;3.它是否主要用于扩展有线接口&#xff1f;三、先…...

【PyTorch 3.0静态图分布式训练黑盒揭秘】:从FX Graph到Triton Kernel调度的7个隐藏断点与性能衰减临界值

第一章&#xff1a;PyTorch 3.0静态图分布式训练面试综述随着大规模模型训练需求激增&#xff0c;PyTorch 3.0正式引入原生静态图编译&#xff08;torch.compile&#xff09;与分布式训练深度协同机制&#xff0c;显著提升多GPU/多节点场景下的吞吐与可复现性。该版本将 torch.…...

生成单颗10mm级配的cluster骨料

PFC5.0代码&#xff0c;可以破碎的cluster&#xff0c;可模拟碎石、矿渣混凝土材料&#xff0c;ball与cluster颗粒&#xff0c;单轴压缩实验&#xff0c;内涵声发射事件数代码&#xff0c;分析统计ball与ball直接的裂纹数目&#xff0c;cluster内部破碎的裂纹数目上周帮同门调P…...

DanKoe 视频笔记:个人成长:如何变得更加“不同意”(创造一个现实扭曲场)

在本节课中&#xff0c;我们将学习如何通过有意识地坚持自我、明确目标并有效沟通&#xff0c;来构建一个强大的“现实扭曲场”&#xff0c;从而更坚定地追求自己想要的生活&#xff0c;而非被动地迎合他人。 我们常常被教导要友善、随和&#xff0c;避免冲突。然而&#xff0c…...

智能驱动,精准雾化:探秘微孔雾化片专用IC的自适应频率与无水保护

1. 微孔雾化技术的前世今生 第一次拆解家用加湿器时&#xff0c;我被那片直径不到3cm的金属薄片震惊了——它竟能凭空"变"出细腻的水雾。这就是微孔雾化片&#xff0c;通过每秒10万次以上的高频振动将液态水"打碎"成微米级颗粒。但要让这片金属薄片稳定工作…...

中国DevOps市场格局重塑:本土合规与全球协作的平衡艺术

中国DevOps市场格局重塑&#xff1a;本土合规与全球协作的平衡艺术 中国企业的DevOps工具链选择正面临前所未有的复杂局面 随着数字经济的深入发展&#xff0c;DevOps工具链已经从单纯的技术选型问题演变为关乎企业数字化转型成败的战略决策。在当前的宏观环境下&#xff0c;…...

千问3.5-27B多模态入门:图片理解支持mask区域聚焦,如‘只分析左上角区域’

千问3.5-27B多模态入门&#xff1a;图片理解支持mask区域聚焦&#xff0c;如‘只分析左上角区域’ 你是不是遇到过这种情况&#xff1a;给AI看一张复杂的图片&#xff0c;比如一张满是商品的货架&#xff0c;你只想让它分析左上角那个红色包装的零食&#xff0c;但它却把整张图…...

【喜报】义翘神州再获CNAS认可,全面对标2025版药典新标准

义翘神州生物安全检测实验室近日成功通过中国合格评定国家认可委员会&#xff08;CNAS&#xff09;的扩项评审及定期监督评审&#xff0c;并已完成全部能力附表更新&#xff01;这标志着实验室技术能力与质量管理体系持续符合ISO/IEC 17025:2017国际标准的严苛要求&#xff0c;…...