KnowLM知识抽取大模型

news2024/9/25 19:24:52

文章目录

  • KnowLM项目介绍
  • KnowLM项目的动机
    • ChatGPT存在的问题
  • 基于LLama的知识抽取的智析大模型
    • 数据集构建及训练过程
      • 预训练数据集构建
      • 预训练训练过程
      • 指令微调数据集构建
    • 指令微调训练过程
    • 开源的数据集及模型
    • 局限性
    • 信息抽取Prompt
  • 部署
    • 环境配置
    • 模型下载
    • 预训练模型使用
    • LoRA模型使用

KnowLM项目介绍

KnowLM 是由浙江大学NLP&KG团队的在读博士生研发并开源的项目,是一种将LLM与知识图谱结合的知识抽取大模型,主要包含的任务有命名实体识别(NER)、事件抽取(EE)、关系抽取(RE)
github 地址:https://github.com/zjunlp/KnowLM/blob/main/README_ZH.md
在这里插入图片描述
KnowLM 项目的主要工作:

  • 围绕知识和大模型,用构建的中英双语预训练语料对大模型如LLaMA进行全量预训练
  • 基于知识图谱转换指令技术对知识抽取任务,包括NER、RE、IE进行优化,可以使用人类指令来完成信息抽取任务
  • 用构建的中文指令数据集(约1400K条样本),使用LoRA微调,提高模型对于人类指令的理解
  • 开源了预训练模型的权重、指令微调的LoRA权重
  • 开源了全量预训练脚本(提供大型语料的转换、构建和加载)和LoRA指令微调脚本(支持多机多卡)

KnowLM项目的动机

ChatGPT存在的问题

目前,大模型如ChatGPT等虽然在自然语言领域已经取得了显著的成就,但在学习和理解知识方面仍然有一些挑战和问题,如:

LLM存在知识固化,知识更新困难,以及模型中潜在的错误和偏差等知识谬误的问题。

在这里插入图片描述
在这里插入图片描述

LLM对于特定任务的能力欠佳:如知识抽取、推理等;

在这里插入图片描述

从上面的示例可以看出,尽管ChatGPT可以对指令进行理解,并给出了合理的输出格式,但效果看起来并不好。

论文 LLMs for Knowledge Graph Construction and Reasoning:
Recent Capabilities and Future Opportunities 中对GPT-4、ChatGPT及在特定任务上的微调模型等在知识图谱构建和推理任务中的能力进行了评估,具体任务如关系抽取、事件检测、链接预测、问答等,评估效果如下所示:
在这里插入图片描述

基于LLama的知识抽取的智析大模型

数据集构建及训练过程

智析大模型的整个训练过程分为两个阶段:

第一阶段:全量预训练阶段。该阶段的目的是增强模型的中文能力和知识储备。
第二阶段:使用LoRA的指令微调阶段。该阶段让模型能够理解人类的指令并输出合适的内容。

数据集使用情况及训练过程如下图所示:
在这里插入图片描述

在这里插入图片描述

预训练数据集构建

为了在保留原来的代码能力和英语能力的前提下,来提升模型对于中文的理解能力,并没有对词表进行扩增,而是搜集了中文语料、英文语料和代码语料

中文数据集:中文语料来自于百度百科、悟道和中文维基百科

英文数据集:主要从LLaMA原始的英文语料中进行采样,不同的是维基数据,原始论文中的英文维基数据的最新时间点是2022年8月,团队成员额外爬取了2022年9月到2023年2月,总共六个月的数据

代码数据集:爬取了Github、Leetcode的代码数据,一部分用于预训练,另外一部分用于指令微调

对上面爬取到的数据集,团队成员使用了启发式的方法,剔除了数据集中有害的内容,此外,我们还剔除了重复的数据。

预训练训练过程

文档划分:通过贪心算法来对文档进行划分,贪心的目标是在保证每个样本都是完整的句子、分割的段数尽可能少的前提下,尽可能保证每个样本的长度尽可能长,设置的单个样本的最大长度是1024。
在这里插入图片描述

由于数据源的多样性,还设计了一套完整的数据预处理工具,可以对各个数据源进行处理然后合并。

由于数据量很大,如果直接将数据加载到内存,会导致硬件压力过大,于是参考了DeepSpeed-Megatron,使用mmap的方法对数据进行处理和加载,即将索引读入内存,需要的时候根据索引去硬盘查找。

最后,在5500K条中文样本、1500K条英文样本、900K条代码样本进行预训练。使用了 transformers 的 trainer 搭配 Deepspeed ZeRO3(实测使用ZeRO2在多机多卡场景的速度较慢),在3个Node(每个Node上为8张32GB V100卡)进行多机多卡训练。

Deepspeed ZeRO3解读:https://blog.csdn.net/v_JULY_v/article/details/132462452?spm=1001.2014.3001.5501

训练相关参数设置如下:

参数
micro batch size(单张卡的batch size大小)20
gradient accumulation(梯度累积)3
global batch size(一个step的、全局的batch size)20 * 3 * 24=1440
一个step耗时260s

指令微调数据集构建

考虑到要加入一些通用的能力(比如推理能力、代码能力等),以及还要额外加入信息抽取能力(包括NERREEE),使用下面数据集。

通用能力数据集(如推理能力、代码能力)
为了获得中文数据集,主要采用对英文数据集使用GPT4翻译的方式得到。英文数据集如比如alpaca数据集 CoT数据集代码数据集
具体方式如下:
对于CoT数据集代码数据集等英文数据集,直接将问题和答案通过GPT4翻译成英文;
对于通用数据集如alpaca数据集,将英文问题输入给模型,让模型输出中文回答。

信息抽取(IE)数据集
英文数据集:对于如CoNLL ACE CASIS等开源的IE英文数据集,直接构造相应的英文指令数据集;
中文数据集:除了使用了开源的数据集如DuEEPEOPLE DAILYDuIE等,还采用了我们自己构造的KG2Instruction,构造相应的中文指令数据集。

KG2Instruction(InstructIE)是一个在中文维基百科和维基数据上通过远程监督获得的中文信息抽取数据集,涵盖广泛的领域以满足真实抽取需求。

此外,还额外手动构建了中文的通用数据集,使用第二种策略将其翻译成英文。最后得到的数据集分布如下:

数据集类型条数
COT(中英文)202,333
通用数据集(中英文)105,216
代码数据集(中英文)44,688
英文指令抽取数据集537,429
中文指令抽取数据集486,768

KG2Instruction及其他指令微调数据集 流程示意图
在这里插入图片描述

指令微调训练过程

目前大多数的微调脚本都是基于alpaca-lora,因此此处不再赘述。详细的指令微调训练参数、训练脚本可以在./finetune/lora找到。

开源的数据集及模型

指令类型数量下载地址智析是否使用说明
KnowLM-CR (推理相关指令数据,中英双语)202,333谷歌云盘 HuggingFace
KnowLM-IE (抽取相关指令数据,中文)281,860谷歌云盘 HuggingFace由于采用远程监督,因此存在噪音
KnowLM-Tool (工具学习相关指令数据,英文)38,241谷歌云盘 HuggingFace将在下一个版本使用

数据说明:

  1. 信息抽取的其他数据源来源于CoNLL ACE casis DuEE People Daily DuIE等;
  2. KnowLM-Tool数据集来源于论文《Making Language Models Better Tool Learners with Execution Feedback》,github链接位于此处。
  3. KnowLM-IE数据集来源于论文《InstructIE: A Chinese Instruction-based Information Extraction Dataset》,github链接位于此处。
类别底座名称版本下载链接备注
基础模型LlaMA1KnowLM-13B-BaseV1.0HuggingFace底座模型
对话模型LlaMA1KnowLM-13B-ZhiXiV1.0HuggingFace抽取模型
对话模型LlaMA1KnowLM-13B-IEV1.0HuggingFace抽取模型

knowlm-13b-zhixiknowlm-13b-ie,是基于knowlm-13b-base使用lora训练得到的,knowlm-13b-zhixiknowlm-13b-ie是将训练得到的lora权重和knowlm-13b-base权重合并后的模型参数。

局限性

  • 指令微调并没有使用全量指令微调,而是使用了LoRA的方式进行微调;

  • 模型暂不支持多轮对话;

  • 尽管致力于模型输出的有用性、合理性、无害性,但是在一些场景下,仍然会不可避免的出现有毒的输出;

  • 预训练不充分,虽然准备了大量的预训练语料,但是没有完全跑完(没有足够的计算资源!);

信息抽取Prompt

对于信息抽取任务,比如命名实体识别(NER)、事件抽取(EE)、关系抽取(RE),提供了一些prompt便于使用,可以参考此处。当然你也可以尝试使用自己的Prompt。

relation_template =  {
    0:'已知候选的关系列表:{s_schema},请你根据关系列表,从以下输入中抽取出可能存在的头实体与尾实体,并给出对应的关系三元组。请按照{s_format}的格式回答。',
    1:'我将给你个输入,请根据关系列表:{s_schema},从输入中抽取出可能包含的关系三元组,并以{s_format}的形式回答。',
    2:'我希望你根据关系列表从给定的输入中抽取可能的关系三元组,并以{s_format}的格式回答,关系列表={s_schema}。',
    3:'给定的关系列表是:{s_schema}\n根据关系列表抽取关系三元组,在这个句子中可能包含哪些关系三元组?请以{s_format}的格式回答。',
}

relation_int_out_format = {
    0:['"(头实体,关系,尾实体)"', relation_convert_target0],
    2:['"关系:头实体,尾实体\n"', relation_convert_target2],
    3:["JSON字符串[{'head':'', 'relation':'', 'tail':''}, ]", relation_convert_target3],
}


en_relation_template = {
    0: 'Identify the head entities (subjects) and tail entities (objects) in the following text and provide the corresponding relation triples from relation list {s_schema}. Please provide your answer as a list of relation triples in the form of {s_format}.',
    1: 'Identify the subjects and objects in the text that are related, and provide the corresponding relation triples from relation {s_schema} in the format of {s_format}.',
    2: 'From the given text, extract the possible head entities (subjects) and tail entities (objects) and give the corresponding relation triples. The relations are {s_schema}. Please format your answer as a list of relation triples in the form of {s_format}.',
    3: 'Your task is to identify the head entities (subjects) and tail entities (objects) in the following text and extract the corresponding relation triples, the possible relation list is {s_schema}. Your answer should include relation triples, with each triple formatted as {s_format}.',
    4: 'Given the text, extract the possible head entities (subjects) and tail entities (objects) and provide the corresponding relation triples, the possible relation list is {s_schema}. Format your answer as a list of relation triples in the form of {s_format}.',
    5: 'Your goal is to identify the head entities (subjects) and tail entities (objects) in the text and give the corresponding relation triples. The given relation list is {s_schema}. Please answer with a list of relation triples in the form of {s_format}.',
    6: 'Please extract the possible head entities (subjects) and tail entities (objects) from the text and provide the corresponding relation triples from candidate relation list {s_schema}. Your answer should be in the form of a list of relation triples: {s_format}.',
    7: 'Your task is to extract the possible head entities (subjects) and tail entities (objects) in the given text and give the corresponding relation triples. The relations are {s_schema}. Please answer using the format of a list of relation triples: {s_format}.',
    8: 'Given the {s_schema}, identify the head entities (subjects) and tail entities (objects) and provide the corresponding relation triples. Your answer should consist of relation triples, with each triple formatted as {s_format}',
    9: 'Please find the possible head entities (subjects) and tail entities (objects) in the text based on the relation list {s_schema} and give the corresponding relation triples. Please format your answer as a list of relation triples in the form of {s_format}.',
    10: 'Given relation list {s_schema}, extract the possible subjects and objects from the text and give the corresponding relation triples in the format of {s_format}.',
    11: 'Extract the entities involved in the relationship described in the text and provide the corresponding triples in the format of {s_format}, the possible relation list is {s_schema}.',
    12: 'Given relation list {s_schema}, provide relation triples for the entities and their relationship in the text, using the format of {s_format}.',
    13: 'Extract the entities and their corresponding relationships from the given relationships are {s_schema} and provide the relation triples in the format of {s_format}.',
}

en_relation_int_out_format = {
    0: "{'head':'', 'relation':'', 'tail':''}",
    1: "(Subject, Relation, Object)",
    2: "[Subject, Relation, Object]",
    3: "{head, relation, tail}",
    4: "<head, relation, tail>",
}

部署

环境配置

# 下载 KnowLM 仓库代码
git clone https://github.com/zjunlp/KnowLM.git
# 进入KnowLM目录
cd KnowLM
# 激活conda环境
source activate
# 新建一个conda环境
conda create -n knowlm python=3.9 -y
# 进入knowlm的conda环境
conda activate knowlm
# 安装GPU版本的torch
pip install torch==1.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
# 安装其他相关依赖
pip install -r requirements.txt

模型下载

由于huggingface模型下载不稳定,故可以使用 https://hf-mirror.com 来下载模型,相关命令如下:

pip install -U huggingface_hub

export HF_ENDPOINT=https://hf-mirror.com

export HF_HOME='~/autodl-tmp/.cache/huggingface/hub'
# 下载 knowlm-13b-base
huggingface-cli download --resume-download --local-dir-use-symlinks False zjunlp/knowlm-13b-base-v1.0 --local-dir knowlm-13b-base-v1.0
# 下载 knowlm-13b-zhixi
huggingface-cli download --resume-download --local-dir-use-symlinks False zjunlp/knowlm-13b-zhixi --local-dir knowlm-13b-zhixi

预训练模型使用

python examples/generate_finetune_web.py --base_model /root/autodl-tmp/knowlm-13b-base-v1.0

LoRA模型使用

python examples/generate_lora_web.py --base_model /root/autodl-tmp/knowlm-13b-zhixi

效果如下:
在这里插入图片描述
从给定的文本中提取可能的实体和实体类型,可选的实体类型为[‘地点’,‘人名’],以(实体,实体类型)的格式回答。

John昨天在纽约的咖啡馆见到了他的好朋友Merry,他们一起喝咖啡聊天,计划着下周去加利福尼亚(California)旅行,他们决定一起租车并预订酒店,他们先计划在下周一去圣弗朗西斯科参观旧金山大桥,下周三去洛杉矶拜访Merry的父亲威廉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1334606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EDSR训练及测试教程

EDSR训练及测试教程 超分重建经典算法EDSR开源代码使用教程。 论文名称:Enhanced Deep Residual Networks for Single Image Super-Resolution,CVPR2017。 训练自己的数据集 由于EDSR开源代码只针对DIV2K数据集,在数据集加载时很多代码已经固定,因此在这里使用固定的文…

Web Components入门不完全指北

目前流行的各类前端框架&#xff0c;不管是react, angular还是vue&#xff0c;都有一个共同点&#xff0c;那就是支持组件化开发&#xff0c;但事实上随着浏览器的发展&#xff0c;现在浏览器也原生支持组件式开发&#xff0c;本文将通过介绍Web Components 的三个主要概念&…

RPC 实战与原理

文章目录 什么是 RPC&#xff1f;RPC 有什么作用&#xff1f;RPC 步骤为什么需要序列化&#xff1f;零拷贝什么是零拷贝&#xff1f;为什么需要零拷贝&#xff1f;如何实现零拷贝&#xff1f;Netty 的零拷贝有何不同&#xff1f; 动态代理实现HTTP/2 特性为什么需要服务发现&am…

Linux上iPortal 配置80端口的http

作者&#xff1a;yx 文章目录 前言方法一、配置使用外置ES1、关闭启用 iPortal 内置的 ES2、修改80端口3、启动外置ES4、启动iPortal5、结果验证 方法二、更改 Linux 系统配置1. 安装 Authbind2. 启用端口的读取和执行权限3. 在 Apache Tomcat 上启用 Authbind4. 重启iPortal5.…

向华为学习:IPD运作-PDP产品开发流程-计划阶段的关键活动

昨天&#xff0c;华研荟为您分享了IPD体系中产品开发流程第一个阶段&#xff1a;概念阶段的主要内容和关键活动。严格来说&#xff0c;IPD体系中的产品开发过程叫做PDP流程&#xff0c;不过很多时候直接叫做IPD流程&#xff0c;就指的是产品开发这个流程&#xff0c;不包括MM市…

软件压力测试究竟是如何工作的?详细分析步骤!

软件测试过程中的步骤之一是压力测试&#xff0c;所谓压力测试&#xff0c;就是让被测系统在接入压力下稳定运行。比如让10000个用户同时访问一个网站&#xff0c;看看网站是否崩溃或者变慢&#xff0c;这就是压力测试。那么压力测试究竟是如何工作的呢?本文将详细分析压力测试…

4.2 媒资管理模块 - 项目搭建、minio文件系统

文章目录 一、搭建媒资服务工程1.1 media-api 工程1.1.1 bootstrap.yaml1.1.2 Maven1.1.3 Nacos 1.2 media-service 工程1.2.1 bootstrap.yaml1.2.2 Maven1.2.3 Nacos1.2.4 分页插件 1.3 media-model 工程1.3.1 QueryMediaParamsDto1.3.2 MediaFiles1.3.3 MediaProcess1.3.4 Me…

MySql的mvcc原理

目录 一、什么是mvcc? 二、什么是当前读,快照读? 当前读 快照读 三、mvcc实现原理 版本链 undo日志 Undo log 的用途 Read View(读视图) Read View几个属性 五、RR、RC级别下生成时机 一、什么是mvcc? mvcc全称Multi-Version Concurrency Control&#xff0c;即…

教你如何开发并运营小程序商城或APP商城!

