SecCorpus: 构建安全领域大模型数据的技术实践


by 腾讯安全科恩实验室

1. 引言

过去十几年来,人工智能技术不断发展,逐渐被应用于网络安全领域,大幅提升了检测分析、处置响应等方面的效率。ChatGPT的问世及其卓越表现,再次激发了网络安全市场对于大模型的期待。然而,以ChatGPT为代表的通用大模型通常以API形式供使用方调用,这不可避免地带来了成本和数据隐私问题。此外,通用大模型在网络安全领域的实际应用效果尚存优化空间。因此,针对特定业务场景的私有化部署的领域大模型应运而生。如何构建一个适用于网络安全领域的大模型,以协同提升安全攻防、安全运营等能力,成为关键课题。目前众多网络安全厂商已陆续推出自有网络安全垂直领域大模型。

为了强化和推进大模型在安全垂直领域的表现,腾讯安全科恩实验室构建了SecCorpus安全领域大模型数据清洗套件及相应的安全语料数据集。本文首先概述当前网络安全领域大模型的进展及应用场景,并以腾讯安全科恩实验室在安全领域大模型安全语料数据方面的研究工作为背景,分享我们在构建SecCorpus过程中的一些经验和成果。

2. 安全领域大模型进展

2.1. 网络安全领域大模型进展

根据IDC发布的“破土萌芽——大模型在网络安全领域的应用市场洞察报告”[1],报告指出国内众多网络安全厂商在2023年陆续推出了各具特色的网络安全垂直领域大模型,由于数据、成本、时间等原因,针对大多数网络安全专业厂商,在基础通用大模型之上投喂安全知识语料,进行模型的再次预训练和微调,从而生成安全垂直领域大模型,是一个性价比更高的途径。安全运营、威胁情报、威胁检测与分析、应用程序安全、数据分类分级成为大模型在网络安全领域的五个主要应用方向。作为网络安全行业的领军者,Google和Microsoft也相继推出了自有的网络安全大语言模型或平台。

Google在2023年发布了自研的网络安全大模型Sec-Palm2[2],Sec-Palm2针对安全应用场景进行了微调,整合了大量威胁情报数据。Sec-Palm2结合VirusTotal推出了code insight功能,可帮助安全分析人员快速分析和说明潜在恶意代码的行为,而无需对脚本进行耗时耗力的逆向工程;与此同时,Sec-Palm2还结合Google cloud 推出了Duet AI,Duet AI是目前网络安全领域与大模型结合的标杆产品,具备情报分析与威胁狩猎、安全运营(自动提供安全事件的总结摘要,提供威胁背景,并提出具体建议处置威胁)、攻击溯源(实时分析安全问题,发现可能的攻击路径)等能力,大幅提升安全团队的工作效率。

另一个标杆产品是微软发布 Security Copilot[3],Security Copilot凭借OpenAI提供强大的模型能力和Microsoft自身在基础设施、威胁情报以及安全能力等方面的深厚积累,将 GPT-4 与微软丰富的专有安全数据相结合,具备恶意脚本分析、自动撰写安全事件报告、自然语言结合的威胁狩猎、威胁事件分析与响应、设备合规检查等多重能力,可为安全团队提供全方位的智能辅助,从而显著提升安全运营效率。

从应用方向看,代码/流量分析,告警/攻击研判解读,安全知识问答,安全智能运营是目前落地的主要方向。从实现方式上看,Google Sec-Palm2以 Palm2为基础模型,增加安全领域数据进一步预训练或微调;Microsoft整合OpenAI GPT4和安全领域数据,其是否采用了微调等技术尚无定论,但将大模型与专业领域数据相结合,是提升大模型在垂直领域应用效果的关键所在。我们尝试分享科恩安全大模型构建过程中的一些细节,并给出我们的网络安全领域数据构建方案,希望对网络安全大模型领域有所帮助。

2.2. 科恩网络安全领域大模型构建

