llm的inference(二)

news2024/9/20 7:49:16

文章目录

  • Tokenizer
    • 分词
    • 1.单词分词法
    • 2.单字符分词法
    • 3.子词分词法
      • BPE(字节对编码,Byte Pair Encoding)
      • WordPiece
      • Unigram Language Model(ULM)
  • embedding的本质
  • 推理时的一些指标
  • 参考链接

Tokenizer

在使用模型前,都需要将sequence过一遍Tokenizer,进去的是word序列(句子级),出来的是number序列。事实上,HuggingFace的tokenizer总体上做了三件事情:

  1. 分词。将字符串分为一些sub-word token string。再将token string映射到ID,并保留来回映射的mapping。从string映射到ID为tokenizer encode过程,从ID映射回token string 为tokenizer decode过程。映射方法有很多,如BERT用的是WordPiece,GPT-2和RoERTa用的是BPE。
  2. 扩展词汇表。部分tokenizer会用一种统一的方法将训练语料中出现的但是词汇表中本来没有的token加入词汇表
  3. 识别并处理特殊token。特殊token包括[MASK],等。tokenzier会将它们加入词汇表中,并且保证它们在模型中不被切成sub-word,而是完整保留。

分词

从本质来说,文本数据整体上先是文档集合,然后是每一篇文档,然后是每一个段落,然后是每一个句子,然后是每一个短语,然后是每一个词,然后是每一个子词,最后是每一个字符

不同的分词粒度,会导致分词的结果不同,当然也就影响了网络最终的输出结果。下面我们一一介绍。

1.单词分词法

最直观的分词是单词级分词法。单词分词法将一个word作为最小单元,也就是根据空格或者标点分词。
例如Today is Sunday.使用word-base来进行分词会变成['Today','is','Sunday','.']。这种分词方法简单容易理解,每个word都分配一个ID,则所需要的Vocabulary根据语料大小而不同,而且这种分词方式,会将两个本身意思一致的词分成两个毫不相同的ID,例如:cat,cats。

2.单字符分词法

最细粒度的分词方法是单字符分词法(character-base)。它会穷举所有出现的字符,所以是最完整的。在上面的例子中,单字符分词法会生成['T','o','d','a','y',...,'a','y','.']
这种分词方式会导致Vocabulary相对小的多,但分词后的每个字符是毫无意义的,而且输出长度变长不少,只有组装后才有意义。这种分词在模型的初始character embedding是毫无意义的。英文中尤为明显,但是中文却是较为合理,中文中用此种方式较多。

3.子词分词法

这是一种最常用的,介于以上两种方法之间的分词方法,我们称为子词分词法
子词分词法会把上面的句子分成最小可分的子词['To','day','is','S','un','day','.']。子词分词法有很多种取得最小可分子词的方法,例如BPE,WordPiece,SentencePiece,Unigram等等。

BPE(字节对编码,Byte Pair Encoding)

这是目前应用最多的分词方法,GPT以及Llama系列都在使用这种分词方法。具体过程请参考这篇博客。
完成了上述的BPE训练过程,我们就会得到一个词表(vocabulary),但是如何对输入语句进行编码(也就是BPE分词)呢?

  1. 将词表按照其中token的长度,从长到短进行排列;
    例如排序好之后的词表为:
[“errrr</w>”, “tain</w>”, “moun”, “est</w>”, “high”, “the</w>”, “a</w>]
  1. 对输入语句word-level的分词结果进行转化,例如输入语句为:
[“the</w>”, “highest</w>”, “mountain</w>]

则转化为:

"the</w>" -> ["the</w>"]
"highest</w>" -> ["high", "est</w>"]
"mountain</w>" -> ["moun", "tain</w>"]

注:在编码过程结束后,如果输入语句中仍然有子字符串没被替但是词表中的所有token都已经迭代完毕,则将剩余的子词替换为特殊的token,如< unk >。原则上< unk >这个token出现的越少越好,我们也往往用< unk >的数量来评价一个tokenizer的好坏程度,这个token出现的越少,tokenizer的效果往往越好。

那么如何对网络的输出进行解码呢?将所有的tokens拼在一起即可,例如:

# 网络输出
["the</w>", "high", "est</w>", "moun", "tain</w>"]

# 解码序列
"the</w> highest</w> mountain</w>" 

BPE是一种贪婪算法,因为它一直在搜索,知道遇到终止条件才会停止。

WordPiece

