链载Ai

标题: OpenLLM | 预训练数据构造方法总结 [打印本页]

作者: 链载Ai    时间: 1 小时前
标题: OpenLLM | 预训练数据构造方法总结

前言

亲爱的卷友们,大家早上好,过了五一又要开始学习了!在大语言模型(LLM)爆火的时代,相信很多读者小伙伴们都好奇为什么LLM可以有如何强大的能力,笔者将带领大家对LLM一探究竟。首先,今天要谈的是打造一个LLM的第一步,即预训练。预训练的目的是教会LLM具备“说话”的能力,让LLM具备丰富的“知识”。同时,预训练阶段很大程度上影响了LLM在下游任务上的泛化性能,不仅可以帮助模型在SFT阶段更快得拟合数据,同时,好的预训练可以让LLM“不说假话”,即缓解模型幻觉。

LLM预训练的方法很简单,就是将负对数似然损失作为目标函数训练模型基于上文的token对下一个token进行预测。预训练数据的构造对于模型性能的影响至关重要,接下来,本文主要从预训练数据的构成和处理两方面进行讲解。


数据来源

一般来说,LLM预训练所需要的数据来源大体上分为通用数据专业数据。通用数据包括网页、图书、新闻、对话文本等。通用数据具有规模大,多样性和容易获取等特点,因此对于LLM的语言建模和泛化能力有重要的支持作用。而专业数据包括多语言数据,科学文本数据,代码以及特定领域的数据等。在预训练阶段引入专业数据可以有效地提升LLM解决不同任务的能力。下图[1]为不同的LLM所使用的数据类型占比情况,可以看到不同的LLM在训练数据类型分布上的差异很大,但至于什么样的数据分布比较好,目前还没有达成共识。

1. 通用数据

通用数据在LLM的训练数据中占比非常高,主要包含网页、书籍、对话数据等不同类型的数据,为LLM提供了大规模且多样的训练数据。


2. 专业数据

专业数据相对于通用数据来说占比比较低,但是其可以很大程度上提升LLM在下游任务上的特定任务解决能力。


数据处理

收集好数据之后,就需要对数据进行处理。很多研究都表明,数据质量对于LLM的影响非常大。包括笔者在工作中训练LLM时,都能深刻地感受到数据质量的重要性。数据处理步骤通常包含去除低质量数据、重复数据、有害信息、个人隐私等内容。下图[1]为常见的数据流程。

1. 质量过滤

LLM训练中所使用的低质量数据过滤方法可以分为两类:基于分类器的方法和基于启发式的方法。

2. 冗余去除

训练数据中存在的重复数据会降低LLM的多样性,并可能导致训练过程不稳定,从而影响模型性能,因此需要对预训练数据中的重复数据进行处理,去除冗余部分。冗余去除就是在不同的粒度上去除重复的内容,包括句子、文档和数据集等粒度。

3. 隐私消除

由于绝大多数预训练数据都来源于互联网,因此不可避免地会包含涉及敏感或个人信息,这可能会增加隐私泄露的风险。例如,LLM可能会在预测的时候补全姓名、电子邮件、电话号码等信息。因此。非常有必要从预训练数据中删除包含个人身份信息的内容。

删除隐私数据最直接的方法就是基于规则的方法。例如可以使用基于命名实体识别的方法,利用命名实体识别算法检测姓名、地址、电话号码等个人信息内容并进行删除和替换。

4. 词元切分

我们都知道,NLP领域想要对单词进行计算,都需要提前构建一个词典,并根据词典将单词转换成embedding,如果遇到词表中不存在的未登录词,则给予其一个默认的通用表示,一般而言,都会在词表中预置一个[UNK],表示未知词,并在训练中将[UNK]的向量作为词表示矩阵的一部分一起训练。而词表大小对于模型的性能影响非常大,当词表过小时,未登录词的比例比较高,影响模型的性能;当词表比较大时,大量低频词出现在词表中,这些词向量很难得到充分的学习。

为了解决未登录词的问题,一些工作通过利用亚词级别的信息构建词表示向量。例如BPE[7]是一种常见的子词词元算法。该算法采用的词表包含最常见的单词以及高频出现的子词。使用时,常见词通常位于BPE词表中,而罕见词通常能被分解为若干个包含在BPE词表中的词元,从而大幅减小未登录词的比例。除此之外,WordPiece[8]也是一种常见的次元分析算法,与BPE有非常相似的思想。


总结

对LLM比较熟悉的朋友们可能知道,现有的大模型在结构上其实都大差不差,基本上都是Decoder-only类型的结构,或者引入MoE结构,也就是说修改模型结构对于模型性能的提升性价比并不是最高的。而在训练过程中,数据准备和处理是工程量最大且花费人力最多的部分。而随着最近不同开源模型新的版本发布,例如LLaMA-3,可以发现一个点,就是对于相同参数的模型来说,更多高质量的数据对提升模型的性能是非常显著的。因此无论是在学术研究还是工业界应用中,对数据进行研究无疑是一个最直接,并且性价比非常高的解决方案。

预训练是一个让LLM掌握“知识”的阶段,而如何让LLM听懂人类的自然语言指令,帮助我们去完成一些特定的任务,这就需要对LLM进行有监督微调(SFT)以及人类反馈强化学习(RLHF)等。后续,笔者将带着大家继续对LLM的训练过程进行学习,对SFT,RLHF等知识进行讲解。


参考文献:
[1]A Survey of Large Language Models.
[2]Language Models are Few-Shot Learners.
[3]PaLM: Scaling Language Modeling with Pathways.
[4]GLaM: Efficient Scaling of Language Models with Mixture-of-Experts.
[5]BLOOM: A 176B-Parameter Open-Access Multilingual Language Model.
[6]Scaling Language Models: Methods, Analysis & Insights from Training Gopher.
[7]Neural Machine Translation of Rare Words with Subword Units.
[8]Japanese and Korean voice search.



我是一个热爱音乐的AI算法小哥哥
毕业于仙交,某大厂NLP算法工程师,主要研究LLM,AIGC以及AI Agent
欢迎一起探索AI前沿技术,一起进步






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5