在构建安全领域大模型的过程中,我们尝试在数据、模型等不同层面分析影响模型安全能力的核心因素,分析指出安全领域数据是模型安全能力提升的关键。我们的工作围绕评估、数据、模型、应用四个阶段展开。

评估层面

算法研究评测先行,因此我们首先和多个团队联合构建了网络安全大模型评测平台SecBench,旨在为安全大模型研发提供公平、公正、客观、全面的评测能力,辅助安全大模型建设与研发过程。SecBench 重点从能力、语言、领域、安全证书考试四个维度对大模型在网络安全领域的各方面能力进行评估,已经覆盖多个安全领域,包括数据安全、应用安全、端点与主机安全、网络与基础架构安全、身份与访问控制、基础软硬件与技术、安全管理等。目前,SecBench已发布。


数据层面

为了实现了从数据到模型能力的端到端的监控,例如对任意一批数据,可以针对性的评估该数据对模型安全能力的影响,我们构建了一套完整的数据采集、数据清洗、数据评估流程。关于数据套件的详细内容,将在后续章节详细介绍。

我们目前已经清洗了中英文总计约20B tokens的高质量安全领域数据,覆盖:安全博客、资讯文章,百科,安全书籍,安全论文等数据源。

模型层面

为了验证我们领域数据的有效性,我们在多个模型层面进行了实验评估:

  1. 预训练安全领域小模型,我们基于清洗的安全数据,预训练了160m-1.1B的小模型,160m模型在滚动测试集上验证困惑度(Perplexity)已经达到1.8B通用模型的水平;
  2. 增量预训练:我们通过对Qwen、Baichuan等开源模型进行增量预训练,增量预训练后评估表明效果有明显提升,已经超过了ChatGPT;
  3. 混合数据预训练:腾讯安全科恩实验室与安全平台部合作共建,构建的安全数据目前已经融入到腾讯混元大模型的训练过程,混元大模型在网络安全领域能力有明显提升,科恩基于最新混元大模型搭建威胁情报智能研判助手取得了良好效果。

基于此三个方面的结果,验证了我们的安全数据的有效性。

应用层面

我们基于最新混元模型搭建了威胁情报研判Agent,通过结合科恩的海量威胁情报、安全基础能力和二进制安全智能分析平台BinaryAI,实现情报数据增强的对话式威胁研判Agent,为安全专业人员提供快速检测和响应威胁的端到端体验。其支持用户以自然语言提问关于可执行文件哈希(MD5或SHA256)、IP、域名、CVE等安全实体的任何问题,后台结合威胁情报的详细信息和BinaryAI引擎SCA分析结果,向用户反馈关于提问实体的安全洞见,帮助运营人员提高调查能力,缩短应对安全威胁的响应时间。

作为威胁情报研判Agent,其具备如下能力:

  1. 掌握丰富的网络安全知识和情报运营常识,理解情报运营人员日常工作所接收到的所有信息,包括告警日志,Payload,代码片段,网络流量包,外部情报的网页内容等。
  2. 能够使用情报人员日常所用的工具,包括查询内部的各情报源数据接口,访问网页,使用搜索引擎等。
  3. 能够成情报研判任务,提供正确的研判结论,生成一份逻辑清晰、论据合理的研判报告。

除了可以作为独立的应用,还可以作为组件被第三方安全站点集成,如下所示,例如我们将其集成到BinaryAI中,可以分析文件的功能、第三方组件、文件行为以及可能的漏洞等信息。

未来我们会发布威胁情报研判Agent的技术文章,并且开放威胁情报研判Agent的能力,敬请关注。

3. 安全领域数据构建套件

