模型概述
模型特點
模型能力
使用案例
🚀 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



