AI基本结构10-分词器
接着看看课:https://www.bilibili.com/video/BV1cb421n78rps这个示例让我想到re0课程复现import os os.environ[HF_ENDPOINT] https://hf-mirror.com from transformers import AutoTokenizer import matplotlib.pyplot as plt import huggingface_hub import transformers tokenizer_gpt2 AutoTokenizer.from_pretrained(gpt2) # 分词效果示例三段文本表示的意思是相近的 text_fr Évariste Galois (/ɡælˈwɑː/; français : [evaʁist ɡalwa] ; 25 octobre 1811 - 31 mai 1832) était un mathématicien français et un militant politique. Alors quil était encore adolescent, il parvint à déterminer une condition nécessaire et suffisante pour quun polynôme soit résoluble par des radicaux, résolvant ainsi un problème qui était resté ouvert pendant 350 ans. Son travail posa les fondements de la théorie de Galois et de la théorie des groupes, deux branches majeures de lalgèbre abstraite. Il était un fervent républicain et fut très impliqué dans les troubles politiques qui entourèrent la Révolution française de 1830. En raison de son activisme politique, il fut arrêté à plusieurs reprises, purgé une peine de plusieurs mois de prison. Pour des raisons restées obscures, peu de temps après sa libération de prison, il se battit en duel et décéda des blessures quil subit. text_en Évariste Galois (/ɡælˈwɑː/; French: [evaʁist ɡalwa]; 25 October 1811 – 31 May 1832) was a French mathematician and political activist. While still in his teens, he was able to determine a necessary and sufficient condition for a polynomial to be solvable by radicals, thereby solving a problem that had been open for 350 years. His work laid the foundations for Galois theory and group theory, two major branches of abstract algebra. He was a staunch republican and was heavily involved in the political turmoil that surrounded the French Revolution of 1830. As a result of his political activism, he was arrested repeatedly, serving one jail sentence of several months. For reasons that remain obscure, shortly after his release from prison he fought in a duel and died of the wounds he suffered. text_zh 埃瓦里斯特·伽罗瓦法语Évariste Galois1811年10月25日—1832年5月31日法语发音 [evaʁist ɡalwa]是一位法国数学家和政治活动家。尽管还在十几岁时他就能够确定多项式能够通过根式求解的充分必要条件从而解决了一个悬而未决的问题该问题已经存在了350年。他的工作奠定了Galois理论和群论的基础这两个是抽象代数的重要分支。他是一位坚定的共和派深度参与了1830年法国大革命期间的政治动荡。由于他的政治活动他多次被逮捕其中一次入狱数月。由于原因不明他在刑满释放后不久参与了一场决斗并因受伤而去世。 texts { fr: text_fr, en: text_en, zh: text_zh } def draw_bar(str_stats, token_stats): # 将统计结果可视化 fig plt.figure(figsize(6, 6), dpi80) plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False plt.rcParams.update({font.size: 13}) bar_width 0.1 base range(len(str_stats)) br_str [x - bar_width for x in base] br_token [x bar_width for x in base] plt.bar(br_str, str_stats.values(), colorg, widthbar_width * 2, label文本长度) plt.bar(br_token, token_stats.values(), colorb, widthbar_width * 2, label分词后的长度) plt.xticks([r for r in base], str_stats.keys(), fontsize18) plt.legend(shadowTrue) return fig def get_token_stats(tokenizer): # 统计文本中的单词数量如果是中文则为文本的字数 str_stats {} # 统计分词后的词元数量 token_stats {} for (k, v) in texts.items(): text_len len(v.split()) if k ! zh else len(list(v)) token_len len(tokenizer.encode(v)) str_stats[k] text_len token_stats[k] token_len print(str_stats) print(token_stats) return draw_bar(str_stats, token_stats) # 使用gpt2分词器进行分词的效果 f get_token_stats(tokenizer_gpt2) f.savefig(gpt2_tokenizer.png, dpi200) for text in texts: # 英文分词效果展示 stringText_.join([tokenizer_gpt2.decode(i) for i in tokenizer_gpt2.encode(texts[text])]) print(stringText) from datasets import load_dataset # 使用中文语料训练分词器 raw_data load_dataset(BelleGroup/train_0.5M_CN) def get_training_corpus(): # 为了减少运算时间只选择较少的训练数据 data raw_data[train].select(range(10000)) for idx in range(0, len(data), 1000): samples data[idx : idx 1000] yield samples.get(instruction, []) samples.get(output, []) # 为了减少运算时间只将词汇表大小设置为1000正常应该在5万左右 tokenizer_zh tokenizer_gpt2.train_new_from_iterator(get_training_corpus(), 1000) # 展示新分词器的效果 f get_token_stats(tokenizer_zh) f.savefig(zh_tokenizer.png, dpi200) for text in texts: # 英文分词效果展示 stringText_.join([tokenizer_gpt2.decode(i) for i in tokenizer_gpt2.encode(texts[text])]) print(stringText)按字符分词# 使用gpt2分词器进行分词的效果 f get_token_stats(tokenizer_gpt2) f.savefig(gpt2_tokenizer.png, dpi200) for text in texts: # 英文分词效果展示 stringText_.join([tokenizer_gpt2.decode(i) for i in tokenizer_gpt2.encode(texts[text])]) print(stringText)join函数:将列表推导式生成的字符串列表用下划线_拼接成一个字符串。例如若解码结果为[hello, world]则输出为hello_world。中文分词的挑战中文文本缺乏显式的词边界标记需依赖上下文语义、词典或统计模型进行切分。而英文分词直接利用空格和标点符号避免了歧义切分的复杂性例如中文“结婚的和尚未结婚的”可能被错误切分为“结婚/的/和/尚未/结婚/的”英文分词字母文字的优势英文分词基于空格和标点符号进行切分天然具有词边界标记。这种特性使得英文分词在技术上相对简单多数情况下无需复杂的算法即可实现基本的分词功能效率更高英文分词算法复杂度低处理速度快无需依赖大规模词典或复杂的统计模型。准确性稳定词边界明确歧义切分问题极少错误率显著低于中文分词。资源消耗少不需要训练庞大的语言模型或维护高频词典节省计算和存储资源。基于训练的分词器预训练与微调微调Fine-tuning是在预训练模型的基础上针对特定任务使用有标注数据进行参数调整的过程。其目的是使模型适应具体场景如情感分类、医学图像分割。数据需求需要任务相关的标注数据但规模远小于预训练数据。调整策略可能仅优化顶层网络如分类头或全局微调所有参数。效率优势相比从头训练微调能显著减少计算成本和数据需求。训练分词器from datasets import load_dataset # 使用中文语料训练分词器 raw_data load_dataset(BelleGroup/train_0.5M_CN) def get_training_corpus(): # 为了减少运算时间只选择较少的训练数据 data raw_data[train].select(range(10000)) for idx in range(0, len(data), 1000): samples data[idx : idx 1000] yield samples.get(instruction, []) samples.get(output, []) # 为了减少运算时间只将词汇表大小设置为1000正常应该在5万左右 tokenizer_zh tokenizer_gpt2.train_new_from_iterator(get_training_corpus(), 1000) # 展示新分词器的效果 f get_token_stats(tokenizer_zh) f.savefig(zh_tokenizer.png, dpi200) for text in texts: # 英文分词效果展示 stringText_.join([tokenizer_gpt2.decode(i) for i in tokenizer_gpt2.encode(texts[text])]) print(stringText)从Hugging Face数据集加载中文语料并基于GPT-2的分词器训练一个适配中文的新分词器。代码分为数据加载、迭代器构建、分词器训练和效果验证四个部分。raw_data load_dataset(BelleGroup/train_0.5M_CN)从Hugging Face数据集库加载名为BelleGroup/train_0.5M_CN的中文数据集该数据集包含50万条中文训练样本。get_training_corpus()函数定义了一个生成器通过raw_data[train].select(range(10000))选取前1万条训练数据并以每1000条为批次进行迭代。每次迭代时将样本中的instruction和output字段内容合并后生成训练语料片段这种分批次生成方式可有效控制内存消耗。tokenizer_zh tokenizer_gpt2.train_new_from_iterator(get_training_corpus(), 1000)调用GPT-2分词器的训练方法基于中文语料迭代器训练新分词器。参数1000指定词汇表大小实际应用应设置更大值如5万该方法会分析语料中的字符/子词频率构建适合中文的分词方案。yield语句在 Python 中yield是用于定义生成器函数的关键字。生成器函数返回一个生成器对象该对象可以迭代每次迭代时函数会执行到yield语句处暂停并将yield后的值返回给调用者。下次迭代时函数会从上次暂停的位置继续执行。调用生成器函数时函数不会立即执行而是返回一个生成器对象。使用 next() 或迭代如 for 循环时函数执行到第一个 yield 语句返回 yield 后的值并暂停。再次调用 next() 时函数从上次暂停的位置继续执行直到遇到下一个 yield 或函数结束。# 手动实现迭代器 class Counter: def __init__(self, low, high): self.current low self.high high def __iter__(self): return self def __next__(self): if self.current self.high: raise StopIteration else: self.current 1 return self.current - 1 # 使用生成器实现相同功能 def counter_generator(low, high): current low while current high: yield current current 1词嵌入词嵌入Embedding是将离散的符号如单词映射到连续向量空间的技术旨在用低维稠密向量表示文本替代传统的高维稀疏表示如独热编码。

