跳到主要内容

基于Chinese Tiny LLM - 2B 中文小模型的通用对话微调

更新时间:2025-08-12 16:21:05
自定义数据集数据处理高性能GPU卡中文小模型通用对话存储钜惠LoRA微调

现有大语言模型的训练大多以英语为核心,中文语料和能力往往处于次要地位,难以全面满足中文场景下的理解与生成需求。需要一个以中文为核心的大语言模型,能够在中文理解、生成和复杂任务处理上表现更优,同时兼顾一定的英文和编程能力。

CT-LLM 的核心特点在于,它并非一味追求超大规模参数,而是聚焦于自主构建和整理的高品质中文语料数据,在相对较小规模的大模型,提升中文核心能力。本实践在CT-LLM-Base模型上微调,使用 自定义COIG-CQIA(中文)OL-CC(中文)OpenHermesPreferences(英文)数据集按不同数据配比进行指令微调,对比模型对话效果和模型评估结果,发现微调后的模型中文理解能力与生成核心能力显著提升。

前提条件

  • 用户已经获取LLaMA Factory Online平台账户和密码,如果需要帮助或尚未注册,可参考注册账户完成注册。
  • 当前账号的余额充裕,可满足模型微调服务的需要。点击可了解最新的活动费用信息,或前往充值,如需了解更多请联系我们
  • 用户需要在JupyterLab中新建python环境并完成环境配置。操作方法参考数据处理中的步骤3。

操作步骤

配置概览

配置参数配置项是否预置说明
模型CT-LLM-Base参数量约20亿 (2B),擅长中文理解、生成和复杂任务处理。
数据集COIG-CQIA(中文)
OL-CC(中文)
OpenHermesPreferences(英文)
高质量中文指令微调数据集
开源中文对话指令集
偏好排序数据集
GPUH800*1(推荐)--
微调方法lora-显著降低计算与存储成本,兼具高性能与部署灵活性。

资源消耗预览

时长

使用推荐资源(H800*1)进行微调时微调过程总时长约1h6min。

操作详情

数据处理

  1. 进入LLaMA-Factory Online平台,点击页面左侧导航栏“实例空间”,点击开始微调按钮,进入[配置资源]页面,选择GPU资源,卡数填写1,点击“确认”,如下图所示。
    由于数据处理后期需要使用Qwen模型计算困惑度,因此在这一步我们选择使用1张GPU卡。

    选择GPU卡数

  2. 点击右侧“JupyterLab处理专属数据”进入JupyterLab。新建两个文件夹“Chinesedata”和“data_ppl_filtered”,为后续数据处理做准备。两个文件夹路径分别为:/workspace/Chinesedata/workspace/Chinesedata/data_ppl_filtered。分别用于存储:完成困惑度计算的数据集、完成过滤和切分的数据集(训练集和测试集)。

    选择GPU卡数 选择GPU卡数

  3. 创建并配置用于数据处理的python环境。 在 JupyterLab 中点击“Terminal”进入终端。

    1. 创建一个名为“ChineseTiny”的虚拟环境,python版本选择3.10。
      conda create -n ChineseTiny python=3.10
    2. 激活环境。
      conda activate ChineseTiny
    3. 安装依赖包。
      pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ipykernel 
      pip install -i https://pypi.tuna.tsinghua.edu.cn/simple accelerate
      pip install -i https://pypi.tuna.tsinghua.edu.cn/simple transformers torch tqdm datasets
    4. 注册内核。
      python -m ipykernel install --prefix=/usr/local --name ChineseTiny --display-name "python(ChineseTiny)"
      提示

      上述注册内核的命令中,“--name”后的名字要严格和环境名称一致。

  4. 进行数据处理。

    1. 下载数据处理脚本,点击脚本进行下载。

    2. 将该脚本拖到/workspace目录下,如下图高亮①所示。

    3. 双击打开脚本,切换内核为"python(ChinsesTiny)",如下图高亮②所示。

    4. 点击“运行按钮”逐行运行脚本,如下图高亮③所示。

      选择GPU卡数

    • 在数据处理过程中,我们首先统一了各个数据集的格式,使其符合LLaMA-Factory的格式要求。具体要求可参考数据类型。并且计算了数据集的困惑度,将困惑度写入数据集中。

      下面以各个数据集的第一个样本为例,展示原始数据和统一格式后的数据。

      原始数据格式

      {'instruction': '两个人连续投一枚硬币,如果先出现“正正反”则甲胜,如果先出现“正反反”则乙胜,两人获胜概率是否一样?假设硬币质地均匀,每次投硬币正反两面概率都是50%。连续投很多次,直到出现“正正反”或“正反反”为止。',
      'input': '',
      'output': '第一次如果投反,那么甲乙都等于推倒重练,两人获胜概率不会有任何变化。\n\n所以现在只需要考虑第一次投正的情况,假设此时甲胜率为 $$x$$ ,乙为 $$y$$ ,那么有两种概率各位1/2的情况:\n\n1 - 第二次投出正,这时甲将100%获胜,因为这一刻开始接下来除非不断投出正,只要一出现反甲就赢了。\n\n2 - 第二次投出反,这时看第三投,有1/2概率乙胜利(正反反),剩下1/2概率出现正反正,对于甲乙来说胜率相当于第一次投出正的情况,甲为 $$x$$,乙为 $$y$$。\n\n综合\n\n$$x=\\frac{1}{2}\\cdot1+\\frac{1}{2}\\left(\\frac{1}{2}\\cdot0+\\frac{1}{2}x\\right)$$ ,得出$$x=\\frac{2}{3}$$\n\n或者\n\n$$y=\\frac{1}{2}\\cdot0+\\frac{1}{2}\\left(\\frac{1}{2}\\cdot1+\\frac{1}{2}y\\right)$$ ,得出$$y=\\frac{1}{3}$$\n\n两者相加为1,验算通过。',
      'task_type': {'major': ['问答'], 'minor': ['知乎问答']},
      'domain': ['通用'],
      'metadata': 'qid:584880907, aid:2904885349',
      'answer_from': 'human',
      'human_verified': True,
      'copyright': '暂无版权及作者信息'}

      统一格式后的数据

      {"id":8740,
      "instruction":"如何判断一位女性朋友是否想谈恋爱",
      "input":"",
      "output":"朋友之间有时会发展成恋人,但是要确认女性朋友是否想要把友谊提升到一个新的层次并不容易。好在有一些迹象可以表明你的朋友对于恋爱关系是否感兴趣,比如注意她的肢体语言和你们之间的对话。\n\n## 注意她说的话\n\n**1. 注意她如何谈论她未来的计划。**当她谈论她的生活、事业或者未来时,是否把你包括在她的计划中。如果她这样做了,很有可能她想和你建立恋爱关系,并且未来的很长一段时间都会将你视为她生活的一部分。\n如果她没有这么做,也不用担心。她可能只是因为没有先和你谈过,所以不敢把你列入她的计划中。\n\n**2. 想想她是否会问你一些深奥的问题。**女人很擅长了解别人,因为她们知道该问什么问题。注意她是否问起你的职业规划、理想中未来的家庭、你的希望和梦想。这些都是她想看看你和她的未来是否相容的迹象。\n\n注意听像“你想要几个孩子?”、“你相信婚姻吗?”之类的问题。\n她可能还会问起你和家人的关系、以前的恋情或者你的信仰。\n\n**3. 你是否认为她对你敞开了心扉。**伴随着提问而来的是回答问题!如果她告诉了你她的信仰、过去的恋情和家庭,说明她可能很乐意和你在一起,并把你视为可以信任的人。虽然这对朋友来说也很正常,但这可能意味着她对发展更深层的关系持开放态度。\n尤其是如果她分享的故事对她来说非常有意义,甚至是痛苦的经历,更能印证这一点。如果她觉得可以自在地和你谈论让她情绪激动的话题,这是一个好迹象,表明她认为你是一个能给予她情感支持的人。\n\n**4. 注意她是否在你身边张口结舌或者很紧张。**有时候,你可以通过注意一个人说话的方式以及所说的话,判断她是否喜欢你。如果她看着你的时候语无伦次,或者显得很慌张,这是她喜欢你的一个很好的信号。\n如果她在讲一个尴尬的故事或者一个有趣的笑话,当她看你时可能会脸红,或者忘记自己在说什么。\n\n## 注意浪漫的举动\n\n**1. 注意她是否触摸你的手、头发或者手臂。**缠绵的抚摸是一个巨大的信号,表明一个女人对你感兴趣!如果她在你说话的时候伸出手来摸你的手、主动帮你梳头,或者用手轻轻抚摸你的手臂,说明她可能想和你发展恋情。\n\n如果你对被触摸感到不舒服,要让她知道这一点,并且告诉她你希望她停下来。好朋友会尊重你的界限。\n有些女人天生轻浮。试着注意她周围的人,看她是否也用同样的方式触摸他们。如果她这样做了,她可能只是一个轻浮的人!\n\n**2. 注意她是否想要照顾你。**当女性对某人感兴趣时,她们通常会不遗余力地帮助对方。如果她主动帮你做家务、送你一件小礼物,或者想为你做顿晚餐,可能是把你看作想要谈恋爱的对象。\n\n如果你也对她感兴趣,一定要感谢她,并且试着通过提供帮助来回报她的好意。\n如果你对她的浪漫举动不感兴趣,试着礼貌地拒绝她的提议,但要感谢她的好意。你可以这样说:“没关系,我想我自己可以处理,但是非常感谢你的帮助!”\n\n**3. 当她在你身边时,注意她是否在笑。**尽管她可能会在其他朋友面前大笑或者微笑,但要注意她是否一直都很开心,在你身边咯咯地笑。她可能会试图和你调情,或者让你知道你让她很开心!\n她甚至可能对你讲的不是特别好笑的笑话发笑。如果她在别人都不笑的时候笑了,这是她喜欢你的迹象。\n\n**4. 考虑一下她是否注意并且记住了你对她说的话。**虽然有些女人真的是很好的倾听者,但如果她对你感兴趣,她会加倍努力记下对你来说很重要的事情。当你们出去玩的时候,她可能会说:“哦,那件绿色的衬衫太漂亮了,是你最喜欢的颜色!”之类的话。\n如果她真的对你很认真,甚至会送你一件和你的兴趣爱好,或者你告诉她的故事有关的小礼物。\n\n**5. 等她把你介绍给她的家人。**对一个女人来说,向家人介绍自己的爱人是一个巨大的进步,因为这意味着她对自己和你的关系是认真的。如果她要求你见见她的家人,或者邀请你参加她家人可能也在的活动,她是在试图告诉你她认为你很特别,有见她家人们的资格!\n\n如果你还没有准备好开始一段认真的恋情,礼貌地拒绝她的邀请。你可以这样说:“我现在还没有准备好去见你的家人,但是我很高兴你能邀请我。”\n她可能会邀请你和他们一起吃饭,或者如果你们已经是很久的朋友了,你已经认识了她的父母,她可能会邀请你参加家庭活动。这也是一个很好的信号,表明她想要和你建立恋爱关系,所以你才能成为她参加活动或者晚餐时的“伴侣”。\n\n## 确定你的感情\n\n**1. 决定你是否想从你们的关系中得到同样的感情。**从一段友谊转变成恋爱关系,最重要的一步就是确定你是否想要同样的感情。问问自己你是否准备好投入到一段感情中了,你是否真的对她这个人感兴趣。尽量不要把自己置于将来可能会改变主意的境地。\n\n如果你打算约她出去,知道你想要什么样的关系也很重要。如果你想在正式交往前试着随意地约会一下,你可以这样说:“你愿意一起出去约会几次,看看会怎么样吗?”\n如果你只是对身体上的亲密关系感兴趣,那就对她诚实一些。有些女孩可以接受“炮友”关系,有的则绝对不行。\n\n**2. 如果你真的想谈恋爱,那就约她吧。**如果她用不同的方式表达了她对你的兴趣,那么邀请她约会是很安全的做法。记得要尊重她,诚实地表达你的意图,告诉她你对她的感觉。\n\n你可以这样说:“我觉得你人很好,我对你感兴趣已经有一段时间了。你愿意和我出去约会吗?”\n如果她说愿意,准备好在约会时给对方留下一个好印象。\n如果她说不愿意,不要沮丧或者气馁。你们仍然可以做朋友,你可以试着以后约你感兴趣的其他人出去约会。\n\n**3. 如果你不想谈恋爱,就跟她说实话。**在某些情况下,你可能对你的朋友不感兴趣。如果你注意到她可能对你感兴趣,最好的做法是告诉她你只是把她当作朋友。\n\n为了做到最好,你可以这样说:“我注意到你最近对我的态度有所不同,我想现在就解决这个问题。我真的很珍惜我们的友谊,我对友谊之外的关系不感兴趣。我希望你能明白我的意思。”\n她可能会难过一段时间,但只要你对她好一点,让她知道你还是想让她出现在在你的生活中,一切都会好起来的。\n\n**小贴士**\n\n- 有时候,调情和友善很容易被混淆。如果你注意到当你和她调情时她变得不自在,那么她可能只是把你当朋友一样友善地对待你。\n- 想要确认她是否对你有感觉,一个很好的方法是,一旦你注意到她对你感兴趣,就和她谈一谈。",
      "subset":"wikihow",
      "perplexity":8.8612393807},
    • 困惑度 是自然语言处理领域常用的语言模型评估指标。它用于衡量模型对文本的预测能力,数值越低表示模型对数据的拟合越好,生成的文本越自然。计算困惑度后,我们检查各个数据集困惑度的分布情况,过滤掉了困惑度高于前75%的数据样本。

      [
      {'percent': 5, 'ppl': 1.7610674731193086},
      {'percent': 10, 'ppl': 2.3774340539787198},
      {'percent': 25, 'ppl': 4.183896373821549},
      {'percent': 50, 'ppl': 8.10350818504899},
      {'percent': 75, 'ppl': 13.909937685844394},
      {'percent': 90, 'ppl': 22.34595027351144},
      {'percent': 95, 'ppl': 28.69867577413068}
      ]
      提示

      本实践提供了处理自定义数据集,并将数据用于模型训练的教程,您也可以点击下载,直接获得处理完毕的数据集,快速开始微调训练。

  5. 数据集检测。 将完成处理的数据(路径为:/workspace/Chinesedata/data_ppl_filtered)复制到user-data目录下(路径为/workspace/user-data/datasets)。

    回到LlamaFactory Online页面,进入文件管理页面,在数据集Tab下找到复制的数据集,在操作处点击“数据集检测”,“数据集格式检测”的状态变为“符合”,数据集可以用于微调训练。

    开始微调

  6. 数据配比。 我们后续的训练将基于三种中英数据配比方式的数据集进行,因此需要对数据集进行切割。本实践通过编辑llamafactory/data/dataset_info.json文件内的“num_samples”字段来实现对数据集提取样本数量的控制。

    • 三种中英数据配比方式说明

      实验1实验2实验3
      中英语料比例1:02:14:1
      中文语料采样数6000条OL-CC数据样本,1000条COIG-CQIA数据样本
      英文语料采样数03500条OpenHermesPreferences数据样本1750条OpenHermesPreferences数据样本
    • 切割数据集。 进入llamafactory/data目录,打开该目录下的“dataset_info.json”文件,找到上一步数据检测后写入的数据目录,在对应数据目录中写入“num_samples”字段。如下图所示。
      按照上面“三种中英数据配比方式说明”,我们设置:
      "coig_caia_train_ppl_filtered"采样1000条(如下图高亮①所示);
      "olcc_train_ppl_filtered"采样6000条(如下图高亮②所示);
      "open_hermes_train_ppl_filtered_1"采样3500条(如下图高亮③所示);
      "open_hermes_train_ppl_filtered_2"采样1750条(如下图高亮④所示)。 开始微调

模型训练

  1. 点击“控制台”,进入控制台后点击左侧导航栏的“实例空间”进入页面,如下图所示。

    开始微调

  2. 单击上图“开始微调”按钮,进入[配置资源]页面,选择GPU资源,卡数填写1,点击“确认”,如下图所示。

    选择GPU卡数

  3. 单击左侧“LLaMA-Factory快速微调模型”按钮,进入LLaMA Factory Online在线WebUI微调配置页面,语言选择zh,如下图高亮①所示;模型名称处可以选择任意模型,建议选择不常用的模型以区分保存目录,如下图高亮②所示;模型路径严格填入/shared-only/models/m-a-p/CT-LLM-Base,如下图高亮③所示。

    提示

    由于LlamaFactory官方暂不支持CT-LLM-Base模型,故虽然平台已内置该模型,但模型名称处不显示该模型的名称。只需要严格按下图高亮③的路径输入,模型名称处可以不设置,训练时默认使用CT-LLM-Base模型。

  4. 微调方法选择lora,如下图高亮④所示;选择“train”功能项,训练方式保持Supervised Fine-Tuning,如下图高亮⑤所示;数据路径保持/workspace/llamafactory/data,如下图高亮⑥所示;数据集处根据不同的实验数据配比,选择用户自定义的数据集,如下图高亮⑦所示。参数设置建议与下图橙色框中一致。

    提示

    按照三种中英数据配比方式,在模型微调训练中,三个实验的数据集选择方式如下:

    • 实验一: "coig_caia_train_ppl_filtered"、"olcc_train_ppl_filtered"。
    • 实验二: "coig_caia_train_ppl_filtered"、"olcc_train_ppl_filtered"、"open_hermes_train_ppl_filtered_1"。
    • 实验三: "coig_caia_train_ppl_filtered"、"olcc_train_ppl_filtered"、"open_hermes_train_ppl_filtered_2"。

    训练前设置

  5. (可选)其余参数可根据实际需求调整,具体说明可参考参数说明,本实践中的其他参数均保持默认值。

  6. 参数配置完成后,点击“开始”按钮启动微调任务。页面底部将实时显示微调过程中的日志信息,如下图高亮①所示;同时展示当前微调进度及Loss变化曲线,如下图高亮②所示。微调完成后,系统提示“训练完毕”,例如下图高亮③所示。

    训练前设置

    提示

    因为实验较多,注意区分不同实验的输出目录,后续在模型对话和模型微调时,需要在检查点路径处使用该目录。

  1. 切换至“chat”界面,选择各个实验训练完成的检查点路径,如下图高亮①所示;单击“加载模型”按钮,如下图高亮②所示;微调的模型加载后,在对话框处填入问题,如下图高亮③所示;点击提交(高亮④);在对话框中观察模型回答(高亮⑤)。

    训练前设置

    提示

    完成上一个实验微调后的模型对话,要使用其他实验微调后的模型时,要先卸载模型,再更换检查点路径。