在上一节我们提到安全领域大模型的能力主要来自于领域数据,在这里重点介绍我们的安全领域数据构建流程。基于我们的实践和公开研究,我们的领域数据构建大致遵循如下流程:

  1. 多源数据采集
  2. 安全文本召回
  3. 数据清洗
    1. 去重
    2. 语言识别,仅筛选中英文
    3. 脏数据过滤(不同格式数据有所不同)
    4. 自定义规则过滤
  4. 高质量文本筛选
  5. 全局去重合并
  6. 进入训练评估流程,递归清洗数据

3.1. 多源数据采集

由于公开的数据以通用数据为主,我们首先需要确认安全领域数据的数据来源。主要包括以下几个方面:

数据源 数据量级 数据质量
Common Crawl TB
书籍 TB
安全站点 GB
arxiv GB
百科 GB
开源数据 TB
  • Common Crawl 等网页数据,含有大量的文本数据,但是数据质量一般,需要进行详细的数据清洗和领域数据筛选,见网页数据清洗流程
  • 书籍数据,质量较高,需要筛选安全主题类数据后清洗
  • 安全站点如Hacknews等,领域相关度较高的数据
  • ArXiv 数据质量较高,需要筛选安全领域相关数据
  • 百科数据,主要来自维基百科/百度百科数据,数据质量高,需要筛选安全领域相关数据
  • 开源数据,主要来自开源社区的数据,进行安全领域数据筛选

3.2. 安全语料召回

安全语料筛选决定了我们安全语料的纯度,综合考虑数据量和性能原因,我们采用了两级过滤方案:即关键词过滤和基于分类器过滤。

  • 关键词召回:由于全量数据达到了TB级,考虑到集群性能和数据召回效率,我们首先采用安全关键词召回减少数据量,过滤掉90%以上安全领域无关数据。我们从多个网站搜集了4000+中英文网络安全领域关键词。
  • 基于模型的召回:基于关键词召回后语料进一步筛选,我们采用安全站点数据、和部分人工+规则的形式筛选出小批量的安全相关数据,在Common Crawl中随机选取部分数据作为非安全数据,基于FastText训练了安全文本分类模型,作为第二阶段安全数据召回的模型。

3.3. 数据清洗

3.3.1. 网页数据

网页是最方便获取、数量最多但质量也相对较差的数据。我们收集维护了数百个安全站点URL,和数千个网络安全术语,以此基础获取相关网页。我们使用爬虫爬取、Common Crawl上召回等方法获取(疑似)包含安全相关内容的网页并进行清洗。

下图是CCNet处理Common Crawl数据[4]的流程:

图源:https://blog.christianperone.com/2023/06/appreciating-llms-data-pipelines/

我们主要参考了CCNet的清洗过程,但与CCNet不同的是,我们专注于在HTML格式上直接进行清洗(WARC),而非WET等网页提取的文本格式。因为HTML源码中包含关于页面排版在内所有信息,可以使用现有工具分离正文元素、代码并解析,从而获得较高质量的文本语料。计算资源来自于千核的spark集群,清洗流程如下:

  1. 使用tralifitura[5]提取正文html元素,归一化为xml格式
  2. 文本粗提取,语言识别,不感兴趣的语言的文档将被直接移除
  3. xml解析,建立ast
  4. 多阶段清洗
    1. 文档粒度清洗:基于字符和段落的统计量特征,过滤离群样本以移除提取失败、乱码、格式错误的文档
    2. 小节粒度清洗:启发式正则,移除大部分目录、参考引用和附录等
    3. 段落粒度清洗:启发式正则+分类模型评分,移除大部分广告、脚注、版权声明等
    4. 匿名化:移除人名、ID、邮箱等隐私信息
  5. 渲染成特定格式的文本
  6. 使用分类模型进行文档主题筛选,移除无关主题的文档

3.3.2. 书籍数据

书籍是质量很高的数据,在各种大模型的训练中都特意提高了占比,比如GPT-3[6]:

图源:http://arxiv.org/abs/2005.14165

为了提取出安全相关的书籍,我们使用类似网页的主题分类模型,根据标题和简介进行筛选,得到约五千本书。人工检查后确认分类模型的性能达到预期,进行下一步清洗。

