大语言模子的底层原理,ChatGPT,文心一言等人工智能体是怎样产生的?本文 ...

杀鸡焉用牛刀  金牌会员 | 2024-6-12 05:55:58 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 549|帖子 549|积分 1647


底子介绍



  • 大语言模子是指在海量无标注文本数据上进行预练习得到的大型预练习语言模子,比方 GPT-3。
  • 目前大语言模子所须要具有的最小参数规模还没有一个明确的参考标准,但是大语言模子通常是指参数规模到达百亿、千亿乃至万亿的模子;也有部分工作认为经过大规模数据预练习(明显多于传统预练习模子如 BERT 所须要的练习数据)的数十亿参数级别的模子也可 以称之为大语言模子(如 LLaMA-2 7B)。
  • 对于大语言模子,这里泛指具有超大规模参数或者经过超大规模数据练习所得到的语言模子。与传统语言模子相比,大语言模子的构建过程涉及到更为复杂的练习方法,进而展现出了强大的自然语言理解能力和复杂任务求解能力(通过文本生成的情势)。
   从机器学习的观点来说,神经网络是一种具有特定模子布局的函数情势,而大语言模子则是一种基于 Transformer 布局的神经网络模子。
  因此,可以将大语言模子看作一种拥有大规模参数的函数,它的构建过程就是使用练习数据对于模子参数的拟合过程。尽管所接纳的练习方法与传统的机器学习模子(如多元线性回归模子的练习)可能存在不同,但是本质上都是在做模子参数的优化。大语言模子的优化目标更加泛化,不仅仅是为相识决某一种或者某一类特定任务,而是希望可以大概作为通用任务的求解器。
   为了实现这一宏大的目标,大语言模子的构建过程须要更为复杂、精细的练习方法。一般来说,这个练习过程可以分为大规模预练习和指令微调与人类对齐两个阶段
  一、预练习

   预练习是研发大语言模子的第一个练习阶段,也是最为重要的一个阶段。
  有效的预练习可以大概为大语言模子的能力奠基结实的底子:通过在大规模语料上进行预练习,大语言模子可以获得通用的语言理解与生成能力,掌握较为广泛的天下知识,具备解决众多卑鄙任务的性能潜力。在这一过程中,预练习语料的规模和质量对于提升大语言模子的能力至关重要。
1.数据准备

为了构建功能强大的大语言模子,须要从多元化的数据源中收集海量数据来进行练习。现有的大语言模子主要将各种公开的文本数据进行混合,作为预练习语料。
   根据泉源不同,预练习数据主要分为两种范例:通用文本数据和专用文本数据。
  通用文本数据涵盖了网页、书籍和对话文本等。由于通用文本数据规模较大、多样性强且易于获取,大多数大语言模子都会收集大量的通用文本数据,以增强其语言建模能力。别的,为了进一步提升大语言模子在特定专业任务上的表现,人们还将预练习语料的范围扩展至更专业的数据集,如多语数据、科学数据和代码数据等。
预练习数据预处理流程图

当收集了丰富的文本数据之后,为了确保数据的质量和效用,还须要对数据进行预处理,从而消除低质量、冗余、无关甚可能有害的数据
质量过滤

直吸收集到的文本数据每每掺杂了许多低质量的数据。比方,从网页抓取的数据中可能包含由机器主动生成的广告网页。为了优化模子学习的性能,须要去除语料库中的低质量数据。目前,研究人员主要使用以下两种数据清洗方法:(1)基于启发式规则的方法,和(2)基于分类器的方法。
敏感内容过滤

除了去除低质量内容,收集到的数据还可能包罗有毒内容或隐私信息,须要进一步进行更为过细的过滤和处理。与质量过滤雷同,不同范例的数据内容每每须要接纳特定的过滤规则。
数据去重

对预练习数据进行去重处理是一个重要步骤。由于大语言模子具有较强的数据拟合与影象能力,很轻易习得练习数据中的重复模式,可能导致对于这些模式的过分学习。
研究工作发现,预练习语料中出现的重复低质量数据可能诱导模子在生成时频繁输出雷同数据,进而影响模子的性能。别的,这些数据也可能导致练习过程的不稳固(练习丧失震荡),可能导致练习过程瓦解。别的,为了避免数据集污染题目,还须要从预练习数据集中删除在测试集中可能出现的重复或者相干文本,从而防止练习集和测试集之间的重叠。总体来说,去重算法的设计可以基于不同的盘算粒度以及匹配方法。
数据预处理实践

质量过滤

在过滤阶段,被判定为低质量的数据会被直接丢弃;而在清洗阶段,经过清洗后的高质量文本会更换原始文本。质量过滤阶段的实现可以依赖于启发式规则(如数据集统计特性、正则表达式匹配等)、预练习模子度量(如模子狐疑度等)和语言标签鉴别(如语言分类器打分)等。用户还可以对数据进行采样,自由组合和安排预定义的算子灵活定制数据质量过滤流水线。
下面以使用 FastText 的语言过滤模块为例来展示实现细节。首先,加载预练习好的 FastText 语言分类器,为每个输入文本生成一个语言标签,不符合配置文件中语言类别的文本将被过滤。
  1. from utils.evaluator import LangIdentifier
  2. class FilterPassageByLangs():
  3.     def __init__(self) -> None:
  4.         # 使用 LangIdentifier 模块加载已经训练好的 fasttext 模型
  5.         self.language_identifier = LangIdentifier(model_path="utils/models/fasttext/lid.176.bin")
  6.         self.reject_threshold = 0.5
  7.     def filter_single_text(self, text: str, accept_lang_list: list) -> bool:
  8.         # 使用 fasttext 模型给 text 打分,每种语言生成一个置信分数
  9.         labels, scores = self.language_identifier.evaluate_single_text(text)
  10.         # 如果 text 所有语言的分数均比 reject_threshold 要低,则直接定义为未知
  11.         if socres[0] < self.reject_thereshold:
  12.             labels = ["uk"]
  13.         accept_lang_list = [each.lower() for each in accept_lang_list]
  14.         # 如果分数最高的语言标签不在配置文件期望的语言列表中,则丢弃该文本
  15.         if labels[0] not in accept_lang_list:
  16.             return True
  17.         return False
复制代码
去重

在去重阶段,YuLan-GARDEN 集成了句子级和文档级去重方法,分别基于句子间

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表