知识图谱与 LLM:微调与检索增强生成

Midjourney 的知识图谱聊天机器人的想法。

大型语言模型 (LLM) 的第一波炒作来自 ChatGPT 和类似的基于网络的聊天机器人,这些模型在理解和生成文本方面非常出色,这让人们(包括我自己)感到震惊。

我们中的许多人登录并测试了它写俳句、动机信或电子邮件回复的能力。很快我们就发现,法学硕士不仅擅长生成创造性背景,还擅长解决典型的自然语言处理和其他任务。

LLM 炒作开始后不久,人们就开始考虑将其集成到他们的应用程序中。不幸的是,如果您只是围绕 LLM API 开发包装器,那么您的应用程序很可能会失败,因为它没有提供额外的价值。

LLM 的一个主要问题是所谓的知识截止。知识截止术语表示 LLM不知道他们接受培训后发生的任何事件。例如,如果你向 ChatGPT 询问 2023 年发生的某件事,你会得到以下回应。

ChatGPT 的知识截止日期。图片由作者提供。

如果您向法学硕士询问其训练数据集中不存在的任何事件,也会出现同样的问题。虽然知识截止日期与任何公开可用的信息相关,但法学硕士并不了解在知识截止日期之前可能存在的私人或机密信息

例如,大多数公司都有一些他们不会公开分享的机密信息,但可能对拥有能够回答这些问题的定制法学硕士感兴趣。另一方面,法学硕士知道的许多公开信息可能已经过时了。

因此,更新和扩展法学硕士学位的知识在今天非常重要。

LLM 的另一个问题是,它们被训练来生成听起来很逼真的文本,但这些文本可能并不准确。有些无效信息比其他信息更难发现。尤其是对于缺失数据,LLM 很可能会编造一个听起来令人信服但实际上错误的答案,而不是承认它在训练中缺乏基本事实。

例如,研究或法庭引证可能更容易验证。几周前,一名律师因盲目相信 ChatGPT 提供的法庭引证而陷入麻烦

我还注意到,LLM 会持续提供有关任何类型的 ID(例如 WikiData 或其他识别号码)的自信但虚假的信息。

ChatGPT 的幻觉。图片由作者提供。

由于 ChatGPT 的响应是肯定的,您可能希望它是准确的。但是,给定的 WikiData id 指向英格兰的一个农场。因此,您必须非常小心,不要盲目相信 LLM 产生的一切。验证答案或从 LLM 产生更准确的结果是另一个需要解决的大问题。

当然,LLM 还存在其他问题,例如偏见、即时注入等。不过,我们不会在这里讨论这些问题。相反,在这篇博文中,我们将介绍并重点介绍微调和检索增强型 LLM 的概念,并评估它们的优缺点。

法学硕士 (LLM) 的监督微调

解释 LLM 的培训方式超出了本博文的范围。相反,您可以观看Andrej Karpathy 的这段精彩视频,了解 LLM 的最新情况并了解 LLM 培训的不同阶段。

通过微调 LLM,我们参考监督训练阶段,在此期间您提供额外的问答对以优化大型语言模型 (LLM) 的性能。

此外,我们还确定了两种用于微调 LLM 的不同用例。

一个用例是微调模型以更新和扩展其内部知识
相反,另一个用例则专注于针对特定任务(如文本摘要或将自然语言转换为数据库查询)微调模型。

首先,我们将讨论第一个用例,我们使用微调技术来更新和扩展 LLM 的内部知识。

监督微调流程。图片由作者提供。图标来自Flaticons。

通常,你会想要避免对 LLM 进行预训练,因为成本可能高达数十万甚至数百万美元。基础 LLM 是使用庞大的文本语料库进行预训练的,通常有数十亿甚至数万亿个标记。

虽然LLM 的参数数量至关重要,但它并不是选择基础 LLM 时应该考虑的唯一参数。除了许可证之外,您还应该考虑预训练数据集和基础 LLM 的偏差毒性。

