ChatLM-mini-Chinese

GitHub
1.7k 193 中等 4 次阅读 昨天Apache-2.0语言模型
AI 解读 由 AI 自动生成,仅供参考

ChatLM-mini-Chinese是专为中文对话设计的轻量级生成式语言模型,参数规模仅0.2B(约2.1亿),可在消费级显卡(最低4GB显存)完成训练和推理。它完整开源了从数据清洗、tokenizer训练到模型预训练、指令微调及偏好优化的全流程代码,特别适合需要在低资源环境下进行模型定制的开发者和研究人员。

传统大语言模型因参数量庞大,常导致训练成本高企和推理延迟。ChatLM-mini-Chinese通过精简模型架构和优化训练流程,将显存占用降低至512MB(推理)和4GB(训练),同时保持完整的对话生成能力。项目提供动态长度批处理、流式加载等显存优化技术,并支持断点续训和模型合并功能,显著降低了中小规模模型的开发门槛。

该模型内置三元组信息抽取的微调示例,验证了其在信息提取等下游任务中的扩展潜力。技术亮点包括:基于mini-hash的文档去重技术防止训练数据泄露、支持任意长度文本的端到端Text-to-Text预训练框架,以及兼容Huggingface生态的模块化设计。开发者可直接通过AutoModelForSeq2SeqLM接口调用模型,结合提供的RAG方案(参考Phi2-mini-Chinese项目)快速构建检索增强系统。

对于需要轻量化模型部署、对话系统研究或垂直领域微调的用户,ChatLM-mini-Chinese提供了从训练到应用的完整解决方案,尤其适合算力受限但需要全流程可控的场景。

使用场景

某医疗科技初创公司需要从患者问诊记录中抽取出"症状-药物-疗效"三元组信息,用于构建医疗知识图谱。开发团队仅有2台带16GB显存的消费级GPU服务器。

没有 ChatLM-mini-Chinese 时

  • 部署主流7B参数中文模型需要云服务GPU集群,单月推理成本超5万元
  • 自研小模型训练需从头清洗数据、训练tokenizer,仅数据去重处理就耗时3周
  • 使用Huggingface默认Trainer微调时,200万条医疗数据需要连续训练14天
  • 低精度量化后的模型仍需4GB显存,推理时经常触发OOM异常
  • 医疗领域术语导致通用模型信息抽取准确率仅58.3%

使用 ChatLM-mini-Chinese 后

  • 直接复用项目提供的mini_hash去重代码,3天完成1000万条问诊记录清洗
  • 基于提供的三元组抽取示例,修改50行代码即适配医疗领域实体关系抽取
  • 在单卡16GB服务器上,使用动态max_len训练策略,微调速度提升3.2倍
  • float16精度模型仅占512MB显存,单条记录抽取时延降至87ms
  • 经过DPO偏好优化后,专业术语处理准确率提升至82.1%

通过复用完整的训练推理框架,团队在23天内完成了从数据清洗到服务部署的全流程,整体成本降低76%。核心价值在于为垂直领域场景提供了可复用的端到端解决方案,使小团队也能高效定制专业化小模型。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

需要NVIDIA GPU,显存4GB+(推理最低512MB),推荐16GB+显存,CUDA版本需支持PyTorch安装

内存

最低16GB(预训练需16GB+4GB显存配置),训练推荐60GB

依赖
notes建议使用conda管理环境;首次运行需下载模型文件(约5GB);训练tokenizer需较大内存(1.7GB语料需48GB内存);需安装Git LFS下载模型;Windows需注意PyTorch的CUDA版本兼容性
python3.10
torch>=2.0
transformers>=4.30
accelerate
trl
peft
sentencepiece
tokenizers
datasets
opencc
Git-LFS
ChatLM-mini-Chinese hero image

快速开始

中文对话0.2B小模型 ChatLM-Chinese-0.2B

中文 | English

一、👋介绍

现在的大语言模型的参数往往较大,消费级电脑单纯做推理都比较慢,更别说想自己从头开始训练一个模型了。本项目的目标是从0开始训练一个生成式语言模型,包括数据清洗、tokenizer训练、模型预训练、SFT指令微调、RLHF优化等。

ChatLM-mini-Chinese为中文对话小模型,模型参数只有0.2B(算共享权重约210M),可以在最低4GB显存的机器进行预训练(batch_size=1fp16或者 bf16),float16加载、推理最少只需要512MB显存。

  • 公开所有预训练、SFT指令微调、DPO偏好优化数据集来源。
  • 使用HuggingfaceNLP框架,包括transformersacceleratetrlpeft等。
  • 自实现trainer,支持单机单卡、单机多卡进行预训练、SFT微调。训练过程中支持在任意位置停止,及在任意位置继续训练。
  • 预训练:整合为端到端的Text-to-Text预训练,非mask掩码预测预训练。
    • 开源所有数据清洗(如规范化、基于mini_hash的文档去重等)、数据集构造、数据集加载优化等流程;
    • tokenizer多进程词频统计,支持sentencepiecehuggingface tokenizers的tokenizer训练;
    • 预训练支持任意位置断点,可从断点处继续训练;
    • 大数据集(GB级别)流式加载、支持缓冲区数据打乱,不利用内存、硬盘作为缓存,有效减少内存、磁盘占用。配置batch_size=1, max_len=320下,最低支持在16GB内存+4GB显存的机器上进行预训练;
    • 训练日志记录。
  • SFT微调:开源SFT数据集及数据处理过程。
    • 自实现trainer支持prompt指令微调, 支持任意断点继续训练;
    • 支持Huggingface trainersequence to sequence微调;
    • 支持传统的低学习率,只训练decoder层的微调。
  • RLHF偏好优化:使用DPO进行全量偏好优化。
    • 支持使用peft lora进行偏好优化;
    • 支持模型合并,可将Lora adapter合并到原始模型中。
  • 支持下游任务微调:finetune_examples给出三元组信息抽取任务的微调示例,微调后的模型对话能力仍在。

如果需要做基于小模型的检索增强生成(RAG),可以参考我的另一个项目Phi2-mini-Chinese,代码见rag_with_langchain.ipynb

🟢最近更新

2024-01-30 - 模型文件更新到魔搭modelscope,可以通过`snapshot_download`快速下载。
2024-01-07 - 添加数据清洗过程中基于mini hash实现的文档去重(在本项目中其实是数据集的样本去重),防止模型遇到多次重复数据后,在推理时吐出训练数据。
- 添加`DropDatasetDuplicate`类实现对大数据集的文档去重。
2023-12-29 - 更新模型代码(权重不变),可以直接使用`AutoModelForSeq2SeqLM.from_pretrained(...)`加载模型使用。
- 更新readme文档。
2023-12-18 - 补充利用`ChatLM-mini-0.2B`模型微调下游三元组信息抽取任务代码及抽取效果展示 。
- 更新readme文档。
2023-12-14 - 更新SFT、DPO后的模型权重文件。
- 更新预训练、SFT及DPO脚本。
- 更新`tokenizer`为`PreTrainedTokenizerFast`。
- 重构`dataset`代码,支持动态最大长度,每个批次的最大长度由该批次的最长文本决定,节省显存。
- 补充`tokenizer`训练细节。
2023-12-04 - 更新`generate`参数及模型效果展示。
- 更新readme文档。
2023-11-28 - 更新dpo训练代码及模型权重。
2023-10-19 - 项目开源, 开放模型权重供下载。

二、🛠️ChatLM-0.2B-Chinese模型训练过程

2.1 预训练数据集

所有数据集均来自互联网公开的单轮对话数据集,经过数据清洗、格式化后保存为parquet文件。数据处理过程见utils/raw_data_process.py。主要数据集包括:

  1. 社区问答json版webtext2019zh-大规模高质量数据集,见:nlp_chinese_corpus。共410万,清洗后剩余260万。
  2. baike_qa2019百科类问答,见:https://aistudio.baidu.com/datasetdetail/107726,共140万,清醒后剩余130万。
  3. 中国医药领域问答数据集,见:Chinese-medical-dialogue-data,共79万,清洗后剩余79万。
  4. 金融行业问答数据,见:https://zhuanlan.zhihu.com/p/609821974,共77万,清洗后剩余52万。数据质量太差,未采用。
  5. 知乎问答数据,见:Zhihu-KOL,共100万行,清洗后剩余97万行。
  6. belle开源的指令训练数据,介绍:BELLE,下载:BelleGroup,仅选取Belle_open_source_1Mtrain_2M_CN、及train_3.5M_CN中部分回答较短、不含复杂表格结构、翻译任务(没做英文词表)的数据,共370万行,清洗后剩余338万行。
  7. 维基百科(Wikipedia)词条数据,将词条拼凑为提示语,百科的前N个词为回答,使用202309的百科数据,清洗后剩余119万的词条提示语和回答。Wiki下载:zhwiki,将下载的bz2文件转换为wiki.txt参考:WikiExtractor

数据集总数量1023万:Text-to-Text预训练集:930万,评估集:2.5万(因为解码较慢,所以没有把评估集设置太大)。测试集:90万。 SFT微调和DPO优化数据集见下文。

2.2 模型

T5模型(Text-to-Text Transfer Transformer),详情见论文: Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer

模型源码来自huggingface,见:T5ForConditionalGeneration

模型配置见model_config.json,官方的T5-baseencoder layerdecoder layer 均为为12层,本项目这两个参数修改为10层。

模型参数:0.2B。词表大小:29298,仅包含中文和少量英文。

2.3 训练过程

硬件:

# 预训练阶段:
CPU: 28 vCPU Intel(R) Xeon(R) Gold 6330 CPU @ 2.00GHz
内存:60 GB
显卡:RTX A5000(24GB) * 2

# sft及dpo阶段:
CPU: Intel(R) i5-13600k @ 5.1GHz
内存:32 GB
显卡:NVIDIA GeForce RTX 4060 Ti 16GB * 1
  1. tokenizer 训练: 现有tokenizer训练库遇到大语料时存在OOM问题,故全量语料按照类似BPE的方法根据词频合并、构造词库,运行耗时半天。

  2. Text-to-Text 预训练:学习率为1e-45e-3的动态学习率,预训练时间为8天。训练损失:

traing loss

  1. prompt监督微调(SFT):使用belle指令训练数据集(指令和回答长度都在512以下),学习率为1e-75e-5的动态学习率,微调时间2天。微调损失:

finetune loss

  1. dpo直接偏好优化(RLHF):数据集alpaca-gpt4-data-zh作为chosen文本,步骤2中SFT模型对数据集中的prompt做批量generate,得到rejected文本,耗时1天,dpo全量偏好优化,学习率le-5,半精度fp16,共2epoch,耗时3h。dpo损失:

dpo loss

2.4 对话效果展示

2.4.1 stream chat

默认使用huggingface transformersTextIteratorStreamer实现流式对话,只支持greedy search,如果需要beam sample等其他生成方式,请将cli_demo.pystream_chat参数修改为False

2.4.2 对话展示

存在问题:预训练数据集只有900多万,模型参数也仅0.2B,不能涵盖所有方面,会有答非所问、废话生成器的情况。

三、📑使用说明

3.1 快速开始:

如果无法连接huggingface,请使用modelscope.snapshot_download从modelscope下载模型文件。

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import torch

model_id = 'charent/ChatLM-mini-Chinese'

# 如果无法连接huggingface,打开以下两行代码的注释,将从modelscope下载模型文件,模型文件保存到'./model_save'目录
# from modelscope import snapshot_download
# model_id = snapshot_download(model_id, cache_dir='./model_save')

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForSeq2SeqLM.from_pretrained(model_id, trust_remote_code=True).to(device)

txt = '如何评价Apple这家公司?'