书籍的原始数据主要是 epub、mobi 等结构化格式和 pdf 格式。由于 pdf 格式的清洗非常复杂,我们主要关注结构化的存储格式。这些格式本质上都是压缩包,其中包含了书本元信息和以 HTML 储存的书本内容,通常每一个章节就是一页 HTML。

详细清洗流程和网页类似:

  1. 借助 epy reader[7] 从原始数据中提取书本元信息和 HTML 页,利用元信息对 HTML 页进行打标,比如封面、目录和附录等,方便后续筛选。
  2. 利用 python-markdownify[8] 将 HTML 页转换成 Markdown。注意原始实现转换并不完美,需要根据实际提取出的 HTML 页修改转换器的行为,特别是表格、代码块等复杂格式。也可以先使用 tralifitura 进行归一化后再转换成 Markdown,同样也需要修改转换器。
  3. 多阶段清洗:
    1. 语言清洗:利用书本元信息和语言识别,去除非中英文的书籍
    2. 文档粒度清洗:由于书本内容相对干净,只需要筛去不需要的 HTML 页面即可,不需要更细粒度的筛选
      1. 利用 1. 中的标签、Markdown 标题、启发式正则等,去除非正文内容,只保留有用的知识
      2. 基于字符和段落的统计量特征,过滤离群样本以移除提取失败、乱码、格式错误的文档
      3. 收集 i. ii. 中的错误文档,训练一个小型分类模型,筛选剩余文档
    3. 匿名化:移除人名、ID、邮箱等隐私信息

3.3.3. 论文数据

ArXiv 提供按学科分类的原始 tex 文件, 我们选取了带计算机标签的论文, 使用 unified-latex-cli [9]转换成 html 文件, 然后采用与网页清洗类似的清洗流程。

3.3.4. 开源数据

由于开源社区的数据已经经过一定层面的清洗,可以加快后续整体的数据清洗和验证流程,因此我们从huggingface、opendatalab等开源社区搜集了部分数据,经过安全语料召回后采用与网页清洗类似的清洗流程。

3.4. 数据质量过滤

数据质量进一步影响了模型最终的效果,参考CCNet[4]、GPT3[6]的方式,我们构建了两个安全文本质量判定模型综合筛选高质量的安全数据。文本质量判定模型基于FastText,使用书籍、启发式等方式筛选出高质量数据,以Common Crawl的数据作为低质量数据;同时,为了缓解分类器打分的偏置问题,我们训练了基于筛选后的高质量安全数据训练一个160m的模型,并在其他数据上计算PPL,辅助作为数据质量划分的依据。

为了快速验证数据质量过滤对模型效果的影响,我们随机选取了一个数据子集进行实验观察。首先从质量分数的分布上,我们观察到部分数据的质量较差,对这部分数据进行移除前后进行对比实验,发现在模型上可以带来约2%的提升。

3.5. 数据去重

我们主要参考了BigCode的文本去重方案[10],在spark集群上进行全量去重,该方案使用了MinHash LSH和分布式的联通块算法,以移除文档间Jaccard距离小于常数阈值的文档。经过去重后,总计减少了10%的数据量,同时在多次数据配比实验中,整体训练过程中测试集困惑度都更低,再一次验证了去重的有效性。

4. 数据质量评测

在大模型项目从零到一的起步阶段,评测的重要性往往会被忽视。很多时候,收集完一批数据、模型训练完成、手工尝试几个问答后,就失去了方向,不知道下一步如何改进。

我们认为,一个优秀的评测体系可以衡量数据/模型的有效性,加速和指导研发过程,需要投入足够的精力进行建设,所以本章我们会详细介绍一个服务于 SecCorpus 安全领域数据构建的评测框架。

