LLaMA 数据集

LLaMA的训练数据集来源多样,涵盖了多个不同的数据集和预处理步骤。以下是详细的描述:
在这里插入图片描述

公开数据来源和预处理

  1. CommonCrawl [67%]

    • 使用CCNet管道(Wenzek等人,2020年)对2017年至2020年间的五个CommonCrawl转储进行预处理。
    • 删除行级别的数据,使用fastText线性分类器进行语言识别,以去除非英语页面。
    • 用n-gram语言模型过滤低质量内容。
    • 训练一个线性模型来对维基百科中用作参考文献的页面与随机抽样的页面进行分类,并丢弃未被分类为参考文献的页面。
  2. C4 [15%]

    • 使用多样化的预处理CommonCrawl数据集提高性能。
    • 公开的C4数据集(Raffel等人,2020年)包含重复数据删除和语言识别步骤。
    • 与CCNet的主要区别在于质量过滤,主要依赖于标点符号的存在或网页中的单词和句子的数量等判例。
  3. Github [4.5%]

    • 使用谷歌BigQuery上的GitHub公共数据集。
    • 只保留在Apache、BSD和MIT许可下发布的项目。
    • 用基于行长或字母数字字符比例的启发式方法过滤低质量的文件,并用正则表达式删除模板,如标题。
    • 在文件层面上对结果数据集进行重复计算,并进行精确匹配。
  4. 维基百科 [4.5%]

    • 包括2022年6月至8月期间的维基百科转储,涵盖20种使用拉丁字母或西里尔字母的语言。
    • 对数据进行处理,以删除超链接、评论和其他格式化的模板。
  5. 古腾堡和Books3 [4.5%]

    • 包括Gutenberg项目和ThePile(Gao等人,2020年)的Books3部分。
    • 在书籍层面上进行重复数据删除,删除内容重叠度超过90%的书籍。
  6. ArXiv [2.5%]

    • 处理arXiv的Latex文件,将科学数据添加到数据集中。
    • 按照Lewkowycz等人(2022年)的做法,删除第一节之前的所有内容,以及书目。
    • 删除.tex文件中的注释,以及用户写的内联扩展的定义和宏,以提高不同论文的一致性。
  7. Stack Exchange [2%]

    • 包括Stack Exchange的转储,涵盖不同领域的高质量问答网站。
    • 保留28个最大网站的数据,重新将HTML标签从文本中移出,并将答案按分数(从高到低)排序。

LLaMA的特点总结

  • 多样化数据来源:涵盖从网络抓取数据到书籍、科学论文和问答网站的数据。
  • 高效预处理:通过多种预处理技术确保数据的高质量和相关性,包括语言识别、质量过滤和重复数据删除。
  • 覆盖多语言:重点涵盖使用拉丁字母和西里尔字母的多种语言,提高模型的多语言处理能力。

LLaMA 2在训练设置和模型架构上大部分继承了LLaMA 1的配置,但也进行了几项重要的改进和调整。以下是详细的说明:

模型架构和预训练设置

  • 基础架构:LLaMA 2采用标准的Transformer架构(Vaswani等人,2017年)。
  • 预归一化:使用RMSNorm进行预归一化(pre-normalization)(Zhang和Sennrich,2019年)。
  • 激活函数:采用SwiGLU激活函数(Shazeer,2020年)。
  • 位置嵌入:使用旋转位置嵌入(RoPE,Su等人,2022年)。

主要改进

  • 上下文长度增加:与LLaMA 1相比,LLaMA 2增加了上下文长度,使得模型能够处理更长的输入序列。
  • 分组查询注意力(GQA):引入了分组查询注意力机制,这是一种改进的注意力机制,有助于提高模型的效率和性能。

总结

LLaMA 2在保持LLaMA 1基础架构的同时,通过增加上下文长度和引入分组查询注意力机制,进一步提升了模型的能力。这些改进使得LLaMA 2在处理长文本和提高计算效率方面表现更佳。

### LLaMA 数据集格式说明 #### 文件结构 LLaMA 类型的数据集通常由多个文件组成,其中最重要的是 `dataset_info.json` 和实际存储对话数据的 JSON 文件。对于特定于 XTuner 的 LLaMA3 微调,数据集遵循一种特殊的结构来支持更复杂的交互模式[^1]。 - **JSON 对话记录** 实际的对话数据被保存在一个或多个 `.jsonl` 或者 `.json` 文件中。每一行代表一条独立的对话记录,每条记录是一个字典对象,包含了提示(`prompt`)、查询(`query`)、响应(`response`)等字段。这些字段用于描述一次完整的对话轮次。 ```json { "instruction": "解释什么是机器学习", "input": "", "output": "机器学习是一种让计算机通过经验自动改进的技术..." } ``` - **元数据配置 (`dataset_info.json`)** 此文件定义了如何解析上述 JSON 文件的内容。它指定了各个字段的意义以及它们之间的关系。特别是,在某些实现方式下(如 Alpaca 格式的变体),该文件可能看起来像这样: ```json { "dataset_name": { "file_name": "alpaca_data_cleaned.json", "columns": { "prompt": "instruction", "query": "input", "response": "output", "system": "system", "history": "history" } } } ``` 这里,“columns”的键名表示模型期望接收的标准名称,而对应的值则是原始数据集中相应信息的实际位置[^2]。 #### 处理方法 为了正确加载并处理这样的数据集,可以采用 Python 结合 Pandas 库的方式读取和转换数据。下面给出了一段简单的代码片段作为示范,展示了如何从指定路径加载数据,并将其转化为适合训练的语言模型输入格式。 ```python import json import pandas as pd def load_dataset(file_path, info_file='dataset_info.json'): with open(info_file) as f: config = json.load(f) data = [] # 假设我们只处理单个数据集的情况 ds_config = list(config.values())[0] df = pd.read_json(path_or_buf=file_path, lines=True) mapped_columns = {v: k for k, v in ds_config['columns'].items()} transformed_df = df.rename(columns=mapped_columns)[list(mapped_columns.keys())] return transformed_df.to_dict('records') if __name__ == "__main__": dataset = load_dataset('./data/alpaca_data_cleaned.json') print(dataset[:5]) # 打印前五个样本查看效果 ``` 此脚本首先会读取 `dataset_info.json` 来获取有关数据集的具体细节;接着利用 Pandas 将 JSONL 文件中的内容映射到统一命名的空间内,从而简化后续操作过程中的复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值