随着线下租金、仓储等成本的攀升&#xff0c;商家们面临着越来越大的压力。为了降低成本、提高效率&#xff0c;越来越多的商家开始转型做电商&#xff0c;甚至直接开发自己的电商商城小程序或APP。那么&#xff0c;商城小程序或APP该如何开发呢&#xff1f;又该如何运营呢&…

线上展览馆可以展示哪些内容,线上展览馆如何搭建

引言&#xff1a; 随着互联网的普及和科技的发展&#xff0c;线上展览馆逐渐成为一种新兴的展示平台&#xff0c;吸引了众多企业和商家入驻。那么线上展览馆可以展示哪些内容&#xff0c;如何搭建一个独具特色的线上展览馆&#xff0c;助力您的品牌脱颖而出&#xff1f; 一、线…

深入了解 Git 分支合并冲突解决步骤

目录 前言1 检测合并冲突2 手动解决冲突2.1 打开冲突文件2.2 手动解决冲突 3 标记解决后的文件4 完成合并5 提交合并后的内容6 验证合并结语 前言 在协作开发中&#xff0c;当不同分支对同一文件的相同位置进行修改时&#xff0c;往往会出现合并冲突。这些冲突需要开发者手动介…

2024最经典的软件测试面试题【含答案】

说起软件测试近几年的发展&#xff0c;其实已悄无声息地发生了巨大的变化。前几年随着互联网行业的迅猛发展&#xff0c;软件测试人才稀缺&#xff0c;低门槛高薪资促使大批毕业生和转行人员一窝蜂地涌入。而现在&#xff0c;软件测试发展太快&#xff0c;纵观各大招聘网站&…

【网安 | 网络协议】ARP协议(地址解析协议)

前言 在使用nmap时可以使用-PR指令&#xff0c;通过发送ARP请求包进行主机存活探测。 那么这一过程的原理是什么呢&#xff1f; 在了解什么是ARP协议后&#xff0c;问题就迎刃而解了。 概念 地址解析协议&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xf…

SpringCloudAlibaba Seata在Openfeign跨节点环境出现全局事务Xid失效原因底层探究

原创/朱季谦 曾经在SpringCloudAlibaba的Seata分布式事务搭建过程中&#xff0c;跨节点通过openfeign调用不同服务时&#xff0c;发现全局事务XID在当前节点也就是TM处&#xff0c;是正常能通过RootContext.getXID()获取到分布式全局事务XID的&#xff0c;但在下游节点就出现获…

猫头虎分享2023年12月17日博客之星候选--领域赛道博主文章数据

猫头虎分享2023年12月17日博客之星候选–领域赛道博主文章数据 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开…

C# float/double 减 float/double 等 (X.xxxxxxxxxxxxxE-07)(黑盒测试)

问题 因为没有深究原理&#xff0c;所有只进行了“黑盒测试” 黑盒测试结论&#xff1a; 问题操作结论float/double运算进过一系列的运算后大概率 &#xff01; 0.0 &#xff0c; 而是等于0.00000000000xxxx等于X.xxxxxxxx一串数字的时候不影响下一步继续使用当需要显示fl…

HTML5之 夜景放烟花

参考网址 https://blog.csdn.net/Gou_Hailong/article/details/122269931 https://blog.csdn.net/u013343616/article/details/122233674 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transi…

js原生深拷贝方法:structuredClone() 告别自写时代

自2022年3月起&#xff0c;该功能适用于最新的设备和浏览器版本。此功能可能无法在较旧的设备或浏览器中工作。 例子 // Create an object with a value and a circular reference to itself. const original { name: "MDN" }; original.itself original;// Clone…

尺寸公差分析与尺寸链计算软件-DTAS3D到底能给我们带来哪些价值?

【技能】DTAS3D能给我们带来哪些价值&#xff1f; DTAS3D是一款高度集成的公差分析软件&#xff0c;旨在为产品开发团队提供准确的建议&#xff0c;从而放心地将设计发布给制造部门。下面是DTAS3D的关键价值和应用: 1.与三维CAD无缝集成: DTAS3D与三维CAD软件 (CATIA、NX、Cr…

IntelliJ IDEA 2023.3 安装教程

引言 IntelliJ IDEA&#xff0c;通常简称为 IDEA&#xff0c;是由 JetBrains 开发的一款强大的集成开发环境&#xff0c;专为提升开发者的生产力而设计。它支持多种编程语言&#xff0c;包括 Java、Kotlin、Scala 和其他 JVM 语言&#xff0c;同时也为前端开发和移动应用开发提…