安全运营场景下的语言模型应用

接上篇,将安全运营的定义为“使用算法能力提取关键信息”,以此来规避算法误判漏判带来的责任问题,同时提升运营人员的工作效率。在这篇尝试对语言模型的使用方法做一下讨论和分享。

1. 语言模型

先聊一下语言模型。(这里刻意规避了“大模型”这个词,主要是对其应用方式的理解还不深刻)

直到ChatGPT出来之前,我都没有太关注过NLP领域相关的算法应用,主要是认为和我们更常涉及的应用领域,如分类、推荐等,有比较大的差异。

个人认为,语言模型的独特之处,在于“特征的离散性”。我们常见的特征分为两种:1)在推荐等领域中,人为去计算的各类特征,比如用户的年龄、性别、活跃时间等,这些特征都经过人工预处理,转化成向量,供算法去使用的;2)在图片、音视频领域中,这些内容本质上是一堆数字信号,因此输入本身就是向量化的。而语言是人类诞生的一种高效信息载体,虽然最终会以图形或声音的方式呈现出来,但语言本身如何进行编码,却隐藏在我们的大脑中。因此,NLP首先遇到的问题就是如何将文本变成向量,也就是NLP中反复提及的embedding。

而安全领域也存在着这种隐藏在大脑内的认知关系。最简单的,Web安全中SQL注入就有很多特征和对抗,不同的payload,不同的编码。即使WAF具备了检测逻辑,也会带来误报过高的问题。但其实在安全专家进行人工运营的时候,大部分情况下是能够做出精准判断的。差距主要有两点:

1)人接收的信息量更大,可以去关联上下文,可以去查看进程,可以去研读代码等等。所以安全的一个长期发展方向就是找到更多的数据切面,将更多的日志关联起来,HIDS/RASP/SIEM等

2)人是能够理解payload的具体含义的。写规则的时候,我们会告诉机器去检测哪些关键字,但机器并不理解关键字的含义,所以攻击者可以尝试去绕过。

我之前提过,ChatGPT出来之后,证明在NLP领域下,机器开始理解人类世界了。因为机器见到的不再是精心构造的特征,而是相当原始的token。当算法去学习一项任务的时候,它尝试去捕捉这些原始的token中的复杂关系,正如人类的思维一样。 也因此,我会认为,语言模型的成功,意味着安全领域下的专家经验,可以逐步被替代。

2. 基于RNN的做法

在transformer出现之前,RNN是NLP领域最经典的模型结构,它巧妙了处理了特征中的时序关系。因此,在时序场景中,通常都会看到RNN的身影。比如,安全场景中的事件序列。

下面借助一篇论文展开讨论RNN的应用方式。

Van Ede, Thijs, et al. "Deepcase: Semi-supervised contextual analysis of security events." 2022 IEEE Symposium on Security and Privacy (SP). IEEE, 2022.

这篇论文的目标定义为了,提取事件序列中的关键事件,从而提供强可解释性。同时这些关键事件也可用于后续的加工处理,如相似性判断等。论文中设计了如下的模型结构:

经典RNN中的Encoder和Decoder结构比较类似,输出目标是预测下一个事件。而在安全事件研判中,我们不需要去进行预测,而是一个找关键特征和分类任务。因此,论文中将RNN的Decoder替换成了一个线性层输出,输出的目标是每一个事件对应的权重。

简单来说,就是使用RNN的Encoder去对事件序列进行信息压缩,相当于embedding的过程。然后基于Encoder后的向量,去嵌套其他算法完成目标任务。

该论文的主要启发在于,我们可以通过构造算法结构,来满足可解释性的需求。而可解释性,通常体现为特征的权重。类似于,我们在做复杂事件判断的时候,往往依靠的是“直觉”。虽然“直觉”怎么产生的很复杂,但我们通常能够说出其中的关键因素是哪些。

这个结构也让我想起了CNN中的分层思路:先卷积作特征提取,再池化作压缩,最后全连接完成分类特定任务。每一层的输出都是可以被呈现的,分别提取了哪些特征。比如先提取线和边,再构造局部形状等。

