Skip to content

Commit

Permalink
init llm training
Browse files Browse the repository at this point in the history
  • Loading branch information
wj-Mcat committed Aug 26, 2024
1 parent 8de204f commit 760292a
Show file tree
Hide file tree
Showing 4 changed files with 155 additions and 23 deletions.
2 changes: 1 addition & 1 deletion blog/2024/06/init-comment-plugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
slug: add-comment-component
title: 添加评论模块
authors: wj-Mcat
tags: [comment]
tags: [tools]
---

给我心爱的博客添加了评论系统,So, 如果你有任何想说的,欢迎来comment。
Expand Down
28 changes: 12 additions & 16 deletions blog/tags.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
facebook:
label: Facebook
permalink: /facebook
description: Facebook tag description
hello:
label: Hello
permalink: /hello
description: Hello tag description
docusaurus:
label: Docusaurus
permalink: /docusaurus
description: Docusaurus tag description
hola:
label: Hola
permalink: /hola
description: Hola tag description
llm:
label: LLM
permalink: /llm
description: large language model
Agent:
label: Agent
permalink: /agent
description: the agent operation unit
tools:
label: Tool
permalink: /tools
description: the tool usage
20 changes: 15 additions & 5 deletions docs/01-llm-intro/05-training/00-intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,28 @@ title: "训练全景概览"

SFT 阶段旨在牵引预训练阶段涌现出的多种能力,会重点训练成:chat 类型模型和 instruction 类型模型。

chat 类型模型会在大量对话相关数据集上训练,进而让模型能够实现更加
chat 类型模型会在大量对话相关数据集上训练,进而让模型能够更友好的对话能力,此类数据的构建通常来源于真实数据。

