首页 > 其他分享 >大模型词表构建

大模型词表构建

时间:2023-12-06 19:55:38浏览次数:35  
标签:BPE 模型 词表 SentencePiece 构建 BBPE 分词

1.引言

在文本输入embedding层之前,以中文文本为例,首先对文本进行分词并进行one-hot编码,分词肯定是根据词表来进行分词,那构建一个合适的词表就显得至关重要,过大或者过小都会对后续模型的训练效果产生影响。所以这里介绍当前各个大模型的词表构建方法。

2.技术基础

在介绍具体的词表构建方法之前,我们首先了解一下什么是分词器(Tokenizer)。
什么是分词器?简单点说就是将字符序列转化为数字序列,对应模型的输入。
通常情况下,Tokenizer有三种粒度:word/char/subword

  • word: 按照词进行分词,如: Today is sunday. 则根据空格或标点进行分割[today, is, sunday, .]
  • character:按照单字符进行分词,就是以char为最小粒度。 如:Today is sunday. 则会分割成[t, o, d,a,y, .... ,s,u,n,d,a,y, .]
  • subword:按照词的subword进行分词。如:Today is sunday. 则会分割成[to, day,is , s,un,day, .]
    可以看到这三种粒度分词截然不同,各有利弊。

对于word粒度分词:

优点:词的边界和含义得到保留;

缺点:
1)词表大,稀有词学不好;
2)OOV(可能超出词表外的词);
3)无法处理单词形态关系和词缀关系,会将两个本身意思一致的词分成两个毫不相同的ID,在英文中尤为明显,如:cat, cats。

对于character粒度分词:

优点:词表极小,比如:26个英文字母几乎可以组合出所有词,5000多个中文常用字基本也能组合出足够的词汇;

缺点:
1)无法承载丰富的语义,英文中尤为明显,但中文却是较为合理,中文中用此种方式较多。
2)序列长度大幅增长;

最后为了平衡以上两种方法,又提出了基于subword进行分词:它可以较好的平衡词表大小与语义表达能力,当前大模型均是采用这种力度的分词方法。
所以如何构造一个subword力度的词表就很重要。

3.类别比较和说明

常见的子词算法有Byte-Pair Encoding (BPE) / Byte-level BPE(BBPE)、Unigram LM、WordPiece、SentencePiece等。

  • BPE:即字节对编码。其核心思想是从字母开始,不断找词频最高、且连续的两个token合并,直到达到目标词数。
  • BBPE:BBPE核心思想将BPE的从字符级别扩展到子节(Byte)级别。BPE的一个问题是如果遇到了unicode编码,基本字符集可能会很大。BBPE就是以一个字节为一种“字符”,不管实际字符集用了几个字节来表示一个字符。这样的话,基础字符集的大小就锁定在了256(2^8)。采用BBPE的好处是可以跨语言共用词表,显著压缩词表的大小。而坏处就是,对于类似中文这样的语言,一段文字的序列长度会显著增长。因此,BBPE based模型可能比BPE based模型表现的更好。然而,BBPE sequence比起BPE来说略长,这也导致了更长的训练/推理时间。BBPE其实与BPE在实现上并无大的不同,只不过基础词表使用256的字节集。
  • WordPiece:WordPiece算法可以看作是BPE的变种。不同的是,WordPiece基于概率生成新的subword而不是下一最高频字节对。WordPiece算法也是每次从词表中选出两个子词合并成新的子词。BPE选择频数最高的相邻子词合并,而WordPiece选择使得语言模型概率最大的相邻子词加入词表。
  • Unigram:它和 BPE 以及 WordPiece 从表面上看一个大的不同是,前两者都是初始化一个小词表,然后一个个增加到限定的词汇量,而 Unigram Language Model 却是先初始一个大词表,接着通过语言模型评估不断减少词表,直到限定词汇量。
  • SentencePiece:SentencePiece它是谷歌推出的子词开源工具包,它是把一个句子看作一个整体,再拆成片段,而没有保留天然的词语的概念。一般地,它把空格也当作一种特殊字符来处理,再用BPE或者Unigram算法来构造词汇表。SentencePiece除了集成了BPE、ULM子词算法之外,SentencePiece还能支持字符和词级别的分词。

4.具体应用示例

当前大语言模型大部分使用sentencepiece库中的BBPE分词算法来构建词表。

模型 训练数据 模型参数 训练数据范围 词表大小 分词算法
llama 1T-1.4T 7B-65B 英文等拉丁语 32000 BBPE
chatglm-6b 1T 6B 中英双语 130528 BBPE
bloom 1.6T 300M-176B 46种语言 250680 BBPE

