模型简介
模型特点
模型能力
使用案例
🚀 Codestral-22B-v0.1-abliterated-v3 模型卡片
本项目旨在对模型权重进行特定操作,抑制模型表达拒绝的能力。通过正交化处理,去除了原模型中最强的拒绝方向,在其他方面保持与原 22B 模型一致。
点击此处查看我用于复现该方法的原始 Jupyter “食谱”
点击此处查看我使用的个人代码库(正在开发中,计划进行改进和通用化)
本模型基于 mistralai/Codestral-22B-v0.1,采用正交化的 bfloat16 safetensor 权重。其生成方法基于预览论文/博客文章 '大语言模型中的拒绝由单一方向介导' 中描述的方法进行了改进,建议阅读该文章以深入了解。
感谢 bullerwins 以 HF 格式重新上传原始模型。
🤔 等等,“abliteration”?正交化?消融?这都是什么意思?
简而言之,该模型对某些权重进行了操作,以“抑制”模型表达拒绝的能力。但这并不保证它不会拒绝你的请求、理解你的要求,它仍可能就伦理/安全等问题对你进行说教。除了去除最强的拒绝方向外,该模型在其他方面的调整与原始 22B 模型相同。
简单来说,这是我所能实现的最纯粹的无审查版本——除了去除拒绝能力外,与原始模型在其他方面没有新的或改变的行为。
至于“abliteration”,这是我根据原论文中用于指代去除特征的“ablation”一词创造的双关语,旨在将该模型与“无审查”微调模型区分开来。 Ablate(消融) + obliterated(消除) = Abliterated(去除拒绝能力)
无论如何,正交化/消融在这里都指的是同一件事,即通过正交化技术将拒绝特征从模型中“消融”。
❓ 为什么要对代码模型进行无审查处理?
说实话,除了代码生成之外,这个模型的表现也相当出色,并且在量化后非常适合 24GB 的显存。 通过消融拒绝能力,模型总体上更能满足用户的请求,而不考虑伦理因素。值得注意的是,有时即使是“符合良好对齐”的请求也可能被拒绝,需要通过提示工程来解决。
📚 关于方法的更多信息以及它的有趣之处
在我看来,消融(或应用相反的方法“增强”)似乎非常适合引入或去除非常特定的特征,而这些特征在系统提示中可能需要花费大量的标记来鼓励或抑制。 相反,你只需在消融脚本中针对空白系统提示应用系统提示,对同一数据集进行操作,并在最终模型权重中对所需行为进行正交化处理。
为什么选择这种方法而不是微调?
消融本质上更加精准,并且与微调相比,所需的数据量要少得多,我认为这是它的主要优势。 此外,它的最大价值在于尽可能保留了原始模型的知识和训练成果,同时消除了模型以特定不期望方式行为的倾向(在这种情况下,即拒绝用户请求)。 微调仍然非常有用,是进行广泛行为更改的首选方法;然而,使用消融/增强技术,你可能只需少量样本就能接近所需的行为。 这也可能是模型改进过程中一个有用的步骤:正交化 -> 微调,或者反之。 我还没有机会探索将该模型与微调相结合的方法,鼓励有能力的人尝试一下。
好吧,但是为什么是 V3?没有 70B 的 V2 版本吗?
之前我曾为 8B 模型发布过 V2 版本。但尝试为 70B 模型开发 V2 版本似乎并不值得,我想在浪费计算资源之前先完善模型。 不过,我对这个最新的方法非常满意,它似乎减少了模型产生幻觉的情况。 因此,为了表明这是一种比 8B V2 版本更先进的新方法,我决定像微软那样直接跳到 V3 版本(实际上,这是因为许多旧版但仍在使用的微软库会在操作系统名称中检查 'Windows 9' 来检测 Windows 95/98)。
⚠️ 特性提醒
由于该方法非常新颖,这个模型可能会有一些有趣的特性。我鼓励你尝试使用这个模型,并在社区板块分享你发现的任何特性,这将有助于我们进一步了解这种正交化方法可能产生的副作用。 如果你有进一步的改进建议,请分享出来!这只是使用消融方法的最基本方式,我相信还有其他未被探索的可能性。 此外,如果你有任何相关问题,欢迎随时联系我。我在 Cognitive Computations Discord 上,也会关注社区板块,期待与你交流!我很乐意看到这种方法在其他方面的应用,并会尽我所能提供支持。
🚀 快速开始
安装
建议使用 mistral-inference 来使用 mistralai/Codestral-22B-v0.1
。
pip install mistral_inference
下载
from huggingface_hub import snapshot_download
from pathlib import Path
mistral_models_path = Path.home().joinpath('mistral_models', 'Codestral-22B-v0.1')
mistral_models_path.mkdir(parents=True, exist_ok=True)
snapshot_download(repo_id="mistralai/Codestral-22B-v0.1", allow_patterns=["params.json", "consolidated.safetensors", "tokenizer.model.v3"], local_dir=mistral_models_path)
对话
安装 mistral_inference
后,你的环境中应该会有一个 mistral-chat
CLI 命令。
mistral-chat $HOME/mistral_models/Codestral-22B-v0.1 --instruct --max_tokens 256
以下是执行上述命令后,针对“用 Rust 编写一个计算斐波那契数列的函数”这一请求的输出示例:
Sure, here's a simple implementation of a function that computes the Fibonacci sequence in Rust. This function takes an integer `n` as an argument and returns the `n`th Fibonacci number.
fn fibonacci(n: u32) -> u32 {
match n {
0 => 0,
1 => 1,
_ => fibonacci(n - 1) + fibonacci(n - 2),
}
}
fn main() {
let n = 10;
println!("The {}th Fibonacci number is: {}", n, fibonacci(n));
}
This function uses recursion to calculate the Fibonacci number. However, it's not the most efficient solution because it performs a lot of redundant calculations. A more efficient solution would use a loop to iteratively calculate the Fibonacci numbers.
中间填充(FIM)
安装 mistral_inference
并运行 pip install --upgrade mistral_common
以确保安装了 mistral_common>=1.2:
from mistral_inference.model import Transformer
from mistral_inference.generate import generate
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.tokens.instruct.request import FIMRequest
tokenizer = MistralTokenizer.v3()
model = Transformer.from_folder("~/codestral-22B-240529")
prefix = """def add("""
suffix = """ return sum"""
request = FIMRequest(prompt=prefix, suffix=suffix)
tokens = tokenizer.encode_fim(request).tokens
out_tokens, _ = generate([tokens], model, max_tokens=256, temperature=0.0, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.decode(out_tokens[0])
middle = result.split(suffix)[0].strip()
print(middle)
以下是执行上述代码后的输出示例:
num1, num2):
# Add two numbers
sum = num1 + num2
# return the sum
⚠️ 局限性
Codestral-22B-v0.1 没有任何审核机制。我们期待与社区合作,探索如何使模型更好地遵守规则,以便在需要审核输出的环境中进行部署。
📄 许可证
Codestral-22B-v0.1 采用 MNLP-0.1
许可证发布。
👥 Mistral AI 团队
Albert Jiang、Alexandre Sablayrolles、Alexis Tacnet、Antoine Roux、Arthur Mensch、Audrey Herblin-Stoop、Baptiste Bout、Baudouin de Monicault、Blanche Savary、Bam4d、Caroline Feldman、Devendra Singh Chaplot、Diego de las Casas、Eleonore Arcelin、Emma Bou Hanna、Etienne Metzger、Gianna Lengyel、Guillaume Bour、Guillaume Lample、Harizo Rajaona、Henri Roussez、Jean-Malo Delignon、Jia Li、Justus Murke、Kartik Khandelwal、Lawrence Stewart、Louis Martin、Louis Ternon、Lucile Saulnier、Lélio Renard Lavaud、Margaret Jennings、Marie Pellat、Marie Torelli、Marie-Anne Lachaux、Marjorie Janiewicz、Mickael Seznec、Nicolas Schuhl、Patrick von Platen、Romain Sauvestre、Pierre Stock、Sandeep Subramanian、Saurabh Garg、Sophia Yang、Szymon Antoniak、Teven Le Scao、Thibaut Lavril、Thibault Schueller、Timothée Lacroix、Théophile Gervet、Thomas Wang、Valera Nemychnikova、Wendy Shang、William El Sayed、William Marshall



