你好,欢迎进入江苏优软数字科技有限公司官网!

诚信、勤奋、创新、卓越

友好定价、专业客服支持、正版软件一站式服务提供

13262879759

工作日:9:00-22:00

sketch im打不开 【从零训练Steel-LLM】预训练数据收集与处理

发布时间:2025-01-04

浏览次数:0

本文首发于2024年5月6日知乎账号“勇士金”,内容略有改动。今天(2024.8.18)正好是我们模型预训练完成的日子,接下来我们会做一些sft和评估工作。

前言

自从我换工作后,我就没有更新太多内容了。在新的地方要学的东西实在是太多了,我实在抽不出时间来。说实话,新部门做的事情和LLM关系不大。只是出于个人兴趣,在具备一定条件的情况下,我打算近期从零开始培养一个LLM。我会用@来完成,记录项目期间的数据采集和数据。处理、预训练框架思维、模型设计等细节,并且所有代码都将开源,让大家可以用T级数据预训练一个小模型(1~2B,基准)可用的中文LLM。我们会选择qwen1.5来使用。具体模型我们还没有想好。我们不太可能完全复制当前的LLM结构。由于它是从头开始预训练的,所以你可以尝试你感兴趣的结构。LLM最初计划将其命名为steel。我最喜欢的乐队玛格南青年旅馆在制作第一张专辑时条件有限。他们号称“土方法炼钢”,却是摇滚圈的神专辑(推荐除了《杀掉那个石家庄人》以外的歌曲也听)。我们培养LLM的条件也有限,但我们希望也能炼出好“钢”。 @和我都是程序员。我们基本上只有周末才有时间做这个项目,所以项目周期可能比较长(3个月+)。也欢迎您加群交流。团里有200多人。

github地址:https://github.com/zhanshijinwat/Steel-LLM/tree/main

预训练数据收集

2.1 Steel-LLM 使用的数据

Steel-LLM的预训练语料以中文为主,全部为开源数据。项目 Steel-LLM/data/ 目录下有每个数据集的下载脚本。官方网站上有一些数据。如果无法访问,可以访问HF--镜像站点。使用的数据如下:

/-150B数据集:用于训练天宫模型的部分语料,是从233M可公开访问的网页中获得的大型训练语料。 150B代币,约600GB数据,号称最大的开源中文数据集。

.0(nlp部分):由网页、百科全书、书籍、专利、教材、试题等不同来源的清洗预训练语料组成,总数据量超过5亿文档,数据规模超过1TB(578GB中文数据+434GB英文数据),经过细粒度清洗、去重、值对齐后。 .0还包含图像、文本和视频数据集。

中文维基过滤数据:该数据集基于中文维基2023年7月20日的转储存档,过滤特殊、低质量、敏感、有争议的条目,仅保留较高质量条目的内容。

百度百科数据:563w条百度百科数据,未经清洗,约17GB数据。

百度百科问答数据:包含150万条预过滤的优质百科问答。该数据集共有 492 个类别。

知乎问答数据:100万条,1.5GB大小。

BELLE对话数据:我们选择在预训练阶段添加对话数据,以降低sft阶段学习对话模式的难度。使用.5M_CN和两个数据集生成的,未经严格验证。

Moss项目对话数据:包含110万条中英文多轮对话数据

.1M:收集了23个常见中文NLP任务的数据,构建了许多与中国文化相关的数据,如对联、诗歌、文言翻译、散文、金庸小说等。对于每个任务,手动编写了几个指令模板,数据量115万条。

训练数据:包含86种编程语言,总共783GB数据。 Steel LLM只使用三种语言的数据:java、cpp。在预训练数据中加入编码能力可以提高模型的逻辑推理能力。

2.2 其他数据

这里我还给出了研究过程中发现的其他数据,这些数据在训练Steel-LLM时没有使用。如果你有更大的数据需求和计算能力,也可以考虑使用。

中国人

WuDao文本预训练数据集:使用20余条规则清洗100TB原始网页数据得到最终数据集,重点去除隐私数据信息,从源头避免GPT-3隐私泄露风险;包括教育、科技等50+行业数据标签,可支持多领域预训练模型的训练,并开源200GB数据。这部分数据好像只支持从网络下载,在服务器上获取不太方便,所以放弃了。

MNBVC:由三兄弟发起的中国数据集收集项目。目标是收集40T数据。截至2024年3月16日,已收集80%。数据比较复杂,包括歌词、产品介绍、笑话、尴尬、聊天记录等形式的文本数据,我们的计算能力无法用如此大量的数据来训练,而这部分数据还没有被训练出来。已清洁。