与以模型为主体的评测体系 (比如 SecBench) 不同,为了评估数据的质量, 我们构建了一个针对数据的评测体系,整体框架如下:

  1. 确定单一的评测指标,要求尽量反映模型的安全能力
  2. 在待评测的数据集上训练一个模型,通过模型的指标反映数据的质量,越高质量的数据理应使得模型达到更高的指标
    1. 为了避免开源基座模型的训练数据影响, 我们使用随机初始化的模型权重
    2. 在小参数量的模型上实验以提高效率
  3. 通过实验结果,不断地优化数据处理流程;必要时也需要优化评测指标

4.1. 评测指标

评测体系的核心在于单一的评测指标。评测指标需要能够尽量反映模型的真实能力。

一个好的评测指标,应该具有以下特点:

  1. 单一数值:方便进行直观的模型比较
  2. 区分度:不同能力的模型的指标应该有明显差异
  3. 稳定性:一些细微的扰动,不应该造成指标大幅波动
  4. 自动化:不需要人力参与,就可以完成评测指标的计算
  5. 可解释性:有明确的现实意义

另外需要注意的是,评测指标并不是一劳永逸的,我们在实验中,需要不断地思考并改进评测指标。

4.1.1. 网络安全认证考试选择题准确率

参考学术界通用的大模型通用能力评测 MMLU[11],我们收集了一批安全认证考试和计算机软件资格考试的题目,采用和 MMLU 类似的 prompt 模板和 few-shot 设置,计算模型的答题准确率,从而评估模型对安全知识的掌握能力。

选择题准确率能够十分直观地反映模型对于安全知识的掌握程度,但是在使用过程中我们发现了一系列问题:

  1. 答题准确率指标太过离散:每道题只有答对和答错两种情况,不够平滑,无法反映中间状态
  2. 指标的方差太大:prompt 模板、few-shot 顺序甚至换行会造成好几个点的指标波动,混淆了训练数据的作用
  3. 对于小模型难度太大:由于小模型的 few-shot 能力有限,选择题准确率常常会徘徊在 25% 的随机选择准确率附近,使得该指标失去了参考价值
  4. 数据泄露:题目来自于公开互联网,可能无意被训练数据收录,无法起到客观评测的作用

考虑到这些问题,选择题准确率不适合继续作为评估数据质量的单一指标使用。

4.1.2. 安全语料困惑度

为了缓解答题准确率的问题,同时参考 Skywork[12] 的工作, 我们选择使用安全语料的困惑度 (PPL, Perplexity) 作为新的单一评测指标,其优点在于:

  1. 困惑度是一个更平滑的指标,可以更精细地反映模型学习知识的中间状态
  2. 困惑度的稳定性很好,少数几个 token 的变化不会造成很大的指标波动
  3. 即使对于小模型,困惑度也能提供有意义的指标
  4. 通过时间轴上的测试数据选择,可以严格地避免数据泄露问题

实际的构建流程为:

  1. 收集一批出现时间在开源模型训练时间点之后的中英文安全语料,约 200 篇文章
  2. 手工检查语料质量,制作成测试集
  3. 利用现有开源模型计算困惑度,验证数据质量
  4. 训练过程中计算困惑度来评估模型和数据质量

在之后的实验中,这个指标很好地满足了评测的需求,成为了我们比较挑选数据的标准。

4.2. Baseline

在评测指标确定后,按照机器学习项目的常规流程,首先需要确定一个 baseline,这样做的好处在于:

  1. 可以通过 baseline 结果验证评测体系是否正常运作;如果出现过高或过低的指标,需要重新检查评测体系的实现是否存在问题,避免后续的实验失效,造成浪费
  2. 作为之后实验的比较基准,方便控制变量检查新加入数据的质量

与常规的 baseline 设计不同,由于我们的评测体系是针对数据的,所以我们不仅设立了模型 baseline,还设计了数据 baseline。

4.2.1. 模型 baseline

