关于知识图谱:基于-LLM-的知识图谱另类实践

6次阅读

共计 7307 个字符,预计需要花费 19 分钟才能阅读完成。

本文整顿自社区用户陈卓见在「夜谈 LLM」主题分享上的演讲,次要包含以下内容:

  • 利用大模型构建常识图谱
  • 利用大模型操作结构化数据
  • 利用大模型应用工具

利用大模型构建常识图谱

上图是之前,我基于大语言模型构建常识图谱的成品图,次要是将金融相干的股票、人物、涨跌幅之类的基金信息抽取进去。之前,咱们要实现这种信息抽取的话,个别是用 Bert + NER 来实现,要用到几千个样本,能力开发出一个成果绝对不错的模型。而到了大语言模型时代,咱们有了 few-shot 和 zero-shot 的能力。

这里交叉下 few-shot 和 zero-shot 的简略介绍,前者是小样本学习,后者是零样本学习,模型借助推理能力,能对未见过的类别进行分类。

因为大语言模型的这种个性,即使你不给模型输出任何样本,它都能将 n+ 做好,出现一个不错的成果。如果你再给模型肯定的例子,进行学习:

is_example = {
    '基金':[
            {
                'content': '4 月 21 日,易方达基金公司明星基金经理张坤在管的 4 只基金产品悉数公布了 2023 年年报'
                'answers':{'基金名称':['易方达优质企业','易方达蓝筹精选'],
                                '基金经理':['张坤'],
                                '基金公司':['易方达基金公司'],
                                '基金规模':['889.42 亿元'],
                                '重仓股':['五粮液','茅台']
                }
        }
    ],
    '股票':[
            {
                'content': '国联证券 04 月 23 日公布研报称,给予西方财产(300059.SZ,最新价:17.03 元)买入评级...'
                'answers':{'股票名称':['西方财产'],
                                '董事长':['其实'],
                                '涨跌幅':['原文中未提及']
                }
        }
    ]
}

就能达到上述的成果。有了大语言模型之后,用户对数据的需要会缩小很多,对大多数人而言,你不须要那么多估算去搞数据了,大语言模型就能实现数据的简略抽取,满足你的业务根本需要,再辅助一些规定,就能够。

而这些大语言模型的能力,次要是大模型的 ICL(In-Context Learning)能力以及 prompt 构建能力。ICL 就是给定肯定样本,输出的样本越多,输入的成果越好,然而这个能力受限于模型的最大 token 长度,像是 ChatGLM-2,第一版本只有 2k 的输出长度,像是下面的这个示例,如果你的输出特地多的话,可能很快就达到了这个模型可输出的 token 下限。当然,当初有不少办法来晋升这个输出长度的限度。比方,前段时间 Meta 更新的差值 ORp 办法,能将 2k 的 token 下限晋升到 32k。在这种状况下,你的 prompt 工程能够十分欠缺,退出超多的限度条件和巨多的示例,达到更好的成果。

此外,进阶的大模型应用的话,你能够采纳 LoRA 之类的微调形式,来强化成果。如果你有几百个,甚至上千个样本,这时候辅助用个 LoRA 做微调,加一个相似 A100 的显卡机器,就能够进行相干的微调工作来强化成果。

利用大模型操作结构化数据

结构化数据其实有十分多品种,像图数据也是一种结构化数据,表数据也是一种结构化数据,还有像是 MongoDB 之类的文档型数据库存储的数据。Office 全家桶之前就在搞这块的工作,有一篇相干论文讲述了如何用大模型来操作 Sheet。

此外,还有一个相干工作是针对 SQL 的。前两年,有一个钻研方向特地火,叫:Text2SQL,就是如何用自然语言去生成 SQL。

大家吭哧吭哧做了好几年,对于单表的查问这块做得十分好。然而有一个 SQL 窘境,就是多表查问如何实现?多表查问,一方面是没有相干数据,自身多表查问的例子就非常少,限度了模型晋升;另一方面,多表查问自身就难以学习,学习条件会更加简单。

而大语言模型进去之后,基于 GPT-4,或者是 PaLM 2 之类的模型,去训练一个 SQL 版本的模型,成果会十分好。SQL-PaLM 操作数据库的形式有两种。一是在上下文学习(In-context learning), 也就是给模型一些例子,包含数据库的 schema、自然语言的问题和对应的 SQL 语句,而后再问几个新问题,要求模型输入 SQL 语句。另一种形式是微调(fine-tuning),像是用 LoRA 或者是 P-tuning。

