模型简介
模型特点
模型能力
使用案例
🚀 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},
}








