消除拒绝和代码大型语言模型
今年四月,《大型语言模型的拒绝行为是由单一方向调控的》一文发布在 AI Alignment Forum 上,随后又在 Arxiv 上发布了一篇论文。本质上,在当前的模型中,对许多安全提示回复“抱歉,作为大型语言模型,我无法……
”和“好的……
”之间的区别,在向量空间中遵循一个共同的方向。通过探测模型,可以修改模型权重,以逆转安全/拒绝响应。
此后,出现了“消除”(abliterated)或“正交化”(orthogonalized)模型(最近在 HuggingFace 上搜索到约 500 个),这些模型从 Llama、Mistral、Gemma、Phi 和其他流行模型中移除了安全功能。我曾期望在 Llama 3.1 的新论文(Llama 3 模型群)中讨论这个问题,但它并未被提及。
我对这项技术如何影响代码生成很感兴趣。具体来说:
- 消除功能在代码专用大型语言模型(CodeLlama、Codestral)上的表现是否符合预期?
- 消除功能如何影响模型的代码生成以及在 Meta 的 CyberSecEval 3 上的得分?它对 CodeLlama 和自然语言 Llama 生成的代码是否相似?
- 消除功能如何影响生成代码的安全性?例如,SQL 注入、重写易受攻击的代码、检测混淆代码……
- 消除功能是否适用于其他架构?(Codestral Mamba)
- 如果消除向量被乘以或反转,这将如何影响代码生成和拒绝?
《大型语言模型中的拒绝》论文结合了来自五个数据集的指令提示,其中一些包含网络安全相关提示,一些不包含,但没有数据集是专门用于代码生成的。
第一步是,我按照 https://github.com/mlabonne/llm-course 上的 notebook 对 CodeLlama 进行了消除处理。
注意:这个 notebook 让我了解了
tokenizer.apply_chat_template
我忘了 CodeLlama 是 Llama-2 时代(2023 年 8 月)的模型。代码生成在指令被 [INST] … [/INST]
包裹时效果最好。我可以通过不使用 [INST]
来绕过安全拒绝,但这些响应会包含额外的文本,就像你在 StackOverflow 评论区找到代码一样。所以我不知道这是否是一个安全问题,这些响应是否足够弱,或者 CodeLlama 是否被假定为在 API 背后?
新模型继续拒绝按键记录指令,但可以告诉你如何从 Windows 注册表中删除随机文件,或编写一个关于敏感话题(浓缩铀)的 HTML 列表,而原始 CodeLlama 会拒绝这些请求。所以只完成了一部分。
仅将这些模型用于必要的网络防御工作,因为它仍受 CodeLlama 的 Llama 2 许可证限制。
我还发布了一个将干预向量乘以 2 倍的模型:monsoon-nlp/codellama-abliterated-2xd,但它似乎在敏感代码问题上重复或给出文本答案。
为了使这个项目更具针对性,我正在考虑创建一个拒绝数据集,该数据集专门针对代码、技术和漏洞相关的拒绝。