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/11/6 16:39:00 阅读更多 →
PMC到底管理生产哪方面?从订单、计划、物料到生产交付一次讲清!

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

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

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

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

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

2026/11/4 21:57:07 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/6 15:21:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/6 9:29:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/6 22:01:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/6 22:01:11 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/6 8:08:42 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/6 22:01:09 阅读更多 →

日新闻

周新闻

月新闻