这篇论文不满足需求的地方在于,它设定的输入是事件序列。而事件是一个需要经过提前编码的东西,适用性会受到限制。

3. 基于Bert的做法

Transformer的提出,除了解决了RNN的串型训练问题,还将预训练的模式引入到了NLP领域,大幅度降低了应用的门槛。在ChatGPT中,可以看到预训练好的模型已经包含了相当丰富的专业知识。因此,对比RNN需要从0开始训练模型,从预训练出发,尝试用更纯粹的NLP模型来解决安全领域的问题,会是一个更有意思的尝试。

NLP中embedding是一个很神奇的存在,它能够将离散的token转变为向量的形式。而转化后的向量本身,也包含了相当多的信息。例如,直接计算向量之间的余弦相似度,通常就能够代表不同词之间的含义相近程度。基于这个原理,可以使用训练好的embedding,来完成关键词提取工作,比如KeyBERT。

结合上一篇讲的,将告警运营当成一个分类+关键词提取的过程,可以设计如下的算法结构:(这里也可以参考上述的RNN结构来设计,但涉及的自定义开发工作量会更多。因此,不在论证阶段展开。)

这个算法本身是简单拼凑,不难实现。核心在于,如何将告警信息进行“文本化”。 通常来说,我们处理的告警信息是个结构化的数据,比如JSON格式,它其中包含了时间、IP、可疑payload、关联的其他节点等各式信息。而使用Bert预训练模型意味着我们不能够人为将它进行编码,而是需要把结构化的数据构造成文本的形式。幸运的是,预训练好的模型足够强大,对文本语法基本不挑剔,在试验中,直接把键值对作拼接,就能够取得还不错的效果。

很难说这是一种进步还是退步。直觉上,把信息进行人工编码,可以提升机器学习的效率,但也使得人工编码本身成为机器上限。而将结构化信息转化成更原始的文本信息,机器的学习空间更大,但任务复杂度也更高,“大力出奇迹”。这也意味必须依靠预训练模型才能够实现,不然训练量过于庞大,无法普适。

4. 基于GPT的做法

Bert和GPT的差异,主要在于Bert更擅长处理特定目标的任务(如分类),而GPT更强调“生成式”这个效果,依靠“预测”下一个词来完成各种任务。随着OpenAI把参数量大幅度扩增,大模型的智能开始“涌现”(参数量达到某个临界点后,结果表现突然上升),似乎意味着“万物皆可生成”。

事实上人类也是依靠“生成式”来完成各种任务的,不论思维方式如何,最终输出都是以一段话、一系列动作等形态来呈现的。

 进入“生成式”的应用场景后,如何设计Prompt变成了主要工作。因为生成式的输出是不固定的(问ChatGPT同样的问题,给出的答案不论是结构还是内容,都是不同的),并不利于成为一个接口对接其他上下游系统。因此,我们需要构造合适的Prompt,并进行一定的fine-tuning,确保GPT学会这个Prompt对应的问答模式。

具体实现思路上,会参照Bert的模式,先训练GPT完成分类任务,再训练GPT完成关键词提取。

以上过程使用OpenAI提供的API即可完成。但会遇到的一个问题是,往往并不存在“告警文本+关键词”的训练样本(日常运营过程中,安全专家会对结果做出判断,但不会把判断过程写下来)。在OpenAI自己实现的过程中,会构造人工打标的奖励模型来解决这类问题,但相关API并不开放,因此对构造样本集提出了一定的挑战。

现有模式下暂时没想到合适的解法,除非自己搭建GPT环境(成本略高,Bert还勉强能够本机跑下来,GPT则相当以来GPU环境),又或者干点脏活累活,一点一点积攒人工打标数据。

5. 总结

通过近期的研究和一些简单试验,会认为NLP模型是提升算法在安全领域下发挥潜力的方向。它使得机器看到的内容和人保持一致,而不在局限于人工编码带来的上限。同时,借助预训练得到的知识储备,快速完成目标任务的学习和适用。

但试验过程中,也会遇到一些困难,比如:

1)目前NLP模型的输入长度都相对受限制。而安全运营场景下,尤其是在接入SOAR之后,一起事件的关联信息是相当丰富的。而将事件文本化,本身就会降低信息传输的效率,很难将文本长度压缩到目标范围内。这个时候,要么事先剥除无用信息,要么把文本做分段输入。但不论哪种做法,都会带来实现难度的大幅提升。

2)NLP模型的复杂度提升,可控性也有所下降。虽然能够完成关键词提取任务,但模型是如何判定的,仍然难以琢磨。尝试使用过SHAP来探究,但目前看效果并不理想,有待进一步挖掘。这种不确定性,对于调整模型结构、优化样本集等工作,都带来了更多的“玄学”属性。

整体来说,个人倾向于认为语言模型下的智能涌现,代表着未来的发展方向。但目前的算法成熟度仍然处于初期,至少对于如何普适性的应用(而不是集中在大厂手里),仍然有很大的发展空间。而在当前条件下,做一些探索性质的工作,大概率抵不过算法整体的发展趋势,但有利于加深对算法本身的理解,为后续做好技能储备。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28799.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚观早报 | ChatGPT 停止 Plus 付费;李子柒油管广告收益登顶热搜

今日要闻:ChatGPT 停止 Plus 付费;李子柒油管广告收益登顶热搜;亚马逊游戏部门百名员工被裁;国内一公司推出太空葬;苹果将在印度国金融中心开设零售店 ChatGPT 停止 Plus 付费 4 月 5 日消息,ChatGPT 目前…

chatgpt赋能python:Python读取CSV:简单易懂的教程

Python读取CSV:简单易懂的教程 Python是一种功能强大的编程语言,它可以处理各种不同类型的数据。当需要处理大量的数据时,CSV文件就是一种非常方便的处理方式。这篇文章将介绍如何使用Python来读取CSV文件,帮助您更高效地进行数据…

chatgpt赋能python:Python如何选取CSV某几列数据

Python如何选取CSV某几列数据 在数据处理过程中,CSV是一种非常常见的数据文件类型。CSV文件中的数据由逗号分隔的值(Comma-Separated Values)组成。处理CSV数据的任务之一是从CSV文件中选择特定的列数据,以进行数据分析或处理。在…

chatgpt赋能python:Python实现CSV文件只取某两列的方法详解

Python实现CSV文件只取某两列的方法详解 介绍 CSV是一种常见的数据格式,通常使用逗号或分号分隔不同的字段。在处理CSV文件时,我们经常需要只提取其中的某些列,以便进行进一步的分析或处理。使用Python语言,可以很方便地实现这一…

postman读取csv文件

postman读取csv文件 (1)创建登录接口,传入用户名和密码 (2)创建读取的csv文件 (3)运行脚本读取csv文件内容 (4)读取csv文件结果 备注: 1.需要将csv文件转换为utf-8编码格式的…

.csv文件与数据的读取

.csv文件的介绍 .csv文件(comma seperated value:逗号分隔值),是一种常见的用来存储一维或者二维的数据文件,它使用换行符与逗号存储数据,实际上是一种txt文件。 如图,左侧为原二维数据表格,右…

csv文件读取

csv文件读取 文章目录 csv文件读取第一种方式:列表第二种方式:字典 CSV文件写入第一种方式:列表第二种方式:字典 第一种方式:列表 示例: import csv with open("stock.csv",r,encodingGBK) as …

chatgpt赋能python:Python如何导入CSV的完全指南

Python如何导入CSV的完全指南 CSV是一种常见的数据格式,在数据分析和处理中使用广泛。使用Python,我们可以轻松地读取、处理和分析CSV文件。在本指南中,我们将介绍如何使用Python导入CSV文件。 什么是CSV文件? CSV文件是按照逗…

chatgpt赋能python:Python如何保存数据到CSV文件中

Python如何保存数据到CSV文件中 作为一门广泛应用于数据分析和机器学习的编程语言,Python提供了许多方法来处理和保存数据。其中之一是将数据保存到CSV文件中。本篇文章将介绍如何使用Python保存数据到CSV文件,在此过程中,我们会提到一些有用…

读取csv数据结果包含“\t”的问题