:通过对Crawl的中文部分进行清洗,我们最终获得了100GB的高质量中文预训练语料。数据有点老了。

英语

-cc:来自1T高质量英文网络文本数据集,100B开源。

:训练数据由 59166 个 jsonl 文件组成,压缩至 895GB 大小,是干净且去重的版本。

dolma:OLMo开源模型的训练数据,包含源自各种网络内容、学术出版物、代码、书籍和百科全书材料的3万亿代币数据集。

:经过严格过滤和大规模去重构建的数据集,解压后2.8TB。

代码

the-stack-dedup:包含超过 6TB 的开放代码文件sketch im打不开,涵盖 358 种编程语言。

数据处理

3.1 其他数据如何处理

我们的人力和时间有限,而且使用的大部分开源数据都需要进行一些清洗和过滤。因此,我们目前不实施更复杂的数据清理流程,例如有害内容检测。稍后有时间我们会改进它。但这里我们也向读者简单介绍一下一些优秀项目从原始数据出发的完整的数据清洗方法。

1.数据处理

论文地址:https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2402.19282.pdf

(1)从Crawl的WARC格式数据中提取文本,得到“原始数据”。

(2)通过启发式规则对原始数据进行过滤,生成“清洗后的数据”。

(3)采用基于(库)的去重方法,对干净数据进行处理,得到“无重复数据”。

(4)采用基于关键词、域名列表的过滤方法,以及基于Bert的有害内容分类器和淫秽内容分类器,过滤“不重复数据”,生成“安全数据”。

(5)使用基于Bert的广告分类器和流畅度分类器对“安全数据”进行进一步过滤,得到最终的“高质量数据”。

sketch im打不开_哪有omg打im重赛视频_sketch.im打不开了

2.卓玛数据处理

论文地址:https://arxiv.org/abs/2402.00159

完全开源的LLM OLMo训练数据,论文有83页。

(1)语言过滤:利用CCNet的语言识别模型进行语言识别和过滤。目标语言是英语。语言过滤永远不会完美,总会有一些其他语言无法过滤掉。

(2)质量过滤:将数据处理时的规则与C4数据相结合,实现质量过滤。

(3)内容过滤:过滤掉“有毒信息”(zz不正确、种族歧视、色情等),同时利用规则(关键词、域名黑名单等)和文本分类器。使用一系列正则表达式和经过 Toxic 训练的模型来识别和消除个人隐私信息。

(4)重复数据删除:采用URL、文档和段落级重复数据删除相结合的方式。具体来说,使用布隆过滤器。

3.ziya2数据处理

(1)数据预处理:语言检测过滤英文和中文数据。然后对语料库的编码进行标准化,并将所有繁体中文文本转换为简体中文文本。此后,诸如不可见的控制字符、特殊符号、表情符号等无意义的标记将被消除。

(2)语言质量评分:利用中文维基百科和英文维基百科训练KenLM模型,预测语料库的PPL,判断语料库的质量。

(3)基于规则的过滤:分文档、段落、句子三个级别进行过滤。在文档级别,规则是围绕内容长度和格式设计的。在段落和句子级别,规则的重点转向毒性。

(4) 重复文本删除:使用 和 删除重复文本。

4. 总结

(1)目标语言过滤:有些LLM只关注特定语言,可以通过语言识别模型进行过滤。

(2)个人隐私内容:个人隐私相关信息LLM无法获悉,可以通过正则表达式检测到。

(3)有害内容:通过域名黑名单、词语黑名单、有害性检测分类器检测到的种族歧视、zz失准、色情信息等。

(4)格式正确性:HTML标签、符号或标点符号是否使用正确等。这通常通过手动定义规则和正则表达式来解决。

(5)重复数据:重复数据不仅会浪费计算资源,还会对模型性能产生负面影响。目前的重复数据删除方法主要分为三类:基于URL的匹配、基于字符串的匹配和模糊匹配。

(6)内容质量:指数据集中的信息是否能够有效提高模型的性能。训练数据的质量可以通过小模型的训练和评估来判断。或者,可以使用已知的高质量数据集(例如wiki数据)作为正样本,然后可以训练语言模型或分类器进行评分和过滤。还可以指定一些与内容质量相关的规则。

3.2 Steel-LLM数据预处理

完整复制Steel-LLM的数据处理过程大约需要4T硬盘。如果要在几个小时内将文本转换为令牌ID,则需要打开32个进程和大约200GB内存。 Steel-LLM的训练数据处理流程如下:

哪有omg打im重赛视频_sketch im打不开_sketch.im打不开了