根据 Scaling Laws,困惑度和模型参数量高度相关,考虑到大部分实验都是在小参数量的模型上进行的,我们挑选了同样小参数量的 GPT-2 [13]原版和中文版本, 得到该参数量下模型的典型困惑度。

4.2.2. 数据 baseline

模型 baseline 一般都会选用简单成熟的方法,而我们构建数据的目的是提高安全能力,因此我们采用了传统的 TF-IDF 方法, 在开源 WanJuan [14] 数据集上召回了一批安全相关语料,约有3B token。

通过人工检查,我们确认该方法产生的数据中的确包含了许多安全相关的语料,可以作为数据 baseline。之后我们用这批数据训练了 160m 参数量的 LLaMa [15]架构模型,得到了数据 baseline 对应的困惑度。

数据 模型 训练Token数量 困惑度
N/A GPT-2-chinese N/A 15.7
WanJuan TFIDF LLaMa 160m 10B 21.6

需要注意的是,这里使用了两个 GPT-2 模型计算困惑度,从参数量的角度是明显高于LLaMa 160m的,因此这是一个相当强的模型 baseline。

从 baseline 结果中我们可以初步确认:

  1. 困惑度的取值在该参数量模型的正常范围内,指标计算没有问题
  2. 数据 baseline 的困惑度高于模型 baseline,由于数据 baseline 的总数据量较少,符合预期

4.3. 实验结果

4.3.1. 数据消融实验

为了验证每个数据来源产生的数据是否有效,我们将其与数据 baseline 混合,重新训练模型,来验证新数据的有效性:

数据 模型 训练Token数量 困惑度
WanJuan TFIDF (baseline) LLaMa 160m 10B 21.6
WanJuan TFIDF+网页 LLaMa 160m 10B 19.9
WanJuan TFIDF+书籍 LLaMa 160m 10B 18.6
WanJuan TFIDF+论文 LLaMa 160m 10B 26.1
WanJuan TFIDF+StackExchange LLaMa 160m 10B 19.9
WanJuan TFIDF+Skypile[12] 安全 LLaMa 160m 10B 19.0
WanJuan TFIDF+Wudao[16] 安全 LLaMa 160m 10B 20.1
WanJuan TFIDF+OSCAR[17] 安全 LLaMa 160m 10B 20.0
WanJuan TFIDF+Culturax[18] 安全 LLaMa 160m 10B 18.7
WanJuan TFIDF+维基百科 LLaMa 160m 10B 19.4
WanJuan TFIDF+Slimpajama[19] 安全 LLaMa 160m 10B 18.3
WanJuan 安全 LLaMa 160m 10B 20.8

通过消融实验,我们发现提取出来的大部分安全相关数据都有助于降低困惑度,只有论文数据效果较差。经过分析,主要问题在于论文太过于专业,难度较高,而且数量较少,对于一个随机初始化的小模型反而产生了副作用。

4.3.2. 数据质量数量权衡

我们确定从通用数据中提取安全数据有效后,继续着手解决数据质量和数量的平衡问题。这个问题主要来自于提取过程中涉及到的一些超参数,控制得越松,产出的数据量越多,但是相对质量较差的数据也会被保留下来。这里就涉及到一个 trade-off 的问题,需要通过实验找到质量和数量的平衡点。

我们首先尝试了阈值截断的方式,在 Skypile[12] 安全语料中,按照文档质量评分筛选数据:

数据 文档质量下限 模型 训练Token数量 困惑度
WanJuan TFIDF (baseline) N/A LLaMa 160m 10B 21.6
WanJuan TFIDF+Skypile 安全 0.0 LLaMa 160m 10B 19.0
WanJuan TFIDF+Skypile 安全 0.1 LLaMa 160m 10B 19.2
WanJuan TFIDF+Skypile 安全 0.2 LLaMa 160m 10B 19.3

从实验结果来看,对于总数据量并不是很大的 Skypile,筛去低评分文档,反而会导致困惑度变高。所以对于数据量不多的来源,保数量优先于保质量。