简单介绍一下sentencepiece:
SentencePiece 是一种无监督的文本 tokenizer 和 detokenizer,主要用于基于神经网络的文本生成系统,其中,词汇量在神经网络模型训练之前就已经预先确定了。 SentencePiece 实现了subword单元(例如,字节对编码 (BPE))和 unigram 语言模型),并可以直接从原始句子训练字词模型(subword model)。 这使得我们可以制作一个不依赖于特定语言的预处理和后处理的纯粹的端到端系统。
技术优势:
SentencePiece 技术优势

  • 纯数据驱动:SentencePiece 从句子中训练 tokenization 和 detokenization 模型。 并不总是需要Pre-tokenization(Moses tokenizer/MeCab/KyTea) 。
  • 独立于语言:SentencePiece 将句子视为 Unicode 字符序列。 没有依赖于语言的逻辑。多子词算法:支持 BPE 和 unigram 语言模型。
  • 子词正则化:SentencePiece 实现子词正则化和 BPE-dropout 的子词采样,有助于提高 NMT 模型的鲁棒性和准确性。
  • 快速且轻量级:分割速度约为 50k 句子/秒,内存占用约为 6MB。
  • Self-contained:只要使用相同的模型文件,就可以获得相同的tokenization/detokenization。
  • 直接词汇 ID 生成:SentencePiece 管理词汇到 ID 的映射,可以直接从原始句子生成词汇 ID 序列。
  • 基于 NFKC 的 normalization:SentencePiece 执行基于 NFKC 的文本 normalization。

标签:BPE,模型,词表,SentencePiece,构建,BBPE,分词
From: https://www.cnblogs.com/Leahy/p/17808159.html

相关文章

  • 构建一个语音转文字的WebApi服务
    构建一个语音转文字的WebApi服务简介由于业务需要,我们需要提供一个语音输入功能,以便更方便用户的使用,所以我们需要提供语音转文本的功能,下面我们将讲解使用Whisper将语音转换文本,并且封装成WebApi提供web服务给前端调用。创建项目第一步打开Vscode,选择一个目录作为工作空间,然......
  • 短视频购物系统源码:构建创新购物体验的技术深度解析
    短视频购物系统作为电商领域的新宠,其背后的源码实现是其成功的关键。本文将深入探讨短视频购物系统的核心技术和源码设计,以揭示其如何构建创新购物体验的技术奥秘。1.技术架构与框架选择短视频购物系统的源码首先考虑的是其技术架构。常见的选择包括前端框架(如React、Vue.js)和后端......
  • 史文钊谈数字技术在医学创新中的应用:大模型不求大,贵在精
    近日,国际性学术会议“北京论坛2023”隆重召开,迄今已举办20届。本届论坛以“文明的和谐与共同繁荣——传承与互鉴”为主题,下设16个分论坛和4个专题论坛,来自国内外各领域的600余位顶级专家学者聚焦后疫情时代的全球可持续发展,通过对话与交流为解决新时代课题贡献智慧。作为北......
  • 构建第一个事件驱动型 Serverless 应用
    我认为,无服务器技术真的有助于最大限度节省应用开发和部署的时间,并且无服务器技术用可控的成本,实现了我的那些有趣的想法。在我20多年IT从业经历中,一直专注于IT基础架构的设计和搭建,并没有很多编程的经验。入职亚马逊云科技之后,我成为一名开发者布道师,为了了解和传播亚马逊......
  • 在科技行业的热门趋势中,你必定无法忽视日益增长的人工智能大模型的影响力。无论是你热
    在科技行业的热门趋势中,你必定无法忽视日益增长的人工智能大模型的影响力。无论是你热衷浏览的短视频还是见不得的“AI绘画”,或者是你的朋友圈中充斥的“虚拟试衣”和智能聊天软件ChatGPT,这些都在告诉你,AI大模型正在为日常生活带来革命性的改变。今天,我们就来探讨如何使用AI大模型......
  • 第四单元 视图与模型
    createdatabaseMvcUnit4;gouseMvcUnit4;gocreatetableProduct(Idbigintprimarykey,ProductNamevarchar(30),CategoryNamevarchar(30),Pricedecimal(10,2),Remarkvarchar(200),CreatedUserIdbigint,UpdatedUserIdbigint......
  • three.js 使用 sortObjects 和 renderOrder 处理网格修改后覆盖模型的问题
    问题效果:目标效果处理此问题首先需要了解three的渲染机制:渲染机制threejs的渲染器是基于webGL的。它的渲染机制是根据物体离照相机的距离来控制和进行渲染的。也就是说,它根据物体的空间位置进行排序,然后根据这个顺序来渲染物体。对于透明的物体,是按照从最远到最近的顺序进行......
  • 【自己搭建一个:端到端的语音+大模型聊天机器人】
    概要发篇文章记录一下最近搞的语音+大模型聊天机器人的搭建过程,供交流学习。有正反馈的话会继续优化。整体架构流程注意:借传统的基于RASA的对话机器人的图一用,本博会把NLU(NaturalLanguageUnderstanding)和DialogueManagement这两个组件,用大模型来替代。组件及模型说明:用......
  • AIGC星辰大海:大模型工程师和产品专家深度训练营(第五期)即将开班
    近屿智能OJAC第五期“AIGC星辰大海:大模型工程师和产品专家深度训练营”即将开班。近屿智能OJAC秉承着“别人教你使用AIGC工具,例如ChatGP7和MJ,我们教您预训练和微调大模型以及开发软/硬件AI产品”的服务理念,已经帮助数千位学员成功进入AIGC大模型领域,完成职业转型和升级,并创造出了丰......
  • 大模型环境搭建(二)
    二:Conda安装1.下载链接:https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe2.安装完之后,要修改以下他的执行策略!点开始菜单,打开:AnacondaPowershellPrompt(miniconda3)然后输出以下内容,然后输入大写“A”回车确认:Set-ExecutionP......