相关新闻

RK3568双摄像头配置与MIPI CSI-2接口开发指南

RK3568双摄像头配置与MIPI CSI-2接口开发指南

1. RK3568摄像头支持概述 RK3568作为瑞芯微推出的中高端处理器,在嵌入式视觉领域有着广泛的应用场景。该芯片原生支持MIPI CSI-2接口,能够连接各类前后置摄像头模组。在实际项目中,我们经常需要同时支持前后两个摄像头,这在智能零…

2026/10/10 13:34:37 阅读更多 →
PMC到底管理生产哪方面?从订单、计划、物料到生产交付一次讲清!

PMC到底管理生产哪方面?从订单、计划、物料到生产交付一次讲清!

很多工厂里,PMC可能是最忙的岗位之一。 每天打开电脑: 十几个Excel表;微信群消息不断;销售催交期;采购催物料;车间催计划。 看起来PMC一直在管理生产,但结果却经常是: 计划天天调…

2026/10/16 18:34:07 阅读更多 →
2026年技术人面试复盘深度指南:AI驱动失分归因——每次面试找不到漏洞到精准定位弱项的4步诊断法

2026年技术人面试复盘深度指南:AI驱动失分归因——每次面试找不到漏洞到精准定位弱项的4步诊断法

文章目录一、「我感觉面得还行啊」——技术面试最大的幻觉1.1 为什么你"感觉面得不错"却挂了?1.2 传统复盘 vs AI辅助复盘二、测评方法论:面试复盘的5个硬核标准2.1 测评维度定义2.2 评分标准三、4款AI面试复盘工具逐一深度测评3.1 鹅来面 ——…