上图就是一个用 Prompt 工程来实现 Text2SQL,当时先把表的 schema 通知大模型,再发问,再拼成 SQL…依照这种形式给出多个示例之后,大模型生成的 SQL 语句成果会十分好。还有一种就是下面提到的微调,将 schema 和 question 组合成样本对,让大模型去学习,这时候失去的成果会更好。具体能够看下 SQL-PaLM 这篇论文,参考文末延长浏览;

此外,还有更进阶的用法,和思为之前举的例子有点类似,就是大模型和常识图谱联合。

比如说,我想问“奥巴马出世在哪个国家“,它就是构建常识图谱 KQs,再进行一个召回,而召回有很多种办法,比方之前思为分享的 Llama Index 的向量召回,而向量召回最大的难点在于模型,像 OpenAI 提供的模型,成果会比拟好,然而数据量大的时候,频繁调用 OpenAI API 接口一方面波及到隐衷问题,另一方面波及到估算费用问题;而本人要训练一个模型,不仅难度大,因为数据量的起因,成果也不是很好。因而,如果你是借助 Llama Index 的向量模型进行召回,可能须要辅助一些额定的关键词模型,基于关键词匹配来进行召回,像是子图召回之类的。

对应到这个例子,零碎须要辨认出关键词是 Obama 和 Country,关联到美国,再进行召回。这样解决之后,将相干的事实 Retrieved Facts 喂给大模型,让它输入最终的后果。在 Retrieved Facts 局部(上图蓝色局部),输出可能绝对会比拟长,在图中可能是一个三元组,这样就会绝对比较简单。这里还会波及到下面说的 2k 输出 token 晋升问题,还是一样的通过一些微调伎俩来实现。

大模型应用工具

上面就是本文的重头戏——大模型的应用工具。什么是大模型工具?你能够了解为它是把一些简单操作集成到一起,让大模型做一个驱动。

举个例子,ChatGPT 刚进去的时候,会有人说“给我点一个披萨”,这当中就波及到许多简单的操作。

Data-Copilot 是浙大某个团队做的大模型工具,次要是做用意辨认和信息抽取。上图右侧是“输出一句话,把相干的图绘制进去”的成果展现,这里就要提取一句话中的关键词信息,关键词信息辨认之后去对应的数据库中找对应的数据,找到数据之后进行数据处理,最初再生成一个图。这里并没有用到图数据库,而是间接基于 2Sheet 接口来实现的。

这里咱们向这个模型提出一个需要“往年上证 50 指数的所有成分股的净利润增长率同比是多少”,这个模型会将其解析成对应的一个个步骤进行操作。上图右侧显示了一共有 4 步:

  • Step1 解析要害指标;
  • Step2 提取相干数据;
  • Step3 数据处理,整顿成对应格局;
  • Step4 绘制成图;

而大模型是如何实现的呢?次要分为两层,一方面你要设计一个接口调用,供 prompt 调用;另一方面筹备好底层数据,它可能是在图数据库中,也可能在关系型数据库中,给接口做承接之用。

这个例子更加简单,是想让大模型来预测中国将来(下四个季度)的 GDP 增长。这里看到它分成了三局部(上图橙色局部):

  • Step1 拿到历史数据;
  • Step2 调用预测函数,它可能是线性函数,也可能是非线性函数,也有可能是深度学习模型;
  • Step3 绘制成图(上图蓝色局部);

一般来说,金融分析师做相干的金融数据分析的模型会绝对对立,这种绝对对立的模型咱们用函数实现之后,就能够让他的工作更加便捷:分析师只有说一句话,图就画好。这里是 Data Copilot 的 GitHub 地址:https://github.com/zwq2018/Data-Copilot

大模型的最终状态

下面展现的状态,基本上人工痕迹还是很显著的:prompt 要人为写,数据接口也得人为写。而我感觉它最终的状态,可能同 GPT4 的状态有点类似,像是前段时间出的 Code Interpreter,代码编译器性能,你只用一句话,前面所有的性能都实现完了。大略实现过程就是上图所示的,用 LLM 作为接口,把整个百科、计算器、搜寻、编译器、常识图谱等等接入进来,从而最终实现画图的性能。

而它的最终成果是怎么样的呢?上面是国际友人在推特上 po 出的一张图:

就那么简略,你不须要额定地搞 API,就能实现一个性能。

LLM 你问我答

上面问题整顿收集于本场直播,由 Wey 同社区用户陈卓见一起回复。

大语言模型和常识图谱的联合案例

Q:目前大模型和常识图谱的联合案例有吗?有什么好的分享吗

Wey:之前卓见老师在咱们社区分享过一篇文章《利用 ChatGLM 构建常识图谱》,包含我下面的分享,也算是一种实际分享。当然咱们后续会有更多的介绍。看看卓见有没有其余补充。

陈卓见:我是相干的 LLM 从业人员,不过外部窃密的缘故,这块可能不能和大家分享很多。基本上就是我之前文章所讲的那些,你如果有其余的问题交换,能够给文章留言,大家一起进一步交换下。

大模型入门教程

Q:当初如果要入门大语言模型的话,有什么好的入门教材

Wey:如果是利用大语言模型的话,能够看下 LangChain 作者和吴恩达老师出的教程,据说这个教程还挺不错的。而我集体的话,会看一些论文,或者是追 LangChain 和 Llama Index 这两个我的项目的最新实现,或者曾经实现的货色,从中来学习下 LLM 能做什么,以及它是如何实现这些性能的。而一些新的论文实现,这两个我的项目也对其做了最小实现,能够很不便地疾速应用起来,像是怎么用 Embedding,它们反对哪些 Embedding 模型之类的事件。

陈卓见:思为分享的可能是偏应用层的,而对咱们这些 LLM 从业者而言更多的可能是如何训练大模型。比如说,咱们想实现某个性能,咱们应该如何去结构数据,抉择大模型。像是咱们团队,如果是来了一个实习生,会看他数学能力如何。如果数学不好的话,会先思考让他先多学点数学;如果数学程度不错,当初同大模型相干的综述文章也挺多的,会让他去看看综述文章,无论中文还是英文,都有不少相干的材料能够学习。像 transformer 层,大模型训练的细节,分布式怎么做,工程化如何实现 ,都是要去理解的。当然,这外面必定是有侧重点的,你如果是想理解工程的常识,你能够去多看看工程常识;想理解底层原理,就多看看实践,因人而异。

这里给一些相干的材料,大家有趣味能够学习下:

  • A Survey of Large Language Models:https://arxiv.org/abs/2303.18223,次要理解下基本概念;
  • 中文版的综述《大语言模型综述》:https://github.com/RUCAIBox/LLMSurvey/blob/main/assets/LLM_Survey__Chinese_V1.pdf

如何基于 LLM 做问答

Q:NebulaGraph 论坛当初累计的问答数据和点赞标记,是不是很好的样本数据,能够用来搞个不错的专家客服

Wey:在之前卓见老师的分享中,也提到了如果有高质量的问答 Pair,且有肯定的数据量,是能够思考用微调的形式,训练一个问答专家。当然,最间接、最简略的形式可能是下面分享说的 RAG 形式,用向量数据库 embedding 下。

部署大模型的门路和实现配置

Q: 想问部署 65b 大模型最低老本的硬件配置和实现门路

陈卓见:先看你有没有 GPU 的机器,当然 CPU 内存够大也是能够的,有一台 256B 内存的机器,应该 65b 也是能推理的。因为大模型分不同精度,个别咱们训练用到的精度是 fp16。而 fp16 的话,对于 65b 的模型,它大略显存占用大略是 120GB 到 130GB 之间。如果你用的内存训练的话,内存得超过这个量级,个别是 256GB,就能推理的。然而不大举荐用 CPU,因为它的速度可能只有等同规模 GPU 的 1/10,甚至 1/20、1/50 都有可能的,这具体得看你的环境。

如果你用 GPU,它是有几种抉择,如果你用 fp16 的精度想去做推理的话,那么你可能须要 2 张 80GB 显存的机器,比如说 A100、A800 这样机器能力行。但最低实现的话,你能够抉择 INT4 精度,这时候须要一个 40GB 左右的显存,比方买个 A6000,48GB 显存,它应该也是能推理的。但这个推理其实是有限度的,因为推理是一直的 next token prediction,是要始终生成 token 的,这就会占用你的显存。如果你让它写一篇长文的话,这时候 48GB 显存应该是不够用的,显存会爆。所以,你筹备 2 个 48GB 的显存,在 INT4 下能够不便地进行推理之余,还能搞搞模型并行,QPS 也会有所体现。然而单 48GB 显存的话,内存可能会爆。

最近比拟风行的有个 LLaMA CPP 我的项目,就反对 INT4 量化,而且将来还打算反对 INT2 量化。但 INT2 量化这个成果就不敢保障了,因为 INT4 至多有不少我的项目,像是 LLaMA、ChatGLM 都做过试验,测试下来精度损失不会那么大,然而 INT2 还没有实际数据进去,不晓得到底精度损失会有多少?

小结下,我倡议你最好是筹备一个 A800 的机器,或者是两个 A6000 这样的机器,或者四个 A30,都能做 65b 的推理。这个配置会比拟稳当一点。
下个问题。

Wey:这里我想诘问下卓见一个问题。我有一个富人版的 24GB 显存,临时还没试过 Fine-Tuning,然而我当初做失常精度的 6b 推理是 OK 的。如果是 INT4 的话,据说 6GB 显存就能够推理?

