ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

【干货收藏】Tokenization:大型语言模型的隐形基石,影响性能与成本的关键

【干货收藏】Tokenization:大型语言模型的隐形基石,影响性能与成本的关键 前言Tokenization是大型语言模型LLM处理流程中至关重要的第一步。它将原始文本转换为模型可以理解和处理的数值表示。Tokenization虽然经常被忽视但它对模型的性能、效率甚至成本都有着显著的影响。本文将深入探讨Tokenization在现代LLM中的工作原理。Tokenization的重要性分词的核心是将文本分解成称为词元Token的更小单元的过程。这些词元随后被转换为模型用于处理的数字ID。分词策略的选择直接影响模型性能和解决问题的范围譬如是否可以解决Out-of-VocabularyOOV问题上下文窗口限制Context window limitations多语言内容处理API 使用成本因为现在大语言模型通常按token 数量计费Tokenization 的几种经典算法字符级编码Character-Level Tokenization最简单的方法是将每个字符单独标记化def char_tokenize(text): return list(text)tokens char_tokenize(Hello)# [H, e, l, l, o]这种方法的优势包括简单实现、没有词汇超出词汇范围的问题无 OOV 问题固定词汇量缺点效率极低序列过长、失去词级语义可能不完全正确关于这部分后续有讨论、空格和格式处理不当举例假设输入是Today, I want to start my day with a cup of coffee需要用 50 个 tokens 才能完整表示这个输入。这样会导致鼓胀效应(ballooning effect)即一个很短的文章就会对应很长的 token 序列而 LLM 使用 self-attention计算复杂度和 token 的数量成线性或者二次方关系取决于实际用什么 attention 算法由于 GPU 显存的限制LLM 可以处理的上下文长度往往有限使用字符级编码导致 token 数量太多因此 LLM 会长度上限以外的上下文信息。使用字符级编码还会导致失去语义信息关于这一点可能待考证是否在正确因为这可能是对人类来说失去语义信息但对机器来说未必尽然。词级编码Word-Level Tokenization词语标记化将文本按空格和标点符号分割def word_tokenize(text): return text.split()tokens word_tokenize(Hello, world!)# [Hello,, world!]优势与语言单位的直观对齐比字符标记化更短的序列缺点词汇量要求高无法表达词汇表之外的词语对形态丰富的语言处理不当譬如ing,ed, ful等形式的词子词编码Subword Tokenization大多数现代语言学习管理系统都采用子词分词法这种方法兼顾了效率和灵活性。主要的算法包括一下几种。字节对编码Byte Pair Encoding, BPEBPE字节对编码由 GPT 模型使用它从单个字符开始迭代地合并出现频率最高的字符对算法流程图如下词汇表大小是 BPE 算法中的一个超参数由用户决定。例如GPT-2 的词汇表大小为 50257而 GPT-4 的词汇表大小约为 100000。需要注意的关键是词汇量和序列长度之间存在权衡这对于确定词汇量非常重要。词汇量的大小直接影响文本的分词方式更大的词汇量每句标记数较少较长的子词甚至整个单词都以单个标记表示。更适合捕捉生僻词或语言细微差别。增加嵌入和训练的内存和计算成本。词汇量较小每句包含更多词元每个词元代表一个较小的单位例如字符或短子词。由于句子的词元长度非常长这些词元可能无法适应语言学习模型LLM的上下文长度。这可能导致上下文丢失进而影响LLM的训练效果。训练语料库的性质和规模也会对词汇量产生重大影响大型、多样化的数据处理多样化的语言模式、罕见词汇和多语言数据例如区域语言数据通常需要更大的词汇量。小型或特定领域语料库由于语言使用有限较小的词汇量可能就足够了。BPE 的优点是它防止表示文本所需的标记数量过多而这正是字符标记化的主要问题同时它也保留了语言模式例如常见的前缀、后缀和词干。BPE 也有局限性BPE 依赖于预先设定的词汇量如果词汇量过小可能会过度分割单词导致语义丢失如果词汇量过大则可能包含不必要的子词单元降低模型的灵活性。WordPieceWordPiece 被 BERT 等模型所采用它与 BPE 类似但合并词元的标准不同。它通过计算两个词元合并后出现频率与各自出现频率的乘积来确定合并的可能性。# Example WordPiece tokenization:embedding → [em, ##bed, ##ding]transformer → [trans, ##form, ##er]前缀##表示该词是较大单词的一部分。SentencePiece / Unigram LMUnigram 被 T5 和许多多语言模型(multilingual models)所采用它从一个庞大的词汇表开始通过迭代地删除词元来最大化似然性。许多现代模型使用的 SentencePiece 将输入视为 Unicode 字符序列并基于一元语法语言模型学习分词。它对于没有明确词界的语言例如泰语、日语或汉语尤其有用# English: Hello world!# SentencePiece: [▁He, llo, ▁world, !]# (▁ represents space)# Japanese: こんにちは世界# SentencePiece: [こん, にち, は, 世界]字节级编码Byte-Level Tokenization一些现代模型例如 GPT-4使用字节级 BPE这确保了每个可能的字符串都可以被编码# Every string can be represented as bytesdef bytes_tokenize(text): return list(text.encode(utf-8))tokens bytes_tokenize(Hello )# [72, 101, 108, 108, 111, 32, 240, 159, 140, 141]# use BPE to merge比特级编码Bit-Level Tokenization参考论文Bit-level BPE: Below the byte boundary作者认为在多语言字符丰富特别是 CJK中文 / 日文 / 韩文或含有大量表情符号特殊符号的场景中传统的字节级分词即把字符转换为 UTF-8 字节再做 BPE 合并虽然能避免 OOV未知词问题但带来一个大问题序列长度显著增长从而训练或推理时间、内存开销也变大。 为了解决这个问题作者提出了 “bit-level BPE” 的想法即在 比字节还小的单位比特 层面做合并压缩从而 无损地 减少序列长度。 论文从 “UTF-8 编码结构” 入手观察到在字节级表示里存在重复冗余比如某些 UTF-8 字节前缀在 CJK 范围里非常高频从而提出“去重压缩”的机制。 在实验中在中文、日文、韩文语料上作者测量了使用该方法之后的 序列长度缩短情况以及“感知吞吐量”perceived throughput结合了序列长度、模型运算量等因素变化。 论文也讨论了应用中的 trade-offs比如在训练时模型需要处理稍微不同的 token 分布、可能的实现复杂度等。实例分析让我们看看不同的现代分词器是如何处理同一段文本的。示例输入The tokenization process transforms text into numerical tokens.GPT-2/3/4 分词器BPE[The, Ġtokenization, Ġprocess, Ġtransforms, Ġtext, Ġinto, Ġnumerical, Ġtokens, .]# 9 tokens (Ġ represents space)BERT 分词器WordPiece[the, token, ##ization, process, transform, ##s, text, into, numerical, token, ##s, .]# 12 tokens (## represents subword continuation)T5 分词器SentencePiece[▁The, ▁token, ization, ▁process, ▁transforms, ▁text, ▁into, ▁numerical, ▁tokens, .]# 10 tokens (▁ represents space)如何编码数字text The price is $1,234.56# GPT-4 Tokenizer[The, Ġprice, Ġis, Ġ$, 1, ,, 234, ., 56]# 9 tokens# Claude Tokenizer[The, price, is, $, 1, ,, 234, ., 56]# 9 tokens如何编码表情符号Emojistext I love coding! ‍# GPT-4 Tokenizer[I, Ġlove, Ġcoding, !, Ġ, 0xF0, 0x9F, 0x91, 0xA8, 0xE2, 0x80, 0x8D, 0xF0, 0x9F, 0x92, 0xBB]# 16 tokens (UTF-8 bytes)# Claude Tokenizer[I, love, coding, !, , , ‍, ]# 8 tokens如何编码代码code def hello_world():\n print(Hello, world!)# GPT-4 Tokenizer[def, Ġhello, _, world, ():, \n, Ġ, Ġ, Ġ, Ġprint, (, , Hello, ,, Ġworld, !, , )]# 18 tokens# CodeLlama Tokenizer (optimized for code)[def, hello_world, ():, \n , print, (, , Hello, ,, world, !, , )]# 13 tokens分词对模型上下文窗口的影响分词效率直接影响模型上下文窗口中可容纳的内容量Tokenization 的挑战语言偏见大多数语言学习模型最初都是使用针对英语优化的分词器进行训练的这导致在其他语言中效率低下English: Understanding → 1 tokenGerman: Verständnis → 3 tokens (Ver/ständ/nis)Japanese: 理解 → 2 tokens (理/解)非常见文本Out-of-Distribution TextNormal text: Hello world → 2 tokensRepeated characters: aaaaaaaaaaaa → 4-6 tokens代码和技术内容代码中的特殊字符和语法可能会导致次优的词法分析code result list(map(lambda x: x**2, range(10)))# Tokenized inefficiently:[result, Ġ, Ġlist, (, map, (, lambda, Ġx, :, Ġx, **, 2, ,, Ġrange, (, 10, ), ), )]# 19 tokens提高Token效率的最佳实践批量处理将相关请求分组以尽量减少重复的系统提示# Inefficient: 2 separate callsresponse1 llm(Translate hello to French) # ~10 tokensresponse2 llm(Translate goodbye to French) # ~10 tokens# Efficient: 1 batch callresponse llm(Translate these words to French:\n1. hello\n2. goodbye) # ~15 tokens优化提示工程# Inefficient prompt (~44 tokens)inefficient Please analyze the sentiment of the following customer review. The sentiment should be classified as positive, negative, or neutral. Here is the review: Great product, fast shipping!# Efficient prompt (~21 tokens)efficient Sentiment (positive/negative/neutral):Review: Great product, fast shipping!内容预处理def preprocess_for_token_efficiency(text): # Remove redundant whitespace text re.sub(r\s, , text).strip() # Replace verbose phrases with concise alternatives replacements { in order to: to, a large number of: many, due to the fact that: because, at this point in time: now } for verbose, concise in replacements.items(): text re.sub(r\b verbose r\b, concise, text, flagsre.IGNORECASE) return textTokenization的常见实现大多数LLM提供商都以库的形式公开其分词器# OpenAI (GPT-4)from tiktoken import get_encodingtokenizer get_encoding(cl100k_base) # GPT-4 tokenizertokens tokenizer.encode(Hello, world!)print(len(tokens)) # 4# Hugging Face Transformersfrom transformers import AutoTokenizertokenizer AutoTokenizer.from_pretrained(gpt2)tokens tokenizer(Hello, world!)[input_ids]print(len(tokens)) # 5# SentencePieceimport sentencepiece as spmsp spm.SentencePieceProcessor()sp.load(t5.model)tokens sp.encode(Hello, world!, out_typestr)print(len(tokens)) # 5对 API 成本的影响不同的令牌化方法会直接影响 API 使用成本主流的 Tokenization 算法的对比普通人如何抓住AI大模型的风口为什么要学AI大模型当下⼈⼯智能市场迎来了爆发期并逐渐进⼊以⼈⼯通⽤智能AGI为主导的新时代。企业纷纷官宣“ AI ”战略为新兴技术⼈才创造丰富的就业机会⼈才缺⼝将达 400 万DeepSeek问世以来生成式AI和大模型技术爆发式增长让很多岗位重新成了炙手可热的新星岗位薪资远超很多后端岗位在程序员中稳居前列。与此同时AI与各行各业深度融合飞速发展成为炙手可热的新风口企业非常需要了解AI、懂AI、会用AI的员工纷纷开出高薪招聘AI大模型相关岗位。AI大模型开发工程师对AI大模型需要了解到什么程度呢我们先看一下招聘需求知道人家要什么能力一切就好办了我整理了AI大模型开发工程师需要掌握的知识如下大模型基础知识你得知道市面上的大模型产品生态和产品线还要了解Llama、Qwen等开源大模型与OpenAI等闭源模型的能力差异以及了解开源模型的二次开发优势以及闭源模型的商业化限制等等。了解这些技术的目的在于建立与算法工程师的共通语言确保能够沟通项目需求同时具备管理AI项目进展、合理分配项目资源、把握和控制项目成本的能力。产品经理还需要有业务sense这其实就又回到了产品人的看家本领上。我们知道先阶段AI的局限性还非常大模型生成的内容不理想甚至错误的情况屡见不鲜。因此AI产品经理看技术更多的是从技术边界、成本等角度出发选择合适的技术方案来实现需求甚至用业务来补足技术的短板。AI Agent现阶段AI Agent的发展可谓是百花齐放甚至有人说Agent就是未来应用该有的样子所以这个LLM的重要分支必须要掌握。Agent中文名为“智能体”由控制端Brain、感知端Perception和行动端Action组成是一种能够在特定环境中自主行动、感知环境、做出决策并与其他Agent或人类进行交互的计算机程序或实体。简单来说就是给大模型这个大脑装上“记忆”、装上“手”和“脚”让它自动完成工作。Agent的核心特性自主性能够独立做出决策不依赖人类的直接控制。适应性能够根据环境的变化调整其行为。交互性能够与人类或其他系统进行有效沟通和交互。对于大模型开发工程师来说学习Agent更多的是理解它的设计理念和工作方式。零代码的大模型应用开发平台也有很多比如dify、coze拿来做一个小项目你就会发现其实并不难。AI 应用项目开发流程如果产品形态和开发模式都和过去不一样了那还画啥原型怎么排项目周期这将深刻影响产品经理这个岗位本身的价值构成所以每个AI产品经理都必须要了解它。看着都是新词其实接触起来也不难。从0到1的大模型系统学习籽料最近很多程序员朋友都已经学习或者准备学习 AI 大模型后台也经常会有小伙伴咨询学习路线和学习资料我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师吴文俊奖得主给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频全系列的学习资料这些学习资料不仅深入浅出而且非常实用让大家系统而高效地掌握AI大模型的各个知识点。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】适学人群应届毕业生‌无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。零基础转型‌非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界‌。业务赋能突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型‌。AI大模型系统学习路线在面对AI大模型开发领域的复杂与深入精准学习显得尤为重要。一份系统的技术路线图不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点还能提供一条高效、有序的学习路径。基础篇包括了大模型的基本情况核心原理带你认识了解大模型提示词Transformer架构预训练、SFT、RLHF等一些基础概念用最易懂的方式带你入门AI大模型进阶篇你将掌握RAGLangchain、Agent的核心原理和应用学习如何微调大模型让大模型更适合自己的行业需求私有化部署大模型让自己的数据更加安全项目实战篇会手把手一步步带着大家练习企业级落地项目比如电商行业的智能客服、智能销售项目教育行业的智慧校园、智能辅导项目等等但知道是一回事做又是另一回事初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性在这基础上找到高质量的学习资源不浪费时间、不走弯路又是重中之重。AI大模型入门到实战的视频教程项目包看视频学习是一种高效、直观、灵活且富有吸引力的学习方式可以更直观地展示过程能有效提升学习兴趣和理解力是现在获取知识的重要途径光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。海量AI大模型必读的经典书籍PDF阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。600AI大模型报告实时更新这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。AI大模型面试真题答案解析我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下AI时代企业最需要的是既懂技术、又有实战经验的复合型人才**当前人工智能岗位需求多薪资高前景好。**在职场里选对赛道就能赢在起跑线。抓住AI这个风口相信下一个人生赢家就是你机会永远留给有准备的人。如何获取这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表