根据技术报告,天宫150B(600GB+)和万卷1.0(1TB+)比较干净,数据量也比较大,所以没有进一步的数据过滤,直接转换成token id保存起来供平台使用培训计划。万卷1.0数据解压前约为500g。单次解压耗时2小时sketch im打不开,解压后大小1T。万卷1.0数据为jsonl格式,“”字段存储文本内容。不过,有一个特殊的文件(CN/-cn/part--.jsonl),它是选择题数据。如下格式所示,需要单独处理。也体现在项目Steel-LLM///ta.py文件的功能上。 。

{"id":"BkQQU-7xK3YAJdm0cWMc","q_type":"单选题","q_main":"下列属于同种物质的是()","option_a":"冰和水","option_b":"铁和铁锈","option_c":"镁和氧化镁","option_d":"金刚石和石墨","option_e":"","std_ans":"A","answer":"","answer_detail":"A、冰时由H、O元素组成,水是由H、O元素组成,化学式都是H2O,属于同种物质,故A正确; \nB、铁中只有铁元素,而铁锈中有铁和O元素,显然组成元素不同,不属于同种物质,故B错误; \nC、镁中只有镁元素,氧化镁中有镁和氧元素,组成元素不同,不属于同种物质,故C错误; \nD、金刚石和石墨都是碳元素组成的,但碳原子的排列方式不同,结构不同,不属于同种物质,故D错误; \n故选A","grade":"九年级","major":"化学","keypoint":"化学式的书写及意义"}

其他八类数据先统一为统一格式,方便后续数据过滤。 Steel-LLM使用的是qwen1.5,所以我们也选择遵循qwen对话模式。我们需要将moss、BELLE等对话数据转换为qwen对话格式,如下图。这里有一个细节。处理对话格式数据时,这里不需要添加下面的{},因为后续将文本转换为token id时,每条完整的文本后面都会加一(qwen1.5)。终结符(),为什么要这样做,后面会介绍)

<|im_start|>systemYou are a helpful assistant.<|im_end|><|im_start|>user{问题}<|im_end|><|im_start|>assistant{回答}<|im_end|>

数据过滤采用阿里巴巴开源数据工具,是一站式数据处理工具。每个数据处理步骤都被抽象为data-中的一个运算符。用户可以轻松配置yaml文件来实现定制的数据处理流程。其主要提供的算子包括以下五类。用户还可以自定义数据处理。柜台。 data-数据处理的实现比较暴力。许多运算符使用原生的 for 循环来循环句子中的单词,效率不是很高。

sketch im打不开_sketch.im打不开了_哪有omg打im重赛视频

图2中的格式1和格式2都是jsonl格式,“text”字段存储文本。如下图:

{"text":"电子荒原"}

我们的数据预处理过程还存在一些不足,例如预训练语料库中不同领域的文本缺乏匹配。

3.3 数据与现有训练框架兼容

当数据量较小时,运行预训练过程非常简单。将文本加载到内存中,并将文本转换为用于训练的 token id(例如 LLaMA 项目)。使用库的类或者使用分布式任务并不困难。但当数据大到T时,将数据完全加载到内存中就变得压力更大。因此,需要找到一些可以支持大数据量训练的开源项目,对其进行修改,然后进行训练。经过研究,可以使用该项目和OLMo项目提供的训练流程。 OLMo项目的代码结构比较重,所以我们最终选择了一个代码更简单、更容易理解的项目进行魔改。

数据处理的最后一步是将文本转换为 token id 并以训练代码可以读取的格式保存。很多LLM(比如ziya2)在预训练时会在每个完整的文本后面添加一个“停止符()”。我们使用Qwen1.5项目中的聊天模型,因此对应的停止字符是“”。 Qwen1和Qwen1.5的词汇量不同,基础模型和聊天模型的停止字符也不同。基础型号的停止符为“”,请勿用错。

生成最终训练数据时,首先预定义一个形状为(n,+1)的二维空间(之所以为+1是因为训练方法是预测下一个token,句子需要移动了一个位置作为标签),先用(qwen1.5是"")预填充,然后插入文本token id。每行存储训练时一段文本对应的 token id。如果文本太长,则直接截断并放在下一行。最后一部分的二维空间基本没有完全填满,有很多行,如下图所示。不过没关系,训练时计算loss时忽略即可。

将文本转换为令牌 ID 并保存的过程不是很快。使用 32 个进程并行处理 621GB 数据。耗时约6小时,最终生成578GB数据。

进技术交流群请添加AINLP小助手微信(id: ainlp2)

请备注具体方向+所用到的相关技术点

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括LLM、预训练模型、自动生成、文本摘要、智能问答、聊天机器人、机器翻译、知识图谱、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。


如有侵权请联系删除!

13262879759

微信二维码