2026/9/25 7:19:23 阅读更多 →

最新新闻

打造 Claude Code 模板体系:从临时提示词到稳定可复用的开发工作流

打造 Claude Code 模板体系:从临时提示词到稳定可复用的开发工作流

最近我把 Claude Code 从一个“偶尔惊艳的演示工具”真正用成了每天离不开的编程搭档,越是用得狠,我越明白一件事:效率的瓶颈从来不在模型本身,而在你如何把一套稳定的工作方式固化下来。为此我折腾了一套自己的 claude-code-temp…

2026/10/17 4:21:07 阅读更多 →
NL2SQL效果差?先给Schema降个噪:从静态裁剪到动态选择的实战指南

NL2SQL效果差?先给Schema降个噪:从静态裁剪到动态选择的实战指南

干过NL2SQL落地的人应该都有一种体会:模型效果不好,八成不是模型的问题,而是喂给模型的东西太“脏”了。尤其在处理企业级数据库的时候,一张宽表动辄上百个字段,一个业务库几百张表,把这些schema原封不动塞…

2026/10/17 4:21:06 阅读更多 →
PostgreSQL全文检索实战:从tsvector到GIN索引的深度解析

PostgreSQL全文检索实战:从tsvector到GIN索引的深度解析

1. 为什么我最终选择 PostgreSQL 做全文检索很多人一听到“全文检索”四个字,第一反应就是上搜索引擎框架。确实,搜索引擎框架在分布式、高并发、海量数据场景下是标杆级方案,但那类技术栈的运维成本和学习曲线也实打实地摆在那里。对于绝大多…

2026/10/17 4:21:06 阅读更多 →
多线长剧不崩的秘诀:以项目管理拆解中段单集

多线长剧不崩的秘诀:以项目管理拆解中段单集

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 4:21:06 阅读更多 →
YOLOv8 PCB缺陷检测实战:从数据准备到部署全流程解析

YOLOv8 PCB缺陷检测实战:从数据准备到部署全流程解析

去年做PCB产线质检方案预研的时候,我带着一摞真实板卡的灰度图试了好几条路线,最后真正落地跑通的还是YOLOv8。PCB缺陷检测这件事,难点从来不在"调用一个现成检测模型"本身,而在从数据准备、模型训练到最终把推理结果摆…

2026/10/17 4:21:06 阅读更多 →
统一搜索与AI助手:构建团队知识索引的架构与落地实践

统一搜索与AI助手:构建团队知识索引的架构与落地实践

1. 为什么现代团队需要统一搜索和AI助手工作节奏越来越快的今天,"信息分散"成了团队协作最大的隐形杀手。文件散落在各个云盘、知识库、项目管理系统、IM聊天记录里,找一份合同要翻三个软件,查一个客户背景要开五个标签页&#xff…

2026/10/17 4:20:06 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →