知乎AI开源 Zhi-Create-Qwen3-32B 增强创意写作能力

1. 简介

Zhi-Create-Qwen3-32B 是基于Qwen/Qwen3-32B微调的模型,重点增强了创意写作能力。通过精心优化,该模型在创意写作表现上展现出显著提升。使用WritingBench进行评估时,模型获得了82.08分,较基础版Qwen3-32B模型的78.97分有明显进步。

此外,为保持模型在通用知识、推理等方面的能力,我们通过混合通用知识、数学、代码等多种数据类型进行了细粒度数据配比实验。最终评估结果显示,模型的通用能力保持稳定,与基础模型相比未出现明显下降。

2. 训练流程

数据

模型的训练语料包含三大核心数据来源:经过严格筛选的开源数据集、人工合成的思维链推理语料以及知乎精选问答对。

为实现最佳领域覆盖,我们通过数据混合优化实验精心平衡了各类数据集的配比。这些数据集包括Dolphin-r1Congliu/Chinese-DeepSeek-R1-Distill-data-110ka-m-team/AM-DeepSeek-R1-0528-Distilled,以及知乎平台的高质量内容。所有数据集均通过奖励模型(RM)过滤流程完成全面质量把控。为确保模型的基础知识与推理能力,创意写作类数据约占训练数据的23%,其余部分由数学、代码和基础通识类数据构成。训练数据中的思维链(CoT)推理组件是使用deepseek-ai/DeepSeek-R1-0528等同类模型合成的。

具体数据分布如下图所示:

在这里插入图片描述

图1:训练数据分布图展示不同数据源的构成情况,其中创意写作数据约占训练语料总量的23%,与数学、编程及常识类数据共同构成训练集。

训练方法

监督微调(SFT):我们采用课程学习策略进行监督微调。这种系统性方法在保持核心能力、避免灾难性遗忘的同时,通过融合多领域数据来持续增强创意写作能力。采用多阶段渐进迭代法,筛选前几轮训练不足的样本,并按推理复杂度与上下文长度分级,从而逐步提升训练样本难度,实现模型能力的阶梯式增强。

直接偏好优化(DPO):结合RAFT(奖励排序微调)方法,通过规则系统与大模型评判相结合的方式识别正负样本,构建DPO偏好样本对。该方法有效改善模型中英混杂编码、不良重复等问题,同时提升推理能力。

3. 评估结果

我们使用WritingBench(一个评估大语言模型写作能力的综合框架)对我们的模型进行了评估。Zhi-Create-Qwen3-32B模型获得了82.08分(使用Claude Sonnet 3.7作为评估法官),在创意写作表现上展现出显著提升。相比基础版Qwen3-32B模型78.97分的表现,这是一个重大改进。

下图展示了六个不同领域的性能对比:

在这里插入图片描述

图2:智创千问3-32B与千问3-32B在六大领域的WritingBench性能对比,采用Claude 3.7 Sonnet作为评判模型。评估领域包括:(D1) 学术与工程、(D2) 金融与商业、(D3) 政治与法律、(D4) 文学与艺术、(D5) 教育、(D6) 广告与营销。

4. 本地运行指南

智创千问3-32B可适配多种硬件配置,包括80GB显存GPU及单张H20/A800/H800显卡。为降低部署门槛,我们同步提供量化版本:FP8量化模型(Zhi-Create-Qwen3-32B-FP8)支持双RTX 4090运行,Q4_K_M量化版本可部署于单张RTX 4090显卡。

Transformers

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig

MODEL_NAME = "Zhihu-ai/Zhi-Create-Qwen3-32B"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, trust_remote_code=True)

# use bf16
# model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, device_map="auto", trust_remote_code=True, bf16=True).eval()
# use fp16
# model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, device_map="auto", trust_remote_code=True, fp16=True).eval()
# use cpu only
# model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, device_map="cpu", trust_remote_code=True).eval()
# use auto mode, automatically select precision based on the device.
model = AutoModelForCausalLM.from_pretrained(
    MODEL_NAME,
    device_map="auto",
    trust_remote_code=True
).eval()

