赞
踩
利用 llama-factory 框架,基于 chatglm3-6B 模型 做命名实体识别任务;
本次实验的数据集、lora微调脚本、部署、推理、预测、评估的等相关资料已全部上传到 modelscope 平台;
output
: 文件夹下,为 lora 微调的权重;
点击查看 https://modelscope.cn/datasets/jieshenai/llm_clue_ner2020/files
git clone https://github.com/hiyouga/LLaMA-Factory.git
# conda create -n llama_factory python=3.10
# conda activate llama_factory
cd LLaMA-Factory
pip install -e .[metrics]
在 LLaMA-Factory 文件夹下,创建一个脚本文件夹,用来存放本次实验的数据集和脚本文件
mkdir glm_ner_scripts
cd glm_ner_scripts
git clone https://www.modelscope.cn/datasets/jieshenai/llm_clue_ner2020.git
使用 git clone 下载数据集和脚本文件
实体识别的这些其他prompt 也不错, 也可以参考:利用大模型做NER实践(总结版)
该数据集参考的 DeepKE的数据格式;
DeepKE 的代码不够通用,本文使用 llama-factory 做命名实体识别和通用的数据集格式,更方便读者学习与使用;
数据里已发布在 modelscope 平台上;
数据集示例:
{
"instruction": "你是专门进行实体抽取的专家。请从input中抽取出符合schema定义的实体,不存在的实体类型返回空列表。请按照JSON字符串的格式回答。 schema: ['address', 'book', 'company', 'game', 'government', 'movie']",
"input": "浙商银行企业信贷部叶老桂博士则从另一个角度对五道门槛进行了解读。叶老桂认为,对目前>国内商业银行而言,",
"output": "{\"address\": [], \"book\": [], \"company\": [\"浙商银行\"], \"game\": [], \"government\": [], \"movie\": []}"
}
将 命名实体识别任务转换为 序列到序列的生成任务;
在 LLaMA-Factory/data/dataset_info.json
添加自定义数据集的配置信息;
llm_ner
: 数据集名;
file_name
: 文件名;
file_sha1
: 利用 sha1sum train.json
计算文件的sha1值;
"llm_ner2_train":{
"file_name": "../glm_ner_scripts/llm_clue_ner2020/llm_ner_dataset2/train.json",
"file_sha1": "8dffb2d6e55ef8916f95ff7ccbcfbfe9d6865d12"
},
bash train.sh
train.sh 脚本内容如下:
CUDA_VISIBLE_DEVICES=0 python ../../src/train_bash.py \ --stage sft \ --do_train \ --model_name_or_path ZhipuAI/chatglm3-6b \ --dataset_dir ../../data \ --dataset llm_ner2_train \ --template chatglm3 \ --finetuning_type lora \ --lora_target query_key_value \ --output_dir ./output/output_train \ --overwrite_cache \ --per_device_train_batch_size 4 \ --gradient_accumulation_steps 4 \ --lr_scheduler_type cosine \ --logging_steps 10 \ --save_strategy epoch \ --learning_rate 5e-5 \ --num_train_epochs 2.0 \ --plot_loss \ --fp16
dataset_dir
: llama-factory data/dataset_info.json 的文件夹路径;dataset
: 在 data/dataset_info.json 中,配置的自定义数据集的名字;在output文件夹中可找到训练过程中损失值图:
train.json 有18000条数据,跑了大概2个小时以上;
24G 显存的显卡恰好可以跑;
使用训练完成的 LoRA 权重进行推理;
bash lora_infer.sh
CUDA_VISIBLE_DEVICES=0 API_PORT=8000 python ../../src/api_demo.py \
--model_name_or_path ZhipuAI/chatglm3-6b \
--adapter_name_or_path output/output_train/checkpoint-2250 \
--template chatglm3 \
--finetuning_type lora
部署
训练完成的模型lora权重, 在 modelscope 的 output
文件夹下;
使用 req.ipynb
调用API 接口,与大模型进行交互测试;
点击查看 req.ipynb https://modelscope.cn/datasets/jieshenai/llm_clue_ner2020/file/view/master/req.ipynb?status=1
使用 llm_ner_dataset2/dev.json
而不用 test.json;因为 test.json 的 label 标注有问题,读者忽略 test.json 这个文件即可;
在req.ipynb
文本中,提供了如下功能:
有待改进:
笔者一次发送一个请求,让大模型处理,大模型一次只能处理一行文本;
如果大模型能一次处理一个batch的文本,就可大大提高推理速度,该功能笔者没有实现;
欢迎读者提供相关的见解声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/642435
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。