接下来我们参考 GPT-3[6] 中的质量筛选方式 np.random.pareto(α) > 1 − document_score,通过在文档质量分数上通过 Pareto 分布采样。比起直接采用阈值截断的方式,这样可以在保留大部分高质量文档的同时,低评分文档也有被选用的概率,这样可以降低评分模型本身偏差带来的影响。超参数α越大,采样时会更加偏向于高质量文档。同时,我们也采用了数据量更加庞大的网页数据进行筛选:

数据 超参数α 剩余比例 模型 训练Token数量 困惑度
WanJuan TFIDF (baseline) N/A N/A LLaMa 160m 10B 21.6
WanJuan TFIDF+网页 0.1 0.9584 LLaMa 160m 10B 18.9
WanJuan TFIDF+网页 1 0.6755 LLaMa 160m 10B 18.9
WanJuan TFIDF+网页 5 0.2141 LLaMa 160m 10B 18.7
WanJuan TFIDF+网页 9 0.0939 LLaMa 160m 10B 19.3

这次实验中,我们看到了一个明显的平衡点,在剩余20%数据的时候,达到了最低的困惑度。所以对于数据量庞大的来源,优先保质量。

4.3.3. 数据配比

数据配比本身是一个变量非常多的问题,我们采取逐步加入数据源的方式,来保证整体的配比合理:

数据 模型 训练Token数量 困惑度
WanJuan TFIDF (baseline) LLaMa 160m 10B 21.6
WanJuan TFIDF(1.0)+书籍(0.5)+StackExchange(1.0)+网页(0.5)+Skypile 安全(1.0)+Wudao 安全(1.0) LLaMa 160m 20B 14.8
WanJuan TFIDF(1.0)+书籍(0.5)+StackExchange(1.0)+网页(0.5)+Skypile 安全(2.0)+Wudao 安全(1.0) LLaMa 160m 20B 14.4
WanJuan TFIDF(1.0)+书籍(0.5)+StackExchange(1.0)+网页(0.5)+Skypile 安全(1.0)+Wudao 安全(1.0)+OSCAR 安全(0.02)+维基百科(0.005) LLaMa 160m 20B 14.5
WanJuan TFIDF(0.8)+书籍(0.5)+StackExchange(1.2)+网页(0.4)+Skypile 安全(1.3)+Wudao 安全(0.6)+OSCAR 安全(0.1)+维基百科(0.01) LLaMa 160m 20B 14.3
WanJuan 安全(0.6)+书籍(0.5)+StackExchange(1.0)+网页(1.4)+Skypile 安全(1.0)+Wudao 安全(0.5)+Culturax 安全(1.0)+维基百科(0.01)+Slimpajama(1.0) LLaMa 160m 20B 14.2
WanJuan 安全(0.6)+书籍(0.5)+StackExchange(1.0)+网页(1.4)+Skypile 安全(1.0)+Wudao 安全(0.5)+Culturax 安全(1.0)+维基百科(0.01)+Slimpajama(1.0) LLaMa 160m 30B 13.6

表格中数据括号表示该数据源与其他数据源的比例,整体数据都已去重。从实验中得到的结论是:

  1. 数据多样性很重要,混合多种数据可以大幅降低困惑度
  2. 适当地提高高质量数据权重可以进一步降低困惑度,但是需要注意不能重复太多次,否则会产生过拟合
  3. 随着总数据量增加,可以适当增加总训练token数,也可以降低困惑度

综合所有技巧,我们得到了一份配比合理的训练集,可以在 30B token 的训练预算内,将安全语料困惑度降低到明显低于 baseline 的水平。

4.4. Takeaway

  1. 评估数据质量需要先建立一个评测体系
  2. 对于总量较少的数据源,优先增加数量;对于数量庞大的数据源,优先筛选质量
  3. 混合数据时,去重很重要,高质量数据应该占比更多,但是不应该重复太多次(<10 epoch)