1、实例 1、这个是我手动创建的csv文档,内容是从Word复制粘贴到表格 2、这是我读取数据用的代码 import csvfile open(r"C:\Users\Administrator\Desktop\cs1.csv","r",errors"ignore",encoding"utf-8") csv_file csv…

【使用ChatGPT自动化】批量转换.csv文件为.xlsx文件

第1次提问: 我:我想使用Python批量转换.csv文件为.xlsx文件,请你提供代码 它:好的,以下是使用Python批量转换.csv文件为.xlsx文件的代码: import os import glob import pandas as pddef csv_to_xlsx(pa…

chatgpt赋能python:Python加速读取CSV文件的方法

Python加速读取CSV文件的方法 介绍 CSV文件是一种常见的数据格式,因为其简单和易于理解,被广泛应用于数据处理和数据分析。然而,在处理大型CSV文件时,读取速度会成为问题。Python作为一种高级编程语言,具有易学易用的…

C# 读取CSV文件

上一篇写到了读取文本文件的各种方式,这次我们来读取一下CSV文件; CSV文件在日常工作中用到的也很多,很多时候我们导出大量表格数据的时候,EXCEL无法存储,CSV就是很不错的选择; CSV文件其实也是一种文本文…

C++读取CSV文件中的数据

CSV文件是一种文本文件&#xff0c;表示的是Excel表格数据&#xff0c;可以由办公软件Excel轻松生成。为了在程序中使用Excel数据&#xff0c;就需要以文本的形式操作Excel数据&#xff0c;具体就是操作CSV表格数据。如下所示&#xff0c; #include <iostream> #include …

chatgpt赋能python:Python转CSV:一种简便的数据格式转换方法

Python 转 CSV&#xff1a;一种简便的数据格式转换方法 在本文中&#xff0c;我们将介绍如何使用 Python 将数据从其他数据格式转换为 CSV 格式。CSV 是一种广泛使用的数据格式&#xff0c;它非常适合用于存储大规模数据&#xff0c;并能够被许多应用程序和编程语言读取和处理…

30、【backtrader股票策略】《151 trading strategies》中的支撑与阻力策略(support and resistance)

在《151 trading strategies》中的3.14节,提到了一个关于支撑与阻力的策略,在本策略中,将尝试在全A股中进行测试这个策略,本节主要包含四个部分: 策略逻辑的说明策略实现代码策略测试结果策略绩效的简单分析策略逻辑 我们使用全市场的A股日数据进行测试,只做多头。 资金…

谷歌股票“打折”卖,一股换20股

西雅图IT圈&#xff1a;seattleit 【今日作者】 Powerball选号机 身体和灵魂总有一个要 走在买PowerBall的路上 PART 0 1 . 本周二谷歌母公司Alphabet宣布董事会通过了以1&#xff1a;20的比例拆股计划。 具体实施中&#xff0c;在22年7月1日收盘时拥有谷歌股票的股东&#xff…

如何使用 Yahoo! Finance stock API 获取股票数据

本站曾介绍过&#xff0c;通过代码添加雅虎财经的股票走势图到自己网站的方法&#xff08;添加美国股市 &#xff0c;添加沪深股市 &#xff09;&#xff0c;调用的是一张图片。今天在德馨 网站&#xff0c;看到了从雅虎财经频道获取股票数据的API&#xff08;Yahoo! Finance s…

chatgpt赋能python:Python教程:如何设置画布大小?

Python教程&#xff1a;如何设置画布大小&#xff1f; 在Python中&#xff0c;我们可以使用各种图形库来创建各种类型的图。有时&#xff0c;我们需要调整图像的大小以适应我们的需求。所以&#xff0c;在这篇文章中&#xff0c;我将介绍如何使用Python来设置画布大小。 什么…

chatgpt赋能python:Python创建画布的教程

Python 创建画布的教程 Python是一个功能强大的编程语言&#xff0c;其中一个重要的应用是数据可视化。在数据科学、机器学习、图像处理和软件开发中&#xff0c;Python的可视化功能非常实用。本教程将介绍Python创建画布的步骤&#xff0c;以及如何使用Matplotlib创建简单的图…