### Alignment
instruction 类型模型会在大量指令数据集上面训练,让模型具备更好的指令遵循的能力,此类数据的构建可通过LLM来生成高质量数据。[<sup>5</sup>](#self-play-with-execution-feedback)

在对齐阶段,相关方法比较多,其中包括:
### 对齐

对齐本质上也是有监督微调,只不过从作用上来说是为了更精细化的控制模型的生成效果,让其更符合人类的偏好。

## 总结
在对齐阶段,相关方法比较多,其中包括:

* PPO: Proximal Policy Optimization Algorithms [<sup>6</sup>](#ppo)
* DPO: Direct Preference Optimization: Your Language Model is Secretly a Reward Model [<sup>7</sup>](#dpo)
* KTO: Model Alignment as Prospect Theoretic Optimization [<sup>8</sup>](#kto)
* ...

## 参考资料

* [1] [Data Mixing Laws: Optimizing Data Mixtures by Predicting Language Modeling Performance](https://arxiv.org/abs/2403.16952) <div id="data-mixing-laws" />
* [2] [GLM Long:如何将 LLM 的上下文扩展至百万级](https://mp.weixin.qq.com/s/Rs2o8K3Hb-I103eDgNBhVQ) <div id="glm-long" />
* [3] [Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations?](https://arxiv.org/abs/2405.05904) <div id="hallucinations-of-finetune" />
* [4] [Towards Trustable Language Models: Investigating Information Quality of Large Language Models](https://arxiv.org/pdf/2401.13086) <div id="investigating-information-quality" />
* [4] [Towards Trustable Language Models: Investigating Information Quality of Large Language Models](https://arxiv.org/pdf/2401.13086) <div id="investigating-information-quality" />
* [5] [Self-play with Execution Feedback: Improving Instruction-following Capabilities of Large Language Models](http://arxiv.org/abs/2406.13542) <div id="self-play-with-execution-feedback" />
* [6] [Proximal Policy Optimization Algorithms](https://arxiv.org/abs/1707.06347) <div id="ppo" />
* [7] [Direct Preference Optimization: Your Language Model is Secretly a Reward Model](https://arxiv.org/abs/2305.18290) <div id="dpo" />
* [8] [KTO: Model Alignment as Prospect Theoretic Optimization](https://arxiv.org/abs/2402.01306) <div id="kto" />
128 changes: 127 additions & 1 deletion docs/01-llm-intro/05-training/01-dataset.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,130 @@
title: "数据准备"
---

TODO(wj-Mcat): 数据准备
## 介绍

在大模型预训练阶段,数据准备是一个至关重要的环节,它涵盖了多个方面的内容,以确保模型能够学习到高质量、多样化的数据特征。具体来说,数据准备包含以下几个关键步骤和内容:

* 数据收集

* **通用数据收集**:从各种公开资源如网页、书籍、科学论文、代码等中收集数据。这些数据来源广泛,有助于模型学习到丰富的知识和语言模式。
* **专用数据收集**:针对特定领域或任务,收集该领域内的专业数据。例如,对于医疗领域的大模型,需要收集医疗相关的文献、病例报告等数据。

* 数据预处理

数据预处理是一个脏活累活,也至关重要,不过通常是有一个固定的规则流水线来对齐进行处理。方法如下所示:

* **质量过滤**:通过启发式规则、分类器规则等方法去除低质量及有害数据。例如,过滤掉点赞数过少的用户评论、去除含有有毒或隐私内容的文本。
* **去重**:使用精确匹配或近似匹配(如哈希算法)等方法去除重复数据,确保训练数据的唯一性。
* **敏感内容过滤**:进一步过滤掉包含有毒内容、隐私信息等敏感数据,以保护用户隐私和避免模型学习到不良内容。
* **格式统一**:将收集到的数据统一转换为模型训练所需的格式,如jsonl、txt、csv等。

* 数据调度

旨在训练过程中如何通过调度数据进入到训练阶段来提升模型训练的效果。方法如下所示:

* **数据混合**:根据经验或代理小模型的测试结果,确定不同来源数据在训练集中的混合比例,以增加数据多样性。
* **数据课程**:按照一定的顺序安排预训练数据进行模型训练,如先使用通用数据进行预训练,再使用特定领域的数据进行微调。

* 有标注数据

可在训练阶段融入一些类似于文本分类、问答、槽位填充抽取等有标注相关数据,进而提升数据的多样性,同时对于上下文信息抽取的能力。

* 数据扩充

在数据不足的情况下,可以通过数据扩充技术增加训练数据的量。数据扩充技术包括同义词替换、随机插入、随机删除、回译等,这些方法可以在不改变数据本质意义的前提下,生成更多的训练样本。

## 数据收集

在大模型预训练阶段的数据收集过程中,这是一个复杂且关键的任务,它涉及到多个方面以确保收集到高质量、多样化的数据。

### 数据来源

在预训练阶段,数据收集的来源广泛多样,主要包括:

* 互联网公开数据:这是最常见的数据来源之一,包括网页内容、社交媒体帖子、在线论坛讨论、学术论文、开源数据集等。这些数据通常可以通过爬虫技术、API接口等方式获取。
* 企业内部数据:对于特定行业或领域的大模型,企业内部数据往往具有更高的价值和针对性。这些数据可能包括用户行为记录、交易数据、产品使用日志等。
* 第三方数据提供商:有些专业的数据提供商会收集和整理特定领域或行业的数据,并提供给需要的企业或个人。这些数据通常具有较高的准确性和可靠性。

在SFT阶段,数据量不会非常大,数据通常是有标注数据:

### 公开的数据集

以下是关于不同文本语料库或数据集的相关信息:

| 名称 | 描述 | 语种 |
| :---: | :---: | :---: |
| [Pile](https://pile.eleuther.ai/) | 一个用于大语言模型训练的多样性大规模文本语料库,由22个不同的高质量子集构成,包括Common Crawl、Wikipedia、OpenWebText等。 | 英文 |
| [Common Crawl](https://commoncrawl.org/) | 世界上最大的公开网页数据集之一,每月抓取数十亿个网页,涵盖了广泛的语言、地区和主题。 | 英文 |
| [C4](https://research.google/tools/datasets/c4/) | Google发布的一个大规模的预训练数据集,包含了约750GB的文本数据,是从互联网上爬取的网页内容经过清洗和过滤后的结果。 | 英文 |
| [Project Gutenberg](https://www.gutenberg.org/) | 收录了超过60,000本公有领域的电子书,涵盖文学、历史、科学等多种类型。 | 英文 |
| [BookCorpus](https://yknzhu.wixsite.com/mbweb/) | 包含了从英文小说中抓取的约10,000本电子书的文本,主要用于自然语言处理任务。 | 英文 |

此外,还有许多其他领域的数据集,如图像领域的ImageNet、MS COCO等,以及金融和经济领域的Quandl等,这些数据集同样可以用于训练特定领域的大模型。

## 数据预处理

大模型预处理中的基础方法很多,其中包括:

* **质量过滤**:通过启发式规则、分类器规则等方法去除低质量及有害数据。例如,过滤掉点赞数过少的用户评论、去除含有有毒或隐私内容的文本。
* **去重**:使用精确匹配或近似匹配(如哈希算法)等方法去除重复数据,确保训练数据的唯一性。
* **敏感内容过滤**:进一步过滤掉包含有毒内容、隐私信息等敏感数据,以保护用户隐私和避免模型学习到不良内容。
* **格式统一**:将收集到的数据统一转换为模型训练所需的格式,如jsonl、txt、csv等。

其中为了提升模型的质量,可以训练一个[质量分类小模型](https://github.com/modelscope/data-juicer/blob/main/tools/quality_classifier/README_ZH.md#%E8%AF%84%E4%BC%B0%E8%B4%A8%E9%87%8F%E5%88%86%E7%B1%BB%E5%99%A8),输出仅仅是true、false,在现阶段而言这类数据还是比较好准备。

其中阿里开源了一款数据预处理的工具:[data-juicer](https://github.com/modelscope/data-juicer),旨在加速训练大模型过程中数据预处理的过程。

## 数据调度

在大模型预训练阶段,数据调度是一个至关重要的环节,它直接影响到模型的学习效果和训练效率 [<sup>2</sup>](#data-management)

数据调度是指在大模型预训练过程中,根据特定的策略和方法,合理安排和分配训练数据的过程。由于大模型预训练需要处理海量的数据,因此数据调度不仅关乎数据的选取和使用顺序,还涉及到数据的混合比例、数据增强等多个方面。通过合理的数据调度,可以使得模型在训练过程中更加高效地学习通用特征和知识,为后续的任务提供良好的基础。

### 数据调度方法

* 数据增强

数据增强是一种**通过变换已有数据来生成新数据**的方法,可以增加训练数据的多样性和数量。在大模型预训练中,常用的数据增强方法包括同义词替换、回译、随机删除或替换单词等。

此类方法的数据增强通常可包含传统NLP方法,也可以使用LLM来生成相似文本,只不过成本会比较大。

* 数据混合比例

在大模型预训练中,通常会使用来自不同数据源的数据进行训练。这些数据源可能包括网页文本、书籍、学术论文、代码等。为了平衡不同数据源对模型的影响,需要设置合适的数据混合比例。例如,LLaMA模型的预训练数据就包括了超过80%的网页数据、6.5%的代码密集型数据、4.5%的书籍数据以及2.5%的科学数据。

* 数据课程(Data Curriculum)

数据课程指的是在训练过程中,按照一定顺序使用不同难度或不同特性的数据。这种策略有助于模型从简单到复杂逐步学习,提高训练效果。例如,可以先使用较为通用的数据对模型进行初步训练,然后再使用特定领域或高难度的数据进行微调。

## 数据标注

大模型在SFT(Supervised Fine-Tuning,监督微调)阶段的有标注数据主要通过以下几种方式获得:

1. 公开数据集

公开数据集是AI大模型训练数据的重要来源之一。这些数据集通常由学术机构、政府组织或企业公开发布,涵盖了各种类型的数据,如图像、文本、音频、视频等。对于自然语言处理(NLP)领域的大模型,如GPT系列,它们的SFT数据可能包含从公共文本数据集(如Common Crawl、BookCorpus等)中抽取并经过标注的样本。

2. 众包或专业标注服务

对于需要精细标注的数据集,如情感分析、文本分类、对象检测等任务,企业可能会采用众包平台或专业标注服务来获取高质量的标注数据。这些服务通常由大量的人工标注者参与,他们根据给定的指令和标准对原始数据进行标注,确保数据的准确性和一致性。

3. 企业内部数据

许多企业拥有大量的内部数据,这些数据可以用来训练特定领域的AI大模型。在SFT阶段,企业可能会利用这些内部数据,并结合业务场景和需求进行标注,以生成符合模型训练要求的有标注数据集。

4. 合作伙伴共享数据

为了获取更全面、更具代表性的数据,一些公司会与合作伙伴共享数据以共同训练AI大模型。这种合作可能涉及跨行业的数据交换,例如金融公司与电信公司共享客户行为数据以提高风险评估模型的准确性。在数据共享过程中,双方会协商确定数据的标注标准和要求,以确保数据的一致性和可用性。

5. 使用大模型生成数据

近年来,随着大模型技术的发展,一种新兴的数据生成方式是利用大模型自身来生成有标注数据。例如,通过引导式生成(Instruction Following)的方法,让大模型根据给定的指令生成相应的输入和输出对,并自动进行标注。这种方法可以在短时间内生成大量数据,但需要注意的是,生成的数据可能存在偏差和噪声,需要进行后续的处理和筛选。

综上所述,大模型在SFT阶段的有标注数据主要来源于公开数据集、众包或专业标注服务、企业内部数据、合作伙伴共享数据以及使用大模型生成数据等多种方式。在实际应用中,企业会根据自身的需求和资源情况选择合适的数据来源和标注方式。

## 参考文章

* [1] [Data-Juicer: A One-Stop Data Processing System for Large Language Models](https://github.com/modelscope/data-juicer) <div id="data-juicer" />
* [2] [Data Management For Training Large Language Models: A Survey](https://arxiv.org/abs/2312.01700) <div id="data-management" />
* [3] [Datasets for Large Language Models: A Comprehensive Survey](https://arxiv.org/pdf/2402.18041) <div id="dataset-for-llm" />

0 comments on commit 760292a

Please sign in to comment.