5. 总结

腾讯安全科恩实验室以数据为中心开展了安全垂直领域大模型的相关工作,并获得约20B中英文安全领域数据。最终在预训练实验、评估以及SecBench上验证了数据的有效性。为了促进网络安全领域大模型的发展,除了已发布的网络安全大模型评测平台SecBench,我们将在后续开源我们的SecCorpus数据清洗套件,敬请关注。如有安全语料数据合作和安全大模型业务需求,欢迎联系我们:KeenSecurityLab@tencent.com

6. 参考文献

[1] 大模型在网络安全领域的应用市场洞察,2023:破土萌芽,未来充满无限想象 Doc Document number:# CHC51403423

[2] Google cloud security ai workbench generative ai. https://cloud.google.com/blog/products/identity-security/rsa-google-cloud-security-ai-workbench-generative-ai

[3] Microsoft Copilot for Security. https://www.microsoft.com/en-us/security/business/ai-machine-learning/microsoft-copilot-security

[4] Wenzek G, Lachaux M A, Conneau A, et al. CCNet: Extracting high quality monolingual datasets from web crawl data[J]. arXiv preprint arXiv:1911.00359, 2019.

[5] Adrien Barbaresi. 2021. Trafilatura: A Web Scraping Library and Command-Line Tool for Text Discovery and Extraction. In Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing: System Demonstrations, pages 122–131, Online. Association for Computational Linguistics.

[6] Mann B, Ryder N, Subbiah M, et al. Language models are few-shot learners[J]. arXiv preprint arXiv:2005.14165, 2020.

[7] https://github.com/wustho/epy

[8] https://github.com/matthewwithanm/python-markdownify

[9] https://npm.io/package/@unified-latex/unified-latex-cli

[10] Large-scale Near-deduplication Behind BigCode. https://huggingface.co/blog/dedup

[11] Hendrycks, Dan, Collin Burns, Steven Basart, Andy Zou, Mantas Mazeika, Dawn Song, and Jacob Steinhardt. “Measuring Massive Multitask Language Understanding.” arXiv, January 12, 2021. =

[12] Wei T, Zhao L, Zhang L, et al. Skywork: A more open bilingual foundation model[J]. arXiv preprint arXiv:2310.19341, 2023.

[13] Radford, Alec, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, and Ilya Sutskever. “Language Models Are Unsupervised Multitask Learners,” n.d.

[14] He, Conghui, Zhenjiang Jin, Chao Xu, Jiantao Qiu, Bin Wang, Wei Li, Hang Yan, Jiaqi Wang, and Dahua Lin. “WanJuan: A Comprehensive Multimodal Dataset for Advancing English and Chinese Large Models.” arXiv, September 15, 2023.

[15] Touvron, Hugo, Louis Martin, and Kevin Stone. “Llama 2: Open Foundation and Fine-Tuned Chat Models,” n.d.

[16] Yuan S, Zhao H, Du Z, et al. Wudaocorpora: A super large-scale chinese corpora for pre-training language models[J]. AI Open, 2021, 2: 65-68.

[17] Abadji J, Suarez P O, Romary L, et al. Towards a cleaner document-oriented multilingual crawled corpus[J]. arXiv preprint arXiv:2201.06642, 2022.

[18] Nguyen T, Van Nguyen C, Lai V D, et al. Culturax: A cleaned, enormous, and multilingual dataset for large language models in 167 languages[J]. arXiv preprint arXiv:2309.09400, 2023.

[19] SlimPajama: A 627B token, cleaned and deduplicated version of RedPajama. https://www.cerebras.net/blog/slimpajama-a-627b-token-cleaned-and-deduplicated-version-of-redpajama

[20] Large language model data pipelines and Common Crawl (WARC/WAT/WET). https://blog.christianperone.com/2023/06/appreciating-llms-data-pipelines/