encode_ids = tokenizer([txt])
input_ids, attention_mask = torch.LongTensor(encode_ids['input_ids']), torch.LongTensor(encode_ids['attention_mask'])

outs = model.my_generate(
    input_ids=input_ids.to(device),
    attention_mask=attention_mask.to(device),
    max_seq_len=256,
    search_type='beam',
)

outs_txt = tokenizer.batch_decode(outs.cpu().numpy(), skip_special_tokens=True, clean_up_tokenization_spaces=True)
print(outs_txt[0])
Apple是一家专注于设计和用户体验的公司,其产品在设计上注重简约、流畅和功能性,而在用户体验方面则注重用户的反馈和使用体验。作为一家领先的科技公司,苹果公司一直致力于为用户提供最优质的产品和服务,不断推陈出新,不断创新和改进,以满足不断变化的市场需求。
在iPhone、iPad和Mac等产品上,苹果公司一直保持着创新的态度,不断推出新的功能和设计,为用户提供更好的使用体验。在iPad上推出的iPad Pro和iPod touch等产品,也一直保持着优秀的用户体验。
此外,苹果公司还致力于开发和销售软件和服务,例如iTunes、iCloud和App Store等,这些产品在市场上也获得了广泛的认可和好评。
总的来说,苹果公司在设计、用户体验和产品创新方面都做得非常出色,为用户带来了许多便利和惊喜。

3.2 从克隆仓库代码开始

[!CAUTION] 本项目模型为TextToText模型,在预训练、SFT、RLFH阶段的promptresponse等字段,请务必加上[EOS]序列结束标记。

3.2.1 克隆项目:

git clone --depth 1 https://github.com/charent/ChatLM-mini-Chinese.git

cd ChatLM-mini-Chinese

3.2.2 安装依赖

本项目推荐使用python 3.10,过老的python版本可能不兼容所依赖的第三方库。

pip安装:

pip install -r ./requirements.txt

如果pip安装了CPU版本的pytorch,可以通过下面的命令安装CUDA版本的pytorch:

# pip 安装torch + cu118
pip3 install torch --index-url https://download.pytorch.org/whl/cu118

conda安装:

conda install --yes --file ./requirements.txt

3.2.3 下载预训练模型及模型配置文件

git命令从Hugging Face Hub下载模型权重及配置文件,需要先安装Git LFS,然后运行:

# 使用git命令下载huggingface模型,先安装[Git LFS],否则下载的模型文件不可用
git clone --depth 1 https://huggingface.co/charent/ChatLM-mini-Chinese

# 如果无法连接huggingface,请从modelscope下载
git clone --depth 1 https://www.modelscope.cn/charent/ChatLM-mini-Chinese.git

mv ChatLM-mini-Chinese model_save

也可以直接从Hugging Face Hub仓库ChatLM-Chinese-0.2B手工下载,将下载的文件移动到model_save目录下即可。

3.3 Tokenizer训练

  1. 准备txt语料

语料要求尽可能全,建议添加多个语料,如百科、代码、论文、博客、对话等。

本项目以wiki中文百科为主。获取中文wiki语料方法:中文Wiki下载地址:zhwiki,下载zhwiki-[存档日期]-pages-articles-multistream.xml.bz2文件,大概2.7GB, 将下载的bz2文件转换为wiki.txt参考:WikiExtractor,再利用python的OpenCC库转换为简体中文,最后将得到的wiki.simple.txt放到项目根目录的data目录下即可。多个语料请自行合并为一个txt文件。

由于训练tokenizer非常耗内存,如果你的语料非常大(合并后的txt文件超过2G),建议对语料按照类别、比例进行采样,以减少训练时间和内存消耗。训练1.7GB的txt文件需要消耗48GB左右的内存(预估的,我只有32GB,频繁触发swap,电脑卡了好久T_T),13600k cpu耗时1小时左右。

  1. 训练 tokenizer

char levelbyte level的区别如下(具体使用上的区别请自行检索资料)。默认训练char level的tokenizer,如果需要byte level,在train_tokenizer.py中设置token_type='byte'即可。

# 原始文本
txt = '这是一段中英混输的句子, (chinese and English, here are words.)'

tokens = charlevel_tokenizer.tokenize(txt)
print(tokens)
# char level tokens输出
# ['▁这是', '一段', '中英', '混', '输', '的', '句子', '▁,', '▁(', '▁ch', 'inese', '▁and', '▁Eng', 'lish', '▁,', '▁h', 'ere', '▁are', '▁w', 'ord', 's', '▁.', '▁)']

tokens = bytelevel_tokenizer.tokenize(txt)
print(tokens)
# byte level tokens输出
# ['Ġè¿Ļæĺ¯', 'ä¸Ģ段', 'ä¸Ńèĭ±', 'æ··', 'è¾ĵ', 'çļĦ', 'åı¥åŃIJ', 'Ġ,', 'Ġ(', 'Ġch', 'inese', 'Ġand', 'ĠEng', 'lish', 'Ġ,', 'Ġh', 'ere', 'Ġare', 'Ġw', 'ord', 's', 'Ġ.', 'Ġ)']

开始训练:

# 确保你的训练语料`txt`文件已经data目录下
python train_tokenizer.py

3.4 Text-to-Text 预训练

  1. 预训练数据集示例
{
    "prompt": "对于花园街,你有什么了解或看法吗?",
    "response": "花园街(是香港油尖旺区的一条富有特色的街道,位于九龙旺角东部,北至界限街,南至登打士街,与通菜街及洗衣街等街道平行。现时这条街道是香港著名的购物区之一。位于亚皆老街以南的一段花园街,也就是\"波鞋街\"整条街约150米长,有50多间售卖运动鞋和运动用品的店舖。旺角道至太子道西一段则为排档区,售卖成衣、蔬菜和水果等。花园街一共分成三段。明清时代,花园街是芒角村栽种花卉的地方。此外,根据历史专家郑宝鸿的考证:花园街曾是1910年代东方殷琴拿烟厂的花园。纵火案。自2005年起,花园街一带最少发生5宗纵火案,当中4宗涉及排档起火。2010年。2010年12月6日,花园街222号一个卖鞋的排档于凌晨5时许首先起火,浓烟涌往旁边住宅大厦,消防接报4"
}
  1. jupyter-lab 或者 jupyter notebook:

    见文件train.ipynb,推荐使用jupyter-lab,避免考虑与服务器断开后终端进程被杀的情况。

  2. 控制台:

    控制台训练需要考虑连接断开后进程被杀的,推荐使用进程守护工具Supervisor或者screen建立连接会话。

    首先要配置accelerate,执行以下命令, 根据提示选择即可,参考accelerate.yaml注意:DeepSpeed在Windows安装比较麻烦

    accelerate config
    

    开始训练,如果要使用工程提供的配置请在下面的命令accelerate launch后加上参数--config_file ./accelerate.yaml该配置按照单机2xGPU配置。

    预训练有两个脚本,本项目实现的 trainer对应train.py,huggingface实现的 trainer对应pre_train.py,用哪个都可以,效果一致。本项目实现的 trainer训练信息展示更美观、更容易修改训练细节(如损失函数,日志记录等),均支持断点继续训练,本项目实现的 trainer支持在任意位置断点后继续训练,按ctrl+c退出脚本时会保存断点信息。

    单机单卡:

    # 本项目实现的 trainer
    accelerate launch ./train.py train
    
    # 或者使用 huggingface trainer
    python pre_train.py
    

    单机多卡: 2为显卡数量,请根据自己的实际情况修改。

    # 本项目实现的 trainer
    accelerate launch --multi_gpu --num_processes 2 ./train.py train
    
    # 或者使用 huggingface trainer
    accelerate launch --multi_gpu --num_processes 2 pre_train.py
    

    从断点处继续训练:

    # 本项目实现的 trainer
    accelerate launch --multi_gpu --num_processes 2 ./train.py train --is_keep_training=True
    
    # 或者使用 huggingface trainer
    # 需要在`pre_train.py`中的`train`函数添加`resume_from_checkpoint=True`
    accelerate launch --multi_gpu --num_processes 2 pre_train.py
    

3.5 SFT微调

SFT数据集全部来自BELLE大佬的贡献,感谢。SFT数据集分别为:generated_chat_0.4Mtrain_0.5M_CNtrain_2M_CN,清洗后剩余约137万行。 sft指令微调数据集示例:

{
    "prompt": "解释什么是欧洲启示录",
    "response": "欧洲启示录(The Book of Revelation)是新约圣经的最后一卷书,也被称为《启示录》、《默示录》或《约翰默示录》。这本书从宗教的角度描述了世界末日的来临,以及上帝对世界的审判和拯救。 书中的主题包括来临的基督的荣耀,上帝对人性的惩罚和拯救,以及魔鬼和邪恶力量的存在。欧洲启示录是一个充满象征和暗示的文本,对于解读和理解有许多不同的方法和观点。"
}

参考data目录下的示例parquet文件制作自己的数据集,数据集格式:parquet文件分两列,一列prompt文本,表示提示语,一列response文本,表示期待的模型输出。 微调细节见model/trainer.py下的train方法, is_finetune设置为True时,将进行微调,微调默认会冻结embedding层和encoder层,只训练decoder层。如需要冻结其他参数,请自行调整代码。

运行SFT微调:

# 本项目实现的 trainer, 添加参数`--is_finetune=True`即可, 参数`--is_keep_training=True`可从任意断点处继续训练
accelerate launch --multi_gpu --num_processes 2 ./train.py --is_finetune=True

# 或者使用 huggingface trainer, 多GPU请用accelerate launch --multi_gpu --num_processes gpu个数 sft_train.py
python sft_train.py

3.6 RLHF(强化学习人类反馈优化方法)

偏好方法这里介绍常见的两种:PPO和DPO,具体实现请自行搜索论文及博客。

  1. PPO方法(近似偏好优化,Proximal Policy Optimization)
    步骤1:使用微调数据集做有监督微调(SFT, Supervised Finetuning)。
    步骤2:使用偏好数据集(一个prompt至少包含2个回复,一个想要的回复,一个不想要的回复。多个回复可以按照分数排序,最想要的分数最高)训练奖励模型(RM, Reward Model)。可使用peft库快速搭建Lora奖励模型。
    步骤3:利用RM对SFT模型进行有监督PPO训练,使得模型满足偏好。

  2. 使用DPO(直接偏好优化,Direct Preference Optimization)微调(本项目采用DPO微调方法,比较节省显存) 在获得SFT模型的基础上,无需训练奖励模型,取得正向回答(chosen)和负向回答(rejected)即可开始微调。微调的chosen文本来自原数据集alpaca-gpt4-data-zh,拒绝文本rejected来自SFT微调1个epoch后的模型输出,另外两个数据集:huozi_rlhf_data_jsonrlhf-reward-single-round-trans_chinese,合并后共8万条dpo数据。

    dpo数据集处理过程见utils/dpo_data_process.py

DPO偏好优化数据集示例:

    {
        "prompt": "为给定的产品创建一个创意标语。,输入:可重复使用的水瓶。",
        "chosen": "\"保护地球,从拥有可重复使用的水瓶开始!\"",
        "rejected": "\"让你的水瓶成为你的生活伴侣,使用可重复使用的水瓶,让你的水瓶成为你的伙伴\""
    }

运行偏好优化:

#  多GPU请用accelerate launch --multi_gpu --num_processes gpu个数 dpo_train.py
python dpo_train.py

3.7 推理

确保model_save目录下有以下文件,这些文件都可以在Hugging Face Hub仓库ChatLM-Chinese-0.2B中找到:

ChatLM-mini-Chinese
├─model_save
|  ├─config.json
|  ├─configuration_chat_model.py
|  ├─generation_config.json
|  ├─model.safetensors
|  ├─modeling_chat_model.py
|  ├─special_tokens_map.json
|  ├─tokenizer.json
|  └─tokenizer_config.json
  1. 控制台运行:
python cli_demo.py
  1. API调用
python api_demo.py

API调用示例:

curl --location '127.0.0.1:8812/api/chat' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer Bearer' \
--data '{
    "input_txt": "感冒了要怎么办"
}'

api demo

3.8 下游任务微调

这里以文本中三元组信息为例,做下游微调。该任务的传统深度学习抽取方法见仓库pytorch_IE_model。抽取出一段文本中所有的三元组,如句子《写生随笔》是冶金工业2006年出版的图书,作者是张来亮,抽取出三元组(写生随笔,作者,张来亮)(写生随笔,出版社,冶金工业)

原始数据集为:百度三元组抽取数据集。加工得到的微调数据集格式示例:

{
    "prompt": "请抽取出给定句子中的所有三元组。给定句子:《家乡的月亮》是宋雪莱演唱的一首歌曲,所属专辑是《久违的哥们》",
    "response": "[(家乡的月亮,歌手,宋雪莱),(家乡的月亮,所属专辑,久违的哥们)]"
}

可以直接使用sft_train.py脚本进行微调,脚本finetune_IE_task.ipynb里面包含详细的解码过程。训练数据集约17000条,学习率5e-5,训练epoch5。微调后其他任务的对话能力也没有消失。

信息抽取任务微调后的对话能力

微调效果: 将百度三元组抽取数据集公开的dev数据集作为测试集,对比传统方法pytorch_IE_model

模型 F1分数 精确率P 召回率R
ChatLM-Chinese-0.2B微调 0.74 0.75 0.73
ChatLM-Chinese-0.2B无预训练 0.51 0.53 0.49
传统深度学习方法 0.80 0.79 80.1

备注:ChatLM-Chinese-0.2B无预训练指直接初始化随机参数,开始训练,学习率1e-4,其他参数和微调一致。

3.9 C-Eval分数

模型本身没有使用较大的数据集训练,也没有针对回答选择题的指令做微调,C-Eval分数基本上是baseline水平,有需要的可以当个参考。C-Eval评测代码见:eval/c_eavl.ipynb

category correct question_count accuracy
Humanities 63 257 24.51%
Other 89 384 23.18%
STEM 89 430 20.70%
Social Science 72 275 26.18%

四、🎓引用

如果你觉得本项目对你有所帮助,欢迎引用。

@misc{Charent2023,
    author={Charent Chen},
    title={A small chinese chat language model with 0.2B parameters base on T5},
    year={2023},
    publisher = {GitHub},
    journal = {GitHub repository},
    howpublished = {\url{https://github.com/charent/ChatLM-mini-Chinese}},
}

五、🤔其他事项

本项目不承担开源模型和代码导致的数据安全、舆情风险或发生任何模型被误导、滥用、传播、不当利用而产生的风险和责任。

版本历史

v1.0

常见问题

相似工具推荐

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架

PaddleOCR

PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。

74.9k|★★★☆☆|今天
语言模型图像开发框架

OpenHands

OpenHands 是一个专注于 AI 驱动开发的开源平台,旨在让智能体(Agent)像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点,通过自动化流程显著提升开发速度。 无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员,还是需要快速原型验证的技术团队,都能从中受益。OpenHands 提供了灵活多样的使用方式:既可以通过命令行(CLI)或本地图形界面在个人电脑上轻松上手,体验类似 Devin 的流畅交互;也能利用其强大的 Python SDK 自定义智能体逻辑,甚至在云端大规模部署上千个智能体并行工作。 其核心技术亮点在于模块化的软件智能体 SDK,这不仅构成了平台的引擎,还支持高度可组合的开发模式。此外,OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩,证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能,支持与 Slack、Jira 等工具集成,并提供细粒度的权限管理,适合从个人开发者到大型企业的各类用户场景。

70.6k|★★★☆☆|今天
语言模型Agent开发框架