WordPiece是BERT使用的分词方法,可以看作是BPE的变种。两者很重要的区别是如何选择两个子词进行合并:WordPiece选择能够提升语言模型概率最大的相邻子词构造词表,但是BPE选择频数最高的相邻子词合并。大致的数学原理请参考这篇博客。

Unigram Language Model(ULM)

ULM与上面的两种分词方法相比,不同之处在于BPE和WordPiece算法的词表都是从小到大变化,属于增量法,而ULM则是减量法,即先初始化一个大词表,根据评估准则不断丢弃词汇,直到满足限定条件。

embedding的本质

我们知道tokenization后就要进行embedding,它的表象是将one-hot的高维向量转为更密集的低维向量的过程,数学上就是对one-hot向量乘以一个矩阵。参考这篇博客,在其中说明了embedding矩阵的本质是什么。在其中指出,Embedding矩阵的本质是一个查找表,由于输入向量是one-hot的,embedding矩阵中有且仅有一行被激活。 博客中作者给出的图如下所示:
在这里插入图片描述
对于第一个单词"I",one-hot编码为[0,0,1,0,0],将其与embedding矩阵相乘,相当于去除embedding矩阵的第3行(index为2),其他的同理。每个单词会定位这个表中的每一行,而这一行就是这个单词学习到的在**嵌入空间(低维密集空间)**的语义。

推理时的一些指标

  1. First Token Latency(首字延迟):指的是当一批用户进入推理系统之后,用户完成prefill阶段(有关prefill的内容参考这篇博客)的过程需要花费多长时间,也称为首个词元生成时间(Time To First Token,简称TTFT)。这也是系统生成第一个字符所需要的响应时间,希望用户在系统上输入问题后得到回答的时间小于2~3秒。
  2. Throughput(吞吐量):当系统的负载达到最大的时候,单位时间内,能够执行多少个Decode,即生成多少个字符。
  3. 单个输出词元的生成时间(Time Per Output Token,简称TOPT):为每个用户生成一个输出词元所需要的时间。
  4. 时延:系统为用户生成完整相应的总时间。整体 相应时延可使用下面的计算方式:时延=TTFT + TPOT*待生成的词元数。

参考链接

  1. https://zhuanlan.zhihu.com/p/360290118
  2. https://martinlwx.github.io/zh-cn/the-bpe-tokenizer/
  3. https://zhuanlan.zhihu.com/p/631463712
  4. https://zhuanlan.zhihu.com/p/198964217
  5. https://www.zhihu.com/question/595001160/answer/3401487634
  6. https://zhuanlan.zhihu.com/p/663282469

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

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

相关文章

AI智能分析网关V4智慧工厂视频智能监管与风险预警平台建设方案

一、背景需求分析 1&#xff09;随着信息技术的迅猛发展和制造业竞争的加剧&#xff0c;智慧工厂成为了推动制造业转型升级的重要引擎。智慧工厂解决方案通过整合物联网、人工智能、大数据分析等先进技术&#xff0c;实现生产过程的智能化、自动化和高效化&#xff0c;为企业提…

Nginx——安装和反向代理

Nginx安装与应用 1.1 Nginx介绍 Nginx 是一个高性能的HTTP和反向代理服务器,特点是占有内存少&#xff0c;并发能力强 Nginx可以作为静态页面的web服务器&#xff0c;同时还支持CGI协议的动态语言&#xff0c;比如perl、php等。但是不支持java。Java程序只能通过与tomcat配合…

Windows部署WebDAV服务并映射到本地盘符实现公网访问本地存储文件

文章目录 前言1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网3.1 安装cpolar内网穿透3.2 配置WebDav公网访问地址 4. 映射本地盘符访问 前言 在Windows上如何搭建WebDav&#xff0c;并且结合cpolar的内网穿透工具实现在公网访…

sqli-labs(less-46)order by 注入

我们打开sql-labs的第46关然后在输入框内输入?id1时会发现页面没有任何的变化&#xff0c;此时我们用Visual Studio Code查看第46关的代码 此时我们发现sql语句是$sql "SELECT * FROM users ORDER BY $id"; &#xff0c;所以现在我们需要了解一下order by语句的作…

防御保护笔记3

内容安全 攻击可能只是一个点&#xff0c;防御需要全方面进行 DFI和DPI技术 --- 深度检测技术 DPI --- 深度包检测技术 --- 主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对 数据包的内容进行识别。&#xff08;应用层&am…

Python服务器监测测试策略与工具:确保应用的高可用性!

