模型概述
模型特點
模型能力
使用案例
🚀 SoT_DistilBERT:思維草圖範式選擇模型
思維草圖(Sketch-of-Thought,SoT)是一種新穎的提示框架,用於語言模型的高效推理。它將受認知啟發的推理範式與語言約束相結合,在保持推理準確性的同時,最大限度地減少輸出令牌的使用。本項目的 SoT_DistilBERT 模型則是專門為該框架設計的範式選擇模型。
🚀 快速開始
模型加載
本倉庫包含用於思維草圖(SoT)框架的 DistilBERT 範式選擇模型。你可以使用 Hugging Face Transformers 直接加載和使用它:
from transformers import DistilBertTokenizer, DistilBertForSequenceClassification
import torch
import json
# 從 Hugging Face 直接加載模型
model = DistilBertForSequenceClassification.from_pretrained("saytes/SoT_DistilBERT")
tokenizer = DistilBertTokenizer.from_pretrained("saytes/SoT_DistilBERT")
# 定義標籤映射
label_mapping = {
"chunked_symbolism": 0,
"conceptual_chaining": 1,
"expert_lexicons": 2
}
# 問題分類函數
def classify_question(question):
inputs = tokenizer(question, return_tensors="pt", truncation=True, padding=True)
outputs = model(**inputs)
predicted_class = torch.argmax(outputs.logits, dim=1).item()
# 反向映射以獲取範式名稱
label_mapping_reverse = {v: k for k, v in label_mapping.items()}
return label_mapping_reverse[predicted_class]
# 使用示例
question = "Alice has 5 apples. She gives 3 apples to Bob. How many apples does Alice have?"
paradigm = classify_question(question)
print(f"Recommended paradigm: {paradigm}") # 輸出: "chunked_symbolism"
完整包使用
為了提供更簡化的體驗,我們開發了 SoT Python 包,它可以處理範式選擇、提示管理和示例格式化:
from sketch_of_thought import SoT
# 初始化 SoT
sot = SoT()
# 對問題進行分類並獲取合適的範式
question = "Alice has 5 apples. She gives 3 apples to Bob. How many apples does Alice have?"
paradigm = sot.classify_question(question) # 返回: 'chunked_symbolism'
# 獲取所選範式的初始化上下文,包含示例
context = sot.get_initialized_context(
paradigm=paradigm,
question=question,
format="llm",
include_system_prompt=True
)
# 可與你選擇的大語言模型一起使用
Qwen2.5 - 7B 示例
以下是一個使用 Qwen2.5 - 7B - Instruct 的完整示例:
from transformers import AutoModelForCausalLM, AutoTokenizer
from sketch_of_thought import SoT
# 初始化 SoT
sot = SoT()
# 加載 Qwen 模型
model_name = "Qwen/Qwen2.5-7B-Instruct"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 準備問題
prompt = "Alice has 5 apples. She gives 3 apples to Bob. How many apples does Alice have?"
# 分類並獲取合適的上下文
paradigm = sot.classify_question(prompt)
messages = sot.get_initialized_context(
paradigm,
prompt,
format="llm",
include_system_prompt=True
)
# 為模型格式化輸入
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# 生成響應
generated_ids = model.generate(
**model_inputs,
max_new_tokens=512
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
# 解碼響應
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
輸出:
<think>
A = 5
A -= 3
A = 2
</think>
\boxed{2}
✨ 主要特性
思維草圖(SoT)介紹
思維草圖(SoT)是一種新穎的提示框架,用於語言模型的高效推理。它將受認知啟發的推理範式與語言約束相結合,在保持推理準確性的同時,最大限度地減少輸出令牌的使用。與傳統的思維鏈(CoT)方法不同,SoT 實現了三種不同的推理範式:
- 概念鏈(Conceptual Chaining):通過結構化的步驟鏈接,將基本思想按邏輯順序連接起來。適用於常識推理、多跳推理和基於事實的回憶任務。
- 分塊符號化(Chunked Symbolism):將數值和符號推理組織成帶有方程、變量和算術運算的結構化步驟。在數學問題和技術計算中表現出色。
- 專家詞彙(Expert Lexicons):利用特定領域的簡寫、技術符號和行話進行精確高效的交流。適用於需要最大信息密度的技術學科。
多格式支持
SoT 包支持多種輸出格式:
"llm"
:適用於純文本大語言模型的標準聊天格式。"vlm"
:適用於視覺 - 語言模型的多模態格式。"raw"
:未格式化的原始示例。
多語言支持
SoT 支持多種語言,系統提示和示例會根據請求的語言自動加載。
📦 安裝指南
文檔未提及安裝相關內容,可參考 GitHub 倉庫 獲取安裝信息。
💻 使用示例
基礎用法
上述的模型加載和完整包使用示例展示瞭如何對問題進行分類並獲取合適的範式和上下文。
高級用法
使用 Qwen2.5 - 7B - Instruct 模型進行推理的示例,展示瞭如何將 SoT 與具體的大語言模型結合使用。
📚 詳細文檔
支持格式差異
有什麼區別?
LLM 格式
大語言模型的標準 messages
格式。
[
{
"role": "system",
"content": "SYSTEM_PROMPT_HERE"
},
{
"role": "user",
"content": "EXAMPLE_QUESTION_HERE"
},
{
"role": "assistant",
"content": "EXAMPLE_ANSWER_HERE"
},
{
"role": "user",
"content": "USER_QUESTION_HERE"
}
]
VLM 格式
大型視覺 - 語言模型的標準 messages
格式。
[
{
"role": "system",
"content": "SYSTEM_PROMPT_HERE"
},
{
"role": "user",
"content": [{"type": "text", "text": "EXAMPLE_QUESTION_HERE"}]
},
{
"role": "assistant",
"content": [{"type": "text", "text": "EXAMPLE_ANSWER_HERE"}]
},
{
"role": "user",
"content": [{"type": "text", "text": "USER_QUESTION_HERE"}]
}
]
原始格式
原始示例數據,可自行應用格式!
[
{
"question": "EXAMPLE_QUESTION_HERE",
"answer": "EXAMPLE_ANSWER_HERE"
},
{
"question": "EXAMPLE_QUESTION_HERE",
"answer": "EXAMPLE_ANSWER_HERE"
}
]
數據集評估
SoT_DistilBERT 模型在以下數據集上進行了評估:
數據集 | HF ID | 子集 | 分割 | 評估類型 |
---|---|---|---|---|
GSM8K | gsm8k | main | test | numerical |
SVAMP | ChilleD/SVAMP | - | test | numerical |
AQUA - RAT | aqua_rat | - | test | multiple_choice |
DROP | drop | - | validation | open |
OpenbookQA | openbookqa | - | test | multiple_choice |
StrategyQA | ChilleD/StrategyQA | - | test | yesno |
LogiQA | lucasmccabe/logiqa | default | test | multiple_choice |
Reclor | metaeval/reclor | - | validation | multiple_choice |
HotPotQA | hotpot_qa | distractor | validation | open |
MuSiQue - Ans | dgslibisey/MuSiQue | - | validation | open |
QASC | allenai/qasc | - | validation | multiple_choice |
Worldtree | [nguyen - brat/worldtree](https://huggingface.co/datasets/nguyen - brat/worldtree) | - | train | multiple_choice |
PubMedQA | qiaojin/PubMedQA | pqa_labeled | train | yesno |
MedQA | bigbio/med_qa | med_qa_en_source | validation | multiple_choice |
🔧 技術細節
模型架構
- 基礎模型:DistilBERT
- 訓練:5 個 epoch,批量大小 64,學習率 2e - 5
- 損失函數:交叉熵
訓練數據
模型在約 14,200 個樣本上進行訓練,這些樣本涵蓋了各種推理任務,每個樣本都使用三種 SoT 範式之一進行標註。標籤使用 GPT - 4o 和基於預定義啟發式的特定分類提示進行分配。
📄 許可證
本項目採用 MIT 許可證,詳情請參閱 LICENSE 文件。
侷限性
- 模型經過訓練,可將問題分類為三種預定義範式之一,可能無法推廣到訓練分佈之外的任務。
- 性能可能因問題的複雜性和領域而異。
引用
如果你覺得我們的工作有幫助,請引用:
@misc{aytes2025sot,
title={Sketch-of-Thought: Efficient LLM Reasoning with Adaptive Cognitive-Inspired Sketching},
author={Simon A. Aytes and Jinheon Baek and Sung Ju Hwang},
year={2025},
eprint={2503.05179},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://hf.co/papers/2503.05179},
}








