96SEO 2026-02-20 10:32 13
目标基于pytorch、transformers做中文领域的nlp开箱即用的训练框架提供全套的训练、微调模型包括大模型、文本转向量、文本生成、多模态等模型的解决方案数据

从开源社区整理了海量的训练数据帮助用户可以快速上手同时也开放训练数据模版可以快速处理垂直领域数据结合多线程、内存映射等更高效的数据处理方式即使需要处理百GB规模的数据也是轻而易举
流程每一个项目有完整的模型训练步骤如数据清洗、数据处理、模型构建、模型训练、模型部署、模型图解模型当前已经支持gpt2、clip、gpt-neox、dolly、llama、chatglm-6b、VisionEncoderDecoderModel等多模态大模型多卡串联
当前多数的大模型的尺寸已经远远大于单个消费级显卡的显存需要将多个显卡串联才能训练大模型、才能部署大模型。
因此对部分模型结构进行修改实现了训练时、推理时
中文名称文件夹名称数据数据清洗大模型模型部署图解中文文本分类chinese_classifier✅✅✅❌✅中文gpt2chinese_gpt2✅✅✅✅❌中文clipchinese_clip✅✅✅❌✅图像生成中文文本VisionEncoderDecoderModel✅✅✅❌✅vit核心源码介绍vit
model❌❌❌❌✅Thu-ChatGlm-6b(v1)simple_thu_chatglm6b✅✅✅✅❌chatglm-v2-6bchatglm_v2_6b_lora✅✅✅❌❌中文dolly_v2_3bdolly_v2_3b✅✅✅❌❌中文llamachinese_llama✅✅✅❌❌中文bloomchinese_bloom✅✅✅❌❌中文falcon(注意falcon模型和bloom结构类似)chinese_bloom✅✅✅❌❌中文预训练代码model_clm✅✅✅❌❌百川大模型model_baichuan✅✅✅✅❌模型修剪✂️model_modify✅✅✅llama2
本部分介绍中文的文本分类模型适用于二分类、多分类等情况。
使用transformers库。
处理数据code_01_processdata.ipynb数据介绍
本案例使用的是一个外卖平台的评论数据对评论的文本做了分类分为好评和差评当你把code_01_processdata.ipynb文件跑完之后就可以看到在data_all里面有一个data里面有三个文件样式都是像下面这样的
text下面的红色条就是一个个句子。
label里面有红色有绿色就是表示标签分类。
transformers包做分类的时候数据要求就这两列。
数据需要分为train_data.csv,test_data.csv,valid_data.csv,这三个csv文件注意是使用,分割开的。
数据不可以有缺失值数据最好只含有两列label,text
label:表示标签最好为整型数值。
0,1,2,3,4等text:表示文本看你需求可以有符号也可以没有标点符号
train_data.csv,test_data.csv,valid_data.csv这三个数据里面不要有数据相同的不然会造成数据泄漏。
Tokenizer会将数据中的text转换成三个矩阵(或者叫三个Tensor)分别叫input_ids,token_type_ids,attention_mask至于怎么转换的我们先不做详细介绍本仓库后续会介绍。
pretrained
model在被加载之前需要设置一大堆模型的参数至于要设置什么参数我们也不做详细介绍。
Trainer就是一个训练器也需要预先设置好一大堆参数。
至于要设置什么参数我们也不做详细介绍。
Trainer会把input_ids,token_type_ids,attention_mask还有数据自带的标签label还有pretrained
model都加载进来进行训练当所有batch的数据更新完之后最终就会生成一个模型。
your
model就诞生了。
对于刚开始学习大模型做nlp分类的任务其实不需要考虑那么多细节只需要注意数据流程。
这个步骤非常看显存大小。
显卡显存越大越好。
batch_size,eval_size大小取决于显存大小。
在实际工程中会先使用Tokenizer把所有的文本转换成input_ids,token_type_ids,attention_mask然后在训练的时候这步就不再做了目的是减少训练过程中cpu处理数据的时间不给显卡休息时间。
在使用Tokenizer把所有的文本做转换的期间如果设置的文本的长度上限为64那么会把大于64的文本截断那些少于64的文本会在训练的时候在喂入模型之前把长度补齐这么做就是为了减少数据对内存的占用。
这个时候就是搞个句子然后丢给一个pipeline(这个就是把Tokenizer和你的大模型放在一起了)然后这个pipeline就给你返回一个分类结果。
常见的就是使用pipeline如果更加复杂的话比如修改模型这个时候就比较复杂了后面会再次介绍。
简单的部署相对于预测其实就是再加一层web端口fastapi包就可以实现。
高级一点的部署相对于预测就需要把模型从pytorch转换成onnx格式的这样可以提高推理效率也不一定就是举个例子可能也不会使用web端口http协议了会使用rpc协议等方法。
这部分现在先不看。
本文将介绍如何使用中文语料训练一个gpt2可以使用你自己的数据训练用来写新闻、写古诗、写对联等我这里也训练了一个中文gpt2模型使用了612万个样本每个样本有512个tokens总共相当于大约31亿个tokens
requirements.txt像是pytorch这种基础的包肯定也是要安装的就不提了。
获得数据:数据链接关注公众号【统计学人】然后回复【gpt2】即可获得。
获得我训练好的模型(使用了15GB的数据(31亿个tokens)在一张3090上训练了60多小时)
数据其实就是一系列文件夹然后每一个文件夹里面有大量的文件每一个文件都是.csv格式的文件。
其中有一列数据是content每一行的content就代表一句话虽然数据有15GB那么大但是处理起来一点也不复杂使用
包可以很轻松的处理大数据而我只需要传递所有的文件路径即可这个使用
现在训练一个gpt2代码其实很简单的。
抛开处理数据问题技术上就三点:tokenizer、gpt2_model、Trainertokenizer使用的是bert-base-chinese
然后再添加一下bos_token、eos_token、pad_token。
gpt2_model使用的是gpt2这里的gpt2我是从0开始训练的。
而不是使用别人的预训练的gpt2模型。
Trainer训练器使用的就是transformers的Trainer模块。
支撑多卡并行tensorboard等都写好的直接调用就行了非常好用
checkpoint-36000里面的checkpoint-36000,修改为模型所在的路径。
然后运行下面一个代码块即可输出文本生成结果可以参考这个代码制作一个api或者打包成一个函数或者类。
修改代码里面的第4行这一行值为模型所在的位置修改为我分享的模型文件路径。
这个完整的项目下来其实我都是全靠huggingface文档、教程度过来的.我做的东西也就是把Tokenizer改成中文的了然后也整理了数据别的大部分东西都不是我做的了.原文链接为https://huggingface.co/course/zh-CN/chapter7/6?fwpt.
其实我更喜欢做应用但是也要理解相关的背后原理目前还在研究相关的gpt2原理还有相关的推理细节这是我整理的链接希望可以共同进步
https://huggingface.co/blog/how-to-generatehttps://huggingface.co/gpt2https://huggingface.co/gpt2-large
本文将介绍如何从0到1的训练一个中文clip模型。
在处理数据的过程中训练的过程中需要的注意事项。
从数据流的角度看看clip模型是怎么处理数据的模型是怎么构建的。
image和text的模型的差异性两个模型是怎么合并起来计算loss的。
Pre-training即一种基于对比文本-图像对的预训练方法或者模型。
CLIP是一种基于对比学习的多模态模型与CV中的一些对比学习方法如moco和simclr不同的是
CLIP的训练数据是文本-图像对一张图像和它对应的文本描述这里希望通过对比学习
Encoder用来提取文本的特征可以采用NLP中常用的text
Encoder用来提取图像的特征可以采用常用CNN模型或者vision
上面这段文字来源于https://zhuanlan.zhihu.com/p/493489688
然后把上面两个向量做交叉计算loss然后loss反向传播这样两个模型的参数都会更新。
其实你想啊这个image-model处理图像的其实也可以改为处理视频、处理3d模型等。
那简直是格局打开了。
我现在没有数据后面也打算做一个。
你再想想text-image
text-image-video-3d这样联合起来是不是更好。
没数据没机器做不了。
有些人可能感觉你这人就知道TMD吹牛来来来我带你研究研究clip模型的源码。
直接点击链接https://pan.baidu.com/s/1wGmXUNP021OWnW7Kik7q1A?pwdgd3c
来获得。
把下载好的文件也就是test-2.6w.csv、train-137w.csv放在文件夹bigdata/raw_data里面。
以此运行processdta_01.ipynb、processdta_02.ipynb、processdta_02.ipynb用来处理数据。
processdta_01.ipynb用来下载数据大概下载了10多个小时。
3.2
processdta_02.ipynb用来筛选数据不是所有的图片数据都是可以用的这一步非常坑。
需要留意。
如果图片没有筛选好在你训练到中间的时候突然一下因为图片无法加载导致错误从而训练中断了。
3.3
processdta_03.ipynb用来把数据干净的数据处理好合并好生成新的漂亮的训练数据。
其实完整下来看数据清洗就是把符合格式的照片筛选出来然后进行训练。
textimage_path河南一村民继承祖上的一金碗,专家鉴定:此碗是溥仪皇帝用过的bigdata/image_data/test-9282.jpg著名钢琴家郎朗:我永远不会放弃演奏bigdata/image_data/test-2644.jpg科幻动作电影《超体》10月24日来袭bigdata/image_data/test-13199.jpg
text这一列对应图片的标注或者和图片相关的文本。
image_path这一列对应图片所在你电脑本地上的路径。
是的搞了半天数据就是这么简单。
使用tokenizer把text转换成input_ids和attention_mask.
使用processor把image转换成pixel_values.
因为image太大了只能在训练的时候每一batch才能去加载image
这就导致训练的时候特别慢。
倒不是因为我的3090算力不行全都TMD卡在计算机IO上了非常让人难受。
终于讲解到clip的模型部分了。
这个clip模型实在是太灵活了你可以做很多个版本这里我们挑几个比较常见的结构来分享一下。
这里值得是常见的clip模型特指的是transformers包的clip模型。
clip主要就是分为两个部分一个是CLIPTextTransformer,一个是CLIPVisionTransformer说白了就是一个处理text一个处理image。
CLIPTextTransformer和CLIPVisionTransformer的核心都共用了一个模型结构CLIPEncoder
。
也就是CLIP编码部分。
这里说的共用值得是模型框架相同而不是模型训练的时候参数也相同。
Q有些人就问了text和image两个生成的数据都不一样比如text转换成input_ids和attention_maskimage
转换成pixel_values他们怎么可以使用一个模型结构CLIPEncoder
A这个也是非常好回答的因他俩又不是直接使用CLIPEncoder
前后都加了一些万金油的模型组件比如embedding、linear
等模型输出的时候也是这么做的。
还是应了那句话就看你怎么吧数据转换成hidden_states以及怎么把hidden_states输出出去。
QCLIPTextTransformer和CLIPVisionTransformer输出的维度也不一定一样吧怎么计算交叉损失
看看CLIPTextTransformer和CLIPVisionTransformer的内心
上面的常见的clip模型确实是好其实你只要换一个支持中文的新tokenizer然后从0️⃣开始训练即可。
但是这么搞没什么创意呀。
其实我第一次就是这么干的直接支持中文的新tokenizer。
但是训练了一天loss基本上没变化。
我内心其实是崩溃的。
后来我研究了一下transformers包里面的chinese-clip模型代码。
我发现chinese-clip相对于clip
。
就是把常规的CLIPTextTransformer换成了bert版本的。
啊对这就破案了。
这个奉上代码截图。
因为训练image这类型的任务非常吃资源不管是我的显存还是我的磁盘。
目前数据占用我硬盘100GB针对loss不下降下次如果再让我做我打算先把clip模型的vit部分先固定住然后训练bert来拟合vit-output。
也可也固定bert模型训练vit模型也可以拆开做反正本质上都是Encoder然后计算相似度。
之前在huggingfacehttps://huggingface.co/nlpconnect/vit-gpt2-image-captioning上看到这个模型.
感觉这个模型很有趣想法很好。
发现这个模型关于中文的不多。
之前的clip训练其实挺失败的loss没有下降.
主要也就是抱着学习的态度把源码看懂把流程跑通。
分享中间的细节和踩坑经历。
使用vit来作为encoder部分输出encoder_hidden_states绿色部分1。
使用gpt2来作为decoder部分,接受encoder_hidden_states,绿色部分3。
如果encoder输出的encoder_hidden_states和decoder接受的encoder_hidden_states维度不一样就加个linear,绿色部分2。
pixel_valueimage通过processor生成labeltext通过tokenizer生成的input_ids。
计算loss的时候其实和gpt2一模一样的自回归本质上就是向后错位一下。
目前已经把训练好的模型发布在huggingface上了。
https://huggingface.co/yuanzhoulvpi/vit-gpt2-image-chinese-captioning
本模块处理数据的方式和clip模型差不多可以看隔壁文件夹训练clip的数据处理思路。
只要把processdta_02.ipynb文件替换即可。
执行顺序依然按照着processdta_01.ipynb、processdta_02.ipynb、processdta_03.ipynb。
训练部分train_encoder_decoder.ipynb
处理图像使用的是google/vit-base-patch16-224模型。
处理文本使用的是yuanzhoulvpi/gpt2_chinese模型。
最后就是把两个模型通过VisionEncoderDecoderModel粘起来。
gpu使用的是3090模型大概是2.16亿个参数。
花了超过20个小时。
但是大部分时间都是卡在IO上加载图片上
AutoTokenizer,ViTImageProcessor)
Imagevision_encoder_decoder_model_name_or_path
yuanzhoulvpi/vit-gpt2-image-chinese-captioning#vit-gpt2-image-chinese-captioning/checkpoint-3200processor
ViTImageProcessor.from_pretrained(vision_encoder_decoder_model_name_or_path)
AutoTokenizer.from_pretrained(vision_encoder_decoder_model_name_or_path)
VisionEncoderDecoderModel.from_pretrained(vision_encoder_decoder_model_name_or_path)
predict_step(image_paths):images
i_image.convert(modeRGB)images.append(i_image)pixel_values
return_tensorspt).pixel_valuespixel_values
pixel_values.to(device)output_ids
tokenizer.batch_decode(output_ids,
predspredict_step([bigdata/image_data/train-1000200.jpg])
之前都搞过clip、image-encoder-decoder。
现在哪里还怕搞不懂vit.这里主要分享一下vit的最核心的部分。
载对于一个图片将一个图片分割成N块。
巧妙的使用nn.Conv2d。
将图片的分为块每一块的大小为16x16这样就有(224//16)^2
stridepatch_size)#样本数据(一个batch)
14])数据再转换一下image的embedding就完成了。
project(pixel_values).flatten(2).transpose(1,
embedding_dim这个时候就已经和文本的数据一样了。
维度都是(batch_size,
embedding_dim)再向下推导就是transformers了。
没什么可介绍的了。
项目链接https://github.com/yuanzhoulvpi2017/zero_nlp
更多优质内容请关注公号汀丶人工智能会提供一些相关的资源和优质文章免费获取阅读。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback