网站如何在手机上显示做网站一定要服务器吗
2026/4/18 6:48:45 网站建设 项目流程
网站如何在手机上显示,做网站一定要服务器吗,首页关键词排名代发,网站开发主管tiktoken Python 库 介绍 OpenAI 官方推出的用于计算文本 token 数量的工具#xff0c;也是各类大语言模型#xff08;LLM#xff09;计算上下文长度、计费的核心工具 tiktoken 是 OpenAI 开源的快速 BPE#xff08;字节对编码#xff09;token 编码 / 解码库 相比传统 GP…tiktoken Python 库介绍OpenAI 官方推出的用于计算文本 token 数量的工具也是各类大语言模型LLM计算上下文长度、计费的核心工具tiktoken 是 OpenAI 开源的快速 BPE字节对编码token 编码 / 解码库相比传统 GPT2Tokenizer 等库它速度更快、内存占用更低专门适配 OpenAI 全系列模型如 gpt-3.5-turbo、gpt-4、gpt-4o 等token 计算规则Token可以理解为大模型处理文本的 “最小单位”1 个 token 约等于英文 4 个字符 / 中文 1-2 个汉字模型的上下文窗口如 gpt-4o 的 128k就是按 token 数量计算的核心作用计算一段文本会被模型拆分成多少个 token这直接关系到 API 调用的费用和上下文是否超限安装与基础使用pipinstalltiktokenimporttiktoken# 1. 选择对应模型的编码不同模型的编码规则不同# 常用编码映射# gpt-3.5-turbo/gpt-4/gpt-4o → cl100k_base# gpt-3.5-turbo-0301 → p50k_base# text-davinci-003 → p50k_base# gpt-2/gpt-3 → r50k_base# 方式1直接指定编码名称encodingtiktoken.get_encoding(cl100k_base)# 方式2根据模型名称自动匹配编码更推荐适配模型更新defget_encoding_by_model(model_name):try:returntiktoken.encoding_for_model(model_name)exceptKeyError:print(f未找到{model_name}的编码默认使用 cl100k_base)returntiktoken.get_encoding(cl100k_base)# 示例计算 gpt-4o 模型的 token 数量model_namegpt-4oencodingget_encoding_by_model(model_name)# 2. 编码文本 → token 列表text你好我是使用 tiktoken 计算 token 的示例。Hello, tiktoken!tokensencoding.encode(text)print(f文本{text})print(fToken 列表{tokens})print(fToken 数量{len(tokens)})# 输出19不同版本可能略有差异# 3. 解码token 列表 → 文本decoded_textencoding.decode(tokens)print(f解码后的文本{decoded_text})# 输出原文本# 4. 批量计算多段文本的 token 数text_list[今天天气很好,OpenAI tiktoken is fast,1234567890]token_counts[len(encoding.encode(t))fortintext_list]print(f批量 token 数{token_counts})# 输出[7, 8, 6]tiktoken.get_encoding(encoding_name)根据编码名称获取编码对象如 cl100k_basetiktoken.encoding_for_model(model_name)根据模型名称自动匹配对应的编码推荐无需记编码名encoding.encode(text)将文本转换为 token 整数列表返回列表长度即为 token 数encoding.decode(tokens)将 token 列表还原为文本encoding.encode_single_token(text)将单个 token 文本转换为对应的整数如 encoding.encode_single_token(“你”) 返回 8214API 调用前校验确保输入文本的 token 数不超过模型的上下文窗口如 gpt-4o 最大 128000 token计费预估OpenAI API 按输入 / 输出 token 数计费提前计算可预估费用文本截断当文本过长时按 token 数截断而非字符数避免模型处理失败示例文本截断保留前 10 个 tokenmax_tokens10truncated_tokenstokens[:max_tokens]truncated_textencoding.decode(truncated_tokens)print(f截断后的文本{truncated_text})# 输出你好我是使用 tiktoken 计算中文 token 计算中文每个字 / 标点通常会被拆分为 1-2 个 token而非按字符数计算比如 “你好” 是 2 个 token“” 是 1 个 token编码兼容性不同模型的编码规则不同必须用对应编码如 gpt-3.5-turbo 用 cl100k_base不能用 r50k_base速度优势tiktoken 是用 Rust 实现的核心逻辑比纯 Python 的 tokenizer 快 10-100 倍适合批量处理文本总结tiktoken 是 OpenAI 官方的高效 token 计算库核心用于文本与 token 之间的编码 / 解码是调用 OpenAI API 的必备工具核心用法通过 encoding_for_model() 匹配模型编码用 encode() 计算 token 数decode() 还原文本关键注意点不同模型对应不同编码规则中文 token 数≠字符数需按 token 数校验 / 截断文本核心原理介绍BPEByte Pair Encoding字节对编码 是一种无损数据压缩和子词分词算法核心思想从数据中自动学习高频字符/子词对合并成新符号反复迭代以减少序列长度广泛用于 LLM 的 tokenizer如 GPT、BERT平衡了词汇表大小和语义完整性压缩文本序列减少字符序列的长度降低存储和计算成本子词级分词解决 OOV未登录词问题例如将 unhappiness 拆分为 un happy ness而非单个字符适配 LLM 需求让模型既能处理常见词也能处理罕见词 / 新词BPE 的执行分为 训练阶段学习合并规则和 推理阶段应用合并规则分词训练阶段学习合并规则输入原始语料库 初始词汇表所有单个字符 预设合并次数k输出合并规则列表高频子词对 → 新子词步骤详解初始化词汇表将语料中所有文本拆分为单个字符并在每个词末尾添加结束符区分词边界例如low → l o w 统计每个字符的频率示例语料简化[“low”, “low”, “newer”, “wider”, “newer”]拆分后[l o w , l o w , n e w e r , w i d e r , n e w e r ]初始词汇表{l, o, w, , n, e, r, i, d}统计字符对频率遍历所有词统计相邻字符对的出现次数示例统计结果字符对频率(l,o)2(o,w)2(w,)2(n,e)2(e,w)2(e,r)2(r,)3合并最高频字符对找到频率最高的字符对将其合并为新子词并添加到词汇表。示例最高频对是(r,)频率 3合并为r用新子词替换所有词中的对应字符对替换后词序列[l o w , l o w , n e w e r, w i d e r, n e w e r]重复迭代重复步骤 2-3共执行k次合并k是超参数决定词汇表大小每次合并都会生成一条合并规则例如r → r生成最终词汇表合并k次后词汇表包含初始字符 k个新子词推理阶段分词输入待分词文本 训练好的合并规则 词汇表输出子词序列步骤将输入词拆分为单个字符 按合并规则的优先级训练时的合并顺序依次检查词中是否存在可合并的子词对若存在则合并直到无法再合并为止最终的子词序列即为分词结果示例用训练好的规则分词newest拆分n e w e s t应用规则合并e w → ew → n ew e s t继续应用规则合并ew e → ewe → n ewe s t最终分词n ewe s tBPE 关键特点优点 缺点解决 OOV 问题适配新词 合并次数k需人工调参影响分词效果词汇表大小可控 无法处理语义无关的高频字符对训练速度快易于实现 对词边界依赖强需标记在大模型作用无需使用特殊词元 |unk| 来替换未知单词解决 OOV 问题滑动窗口Sliding Window进行数据采样大模型训练使用滑动窗口Sliding Window 进行数据采样是处理超长文本、适配模型上下文窗口Context Window的核心技术能让模型高效学习长文本中的局部依赖关系同时避免显存溢出滑动窗口采样的核心逻辑大模型的上下文窗口如 GPT-4o 的 128k、Llama 3 的 8k是固定的而训练语料往往是远超窗口长度的超长文本如整本书、长文档滑动窗口采样的核心将超长文本切割成多个重叠 / 不重叠的固定长度窗口窗口长度 模型上下文窗口长度每个窗口作为一个独立的训练样本输入模型进行训练通过步长Stride 控制窗口间的重叠程度平衡数据利用率和训练效率stridestraɪdn. 大步阔步步态步伐步距步幅步速进展进步非正式裤子strides钢琴跨越弹奏法v. 大步走阔步走跨越跨过文跨坐在……上跨立在……上关键概念概念 含义 示例模型窗口长度 10窗口长度Window Size 单个样本的 token 数等于模型上下文窗口长度 10 个 token步长Stride 窗口滑动的 token 数 步长 5 → 相邻窗口重叠 5 个 token重叠率 相邻窗口的重叠 token 比例 步长 5 → 重叠率 50%重叠token数 window_size - stride重叠率 (window_size - stride) / window_size × 100%示例window_size1024 stride512 → 重叠 token 数 512 → 重叠率 50%window_size1024 stride1024 → 重叠 token 数 0 → 重叠率 0%window_size1024 stride256 → 重叠 token 数 768 → 重叠率 75%滑动窗口采样的实现基础版无重叠 和进阶版带重叠并兼容 tiktoken 计算 token 数importtiktokenfromtypingimportList,Tuple# 初始化tokenizer适配GPT-4otokenizertiktoken.encoding_for_model(gpt-4o)defsliding_window_sampling(text:str,window_size:int1024,# 模型上下文窗口长度stride:int512,# 滑动步长add_eos:boolTrue# 是否在每个窗口末尾添加EOS token)-List[Tuple[List[int],List[int]]]: 对超长文本进行滑动窗口采样生成(输入token, 目标token)训练对 :param text: 原始超长文本 :param window_size: 窗口长度token数 :param stride: 滑动步长token数 :param add_eos: 是否添加EOS token标记文本结束 :return: 列表每个元素是(输入token列表, 目标token列表)目标比输入右移一位自回归训练 # 1. 将文本编码为token序列tokenstokenizer.encode(text)ifadd_eos:eos_tokentokenizer.encode_single_token(|endoftext|)# OpenAI EOS tokentokens.append(eos_token)# 2. 边界检查iflen(tokens)window_size:# 文本长度≤窗口长度直接作为单个样本input_tokenstokens[:-1]# 输入最后一个token除外target_tokenstokens[1:]# 目标右移一位自回归训练return[(input_tokens,target_tokens)]# 3. 滑动窗口切割train_pairs[]start_idx0max_idxlen(tokens)-1# 预留最后一个token作为目标whilestart_idxmax_idx-window_size:# 截取当前窗口的token输入窗口长度window_sizeend_idxstart_idxwindow_size window_tokenstokens[start_idx:end_idx1]# 1是为了目标右移# 生成输入-目标对自回归训练输入→目标目标比输入右移一位input_tokenswindow_tokens[:-1]target_tokenswindow_tokens[1:]train_pairs.append((input_tokens,target_tokens))# 滑动窗口start_idxstride# 处理最后一个窗口避免尾部文本被截断ifstart_idxmax_idx:window_tokenstokens[-window_size-1:]# 取最后window_size1个tokeninput_tokenswindow_tokens[:-1]target_tokenswindow_tokens[1:]train_pairs.append((input_tokens,target_tokens))returntrain_pairs# ---------------------- 示例使用 ----------------------if__name____main__:# 超长文本示例模拟书籍/长文档long_text 人工智能AI是一门旨在使机器模拟人类智能的技术科学。它涵盖了机器学习、自然语言处理、计算机视觉等多个领域。 机器学习是AI的核心分支通过数据训练模型让模型自主学习规律。深度学习是机器学习的子集基于神经网络实现复杂任务。 大语言模型LLM是深度学习的应用之一通过海量文本训练能够理解和生成人类语言。GPT、Llama、文心一言等都是典型的LLM。 长文本处理是LLM的关键挑战之一滑动窗口采样是解决该问题的核心方法能让模型高效学习长文本中的上下文依赖。 模型的上下文窗口长度决定了其能处理的文本长度滑动窗口则能将超长文本切割为适配窗口的样本平衡训练效率和效果。 # 滑动窗口采样窗口长度20步长10模拟小窗口模型train_samplessliding_window_sampling(textlong_text,window_size20,stride10)# 打印采样结果print(f原始文本token总数{len(tokenizer.encode(long_text))})print(f采样得到的训练样本数{len(train_samples)})print(\n第一个样本)print(f输入token前10个{train_samples[0][0][:10]})print(f输入文本{tokenizer.decode(train_samples[0][0])})print(f目标token前10个{train_samples[0][1][:10]})print(f目标文本{tokenizer.decode(train_samples[0][1])})代码关键解释token 编码使用tiktoken将文本转为 token 序列适配 OpenAI 系模型的编码规则自回归训练对输入 token 是窗口内前 N 个目标 token 是后 N 个右移一位符合大模型自回归生成的训练逻辑滑动逻辑按stride步长滑动直到覆盖整个文本最后一个窗口强制截取尾部文本避免丢失信息重叠控制步长越小窗口重叠越多如步长 窗口长度→无重叠步长 窗口长度 / 2→50% 重叠滑动窗口采样的进阶优化动态窗口长度针对文本中的自然边界如段落、句子调整窗口避免切割语义完整的单元defsplit_by_sentence(text:str)-List[str]:按句子分割文本避免窗口切割句子importrereturnre.split(r[。],text)defdynamic_window_sampling(text:str,window_size:int,stride:int):sentencessplit_by_sentence(text)# 合并句子直到接近窗口长度再滑动merged_texts[]currentforsentinsentences:iflen(tokenizer.encode(currentsent))window_size:currentsentelse:merged_texts.append(current)currentsent merged_texts.append(current)# 对合并后的文本进行滑动窗口采样all_samples[]formergedinmerged_texts:samplessliding_window_sampling(merged,window_size,stride)all_samples.extend(samples)returnall_samples随机滑动窗口增强泛化性训练时随机调整窗口起始位置避免模型过拟合固定窗口边界defrandom_sliding_window_sampling(text:str,window_size:int,num_samples:int5)-List[Tuple[List[int],List[int]]]:随机采样窗口而非顺序滑动tokenstokenizer.encode(text)iflen(tokens)window_size:return[(tokens[:-1],tokens[1:])]train_pairs[]for_inrange(num_samples):# 随机选择起始位置start_idxrandom.randint(0,len(tokens)-window_size-1)end_idxstart_idxwindow_size window_tokenstokens[start_idx:end_idx1]input_tokenswindow_tokens[:-1]target_tokenswindow_tokens[1:]train_pairs.append((input_tokens,target_tokens))returntrain_pairs滑动窗口采样的适用场景与注意事项适用场景超长文本训练如书籍、论文、代码库等远超模型上下文窗口的文本长上下文模型预训练提升模型对长文本的依赖关系捕捉能力低显存训练单个窗口样本显存占用可控避免 OOM显存溢出注意事项步长选择步长 窗口长度无重叠训练效率高但可能丢失跨窗口依赖步长 窗口长度 / 250% 重叠平衡效率和效果主流选择语义完整性尽量按自然边界句子、段落切割避免窗口切割核心语义窗口长度对齐窗口长度需等于模型的上下文窗口长度否则需 padding/truncation总结滑动窗口采样的核心是将超长文本切割为固定长度、可重叠的窗口样本适配大模型的上下文窗口限制核心参数是窗口长度等于模型上下文长度 和步长控制重叠率步长越小重叠越多数据利用率越高进阶优化可通过动态窗口按语义分割 和随机窗口增强泛化 提升训练效果同时需注意语义完整性和显存占用DataLoader中的批次的概念DataLoader批次为1和4的区别stride4以 in the heart of the city stood the old library, a relic from a bygone era.DataLoader 加载文本时通常会先把句子拆分为词 / Token 序列再按 batch_size批次大小和 stride步长切分成批量的样本batch_size每一批次加载的样本数量stride滑动窗口每次移动的 Token 数决定样本间的重叠 / 间隔先将例句拆分为 Token 序列按空格拆分忽略标点共 16 个 Token[0:in, 1:the, 2:heart, 3:of, 4:the, 5:city, 6:stood, 7:the, 8:old, 9:library, 10:a, 11:relic, 12:from, 13:a, 14:bygone, 15:era]场景 1batch_size1stride4核心逻辑每次只加载 1 个样本滑动窗口每次移动 4 个 Token样本间无重叠因为 stride4 等于窗口长度这里假设窗口长度 4是 NLP 中常见的 “固定窗口切分”。具体切分过程窗口长度 4批次序号 加载的样本Token 索引 样本内容 批次内样本数1 [0,1,2,3] in the heart of 12 [4,5,6,7] the city stood the 13 [8,9,10,11] old library a relic 14 [12,13,14,15] from a bygone era 1关键特点总共生成 4 个批次每个批次只有 1 个样本每个样本是连续的 4 个 Token且样本间完全不重叠因为 stride4 刚好跳过前一个样本的所有 Token数据加载次数多4 次每次处理的数据量小适合显存 / 内存极小的场景但效率低。场景 2batch_size4stride4核心逻辑每次加载 4 个样本滑动窗口仍移动 4 个 Token一次性把所有切分好的样本加载完成因为总样本数 4刚凑成 1 批次。具体切分过程窗口长度 4批次序号 加载的样本Token 索引 样本内容 批次内样本数1 [0,1,2,3] in the heart of 4[4,5,6,7] the city stood the[8,9,10,11] old library a relic[12,13,14,15] from a bygone era关键特点总共只生成 1 个批次一次性加载所有 4 个样本样本内容和 batch_size1 时完全一致但加载次数从 4 次减少到 1 次效率大幅提升要求显存 / 内存能容纳 4 个样本的数据量是深度学习中更常用的配置批量处理提升计算效率延伸如果窗口长度 stride比如窗口长度 6stride4若窗口长度大于步长样本会出现重叠两种批次大小的差异会更明显batch_size1批次 1 加载 [0-5]批次 2 加载 [4-9]重叠 Token 4-5批次 3 加载 [8-13]批次 4 加载 [12-15]补零共 4 批次batch_size41 个批次直接加载 [0-5]、[4-9]、[8-13]、[12-15] 这 4 个重叠样本一次性处理。核心区别总结总结batch_size 只影响 “每批加载的样本数”不改变样本本身的内容 / 切分逻辑stride 固定时stride4 决定了样本间的间隔 / 重叠和 batch_size 无关实际开发中batch_size4 是更高效的选择充分利用硬件并行能力而 batch_size1 仅用于调试或资源极度受限的场景两者的核心差异是加载效率和资源占用而非样本本身的内容batch_size 越大加载次数越少计算效率越高但对硬件的要求也越高过多重叠的问题模型过拟合风险

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询