陈卓见:这里解释下显存和模型参数量的关系,如果你是 6b 模型的话,个别显存是 12GB,就能做失常的 fp16 推理,而 INT4 的话,间接显存除以 3,大略 4 GB 就能够做 INT4 的推理。如果你当初是 24GB 的显存,其实能够试试 13b 的模型。

非结构化数据如何存储到图

Q:非结构化的数据,比方就一本书,如何先存储到 graph 里

Wey:😂 富人的实现思路,这个书如果是有 PDF 的话,间接用 Llama Index 6、7 行代码就能够扫入到数据库中。如果是之前咱们的 prompt 的话,用 NLP 业余角度判断的话,它其实成果并没有那么的好,然而能够承受。此外,Llama Index 还有个 hub 我的项目,如果你的 PDF 是纯光学扫描的话,它会主动 OCR 提取信息。

陈卓见:这里我补充下,你数据存储到图中要干嘛?如果是做一个问答,那么 Llama Index 是个不错的计划。如果是其余的需要,其实一个纯文本的 txt,可能也就行了。

如何筹备数据以及训练模型

Q:训练模型或者是进行 Fine-Tuning,在数据筹备方面有什么教训分享

陈卓见:Fine-Tuning 要筹备的数据量取决于你要实现的性能,不同的事件难度,所需的数据量是不同的。比方,你要用 LLaMA 做一个中文问答,你要做中文的词表,筹备中文的问答数据,再搭配一部分英文的问答数据,这样做一个 LoRA 微调。但你如果是只做英文的问答,中文这块的数据就不须要了,用大量的英文数据,就能很好地调好模型。个别就是写 prompt,再写输入,组成对,LoRA 有规范格局,整成规范格局就能用。

模型的准确性

Q:在理论利用中,如何做畛域常识图谱的品控,确保 kg 就是常识图谱的内容齐备跟准确性,如果常识图谱的内容都错了怎么办

陈卓见:其实,咱们个别是筹备好几个模型。大模型只是一部分,比如说咱们筹备三个模型,第一个模型是用大模型,第二个模型是 Bert + NER,第三个是基于规定的模型,而后这三个模型组成一个相似的投票模型。三个模型都通过的数据就放进去,两个模型通过的数据就让人校验下,只有一个通过的数据,目前咱们是不采纳的,间接不要。目前,实际下来,大模型的准确率只有 70-80%,准确率并不是很高。但再通过一道 LoRA,准确率会进步点。倡议还是做多模型,绝对会保险一点。

大模型和 asr

Q:大模型的语言 ASR 解决有什么教训分享,比方:语音的特征提取怎么做

陈卓见:这就是大模型的多模态,个别是先做小模型,对语音、图像进行 Embedding 之后,再归一成一个大模型。能够先看看语音的 Embedding 是如何实现的,再看看多模态的大模型是如何将其相结合。不过目前来说,尚在一个摸索阶段,没有十分成熟的解决方案。

模型固定输入

Q:让模型以固定模式回复问题,怎么构建数据训练模型呢?比如说法律问题要以什么法规去答复问题

Wey:如果是训练的话,我其实没有做过 Fine-Tuning。如果是纯 prompt 的话,有几个准则:给出各种例子、各种强调输入后果格局,prompt 这套就是个黑匣子,有时候你来回调整语序就能失去不错的后果。当然有些边缘 case,可能难以依照固定的格局输入,你能够用正则表白做个兜底,确保最初的一个输入格局。

陈卓见:咱们在做 Fine-Tuning 的时候,在数据收集时,能够过滤掉一些偏见数据。还有就是在模型训练的微调阶段,有一个 Reward model,就是答复打分,你能够把某一类问题中你感觉答复的不好的回复打低分,而后在 PPO 阶段,模型进行学习时,就会升高输入这类答复的概率。一般来说,还是在 prompt 里加巨长的 prompt,可能是几百个 prompt,相似于不要答复什么,优先答复什么,写个很长这样的货色让它去做答复。个别不倡议在训练阶段,去做输入的格局的实现,因为老本十分低廉,绝对的写 prompt 的老本就低多了。

延长浏览

  • SQL-PaLM: Improved Large Language Model Adaptation for Text-to-SQL:https://arxiv.org/abs/2306.00739
  • 利用 ChatGLM 构建常识图谱:https://discuss.nebula-graph.com.cn/t/topic/13029
  • 图技术在 LLM 下的利用:常识图谱驱动的大语言模型 Llama Index:https://discuss.nebula-graph.com.cn/t/topic/13624
  • Text2Cypher,大语言模型驱动的图谱查问生成:https://www.siwei.io/llm-text-to-nebulagraph-query/
正文完
 0