DeepKE-LLM链接:
https://github.com/zjunlp/DeepKE/tree/main/example/llm
OpenKG地址:
http://openkg.cn/tool/deepke
Gitee地址:
https://gitee.com/openkg/deepke/tree/main/example/llm
开放许可协议:Apache-2.0 license
贡献者:浙江大学(张宁豫、张锦添、王潇寒、桂鸿浩、姜一诺、陈华钧)
1、背景
DeepKE是一个开源可扩展的知识图谱抽取工具,可实现命名实体识别、关系抽取和属性抽取等抽取任务,并支持低资源少样本、文档篇章和多模态等复杂场景。在大模型时代,我们对DeepKE进行了全面升级并发布大模型版DeepKE-LLM(智析抽取大模型)。该版本基于大模型对数据进行智能解析以实现知识抽取,支持多种大模型、遵循指令和自定义知识类型、格式。
2、支持多种大模型
DeepKE-LLM目前支持多个大模型如Llama系列模型(Alpaca、Linly等)、ChatGLM等(MOSS、CPM-Bee、Falcon开发测试中将于近期支持),并通过自研的EasyInstruct支持调用OpenAI和Claude的系列模型,还进行了多实例并发请求(BatchPrompt)优化。此外,DeepKE-LLM提供了丰富的提示(Prompt)形式,含文本指令、代码提示(Code Prompt)等,以满足不同场景下知识抽取的需求。
DeepKE-LLM还提供了一个抽取大模型—智析。特别地,把LLaMA-13B与ZhiXi-13B-Diff合并需要约100GB的内存,显存没有要求(由于大模型合并策略导致的内存开销;为了方便使用,我们提供了fp16权重并将在未来优化合并方式);在模型推理阶段如果基于GPU使用ZhiXi-13B需要约26GB显存。我们将在KnowLM(https://github.com/zjunlp/KnowLM)项目中提供完整的大模型预训练、微调框架及多种大模型选择。
2.1 上手DeepKE-LLM
首先执行以下脚本安装python依赖包。
>> conda create -n deepke-llm python=3.9
>> conda activate deepke-llm
>> cd example/llm
>> pip install -r requirements.txt
大模型时代, DeepKE-LLM采用全新的环境依赖
注意!!是example/llm文件夹下的requirements.txt。
使用方式一:按照KnowLM项目指引完成环境配置、模型权重获取与恢复后执行以下脚本测试抽取效果:
>> python examples/generate_lora.py --load_8bit --base_model ./zhixi --lora_weights ./lora --run_ie_cases
使用方式二:按照DeepKE-LLM项目指引完成环境配置、模型权重获取与恢复后执行:
>> CUDA_VISIBLE_DEVICES="0" python inference_llama.py \
--base_model '智析大模型相对路径' \
--lora_weights '智析大模型Lora权重相对路径' \
--input_file '输入文件相对路径' \
--output_file '输出文件相对路径' \
--load_8bit \
下图对比了通过DeepKE-LLM使用智析大模型和ChatGPT的中英双语知识抽取效果。可以发现其取得了较为准确和完备的抽取效果。此外,我们也发现智析仍会出现一些抽取错误,我们会在未来继续增强底座模型的中英文语义理解能力并引入更多高质量的指令数据以提升模型性能。
2.2 上手大模型微调
DeepKE-LLM还支持多种大模型如Llama系列、ChatGLM等的微调。依照文档的说明,下载完毕数据和模型后,可通过下列脚本即可完成抽取大模型的指令微调训练(基于Llama-7B的Lora微调),我们还提供了多机多卡训练脚本供用户使用。
>> CUDA_VISIBLE_DEVICES="0" python finetune_llama.py \
--base_model '大模型相对路径' \
--train_path '训练数据相对路径' \
--output_dir '输出模型相对路径' \
--batch_size 128 \
--micro_train_batch_size 4 \
--num_epochs 3 \
--learning_rate 1e-4 \
--cutoff_len 512 \
--val_set_size 1000 \
--lora_r 8 \
--lora_alpha 16 \
--lora_dropout 0.05 \
--lora_target_modules '[q_proj,v_proj]' \
--train_on_inputs \
--group_by_length \
2.3 使用 GPT、Anthropic系列模型
通过pip install easyinstruct安装EasyInstruct包,根据LLMICL中文档配置好数据集和API Key等参数后,直接运行python run.py文件即可。
其他模型的使用烦请查阅DeepKE-LLM的README文档。
3、抽取大模型训练
智析大模型基于LLaMA(13B)进行了全量预训练,并基于知识图谱转换指令(KG2Instructions,如下图)技术产生的大量指令数据来提高语言模型对于人类抽取指令的理解。
为了在保留原来的代码能力和英语能力的前提下,来提升模型对于中文的理解能力,我们并没有对词表进行扩增,而是搜集了中文语料、英文语料和代码语料。其中中文语料来自于百度百科、悟道和中文维基百科;英文语料是从LLaMA原始的英文语料中进行采样,同时扩充了英文维基数据(原始论文中的英文维基数据的最新时间点是2022年8月,我们额外爬取了2022年9月到2023年2月,共六个月的数据)。对上面爬取到的数据集,我们使用了启发式的方法,剔除了数据集中有害的内容和重复的数据。最后我们使用5500K条中文样本、1500K条英文样本、900K条代码样本基于transformers的trainer搭配Deepspeed ZeRO3进行预训练。
接着,我们构建了针对抽取加强的指令微调数据集以提升模型的知识抽取能力,主要采取的是基于知识图谱转换指令(KG2Instructions)技术。我们基于维基百科和WikiData知识图谱,通过远程监督、Schema约束过滤等方法构建大量的指令数据,并通过随机采样人工指令模板的方式提升指令的泛化性。此外,我们还使用大量开源中英文学术抽取数据集构建指令微调数据集。
除了知识抽取能力之外,智析大模型也继承了基座模型的通用指令遵循能力如翻译、理解、代码、创作和推理等能力,详情烦请查阅KnowLM(https://github.com/zjunlp/KnowLM)的文档。
4、小结和展望
新版本的DeepKE-LLM支持使用多个大模型并提供了基于指令遵循的抽取能力。欢迎各位小伙伴提出意见建议(Issue)和支持(PR)。在今后我们还将继续开发和增强抽取大模型,支持更多的功能如大模型定制化知识增强和编辑、大小模型及多智能体(LLMs)协同、具身交互场景知识获取与协作等。
致谢:感谢多年来对DeepKE项目提供支持的同学(部分同学已毕业)、老师和朋友(排名不分先后):余海阳、陶联宽、徐欣、乔硕斐、毛盛宇、黎洲波、李磊、欧翌昕、王鹏、习泽坤、方润楠、陈想、毕祯、陈静、梁孝转、李欣荣、黄睿、翁晓龙、徐子文、张文、郑国轴、张珍茹、谭传奇、陈强、熊飞宇、黄非等。
OpenKG
OpenKG(中文开放知识图谱)旨在推动以中文为核心的知识图谱数据的开放、互联及众包,并促进知识图谱算法、工具及平台的开源开放。
点击阅读原文,进入 OpenKG 网站。