OpenFormosa/barbet-1b-structured-sft
Barbet 1B Structured SFT
本版以 Barbet 1B 為起點,在 voidful/barbet-sft 的完整 980,000 筆 train 資料上做一個 epoch 的全參數 SFT。訓練任務涵蓋 ASR 轉寫候選處理、TTS 文字讀法與內容判讀、OCR 文字候選處理、翻譯候選判讀與後編修,定位為這些系統後續訓練的文字骨幹。
目前實測改善集中在資料集的結構化請求格式。 額外 16 題自由形式指令皆未答對,人工查看輸出後確認多為複述題目或無關續寫;不能用「其他正確譯法」解釋這個結果。一般文字評估中,程式碼 BPB 退步 27.4%,數學退步 16.2%。使用時應沿用下方完整 request 格式,並針對實際資料繼續訓練與驗證;本版尚未展示可靠的自由形式指令能力。
訓練包含 1,490,165,039 個輸入 tokens,其中 225,601,357 個 assistant 答案 tokens 參與 loss。每個樣本獨立執行,保留全文,最長 168,442 tokens。新增 chat template 使用 tokenizer 已有的角色標記,詞表不變。
原始模型固定於 revision 4dbb35216a32de59570a3f0d164804f25c82009d,也可由 `pre-sft-20260916` 取得。資料固定於 revision 0bf2389cbcd6e828af9df0676aed56abc61c4c2e,validation/test 都未參與參數更新。來源群組與完整 prompt 不跨 split;資料本身為確定性合成,題型與用語仍可能高度相似。
GitHub 專案 · 說明網站 · English model card
原始 base 為另行管控存取的倉庫;本次僅公開此 SFT 版本。此 SFT 權重與隨附的專案程式碼、文件及範例採用 Apache-2.0;第三方元件與另行發布的完整資料集保留各自條款。詳見 LICENSE 與 NOTICE.md。
實測比較
以下兩個模型使用相同的固定 test 抽樣、推論程式與資料集原始 canonical parser。每個 task family 抽 20 筆計算答案 NLL、8 筆做 greedy generation,共 1,020 筆 NLL 與 408 筆生成。NLL 越低越好;canonical exact match 要求整個解析後的答案物件一致。生成上限為 2,048 tokens。
同一批生成另列 decision 欄位與 evidence 清單的完全相符率。分母是標準答案包含該欄位的題數,格式解析失敗也計為錯誤。整份 canonical exact 包含 confidence 等所有欄位;單一欄位相符並不代表整份答案正確。
完整各 task family/serializer 數字與範圍見 evaluation_summary.json。以上是此合成資料分布的文字任務結果,不能換算成真實音訊 WER、TTS 音質或影像辨識準確率。
逐筆檢查的嚴格答案錯誤中,189 筆只有 confidence_target 不同,5 筆另有 quality_score 與人工覆核理由不同;原評分保持不變。詳見 evaluation_inspection.json。
一般文字能力
同一組既有 6,955 筆 development holdout,包含中文、英文、日韓、多語、程式碼與數學。BPB 是每個 UTF-8 byte 的負對數機率位元數,越低越好;相對變化為正表示退步。這組資料沿用既有評估,不能視為新建立的私人發布測試。
新文字測試題
另外 16 題在本次訓練外建立、未參與更新的文字指令,涵蓋逐字保留、候選修正、讀法、欄位抽取與簡短翻譯。下表採字面完全一致,其他正確譯法也可能被算錯;需要搭配輸出內容解讀,不能視為完整下游產品評估。
短、長輸入的補充檢查
以相同原始文字續寫格式,測試 8K/128K 輸入中四個位置的編號擷取。每種長度四題;下表 NLL 為每題答案 NLL 的平均,exact 要求整段生成與編號一致。背景為重複的合成行政說明,這組小型測試的結果只適用於這項受控擷取任務。
逐筆查看 SFT 輸出:8K 四題皆產生正確編號,但多了一個句號,因此嚴格 exact 仍為 0/4。128K 只有靠近結尾的題目產生正確編號,且附帶多餘續寫;其餘三個位置回答沒有文件或紀錄。這次檢查尚未證明可靠的長文件擷取能力。
使用方式
本模型保留 29 層 attention/Mamba 混合架構及 1,118,799,096 個參數。建議使用隨附的精度保留載入器;336 個 Mamba 參數維持 FP32,其餘權重為 BF16。不要對整個模型呼叫 .half() 或 .bfloat16()。
下例從固定版本的資料集取得完整 request,再套用相同的 chat template。資料集 messages 的 user 內容會明示來源、任務與輸出格式。
import sys
from huggingface_hub import snapshot_download
from transformers import AutoTokenizer
from datasets import load_dataset
folder = snapshot_download(
"OpenFormosa/barbet-1b-structured-sft",
revision="v0.1.1",
)
sys.path.insert(0, folder)
from load_barbet import load_barbet, generate_tokens
model, tokenizer = load_barbet(folder, device="cuda:0")
chat_tokenizer = AutoTokenizer.from_pretrained(
folder, trust_remote_code=True, local_files_only=True,
)
data = load_dataset(
"voidful/barbet-sft", revision="0bf2389cbcd6e828af9df0676aed56abc61c4c2e",
split="validation", streaming=True,
)
messages = next(iter(data))["messages"][:-1]
prompt_ids = chat_tokenizer.apply_chat_template(
messages, tokenize=True, add_generation_prompt=True, return_dict=False,
)
new_ids = generate_tokens(model, prompt_ids, max_new_tokens=2048)
print(tokenizer.decode(new_ids, skip_special_tokens=True))安裝時請先執行 python -m pip install torch==2.11.0 packaging ninja setuptools wheel,再執行 python -m pip install --no-build-isolation -r requirements-inference.txt,讓原生擴充套件使用已安裝的 PyTorch。完整步驟見 推論說明。
推論相依套件見 requirements-inference.txt;資料集示例另需 datasets。聊天模板中的角色標記為 <|system|>、<|user_channel|>、<|assistant_channel|>;每個 assistant 答案以 </s> 結束。
訓練與限制
- 8 張 H200 NVL,FP32 master weights/AdamW states、BF16 autocast,learning rate 峰值 1e-5,3% warmup,cosine 降至峰值的 10%,有效 batch 128 筆。完整設定、實際 token 數與來源見 training_summary.json 及 GitHub training/。
- 訓練資料只有文字。音訊/影像輸入及語音波形輸出仍需要下游編碼器或解碼器與對應資料訓練。
- 資料含 51 種 task families、四種結構化輸出格式。一般聊天、自由形式指令、未見過的格式及真實模型錯誤分布,需另行評估與適配。
- Confidence 欄位來自合成先驗,不能當成已校準的正確機率。
- 架構設定保留 1,048,576-token 上限。本次 SFT 最長樣本為 168,442 tokens;沒有重新取得 1M 能力成績,原模型的 1M 分數不作為本版成績。
v0.1.1依擁有者指定採用 Apache-2.0,適用於本次發布的 SFT 權重、專案程式碼、文件與隨附範例。完整訓練資料集另依其發布條款;歷史v0.1.0標籤保留原貌。
權重 SHA-256:ea16e76ea8539ee9ad307ef4e202a94a2f86a96ccdbf22b2c34b95be0523895d。完整檔案摘要見 release_manifest.json。
