LLM 中的 vocabulary 和 embedding vector

vocabulary

将自然语言转换为token id是根据模型使用的词汇表(vocabulary)进行的。这个过程通常分为两个步骤:

  1. 分词(Tokenization)

    将输入的自然语言文本按照某种规则分割成一系列的token,可以是单词、子词或者字符等。分词的规则需要事先定义好,通常使用诸如基于词典、基于规则、基于统计等方法。

  2. 查表(Lookup)

    将分词得到的每个token在词汇表中查找对应的数值id。词汇表本质上是一个token到整数id的映射表。对于模型来说,处理token id比处理原始文本更高效。

具体来说,模型在训练阶段会先构建一个词汇表,包含了所有可能出现的token及其对应的id。在预测时,输入文本首先被分词器分割成token序列,然后模型将每个token查表得到对应的id,运算时使用这些id代替原始token。

值得注意的是,有些token可能在训练集中从未出现过,这种情况下一般会将它们映射为一个特殊的未知token id,例如 “< unk >”。

所以token id这一步是将自然语言离散化,使其可以被模型高效处理,是连接自然语言和神经网络模型的关键环节。

词汇表的大小对语言模型的性能和效果非常重要,主要有以下几点原因:

  1. 覆盖率
    词汇表越大,能够覆盖的词汇就越多,对于拥有丰富词汇的语料来说,较大的词汇表可以更好地表示语言的多样性,避免过多的未知词。

  2. 参数量
    词汇表的大小直接决定了模型的Embedding层参数量。较大的词汇表意味着需要更多参数来存储每个词的Embedding向量,从而增加模型的容量,但也可能导致过度拟合。

  3. 计算效率
    在预测时,模型的输出层计算量与词汇表大小成正比。较大的词汇表会导致计算开销的增加,延长模型响应时间。

  4. 稀疏性
    过大的词汇表会加剧模型Embedding层的稀疏性,使得大量的Embedding向量无法被有效地利用和优化。

因此在设计语言模型时,需要在词汇表大小、模型覆盖能力、计算效率、参数量之间权衡取舍。通常采用以下策略:

  1. 对于开放域场景,需使用较大词汇表以覆盖更多词汇。

  2. 对于特定领域,可构建较小的领域词汇表。

  3. 采用子词或字符级别的表示,避免词汇表过大。

  4. 使用词汇表裁剪等技术,移除低频词。

词汇表的大小对模型非常重要,主要因为以下几个方面:

  1. 性能与精确度:一个较大的词汇表可以更精确地覆盖和表达语言的多样性,包括专业术语、新词等。这可以提高模型处理复杂文本的能力。然而,过大的词汇表可能会使模型变得参数庞大,训练和推理的计算成本增加。

  2. 泛化能力:较小的词汇表可能导致更高的词汇外(Out-Of-Vocabulary, OOV)率,即模型遇到未在词汇表中的词汇时无法正确处理。这对模型的泛化能力是不利的。通过合理设计词汇表可以减少OOV问题,例如使用子词分割(Subword Tokenization)方法。

  3. 内存与存储:词汇表的大小直接影响模型的内存使用和存储需求。更大的词汇表需要更多的内存来存储词嵌入(Word Embeddings),这可能在资源受限的环境中成为问题。

  4. 训练时间:词汇表越大,模型在训练期间需要学习的参数就越多,这可能导致训练时间延长。

预先构建词汇表

词汇表(vocabulary)是在训练语言模型之前就需要预先构建的。它定义了模型在输入和输出时将使用哪些词/字符的集合。词汇表的构建通常有以下几种常见方式:

  1. 语料统计

最常见的做法是基于大规模语料库统计词频,按一定规则(如设置词频阈值)选取高频词构建词汇表。这种方式可以覆盖语料中常见词汇。

  1. 预定义词表

在某些特定领域,可以使用预先定义好的专业词表,确保模型可以很好地覆盖该领域核心词汇。

  1. 基于规则

有些模型直接基于一套规则从训练语料中提取token,如字符级别、bytes等。这种做法无需预先统计词频。

  1. 子词切分

一些流行的做法如BPE(Byte Pair Encoding)、WordPiece等,是将单词按照统计规则切分成子词序列,子词作为词汇表的基本单元。这种方式可以处理未见词问题。

  1. 词汇表融合