# Specify hyperparameters for generation. But if you use transformers>=4.32.0, there is no need to do this.
# model.generation_config = GenerationConfig.from_pretrained(MODEL_NAME, trust_remote_code=True)

generate_configs = {
    "temperature": 0.6,
    "do_sample": True,
    "top_p": 0.95,
    "max_new_tokens": 4096
}

prompt = "请你以鲁迅的口吻,写一篇介绍西湖醋鱼的文章"
messages = [
    {"role": "user", "content": prompt}
]
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,
    **generate_configs
)
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)

vllm

例如,你可以轻松地使用vLLM启动一个服务

# install vllm
pip install vllm>=0.6.4.post1

# huggingface model id
vllm serve Zhihu-ai/Zhi-Create-Qwen3-32B --served-model-name Zhi-Create-Qwen3-32B --port 8000

# local path
vllm serve /path/to/model  --served-model-name Zhi-Create-Qwen3-32B --port 8000

curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "Zhi-Create-Qwen3-32B",
        "prompt": "请你以鲁迅的口吻,写一篇介绍西湖醋鱼的文章",
        "max_tokens": 4096,
        "temperature": 0.6,
        "top_p": 0.95
    }'

SGLang

你也可以使用 SGLang 轻松启动一个服务

# install SGLang
pip install "sglang[all]>=0.4.5" --find-links https://flashinfer.ai/whl/cu124/torch2.5/flashinfer-python

# huggingface model id 
python -m sglang.launch_server --model-path Zhihu-ai/Zhi-Create-Qwen3-32B --served-model-name Zhi-Create-Qwen3-32B --port 8000

# local path
python -m sglang.launch_server --model-path /path/to/model  --served-model-name Zhi-Create-Qwen3-32B --port 8000

# send request
curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "Zhi-Create-Qwen3-32B",
        "prompt": "请你以鲁迅的口吻,写一篇介绍西湖醋鱼的文章",
        "max_tokens": 4096,
        "temperature": 0.6,
        "top_p": 0.95
    }'

# Alternative: Using OpenAI API
from openai import OpenAI
openai_api_key = "empty"
openai_api_base = "http://127.0.0.1:8000/v1"

client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base
)

def get_answer(messages):
    response = client.chat.completions.create(
        messages=messages,
        model="Zhi-Create-Qwen3-32B",
        max_tokens=4096,
        temperature=0.3,
        top_p=0.95,
        stream=True,
        extra_body = {"chat_template_kwargs": {"enable_thinking": True}}
    )
    answer = ""
    reasoning_content_all = ""
    for each in response:
        each_content = each.choices[0].delta.content
        if hasattr(each.choices[0].delta, "content"):
            each_content = each.choices[0].delta.content
        else:
            each_content = None
        if hasattr(each.choices[0].delta, "reasoning_content"):
            reasoning_content = each.choices[0].delta.reasoning_content
        else:
            reasoning_content = None
        if each_content is not None:
            answer += each_content
            print(each_content, end="", flush=True)
        if reasoning_content is not None:
            reasoning_content_all += reasoning_content
            print(reasoning_content, end="", flush=True)
    return answer, reasoning_content_all

prompt = "请你以鲁迅的口吻,写一篇介绍西湖醋鱼的文章"
messages = [
    {"role": "user", "content": prompt}
]

answer, reasoning_content_all = get_answer(messages)

ollama

您可以通过此链接下载ollama

  • 量化版本: Q4_K_M
ollama run zhihu/zhi-create-qwen3-32b
  • bf16版本
ollama run zhihu/zhi-create-qwen3-32b:bf16

5. 使用建议

为了获得最佳性能,我们建议将temperature参数设置在0.5-0.7之间(推荐0.6),并将top-p设为0.95,以平衡创造性和连贯性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值