在构建高可用性的应用程序时&#xff0c;服务器监测测试是至关重要的一环。Python作为一种强大的编程语言&#xff0c;提供了丰富的工具和库来帮助我们进行服务器监测测试。本文将介绍一些关键的策略和工具&#xff0c;帮助你确保应用的高可用性。 1. 监测策略的制定&#xff…

回归预测 | Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机…

前端开发_Vue入门

Vue概念 Vue 是一个用于构建用户界面的渐进式框架 构建用户界面&#xff1a;基于数据渲染出用户看到的页面渐进式&#xff1a;循序渐进框架&#xff1a;一套完整的项目解决方案 创建Vue实例 准备容器 引包&#xff08;开发版本/生产版本&#xff09; <script src"h…

Leetcode刷题笔记题解(C++):6. Z 字形变换

思路&#xff1a;遍历时候需要更新步进长度 到达0行的时候步进长度为1&#xff1b;到达最后一行numRows-1行的时候步进长度为-1&#xff1b;代码如下所示&#xff1a; class Solution { public:string convert(string s, int numRows) {//如果字符串长度为1或者所给行数为1 …

WampServer环境下载安装并结合内网穿透实现远程访问管理界面

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…

【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

007 地理配准纸质地图

大部分的GIS都会需要对某些影像进行“地理配准 &#xff08;Georeferencing&#xff09;”&#xff0c;也就是说要为影像的每个像素指定它在世界上的 地理空间座标。在多数的情况下&#xff0c;这些座标是通过野外调查收集而来&#xff0c;例如&#xff0c;用GPS设备&#xff0…

Python3.7.1标准安装

Python3.7.1标准安装 官网下载 官网地址&#xff1a;https://www.python.org/downloads/ 下载3.7.1 下载64/32bitwindows安装文件&#xff0c;下图x86-64是64bit&#xff0c;x86是32bit 双击exe文件安装 第一个界面如下图选择 第二个界面默认选择&#xff0c;然后点击Nex…

C++笔记(面对对象部分复习向)

B站&#xff1a;黑马程序员C教程 栈区&#xff0c;全局区&#xff0c;堆区和代码区 析构、构造和static 对象成员与类本身构造顺序&#xff0c;先成员后自己&#xff1b;析构则相反 static修饰成员变量,所有对象共享一份内存&#xff0c;编译阶段分配内存&#xff0c;类内声明…

input/textarea光标位置插入文字

需求是右边编辑sql时&#xff0c;点击左侧常量参数&#xff0c;直接在光标处插入对应的参数&#xff0c;大致实现代码如下&#xff1a; <input type"text" id"myInput" value"Hello, World!"> <button onclick"insertText()&qu…

一个基于 UWP 平台的第三方酷安客户端

前言 今天大姚给大家分享一款UWP平台开源的第三方酷安&#xff08;一个泛科技数码社区&#xff09;客户端应用&#xff1a;Coolapk UWP。 UWP介绍 UWP是Universal Windows Platform的缩写&#xff0c;即通用 Windows 平台。它是微软推出的一种应用程序开发平台&#xff0c;允…

第15章-IP子网划分

1. 子网划分的需求 1.1 早期的IP地址分类 1.2 产生的问题 1.3 现实的应用场景 2. IP子网划分基础知识 2.1 概念 2.2 子网掩码 3. IP子网划分相关计算 3.1 概述 4. VLSM和CIDR 4.1 VLSM(可变长子网掩码)小 → 大&#xff1b; 4.2 CIDR(无类域间路由)大 → 小&#xff1b; 5.…

[AutoSar]BSW_Com03 DBC详解 (一)

目录 关键词平台说明一、DBC 定义1.1 相关工具 二、主要组成部分介绍2.1 Networks2.2 ECUs2.3 Network nodes2.4 messages2.5 signal2.6 Value Tables 三、主要组成部分关系图 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &am…

向量数据库的特性、索引和分析权衡

向量数据库概述 向量数据库的特征 数据库多样性&#xff1a;向量数据库在实现、性能、可扩展性和易用性方面存在差异&#xff0c;支持语义搜索应用。融资与地理位置&#xff1a;多数向量数据库初创公司集中在加州湾区&#xff0c;但资金并不直接反映数据库能力。编程语言&…

路由器端口映射如何配置?

在网络通信中&#xff0c;路由器是一个重要的设备&#xff0c;它负责将数据包从一个网络传输到另一个网络。路由器的端口映射配置是一种重要的设置&#xff0c;可以使外部网络中的计算机通过访问路由器上的特定端口与内部网络中的计算机进行通信。本文将介绍什么是路由器端口映…