观察各实验微调后的模型与原生模型的对话结果,发现:微调后的模型对话更准确,全面。其中实验二微调后的模型对话效果最佳,结构清晰,具有条理性。

  1. 切换至“Evaluate & Predict”,选择各实验微调后模型的检查点路径,例如下图高亮⑤所示;然后选择用户自定义的测试集coig_cqia_test_ppl_filteredolcc_test_ppl_filteredopen_hermes_test_ppl_filtered,并根据实际需求配置评估参数(本实践的参数设置如下图橙色框所示)。

    训练前设置

  2. 参数配置完成后,点击“开始”按钮即可启动评估,页面底部将实时显示评估过程中的日志信息,评估完成后,记录评估结果,结果如下所示。

    {
    "predict_bleu-4": 26.10712983333333,
    "predict_model_preparation_time": 0.0033,
    "predict_rouge-1": 42.860893,
    "predict_rouge-2": 31.289016833333335,
    "predict_rouge-l": 38.055303333333335,
    "predict_runtime": 377.9389,
    "predict_samples_per_second": 1.588,
    "predict_steps_per_second": 0.064
    }

    结果解读:微调后模型BLEU-4为:26.11,说明生成文本与参考答案的短语重合度较高,模型生成能力明显提升。ROUGE-1(42.86)、ROUGE-2(31.29)、ROUGE-L(38.06)显示模型在词汇覆盖、短语匹配和句法连贯性方面表现良好。

对比各实验微调后的模型评估与原生模型评估结果可以看出,微调后的模型(实验一、二、三)在生成质量和文本相似度方面均远超基模型,实验二效果最佳。

总结

ChineseTiny-LLM主要聚焦于自主整理的高品质数据,在相对较小规模的大模型,提升中文核心能力。本案例初步展示了微调数据的处理,收集了多个开源数据集,并对其进行格式统一、品质过滤、配比设置等,全流程模拟目前的主流开源中文模型。

同时,本实践将处理完的数据按三种不同的配比方式,放在CT-LLM-Base模型上,使用LLAmaFactory Online平台的任务模式和实例模式进行微调,对比模型微调前后的对话效果和评估结果,微调后模型在中文理解与生成上的能力显著提升。