--- license: cc-by-nc-4.0 language: - zh pipeline_tag: text-generation tags: - novels - literature --- ![](logo.png) # 轻小说写作模型(Alpha版) 本模型大小为0.16B,使用轻小说数据进行训练,可用于轻小说写作。 ## 使用说明 下载模型`model_sft.pt`, tokenizer `tokenizer.model`和必要的脚本 `model.py`, `tokenizer.py`, `generate.py` ,并且安装python和pytorch后,在文件所在目录下使用命令 ``` python generate.py --prompt "写一篇轻小说,讲述少女组建乐队的故事" ``` 即可得到结果,例如 ``` 序章:最后的希望 清晨的草原上,我趴下,看着夕阳把自己染成血红色,手心冒汗的林中 清晨的草地上,我站在一片广袤的草地,呼吸均匀,像是在寻找什么重要的东西 “林君,你到底是什么人?” 清晨的阳光透过树叶洒进来,轻柔而富有弹性,林中的草地发出沙沙的声响,像是一具尸体走进坟场。 我叫林晨,今年十五岁,毕业于旧时代摇滚摇滚家事务所,负责作曲。 准确地说,是所有人的命运。 (等等,这不就是我在演唱会上演过的最后一次演出吗?如果我能找到那条奏者的命,那他就永远无法找到我了?) 我正想转身离开,却听到了身后传来一阵刺耳的刹车声。 等等,那是林晨的脚步声? 我猛地转身,看到一个穿着华丽长裙的少年正朝我跑来,手里拿着一根棒棒,动作优雅,声音温柔,带着明显的委屈。 “我是林晨!你叫什么名字?” “林君?”少年转过头,用那双仿佛能看穿一切的眼睛看着我,“从小一起长大,从小一起长大,从幼儿园开始。” “小林……?” “我的天赋是钢琴,能弹吉他,能唱歌,能唱绝大多数普通高中生。”少年的表情变得有些复杂,“我能弹五百首曲子,能在今天的生日换取一切。” “生日?你确定不是唱得太烂了吗?” “林君,你知道的。上周我唱了整整三年,那首曲子唱的很特别,让我在演唱会上被观众嘲笑,然后就彻底消失了。” 我环顾四周。草地上,长着三棵树的少年,脸上挂着标准的乐队的笑容,但那笑容让我后背一阵发凉。 (这算什么?我上辈子是乐队成员吗?这算什么?我的人生不应该是出门练唱演唱会吗?) 三个月后,我站在了一座小山上,周围是草地的树木,月光洒在树上,像是在嘲笑我。 ``` ## 参数说明 词表大小为50306, 其中最后三个<|endoftext|>, <|im_start|>, <|im_end|> 是特殊符号。 本模型使用标准的ChatML格式,目前只支持单轮对话,格式如下所示: ``` <|im_start|>user 写一篇轻小说,讲述少女组建乐队的故事<|im_end|> <|im_start|>assistant # 序章:最后的希望 清晨的草原上,我趴下,看着夕阳把自己染成血红色,手心冒汗的林中...(省略中间文本)...<|im_end|> ``` 本模型使用Transformer架构,嵌入维度为768,层数为12,注意力为多头注意力,有12个注意力头。 准确来说,本模型总参数量为163,949,186. 训练时的序列长度为2048,超出该长度的生成效果可能会大幅度下降。 ## 训练说明 使用脚本 `train_tokenizer.py` 训练tokenizer; 使用脚本 `pretrain.py` 预训练; 使用 `train_sft.py` 进行指令微调。 训练和推理需要安装的python包有pytorch, jsonlines, tqdm等,不依赖于transformers等huggingface框架。 本模型预训练时对多个数据集按照指定比例进行混合采样训练。混合采样数据集类在 `dataset_loader.py` 中实现。 本仓库不包含预训练数据,可自行收集。训练前需要自行修改训练脚本调整数据路径。 本模型预训练数据包括: 中英文[维基百科](https://huggingface.co/datasets/wikimedia/wikipedia) [fineweb-edu](https://huggingface.co/datasets/HuggingFaceFW/fineweb-edu) [zhihu-KOL](https://huggingface.co/datasets/wangrui6/Zhihu-KOL) 本人收集的一些轻小说和其他小说数据 本模型SFT数据是使用deepseek v4 pro生成的1018条小说创作[数据集](https://huggingface.co/datasets/hugfaceguy0001/LightNovel-SFT)