选择基础 LLM 后,您可以开始下一步微调。由于有 LoRa和QLoRA等可用技术,微调步骤的计算成本相对较低。

使用 LoRA 进行高效稳定扩散微调

但是,构建训练数据集更加复杂,而且成本高昂。如果你负担不起专门的注释团队,那么似乎趋势是使用LLM 构建训练数据集来微调你想要的 LLM(这真的很复杂)。

例如,斯坦福的羊驼训练数据集是使用 OpenAI 的 LLM 创建的,生成 5.2 万条训练指令的成本约为 500 美元,相对便宜。

我们推出了 Alpaca 7B,这是基于 52K 指令遵循演示对 LLaMA 7B 模型进行微调的模型。在我们的……

另一方面,Vicuna 模型通过使用用户在 ShareGPT.com 上发布的 ChatGPT 对话进行了微调。

Vicuna:一款开源聊天机器人,其 ChatGPT 质量达到 GPT-4 的 90%* | LMSYS Org

H2O还有一个相对较新的项目,名为 WizardLM,旨在将文档转换为可用于微调 LLM 的问答对。

我们还没有发现任何最近的文章描述如何使用知识图来准备可以用于微调 LLM 的良好问答对。

这是我们计划在 NaLLM 项目中探索的一个领域。我们有一些利用 LLM 从知识图谱上下文构建问答对的想法。

然而,目前仍有许多未知数。
例如,你能否对同一个问题提供两个不同的答案,然后 LLM 以某种方式将它们合并到其内部知识库中?

另一个考虑因素是,如果不考虑其关系,知识图谱中的某些信息就不相关。因此,我们是否必须预先定义相关查询,或者是否有更通用的方法来实现它?或者我们可以使用表示主语-谓语-宾语表达式的节点-关系-节点模式来生成相关对?

这些是我们打算在即将发布的博客文章中回答的一些问题。

想象一下,你以某种方式设法根据知识图谱中存储的信息生成包含问答对的训练数据集。因此,LLM 现在包含更新的知识。

然而,对模型进行微调并不能解决知识截止问题,因为它只是将知识截止推迟到以后的日期。

因此,我们建议仅针对缓慢变化或更新的数据通过微调技术更新 LLM 的内部知识。例如,您可以使用微调模型来提供旅游信息。

但是,当您想在回复中包含特殊的时间相关(实时)或个性化促销时,您就会遇到麻烦。同样,微调模型对于分析工作流程来说并不理想,因为在分析工作流程中,您会询问公司在过去一周内获得了多少新客户。

目前,微调方法可以帮助减轻幻觉,但不能完全消除幻觉。一个问题是,LLM在提供答案时不会引用其来源。因此,你不知道答案是来自预训练数据、微调数据集还是由 LLM 编造的。此外,如果你使用 LLM 创建微调数据集,可能还有另一个可能的虚假来源。

最后,经过微调的模型无法根据用户提出的问题自动提供不同的答案。同样,也没有访问限制的概念,这意味着与 LLM 交互的任何人都可以访问其所有信息。

检索增强生成

大型语言模型在自然语言应用中表现非常出色,例如

  • 文本摘要,
  • 提取相关信息,
  • 实体消歧
  • 从一种语言翻译成另一种语言,甚至
  • 将自然语言转换为数据库查询或脚本代码。

此外,以前的 NLP 模型通常是针对特定领域和任务的,这意味着您很可能需要根据您的用例和领域训练自定义自然语言模型。但是,得益于 LLM 的泛化能力,可以应用单个模型来解决各种任务集合。

我们观察到使用检索增强型 LLM 的趋势相当明显,即不再使用 LLM 来访问其内部知识,而是使用 LLM作为自然语言界面您的公司或私人信息。

检索增强生成。图片由作者提供。图标来自Flaticons。

检索增强方法使用 LLM 根据从数据源额外提供的相关文档生成答案。

因此,你不需要依赖 LLM 的内部知识来回答问题。相反,LLM 只用于从你传入的文档中提取相关信息并进行总结。

ChatGPT 插件

例如,ChatGPT 插件可以被视为 LLM 应用程序的检索增强方法。启用浏览插件的 ChatGPT 界面允许 LLM 搜索互联网以访问最新信息并使用它来构建最终答案。

带有浏览插件的 ChatGPT。图片由作者提供。

在这个例子中,ChatGPT 能够回答谁在 2023 年获得了奥斯卡各个奖项。但请记住,ChatGPT 的知识截止日期是 2021 年,因此它无法从其内部知识中知道谁获得了 2023 年奥斯卡奖。因此,它通过浏览插件访问外部信息,这使它能够使用最新信息回答问题。这些插件在 OpenAI 平台内部提供了一种集成的增强机制。

如果您一直关注 LLM 领域,您可能听说过LangChain 库。

LangChain 入门:构建 LLM 驱动应用程序的初学者指南

LangChain 库可用于让 LLM 访问来自各种来源(如 Google 搜索、矢量数据库或知识图谱)的实时信息。例如,LangChain 添加了Cypher Search 链,它将自然语言问题转换为 Cypher 语句,使用它从 Neo4j 数据库中检索信息,并根据提供的信息构建最终答案。

使用 LangChain 库,您可以方便地生成 Cypher 查询,从而高效检索……

通过 Cypher 搜索链,LLM 不仅可用于构建最终答案,还可将自然语言问题转化为 Cypher 查询。

LangChain 中的 Cypher 搜索。图片由作者提供。

另一个用于检索增强型 LLM 工作流的流行库是LlamaIndex (GPT Index)。LlamaIndex 是一个全面的数据框架,旨在通过使大型语言模型 (LLM) 能够利用私有或自定义数据来提高其性能。

LlamaIndex 关于 TWIML AI:摘要(使用 LlamaIndex)

首先,LlamaIndex 提供数据连接器,方便接收各种数据源和格式的数据,涵盖从 API、PDF、文档到 SQL 或图形数据的所有内容。

此功能可轻松将现有数据集成到 LLM 中。其次,它提供了使用索引和图表构建所摄取数据的有效机制,确保数据经过适当排列以用于 LLM。此外,它还包括一个高级检索和查询界面,使用户能够输入 LLM 提示并接收上下文检索、知识增强的输出。

ChatGPT Plugins 和 LangChain 等检索增强型 LLM 应用程序的理念是避免仅依赖内部 LLM 知识来生成答案。相反,LLM 用于解决诸如从自然语言构建数据库查询以及根据外部提供的信息或利用插件/代理进行检索来构建答案等任务。

检索增强方法比微调方法具有一些明显的优势:

  • 答案可以引用其信息来源,这允许您验证信息并根据需要更改或更新基础信息
  • 幻觉不太可能发生,因为你不依赖法学硕士的内部知识来回答问题,而只使用相关文件中提供的信息
  • 当你将问题从 LLM 维护转变为数据库维护、查询和上下文构建问题时,更改、更新和维护 LLM 使用的底层信息会变得更加容易
  • 答案可以根据用户上下文或其访问权限进行个性化

另一方面,使用检索增强方法时应考虑以下限制:

  • 答案与智能搜索工具一样好
  • 应用程序需要访问您的特定知识库,可以是数据库或其他数据存储
  • 完全忽略语言模型的内部知识会限制可以回答的问题数量
  • 有时 LLM 不遵循指示,因此如果在上下文中找不到相关的答案数据,则可能会忽略上下文或出现幻觉。

概括

这篇博文深入探讨了大型语言模型 (LLM) 的局限性,例如

  • 知识断层,
  • 幻觉,以及
  • 缺乏用户定制。

为了克服这些问题,我们探索了两个概念,即微调和检索增强 LLM 的使用。

微调 LLM涉及监督训练阶段,在此阶段提供问答对以优化 LLM 的性能。这可用于更新和扩展 LLM 的内部知识或针对特定任务对其进行微调。但是,微调无法解决知识截止问题,因为它只是将截止时间推迟到以后。它也不能完全消除幻觉。因此,我们建议对允许某些幻觉的缓慢变化数据集使用微调方法。由于微调 LLM 相对较新,我们渴望了解有关微调方法和最佳实践的更多信息。

