今天是2023年11月22日,星期三,北京,天气晴。
我们来看看SecGPT网络安全领域大模型以及大模型幻觉的一个有趣综述,这是这几天较新的工作。
我们将其中比较有趣和关键的部分拿出来,供大家一起参考。
尤其的,关于幻觉的benchmark数据集、RAG增强的三种方式,幻觉的度量方式,值得我们借鉴。
一、SecGPT网络安全领域大模型
基于Baichuan-13B基座训练而成,基于Lora做预训练和SFT训练。
项目地址:https://github.com/Clouditera/secgpt
模型地址:https://huggingface.co/w8ay/secgpt
1、训练数据
训练数据方面:
预训练数据收集了安全书籍,安全知识库,安全论文,安全社区文章,漏洞库等等安全内容。 数据集开源地址:https://huggingface.co/datasets/w8ay/security-paper-datasets
共包括428,155条样本。
监督数据包括:
chatgpt+人工构造各类有监督安全能力数据集,让模型能了解各类安全指令。
思维链:基于思维链方式构造有监督数据集让模型能够根据问题逐步推理到最终答案,展现推理过程。
知乎回答:加入了部分高质量知乎数据集,在一些开放性问题上模型能通过讲故事举例子等方式回答答案和观点,更易读懂。
为防止灾难性遗忘,有监督数据喂通用能力数据+安全能力数据,数据占比5:1。
2、模型评估
模型评估采用选择题的方式进行评估:
[
{
"Question": "防范密码嗅探攻击计算机系统的控制措施包括下列哪一项?",
"A": "静态和重复使用的密码",
"B": "加密和重复使用的密码。",
"C": "一次性密码和加密。",
"D": "静态和一次性密码。",
"Answer": "C"
},
{
"Question": "Kerberos可以防止以下哪种攻击正确的是",
"A": "隧道攻击。",
"B": "重放攻击。",
"C": "破坏性攻击。",
"D": "处理攻击。",
"Answer": "B"
},
{
"Question": "51%攻击是一种双花攻击,攻击者需要控制超过50%的哈希率来实现。",
"A": "对",
"B": "错",
"C": "无法确认",
"D": "以上都不是",
"Answer": "A"
},
{
"Question": "基于CRC32的攻击方式是利用CRC32校验码的特性,针对ZIP文件的哪一部分进行攻击?",
"A": "压缩源文件数据区",
"B": "核心目录",
"C": "目录结束",
"D": "数据描述符",
"Answer": "B"
}
]
在测试方式上, 直接拼接5shot-prompt完成输出:
def run(datasets, shot=3):
results = []
acc = 0
correct = 0
incorrect = 0
system_prompt = f"你是专业的网络安全红队专家,以下是渗透测试考试的单项选择题,请选出其中的正确答案。n"
if shot != 0:
for i in range(shot):
system_prompt += "n" + build_example(datasets[i], with_answer=True)
datasets = datasets[shot:]
for data in tqdm(datasets):
prompt = system_prompt + "n" + build_example(data, with_answer=False)
input_ids = tokenizer.encode(prompt, return_tensors="pt").to(device)
output = model.generate(
input_ids,
max_new_tokens=1,
return_dict_in_generate=True,
output_scores=True,
temperature=0.8,
top_p=0.7
)
scores = output.scores[0][0].to(torch.float32)
label_score = []
candidates = ["A", "B", "C", "D"]
for can in candidates:
can_id = tokenizer.encode(can)[-1]
label_score.append(scores[can_id].item())
answer = candidates[np.argmax(label_score)]
results.append(
{
"prompt": prompt,
"correct": answer == data["Answer"].strip().upper(),
"answer": answer,
"question": data["Question"]
}
)
acc += answer == data["Answer"].strip().upper()
if answer == data["Answer"].strip().upper():
correct += 1
else:
incorrect += 1
acc /= len(datasets)
return results, acc, correct, incorrect
if __name__ == ‘__main__’:
results, acc, correct, incorrect = run(datasets, shot=5)
二、再看大模型幻觉的一个有趣综述
文章《A Survey on Hallucination in Large Language Models: Principles, Taxonomy, Challenges, and Open Questions》是最近新的一个关于幻觉的综述文章。
读了一下,有几个可以借鉴的点,大家可以看看:
地址:https://arxiv.org/pdf/2311.05232.pdf
1、现有的幻觉类型
幻觉类型主要包括Factuality Hallucination以及Faithfulness Hallucination两种,表现如下:
更细节的,每类幻觉还有二级分类,如下:
2、现有的幻觉评估度量方式
现有幻觉评估方式包括四种:
a)基于事实的度量,通过测量生成内容与源内容之间的事实重叠度来评估忠实度;
b)基于分类器的度量,利用分类器来区分生成内容与源内容之间的关联程度;
c)基于QA的度量方法,利用问答系统来验证源内容与生成内容之间的信息一致性;
d)不确定性估计的方法,通过测量模型对其生成输出的置信度来评估忠实度;
e)基于提示的度量方法,让LLM充当评估者,通过特定的提示策略来评估生成内容的忠实度。
3、现有的幻觉评估benchmark
幻觉评估benchmark包括halueval, truthfulqa等。
4、RAG增强的三种不同方式
检索-增强生成分成三种不同的方法:
a)一次性检索,即在文本生成前检索一次相关信息;
b)迭代检索,即在文本生成过程中进行多次检索迭代,以实现动态信息整合;
c)事后检索,即在生成答案后进行检索,旨在完善和检查生成的内容。
总结
本文主要介绍了额SecGPT网络安全领域大模型以及大模型幻觉的一个有趣综述,其中关于数据的形式、数据评估的方法,以及后期关于幻觉的benchmark数据集、RAG增强的三种方式,幻觉的度量方式,都值得借鉴。
参考文献
1、https://github.com/Clouditera/secgpt
2、https://arxiv.org/pdf/2311.05232.pdf
关于该工作
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。