GLM4是清华智谱团队最近开源的大语言模型。
以GLM4作为基座大模型,通过指令微调的方式做高精度的命名实体识别(NER),是学习入门LLM微调、建立大模型认知的非常好的任务。

显存要求相对较高,需要40GB左右。
在本文中,我们会使用 GLM4-9b-Chat 模型在 中文NER 数据集上做指令微调训练,同时使用SwanLab监控训练过程、评估模型效果。
- 代码:完整代码直接看本文第6节 或 Github
- 实验日志过程:GLM4-NER-Fintune – SwanLab
- 模型:Modelscope
- 数据集:chinese_ner_sft
- SwanLab:https://swanlab.cn
大模型指令微调(Instruction Tuning)是一种针对大型预训练语言模型的微调技术,其核心目的是增强模型理解和执行特定指令的能力,使模型能够根据用户提供的自然语言指令准确、恰当地生成相应的输出或执行相关任务。
指令微调特别关注于提升模型在遵循指令方面的一致性和准确性,从而拓宽模型在各种应用场景中的泛化能力和实用性。
在实际应用中,我的理解是,指令微调更多把LLM看作一个更智能、更强大的传统NLP模型(比如Bert),来实现更高精度的NLP任务。所以这类任务的应用场景覆盖了以往NLP模型的场景,甚至很多团队拿它来标注互联网数据。
命名实体识别 (NER) 是一种NLP技术,主要用于识别和分类文本中提到的重要信息(关键词)。这些实体可以是人名、地名、机构名、日期、时间、货币值等等。 NER 的目标是将文本中的非结构化信息转换为结构化信息,以便计算机能够更容易地理解和处理。

NER 也是一项非常实用的技术,包括在互联网数据标注、搜索引擎、推荐系统、知识图谱、医疗保健等诸多领域有广泛应用。
本案例基于,请在您的计算机上安装好Python,并且有一张英伟达显卡(显存要求并不高,大概10GB左右就可以跑)。
我们需要安装以下这几个Python库,在这之前,请确保你的环境内已安装好了pytorch以及CUDA:
一键安装命令:
本案例测试于modelscope1.14.0、transformers4.41.2、datasets2.18.0、peft0.11.1、accelerate0.30.1、swanlab0.3.11、tiktoken==0.7.0
本案例使用的是HuggingFace上的chinese_ner_sft数据集,该数据集主要被用于训练命名实体识别模型。
智谱 AI GLM 教程
chinese_ner_sft由不同来源、不同类型的几十万条数据组成,应该是我见过收录最齐全的中文NER数据集。
这次训练我们不需要用到它的全部数据,只取其中的CCFBDCI数据集(中文命名实体识别算法鲁棒性评测数据集)进行训练,该数据集包含LOC(地点)、GPE(地理)、ORG(组织)和PER(人名)四种实体类型标注,每条数据的例子如下:
其中是输入的文本,是文本抽取出的实体。我们的目标是希望微调后的大模型能够根据由组成的提示词,预测出一个json格式的实体信息:
现在我们将数据集下载到本地目录。下载方式是前往chinese_ner_sft – huggingface下载到项目根目录下即可:

这里我们使用modelscope下载GLM4-9b-Chat模型(modelscope在国内,所以直接用下面的代码自动下载即可,不用担心速度和稳定性问题),然后把它加载到Transformers中进行训练:
我们使用SwanLab来监控整个训练过程,并评估最终的模型效果。
这里直接使用SwanLab和Transformers的集成来实现:
如果你是第一次使用SwanLab,那么还需要去https://swanlab.cn上注册一个账号,在用户设置页面复制你的API Key,然后在训练开始时粘贴进去即可:

开始训练时的目录结构:
train.py:
看到下面的进度条即代表训练开始:

在SwanLab上查看最终的训练结果:
可以看到在2个epoch之后,微调后的GLM4的loss降低到了不错的水平——当然对于大模型来说,真正的效果评估还得看主观效果。

可以看到在一些测试样例上,微调后的GLM4能够给出准确的NER结果:

至此,你已经完成了qwen2指令微调的训练!
输出结果为:
- 代码:完整代码直接看本文第6节 或 Github
- 实验日志过程:GLM4-NER-Fintune – SwanLab
- 模型:Modelscope
- 数据集:chinese_ner_sft
- SwanLab:https://swanlab.cn
发布者:Ai探索者,转载请注明出处:https://javaforall.net/264971.html原文链接:https://javaforall.net