克服 LLM 局限性的第二种方法是所谓的检索增强生成,其中 LLM 充当访问外部信息的自然语言接口,从而不仅仅依赖其内部知识来产生答案。检索增强方法的优点包括来源引用、可忽略的幻觉、易于更改和更新信息以及个性化。
然而,它严重依赖智能搜索工具来检索相关信息,并且需要访问用户的知识库。此外,它只有在拥有解决问题所需的信息时才能回答查询。

项目开源地址

NaLLM项目开源地址:GitHub - neo4j/NaLLM: Repository for the NaLLM project

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

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

相关文章

微信视频号的视频怎么下载到本地?快速教你下载视频号视频

天来说说市面上常见的微信视频号视频下载工具,教大家快速下载视频号视频! 方法一:缓存方法 该方法来源早期视频技术,因早期无法将大量视频通过网络存储,故而会有缓存视频文件到手机,其目的为了提高用户体验…

尚硅谷Vue3入门到实战,最新版vue3+TypeScript前端开发教程

Vue3 编码规范 创建vue3工程 基于vite创建 快速上手 | Vue.js (vuejs.org) npm create vuelatest 在nodejs环境下运行进行创建 按提示进行创建 用vscode打开项目 安装依赖 源文件有src 内有main.ts App.vue 简单分析 编写src vue2语法在三中适用 vue2中的date metho…

【深度学习入门篇 ⑤ 】PyTorch网络模型创建

【🍊易编橙:一个帮助编程小伙伴少走弯路的终身成长社群🍊】 大家好,我是小森( ﹡ˆoˆ﹡ ) ! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

OSPF.综合实验

1、首先将各个网段基于172.16.0.0 16 进行划分 1.1、划分为4个大区域 172.16.0.0 18 172.16.64.0 18 172.16.128.0 18 172.16.192.0 18 四个网段 划分R4 划分area2 划分area3 划分area1 2、进行IP配置 如图使用配置指令进行配置 ip address x.x.x.x /x 并且将缺省路由…

Sortable.js板块拖拽示例

图例 代码在图片后面 点赞❤️关注&#x1f64f;收藏⭐️ 页面加载后显示 拖拽效果 源代码 由于js库使用外链&#xff0c;所以会加载一会儿 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name&qu…

C语言 ——— 实用调试技巧(Visual Studio)

目录 Debug 和 Release 的区别 F10 --- 逐过程调试 & F11 --- 逐语句调试 F9 --- 新建/切换断点 & F5 --- 开始调试 shift F5 & ctrl F5 Debug 和 Release 的区别 Debug&#xff1a;通常为调试版本&#xff0c;它包含调试信息&#xff0c;并且不作任何优化…

一 GD32 MCU 开发环境搭建

GD32 系列为通用型 MCU &#xff0c;所以开发环境也可以使用通用型的 IDE &#xff0c;目前使用较多的是 KEIL、 IAR 、 GCC 和 Embedded Builder &#xff0c;客户可以根据个人喜好来选择相应的开发环境。 目录 1、使用 Keil 开发 GD32 目前市面通用的MDK for ARM版本有Kei…

企业网三层架构

企业网三层架构&#xff1a;是一种层次化模型设计&#xff0c;旨在将复杂的网络设计分成三个层次&#xff0c;每个层次都着重于某些特定的功能&#xff0c;以提高效率和稳定性。 企业网三层架构层次&#xff1a; 接入层&#xff1a;使终端设备接入到网络中来&#xff0c;提供…

Android12 MultiMedia框架之GenericSource extractor

前面两节学习到了各种Source的创建和extractor service的启动&#xff0c;本节将以本地播放为例记录下GenericSource是如何创建一个extractor的。extractor是在PrepareAsync()方法中被创建出来的&#xff0c;为了不过多赘述&#xff0c;我们直接从GenericSource的onPrepareAsyn…

13_Shell系统函数

13_Shell系统函数和自定义函数 一、系统函数 basename 获取文件名 #!/bin/bash#basename 相对路径文件名 basename ./1.sh#basename 绝对路径文件名 basename /tmp/1.sh#basename 去除文件后缀名 basename /tmp/1.sh .shdirname 获取文件所在目录名 #!/bin/bash#dirname 相对路…

Redis持久化RDB,AOF

目 录 CONFIG动态修改配置 慢查询 持久化 在上一篇主要对redis的了解入门&#xff0c;安装&#xff0c;以及基础配置&#xff0c;多实例的实现&#xff1a;redis的安装看我上一篇&#xff1a; Redis安装部署与使用,多实例 redis是挡在MySQL前面的&#xff0c;运行在内存…

产品经理-研发流程-敏捷开发-迭代-需求评审及产品规划(15)

敏捷开发是以用户的需求进化为核心&#xff0c;采用迭代、循序渐进的方法进行软件开发。 通俗来说&#xff0c;敏捷开发是一个软件开发流程&#xff0c;是一个采用了迭代方法的开发流程 简单来说&#xff0c;迭代就是把一个大产品拆分出一些最小的实现单位。完成不同的迭代就最…

机器学习筑基篇,Jupyter Notebook 精简指南

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 0x00 Jupyter Notebook 简明指南 描述&#xff1a;前面我们已经在机器学习工作站&#xff08;Ubuntu 24.04 Desktop Geforce RTX 4070Ti SUPER&#xff09;中安装 Anaconda 工具包&#xff0c;其…

老物件线上3D回忆展拓宽了艺术作品的展示空间和时间-深圳华锐视点

在数字技术的浪潮下&#xff0c;3D线上画展为艺术家们开启了一个全新的展示与销售平台。这一创新形式不仅拓宽了艺术作品的展示空间&#xff0c;还为广大观众带来了前所未有的观赏体验。 3D线上画展制作以其独特的互动性&#xff0c;让艺术不再是单一的视觉享受。在这里&#x…

数据处理-Matplotlib 绘图展示

文章目录 1. Matplotlib 简介2. 安装3. Matplotlib Pyplot4. 绘制图表1. 折线图2. 散点图3. 柱状图4. 饼图5. 直方图 5. 中文显示 1. Matplotlib 简介 Matplotlib 是 Python 的绘图库&#xff0c;它能让使用者很轻松地将数据图形化&#xff0c;并且提供多样化的输出格式。 Ma…

zdppy+onlyoffice实现重命名文件的功能

参考文档&#xff1a;https://api.onlyoffice.com/zh/editors/rename 步骤图&#xff1a; 实现步骤&#xff1a; 用户在 文档编辑器中为文档指定一个新名称。 文档编辑器 将文档的新名称通知给 文档管理器。 文档管理器 将文档的新名称发送到 文档存储服务&#xff0c;在这里…

synchronized关键字详解

文章目录 synchronized使用示例实现原理锁的升级synchronized与可见性synchronized与原子性synchronized与有序性 synchronized synchronized是Java提供的关键字译为同步&#xff0c;是Java中用于实现线程同步的一种机制。它可以确保在同一时间只有一个线程能够执行某段代码&a…

【Python系列】数字的bool值

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

MVC之 IHttpModule管道模型《二》

》》》注意&#xff1a;在http请求的处理过程中&#xff0c;只能调用一个HttpHandler&#xff0c;但可以调用多个HttpModule。 HTTP Modules ASP.NET请求处理过程是基于管道模型的&#xff0c;这个管道模型是由多个HttpModule和HttpHandler组成&#xff0c;当请求到达HttpMod…

UART编程

Q:为什么使用串口前要先在电脑上安装CH340驱动&#xff1f; 中断的作用&#xff1f; 环形buffer的作用&#xff1f; static和valitate的作用 三种编程方式简介 也可以通过DMA方式减小CPU资源的消耗 直接把数据在SRAM内存和UART模块进行传输 &#xff0c;流程&#xff1a; …