1
引言
过去十几年来,人工智能技术不断发展,逐渐被应用于网络安全领域,大幅提升了检测分析、处置响应等方面的效率。ChatGPT的问世及其卓越表现,再次激发了网络安全市场对于大模型的期待。然而,以ChatGPT为代表的通用大模型通常以API形式供使用方调用,这不可避免地带来了成本和数据隐私问题。此外,通用大模型在网络安全领域的实际应用效果尚存优化空间。因此,针对特定业务场景的私有化部署的领域大模型应运而生。如何构建一个适用于网络安全领域的大模型,以协同提升安全攻防、安全运营等能力,成为关键课题。目前众多网络安全厂商已陆续推出自有网络安全垂直领域大模型。
为了强化和推进大模型在安全垂直领域的表现,腾讯安全科恩实验室构建了SecCorpus安全领域大模型数据清洗套件及相应的安全语料数据集。本文首先概述当前网络安全领域大模型的进展及应用场景,并以腾讯安全科恩实验室在安全领域大模型安全语料数据方面的研究工作为背景,分享我们在构建SecCorpus过程中的一些经验和成果。
2
安全领域大模型进展
在构建安全领域大模型的过程中,我们尝试在数据、模型等不同层面分析影响模型安全能力的核心因素,分析指出安全领域数据是模型安全能力提升的关键。我们的工作围绕评估、数据、模型、应用四个阶段展开。
评估层面
算法研究评测先行,因此我们首先和多个团队联合构建了网络安全大模型评测平台SecBench,旨在为安全大模型研发提供公平、公正、客观、全面的评测能力,辅助安全大模型建设与研发过程。SecBench 重点从能力、语言、领域、安全证书考试四个维度对大模型在网络安全领域的各方面能力进行评估,已经覆盖多个安全领域,包括数据安全、应用安全、端点与主机安全、网络与基础架构安全、身份与访问控制、基础软硬件与技术、安全管理等。目前,SecBench(https://secbench.org/)已发布。
为了验证我们领域数据的有效性,我们在多个模型层面进行了实验评估:
预训练安全领域小模型,我们基于清洗的安全数据,预训练了160m-1.1B的小模型,160m模型在滚动测试集上验证困惑度(Perplexity)已经达到1.8B通用模型的水平;
增量预训练:我们通过对Qwen、Baichuan等开源模型进行增量预训练,增量预训练后评估表明效果有明显提升,已经超过了ChatGPT;
混合数据预训练:腾讯安全科恩实验室与安全平台部合作共建,构建的安全数据目前已经融入到腾讯混元大模型的训练过程,混元大模型在网络安全领域能力有明显提升,科恩基于最新混元大模型搭建威胁情报智能研判助手取得了良好效果。
掌握丰富的网络安全知识和情报运营常识,理解情报运营人员日常工作所接收到的所有信息,包括告警日志,Payload,代码片段,网络流量包,外部情报的网页内容等。 能够使用情报人员日常所用的工具,包括查询内部的各情报源数据接口,访问网页,使用搜索引擎等。 能够成情报研判任务,提供正确的研判结论,生成一份逻辑清晰、论据合理的研判报告。
3
安全领域数据构建套件
多源数据采集 安全文本召回 数据清洗 去重 语言识别,仅筛选中英文 脏数据过滤(不同格式数据有所不同) 自定义规则过滤 高质量文本筛选 全局去重合并 进入训练评估流程,递归清洗数据
3.1.多源数据采集
Common Crawl 等网页数据,含有大量的文本数据,但是数据质量一般,需要进行详细的数据清洗和领域数据筛选,见网页数据清洗流程 书籍数据,质量较高,需要筛选安全主题类数据后清洗 安全站点如Hacknews等,领域相关度较高的数据 Arxiv 数据质量较高,需要筛选安全领域相关数据 百科数据,主要来自维基百科/百度百科数据,数据质量高,需要筛选安全领域相关数据 开源数据,主要来自开源社区的数据,进行安全领域数据筛选
3.2.安全语料召回
关键词召回:由于全量数据达到了TB级,考虑到集群性能和数据召回效率,我们首先采用安全关键词召回减少数据量,过滤掉90%以上安全领域无关数据。我们从多个网站搜集了4000+中英文网络安全领域关键词。 基于模型的召回:基于关键词召回后语料进一步筛选,我们采用安全站点数据、和部分人工+规则的形式筛选出小批量的安全相关数据,在Common Crawl中随机选取部分数据作为非安全数据,基于FastText训练了安全文本分类模型,作为第二阶段安全数据召回的模型。
3.3.数据清洗
3.3.1.网页数据
使用tralifitura【5】提取正文html元素,归一化为xml格式 文本粗提取,语言识别,不感兴趣的语言的文档将被直接移除 xml解析,建立ast 多阶段清洗 文档粒度清洗:基于字符和段落的统计量特征,过滤离群样本以移除提取失败、乱码、格式错误的文档 小节粒度清洗:启发式正则,移除大部分目录、参考引用和附录等 段落粒度清洗:启发式正则+分类模型评分,移除大部分广告、脚注、版权声明等 匿名化:移除人名、ID、邮箱等隐私信息 渲染成特定格式的文本 使用分类模型进行文档主题筛选,移除无关主题的文档
3.3.2.书籍数据
书籍是质量很高的数据,在各种大模型的训练中都特意提高了占比,比如GPT-3【6】:
语言清洗:利用书本元信息和语言识别,去除非中英文的书籍
文档粒度清洗:由于书本内容相对干净,只需要筛去不需要的 HTML 页面即可,不需要更细粒度的筛选
利用 1. 中的标签、Markdown 标题、启发式正则等,去除非正文内容,只保留有用的知识
基于字符和段落的统计量特征,过滤离群样本以移除提取失败、乱码、格式错误的文档
收集 i. ii. 中的错误文档,训练一个小型分类模型,筛选剩余文档
匿名化:移除人名、ID、邮箱等隐私信息
3.3.4.开源数据
3.4.数据质量过滤
3.5.数据去重
4
数据质量评测
确定单一的评测指标,要求尽量反映模型的安全能力 在待评测的数据集上训练一个模型,通过模型的指标反映数据的质量,越高质量的数据理应使得模型达到更高的指标 为了避免开源基座模型的训练数据影响, 我们使用随机初始化的模型权重 在小参数量的模型上实验以提高效率 通过实验结果,不断地优化数据处理流程;必要时也需要优化评测指标
4.1.评测指标
单一数值:方便进行直观的模型比较 区分度:不同能力的模型的指标应该有明显差异 稳定性:一些细微的扰动,不应该造成指标大幅波动 自动化:不需要人力参与,就可以完成评测指标的计算 可解释性:有明确的现实意义
4.1.1.网络安全认证考试选择题准确率
答题准确率指标太过离散:每道题只有答对和答错两种情况,不够平滑,无法反映中间状态 指标的方差太大:prompt 模板、few-shot 顺序甚至回车都会造成好几个点的指标波动,混淆了训练数据的作用 对于小模型难度太大:由于小模型的 few-shot 能力有限,选择题准确率常常会徘徊在 25% 的随机选择准确率附近,使得该指标失去了参考价值 数据泄露:题目来自于公开互联网,可能在不经意间被训练数据收录了,无法起到客观评测的作用
4.1.2.安全语料困惑度
困惑度是一个更平滑的指标,可以更精细地反映模型学习知识的中间状态 困惑度的稳定性很好,少数几个 token 的变化不会造成很大的指标波动 即使对于小模型,困惑度也能提供有意义的指标 通过时间轴上的测试数据选择,可以严格地避免数据泄露问题
收集一批出现时间在开源模型训练时间点之后的中英文安全语料,约 200 篇文章 手工检查语料质量,制作成测试集 利用现有开源模型计算困惑度,验证数据质量 训练过程中计算困惑度来评估模型和数据质量
4.2.Baseline
可以通过 baseline 结果验证评测体系是否正常运作;如果出现过高或过低的指标,需要重新检查评测体系的实现是否存在问题,避免后续的实验失效,造成浪费 作为之后实验的比较基准,方便控制变量检查新加入数据的质量
4.2.1.模型baseline
4.2.2.数据baseline
困惑度的取值在该参数量模型的正常范围内,指标计算没有问题 数据 baseline 的困惑度高于模型 baseline,由于数据 baseline 的总数据量较少,符合预期
4.3.实验结果
4.3.1数据消融实验
4.3.2.数据质量数量权衡
np.random.pareto(α) > 1 − document_score
4.3.3.数据配比
数据多样性很重要,混合多种数据可以大幅降低困惑度 适当地提高高质量数据权重可以进一步降低困惑度,但是需要注意不能重复太多次,否则会产生过拟合 随着总数据量增加,可以适当增加总训练token数,也可以降低困惑度
4.4.Takeaway
评估数据质量需要先建立一个评测体系 对于总量较少的数据源,优先增加数量;对于数量庞大的数据源,优先筛选质量 混合数据时,去重很重要,高质量数据应该占比更多,但是不应该重复太多次(<10 epoch)
5
总结
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/
点击“阅读原文”跳转SecBench