在很多情况下,会将以上多种方式结合使用,构建覆盖面更广的融合词汇表。如先使用基本词表,再加入子词、专业词等。

除了上述构建词汇表的方法,还需要考虑如何处理稀有词、是否添加特殊token(如UNK)等问题。另外,为了控制模型计算复杂度,词汇表大小通常也有一定限制。

总的来说,合理构建高质量的词汇表对语言模型的性能非常重要,需要结合具体任务场景选择合适的构建策略。

例子

input: OpenAI’s large language models process text using tokens, which are common sequences of characters found in a set of text.

tokenization:

  1. 分词
    ![[Screen Shot 2024-04-27 at 22.10.40 PM.png]]
  2. 编码
    ![[Screen

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全志ARM-超声波测距

超声波测距模块是用来测量距离的一种产品&#xff0c;通过发送和收超声波&#xff0c;利用时间差和声音传播速度&#xff0c; 计算出模块到前方障碍物的距离 1.测距原理&#xff1a; 给Trig端口至少10us的高电平发送声波&#xff0c;Echo信号&#xff0c;由低电平跳转到高电平…

Docker 部署与操作

一 国内&#xff1a; 中国电信天翼云 提供包括云主机在内的全方位云计算服务&#xff0c;侧重于安全合规和企业级服务。 利用电信的网络优势&#xff0c;提供稳定可靠的基础设施服务。 中国联通沃云 提供包括云主机在内的多项云计算服务&#xff0c;适合不同行业和场景。 …

Redis篇:缓存雪崩及解决方案

1.何为缓存雪崩 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 2.缓存雪崩的解决方案 解决方案&#xff1a; 给不同的Key的TTL添加随机值 利用Redis集群提高服务的可用性 给缓存业务添加降级…

如何避免被恶意攻击的IP地址

随着互联网的普及和发展&#xff0c;网络安全问题日益受到关注&#xff0c;恶意攻击成为网络安全的一大威胁。而IP地址作为网络通信的基础&#xff0c;常常成为恶意攻击的目标之一。本文将探讨如何避免被恶意攻击的IP地址&#xff0c;提高网络安全水平。 1. 定期更新安全补丁 …

【C++】--------模板进阶

目录 前言 一、非类型模板参数 定义 二、模板的特化&#xff08;步骤都一样&#xff09; 1.概念 2.函数模板特化的步骤 3.类模板的特化 3.1全特化 3.2偏特化/半特化 三、模板的分离与编译 1.什么是分离编译&#xff1f; 2.模板的分离与编译 四、总结 前言 我们已经…

BPE、Wordpiece、Unigram、SpanBERT等Tokenizer细节总结

BPE(Byte Pair Encoding) GPT-2和Roberta用的是这种&#xff0c;不会产生[UNK]这个unknown字符 这部分部分摘录自https://martinlwx.github.io/zh-cn/the-bpe-tokenizer/ 看以下code例子就足够理解了&#xff0c;核心是维护self.merges&#xff08;维护一个pair->str的字…

一文掌握Vue依赖注入:原理、应用场景以及最佳模块化与单元测试实践,提升代码的可维护性与模块化程度

Vue 中的依赖注入&#xff08;Dependency Injection, DI&#xff09;机制通过 provide 与 inject API&#xff0c;实现了跨组件层级间的数据与服务透明传递&#xff0c;使父组件能够向其任意深度的子孙组件“注入”依赖&#xff0c;而不需要通过层层传递 props 或使用全局状态管…

Pytorch实现线性回归模型

在机器学习和深度学习的世界中&#xff0c;线性回归模型是一种基础且广泛使用的算法&#xff0c;简单易于理解&#xff0c;但功能强大&#xff0c;可以作为更复杂模型的基础。使用PyTorch实现线性回归模型不仅可以帮助初学者理解模型的基本概念&#xff0c;还可以为进一步探索更…

SpringCloud(微服务介绍,远程调用RestTemplate,注册中心Nacos,负载均衡Ribbon,环境隔离,进程和线程的区别)【详解】

目录 一、微服务介绍 1. 系统架构的演变 1 单体架构 2 分布式服务 3 微服务 2. SpringCloud介绍 SpringCloud简介 SpringCloud版本 3. 小结 二、远程调用RestTemplate【理解】 1. 服务拆分 1 服务拆分原则 2 服务拆分示例 1) 创建父工程 2) 准备用户服务 1. 用户…

