JEVnovel 2.5 · 0.8B

面向 AIGC 文学创作的「八股文」定位模型:不再只回答「这句行不行」,而是指出「哪一小片在拖后腿」。

🎯 背景与动机

LLM 在文学创作领域一直面临一个显著的问题。由于对编码、Agent 领域持续精进的训练,文学领域始终未受重视——语料的不平衡、RL 策略的倾向性,使得 AI 在文学创作输出上逐渐形成了一套「八股文」,即文学创作领域的局部最优。八股文通常是概率上的最优,而不是可读性上的最优。

上一代 JEVnovel 2 解决了「识别」问题:给一句话,判断它需不需要修改。但真正把模型接进改稿流水线后,我们发现这还不够——一句被判烂的文字摆在那里,写手模型该改哪里?全句重写容易误伤原本不错的部分,只改坏的部分才是成本最低、效果最稳的做法。

JEVnovel 2.5 就是我们给出的答案:把判断粒度从「整句」细化到「逗号级小片」。

🧠 方法

  • 细切分:把一句话按标点切成若干小片,模型逐片打分——坏的不是整句,往往只是其中一两个小片。
  • 双头结构:在骨干模型之上挂两个线性头。位置头在每读完一个小片时输出「到这里为止,这段文字需要修改的概率」,逐片连起来就是一条观感曲线——曲线在哪一片突然抬升,问题就出在哪一片。短句头则对每个小片做三分类:拖后腿、中性、有价值,把「问题片」和「亮点片」区分开来。
  • 完全蒸馏自 27B:这一代没有使用任何人工直接标注。上一代 27B 教师先对语料逐片打分,产出 2.4 万句带逐片标注的训练集,小模型再从教师身上学——学的不只是结论,还有整条曲线的形状。
  • 训练:Qwen3.5 0.8B 基座,LoRA 训练,不引入任何类别加权。我们试过用加权硬拉召回,结果是分数好看了、概率校准全崩了,最后选择回归干净的目标函数。

📊 评测

评测设置

沿用上代协议:判定阈值在验证集上冻结后再应用到 benchmark,main-bench 取人类共识最高的 538 句作为核心指标,all-bench 为噪声较大的全体 4,254 句作为参考。

结果

模型 来源 main macro-F1 bad召回 bad精确 负误报 all macro-F1
jev-novel-2-27b-bf16 JEVnovel 2 0.7661 0.6162 0.8978 0.0712 0.5928
jev-novel-2-4b-bf16 JEVnovel 2 0.7509 0.6273 0.8458 0.1161 0.5954
jev-novel-2.5-4b-bf16 JEVnovel 2.5 0.747 0.697 0.778 0.202 0.600
jev-novel-2-0.8b-bf16 JEVnovel 2 0.7426 0.6790 0.7830 0.1910 0.6057
jev-novel-2.5-0.8b-bf16 JEVnovel 2.5 0.730 0.734 0.732 0.273 0.607
claude-opus-5.5 LLM 最好成绩 0.4853 0.6642 0.5028 0.6667 0.4728
random-baseline baseline 0.5000 0.5000 0.5037 0.5000 0.4999

bench 对比

教师保真度

句级分数看不出 2.5 的主能力——人类标注只标了「整句好不好」,没标「哪片烂」。逐片定位的水平要用教师 bench 衡量:以 27B 教师的逐片打分为真值,看学生学得像不像。

指标 0.8B(本模型) 4B(姊妹版)
整句 P 相关性 0.905 0.932
逐片前缀相关性 0.910 0.935
片贡献 Δ 相关性 0.927 0.947
最拖片命中率 0.579 0.623
三分类一致率 0.739 0.768

0.8B 已经把教师曲线九成的形状复制了下来,4B 更高,是家族里保真度最高的一档。

顺带解释一句最拖片命中率为什么明显低于其他指标:观感曲线是严格的因果判断——每读到一个片,只能依据已经读过的内容打分;而教师标注「最拖的片」时用的是 O(N) 次前向的删片对比,等于看完全文再回头指认。让学生一次前向就给出同样的答案,本质上是拿 O(1) 的因果输出逼近 O(N) 的非因果标注,六成上下的命中率已经相当可观。

输出长什么样

双头输出示意

同一段文字改前改后:整段概率从 0.398 降到 0.069。红底越深的片观感越差,曲线上的红柱是该片的贡献,底部胶囊是短句头判定——「像是嫌自己说得太明白」被两个头同时点名。

分析与讨论

句级打平,定位是白送的吗? 2.5 在句级二分类上与上一代基本持平,0.8B 甚至略低一点。我们不打算掩饰这一点:主任务从「判断」换成了「定位」,句级分数不退步就是我们给自己定的底线。真正多出来的是逐片定位能力,这是上一代完全没有的。

尺寸效应依然微弱。 0.8B 到 4B,句级分数几乎不动,教师保真度只涨约两个点。和上代结论一致:人类高共识的八股对小模型并不难,参数量的优势体现在模棱两可的长尾句上。追求性价比选 0.8B,追求极限保真选 4B。

已知边界:单句成段的极短文本容易被误伤;模型只判断观感,不判断事实与逻辑;训练域是中文网文,其他文体未经验证。

🗺️ 未来计划

  • 第三代头:从「哪里有问题」走向「有什么问题」,让模型直接给出语义化的修改方向;
  • 持续扩展数据集的文体广度。

📐 模型规格

项 值
参数量 0.75B
权重 bf16,1.5 GB,1 个 safetensors 分片
文本骨干 qwen3_5_text,hidden 1024,24 层
位置头 Linear(1024→1),逐片前缀概率
短句头 Linear(1024→3),拖后腿/中性/有价值
判定阈值 整段 0.050,片 Δ 0.05 / 片 P 0.15 / 绝对线 0.5
最长输入 1024 token(含固定提示)

🚀 用法

⚠️ 自定义架构,不能直接用 AutoModel 加载,请使用本仓库的 infer.py。

安装

python -m pip install torch --index-url https://download.pytorch.org/whl/cu128
python -m pip install --no-build-isolation -r requirements.txt

推理

# 单句
python infer.py --text "话一出口她自己先红了脸,像是嫌自己说得太明白,转身去开冰箱。"

# 批量(JSONL)
python infer.py --input input.jsonl --output predictions.jsonl

输入:JSONL 每行包含 sentence(可选 id)。

输出字段:

字段 说明
p 整段需要修改的概率
bad 整段判定
pieces 逐片结果:text / p / delta / clause / clause_prob / flag

📄 许可

以 Apache-2.0 发布,承继基座模型(Qwen3.5)的许可证,见 LICENSE。

Downloads last month
56
Safetensors
Model size
0.8B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for aikexue170/jev-novel-2.5-0.8b-bf16

Finetuned
(520)
this model
Quantizations
1 model

Collection including aikexue170/jev-novel-2.5-0.8b-bf16