Docker数据管理与Dockerfile镜像创建

前言 在容器化环境中&#xff0c;如何有效地管理和持久化数据成为了开发人员和运维团队面临的挑战之一&#xff1b;另一方面&#xff0c;镜像的创建是构建容器化应用的基础。优化的镜像设计可以提高部署效率和应用性能&#xff0c;减少资源消耗和运行成本。本文将介绍 Docker …

锂电池SOH预测 | 基于LSTM的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

锂电池SOH预测 | 基于CNN-GRU的锂电池SOH预测(matlab)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

【Docker】Docker 实践(三):使用 Dockerfile 文件构建镜像

Docker 实践&#xff08;三&#xff09;&#xff1a;使用 Dockerfile 文件构建镜像 1.使用 Dockerfile 文件构建镜像2.Dockerfile 文件详解 1.使用 Dockerfile 文件构建镜像 Dockerfile 是一个文本文件&#xff0c;其中包含了一条条的指令&#xff0c;每一条指令都用于构建镜像…

解决VMware启动异常

问题1&#xff1a;该虚拟机似乎正在使用中。如果该虚拟机未在使用&#xff0c;请按“获取所有权(T)”按钮获 取它的所有权。否则&#xff0c;请按“取消(C)”按钮以防损坏。 解决步骤&#xff1a; 按弹框提示的配置文件目录下删除后缀为lck的文件&#xff08;lock&#xff09;。…

Facebook的未知力量:数字世界的新引擎

在数字化的时代&#xff0c;社交媒体已经成为了我们日常生活中不可或缺的一部分&#xff0c;而Facebook作为其中的巨头&#xff0c;其影响力远远超出了我们的想象。但是&#xff0c;Facebook背后隐藏的力量和影响远不止于此&#xff0c;它正逐渐成为数字世界的新引擎&#xff0…

C语言-动态内存分配

即使行动导致错误&#xff0c;却也带来了学习与成长;不行动则是停滞与萎缩。&#x1f493;&#x1f493;&#x1f493; •&#x1f319;知识回顾 亲爱的友友们大家好&#xff01;&#x1f496;&#x1f496;&#x1f496;&#xff0c;我们紧接着要进入一个新的内容&#xff0c;…

STM32单片机C语言模块化编程实战:按键控制LED灯详解与示例

一、开发环境 硬件&#xff1a;正点原子探索者 V3 STM32F407 开发板 单片机&#xff1a;STM32F407ZGT6 Keil版本&#xff1a;5.32 STM32CubeMX版本&#xff1a;6.9.2 STM32Cube MCU Packges版本&#xff1a;STM32F4 V1.27.1 之前介绍了很多关于点灯的方法&#xff0c;比如…

微信小程序的常用API②

一、动画API &#xff08;1&#xff09;作用&#xff1a;用于在微信小程序中完成动画效果的制作 &#xff08;2&#xff09;使用&#xff1a;创建实例 wx.createAnimation() &#xff08;3&#xff09;常用属性&#xff1a; duration 【number型】 动画持续时间&…

Qt的qtmqtt库连接onenet出现QMQTT::SocketRemoteHostClosedError解决方法

问题描述 在Qt发开过程中使用qtmqtt库来连接onenet的mqtt服务器&#xff0c;在ClientId、Username和Password均填写正确的情况下还是连接不上&#xff0c;查看错误显示QMQTT::SocketRemoteHostClosedError。 解决方法 client中的CleanSession标志位必须设置为true。 client …

分子动力学模拟学习-Gromacs工具链

1、总体流程 在gromacs的使用说明中有一个flow chart&#xff0c;比较简略。以下针对一般体系&#xff08;非蛋白等领域&#xff09;进行了一些调整&#xff0c;通用性更强。 在做分子动力学模拟时&#xff0c;其复杂性除了以上各种输入输出文件的操作&#xff0c;另一点就是力…