Fork me on GitHub

OPPO基于大模型与知识图谱的技术实践探索

以下文章来源于 https://zhuanlan.zhihu.com/p/640441842

导读 大模型时代来临,模型迭代速度愈发加快,同时也带来一系列议题引人深思,例如预训练大模型面临的包括逻辑及知识较难融入模型,以及知识图谱解决能力亟待提升等问题。本次分享主要围绕杨栋老师在加入OPPO研究院之后基于大模型和知识图谱完成的两项重要工作而展开,一是构建了部门预训练大模型CHAOS,在国内CLUE三个榜单中拿到了第一并且在其中四个赛道超过人类基准;二是在去年提出GammaE模型并将其应用于知识图谱的多跳推理中,其论文也是被录取到EMNLP2022会议 Oral Presentation中。

全文目录:

  1. OPPO预训练大模型CHAOS登顶CLUE技术介绍

  2. OPPO GammaE模型融入知识图谱多跳推理技术介绍


分享嘉宾|杨栋 OPPO研究院 高级研究员

编辑整理|李开琦 SHEIN

出品社区|DataFun


01/OPPO预训练大模型CHAOS登顶CLUE技术介绍

首先来介绍大模型CHAOS如何登顶CLUE。主要会从预训练大模型的现状、解决方案及模型训练技巧这三个方面做详细的介绍。

1.预训练大模型现状

上图中展示了目前一些主流的预训练大模型,这个图是3月份刚刚完成更新的,图里每个气泡的大小代表着模型参数的大小。包括从2018年开始就比较流行的BERT、 GPT 1这些模型,然后到GPT 2,再到后来的T5,还有去年 Google做的基于Transformer Decoder的框架PaLM,还有英伟达和 Microsoft一起做的一个NLG大模型MT-NLG,这两个模型可以说是迄今为止最大的两个模型。

从这张图中可以发现,首先国内有代表性的预训练模型还是比较少的,目前比较主流的预训练模型基本都是由国外研究机构提出的,所以在预训练模型技术的探索上我们还有一段路要走。另外,模型是否越大越好,去年ICLR一篇论文中也提到大模型其实学得还不够充分,我们可以通过增加模型的training step让模型收敛更好,但是在某些垂类领域进行应用的话,我们其实可能不需要这么大的模型。

我们再来看下CLUE榜单当前整体的情况。CLUE一共分三大榜单,并设有包括文本分类、上下文推理、阅读理解等细分任务榜,其中阅读理解有3个赛道。我们当时的CHAOS模型是30亿级别的参数量,对比前10这些百亿级甚至是万亿级参量模型是非常小的,但是我们的performance表现并不差。

另一方面,模型另一个发展趋势是训练过程中的语料在不断增加。从BERT时期开始的约12GB的语料到现在的Trillion级别,将近1.4万亿级别的文本token去训练一个模型。对于模型训练来说,token越多意味着training step越多,training step不断增加的话,模型训练过程中整个收敛效果performance在下游任务评测中表现会越来越好。但这其实也带来一个问题,当训练资源有限时,其实是无法给模型提供这么大规模的训练数据的。

下面这张图展示了当前模型训练所用到的主流的语料来源,其中最多的是来自开源平台。比如Common Crawl就是一个开源的非结构化的数据集,从GPT-1到GPT-3,大部分语料都是来源于Common Crawl。相比之下,结构化知识类的语料占比是比较小的,比如Wiki的语料只有约12GB,所以这类知识结构化的语料去给到模型训练的话,模型的提升效果还是相对有限。另外,从整体语料情况来看,在涉及到提升泛化性能方面,比如 Chat-GPT这类模型需要的语料越多越好,而在一些垂类领域并不需要那么多的语料,如果训练语料与下游任务更加匹配,表现则会更好。

其中Anthropic公司是从OpenAI独立出来的,该公司的一些专家也参与了当时Alpha Go的强化学习工作。其模型参量在520亿左右,但是整体performance已经比PaLM 5,400亿的模型参量在整体表现上更好,并且与Instruct GPT和GPT-4使用的模型框架和算法结构是没有任何区别的。主要区别是在标注部分。虽然标注的整体规模是很接近的,但是在细节部分,比如语料选用或是语料体量上还是有区别的,但模型整体表现很惊艳。

近日,来自Stanford的Percy Liang教授发布了一篇论文,主要是衡量主流大模型的performance。他一共收集了一两百个数据集并选定了当下最主流的大模型进行评估。在整体准确性上,其表现仅次于ChatGPT。

最后关于AI超过人类这个问题,虽然现在追赶的速度是非常快的,但是距离拥有人类真正的逻辑和知识还是很远的。因为其实在我们对比如ChatGPT或者是GPT4提问一些数学推理或逻辑演算的问题时,模型还是无法给出准确的答案。

所以综上所述,大模型当前主要有以下两方面的问题:

  • 逻辑及知识较难融入模型:大模型相当于一个黑匣子,怎样才能把知识和逻辑更好地加到大模型里面,到目前为止其实还没有找到一个比较好的方法。
  • 知识图谱解决效果有待提升:之前大家都比较倾向于用知识图谱来解决这个问题,但是知识图谱在发展近20年的过程中,在解决这个问题上面并没有产生出惊艳的效果。主要原因是在方法论上还没有到达一个比较理想的衔接阶段,所以这也是值得大家思考的一个问题。

2.预训练大模型解决方案

接下来,会着重介绍解决方案。目前基于上述提到的模型训练的现状,我们主要采取的方法是知识增强。知识增强可以理解为数据增强,前期在进行知识增强相关模型调研时发现其中最具代表性的工作是百度的ERNIE系列,尤其是3.0系列模型,达到百亿参量,在SuperGLUE上68个中文数据集上都有非常好的表现。

在做模型预训练时,更建议基于开放域语料,使用开放域的知识图谱,去帮助模型提升整体泛化能力。同时在数据体量方面,OPPO研究院构建了将近5.56亿的一个高质量知识图谱。接下来将分预训练和知识融入两个模块来详细介绍如何将知识更好地融入到预训练模型中。

① 模型预训练word embedding问题

在做模型预训练的过程中,发现针对不同模型word embedding在不同空间表现上是不同的。并且我们在做fine-tuning时发现,在同一个数据集上BERT产生的一些bad case在RoBERTa里表现出来的并不是bad case,所以其实可以将这种表现差异理解为一种互补,并且是一个非常好的互补。可以看出,各个模型之间通过不同的语料或者是相同的语料进行训练并且如果在最后做一层模型融合的话,利用不同模型间的互补作用是可以有效提升模型整体performance的。

② 预训练模型框架介绍

回到模型框架,目前比较主流的框架都是基于Transformer的Encoder, Encoder-Decoder以及Decoder三大类模型:

  • Encoder模型:包括BERT、RoBERTa等,CLUE上部分团队是用BERT模型的框架,并通过设置参数增加它的层数,然后将其调到百亿级别的参量。
  • Encoder-Decoder模型:表现比较惊艳的是T5模型,模型泛化能力及鲁棒性都比较好,但是训练成本同样很高。
  • Decoder模型:代表作就是大家都熟悉的GPT系列,尤其GPT-3在2020年发布后,各大公司都不断想去超越它,但难点集中在语料及系统工程方面,暂时还无法做到像OpenAI这样精益求精。

另外,Encoder模型中提到的调参方法目前的一大问题,就是难度较大且每次实验花费较高,国内大厂很难像OpenAI这类公司一样可以承受如此大的实验消耗,所以虽然在算法结构方面可以很好地与其拉平,但在语料及参数工程细节方面实现起来还是比较困难的。

③ 预训练模型选择

我们选择的模型是Encoder: RoBERTa DeBERTa的模型框架,DeBERTa解决了当时BERT类模型相对位置编码的问题。选择抛弃掉Decoder模型的主要原因是,Decoder更加偏向于生成类任务,而我们在CLUE上的任务全部是偏向于判别类的任务,另外根据我们用Decoder BLOOM多语言版本实验测试的结果来看,最后模型效果没有达到我们的预期。后面在Encoder-Decoder里我们还融入了T5和ERNIE3.0的框架,虽然3.0并没有开源,但我们最后也是成功将其复现了出来。

④ 主流模型框架详解

首先,让我们来看下RoBERTa模型。可以看到这边有一个比较有趣的图是邱锡鹏团队做的MOSS模型。当时就发现了一个问题,随着模型每一层forward正向传播过程中,模型的位置编码信息在经过几层forward后变成random,相对位置编码就消失了,所以需要DeBERTa来解决相对位置编码消失的问题。虽然DeBERTa在整个训练过程中较难收敛,但当时仅凭13亿参量在SuperGLUE也做到了第一的成绩,效果是非常惊艳的。

DeBERTa仅凭75GB的语料就可以做到这么好的原因是,模型本身的training step相较于其他大模型来说要多很多,并且DeBERTa训练了将近10万亿的中文token,所以它的训练成本其实是非常高的。在这里也给出整体的训练资源及成本以供参考:训练48层的模型用了16个节点,每个节点有16张v100 GPU相当于256张v100 GPU跑了30天,所以整体GPU hours也是非常之大。另外RoBERTa还增加了相应的training step,所以训练所需的token规模也是很大的。

其次是ERNIE系列模型,ERNIE模型框架的改动主要是基于transformer-XL,XL是一个decoder的框架,我们要将其变成NLU任务的话,需要将attention修改为双向attention。但这里存在一个较大的风险是当时ERNIE在完成复现后通过小参量实验发现效果虽然跟1.0已经对齐,但是语料和部分细节没有对齐;另外用我们自己的模型对比ERNIE在CLUE上的表现并不是特别惊艳,所以最后没有选用该框架。

最后我们基于Encoder-Decoder框架做了一个类似T5的模型框架并且运用了Span Denoising预训练技巧,整个训练过程用了30亿的参量并且优化器选取的是AdamW优化器,没有沿用T5模型使用的AdaFactor是因为模型训练参数量较大并且需要进行一个快速收敛训练,而且当时DeepSpeed只支持使用AdamW。在这里要特别再分享下T5当时为什么选择要用AdaFactor,主要是因为2019年提出T5的时候还没有DeepSpeed,另外AdamW做优化器时,资源开销很大,比如做反向传播这类优化时优化器里的参数是非常大的,相较之下AdaFactor要小很多。

⑤ OPPO CHAOS模型详细介绍

下图是关于我们的CHAOS模型的一些细节,其中我们在计算loss时区别于传统GPT架构,我们只在span的基础上有一个对应的loss去进行优化。在这里要重点解释下span length为什么取值为2,传统T5模型里的span length取的是3,我们在这里取2主要是因为我们做了知识融入,下面会针对知识融入进行详细介绍。


首先,知识融入传统方法主要有以下四种:

  • ERNIE系列:ERNIE系列以文心大模型为代表,文心的主要实现方法是会分三个级别做masking:第一是在字的基础上打mask,第二是在实体上打mask,第三是在词组上打mask。另外ERNIE整个系列在3.0时期对齐了将近9,000万条三元组,三元组的结构主要是由两个实体(头尾实体)加一个relation关系构成,并且会在relation处打上mask。但是ERNIE知识融入模型过程必须要通过三元组去给文本进行匹配,并且当时他们用了4TB的语料,如果算上sample在内,总体是几十亿甚至几百亿的sample去对齐知识图谱,所以整体训练复杂度、成本及资源消耗都非常大。


  • K-BERT & CoLAKE:K-BERT由腾讯提出,CoLAKE由Amazon提出,这两个模型核心实现方法都是通过修改attention mask去构建树结构,同层级或路径间词和词之间的结构可见,因此可以进一步对应出一个visible matrix可见矩阵。这个方法的问题主要是在训练过程中需要通过查表去不断构建知识图谱,整体资源开销较大,会对后续模型规模的扩大产生限制。

  • LUKE:LUKE是由Google Japan提出的,主要实现方法是构建一个Embedding衔接在Pretraining后面,将实体通过Embedding相加或者相除完成Embedding的衔接。LUKE整体表现也比较惊艳,并且当时在ACL连续做了两篇论文。

  • KEPLER & K-ADAPTER:KEPLER由清华提出,K-ADAPTER由Microsoft提出,主要实现原理是构建两个loss组合,一个是预训练模型的loss,另一个就是知识图谱的loss,来进行组合优化学习。这类在进行学习时还是要去做文本对齐的动作,所以同样存在训练复杂度较大的问题。

所以我们在构建知识图谱和文本匹配时,将复杂度由原始的O(nm)(n:知识图谱三元组的数量,m:text的数量),变成了O(1),具体构建过程如下:

  • 切词:我们用了490GB的预训练语料从中间抽出跟下游任务最相近的一群语料,大概是在20GB左右,然后针对于这20GB的语料先进行一步切词。
  • 高频词筛序:切词后筛选出10%高频词。
  • 实体匹配:最后跟知识图谱做hashMap的匹配,这样马上就能通过O(1)的一个算法,找到对应的这些高频词有哪些是在知识图谱里面,再把这些词表整合到我们的词表里面,这样我们的词表里面就可以包含这部分实体了,最后再利用Span Denoising掩码策略去打mask。

基于上述过程,我们的span length选值为2的原因主要是部分最长的实体已经有6,7个字了,例如"香港特别行政区"或者"中华人民共和国"这类实体,如果再同时打上3个或多个span的话,一句话会有1024个token,模型很难去预测这么大的长度,所以把Span Denoising的length调成2更符合我们的实际需要。

3. 大模型训练技巧

再来介绍一下大模型训练技巧。在模型微调过程中,传统方法比如数据增强、Mixup、Manifold-Mixup或者是R-drop,都可以提高大概1~2个点,另外基于刚才分享的理论,多模型融合在优化下游任务时是非常好的选择,但是是不计成本的。所以在实际场景落地中,如果可以找到一个较好的泛化方法去降低成本,通过构建MoE模型降低参数量就可以跟百亿级别模型PK,并且能够取得较好成绩的话,那么这个专项是比较promising的并且会受到大家喜欢。

其次比较关键的方法就是数据增强,这里我们主要使用In-Context Learning上下文学习的方法,然后其中最主要的方法是Multitask prompted training enables zero-shot task generalization,大家可以去看一下叫Alexander M. Rush,Cornell Tech去年出的一篇文章里面有详细讲到。


02/OPPOGammaE模型融入知识图谱多跳推理相关技术介绍

1. 背景介绍

在介绍传统多跳推理方法之前,先来介绍下一阶逻辑推理的query分类。针对任何query,我们主要用4类逻辑表达式来进行处理:存在、并、非以及或。比如问题是哪个领域没有拿到诺贝尔奖,整体实现逻辑是,首先抽取出"Nobel Prize"实体,然后构建出其logic form,并利用logic form 去对应它的relation,同时利用并和非等逻辑表达式去构建它的relation,最终找到对应的answer entity实体。

这里还列举了一些一跳、长路径和并的问句,多跳推理也是基于此来进行。

知识图谱实现多跳推理的传统方法主要分为以下两大方向:

  • 路径搜索:代表作TransE(Translating Embedding),这篇文章发布于2013年,之后开启了一系列query embedding的工作,包括TransH、TransG、DistMult、RotatE等等这些工作都是在此基础上完成的。
  • 空间嵌入:该方法2020年左右开始流行,空间嵌入比较著名的代表作包括Query2Box、BETAE和ConE,目前该方法仍属于起步阶段。

① 传统方法详解

  • TransE:基本原理主要是将一个实体三元组,包括头尾实体以及relation, mapping到一个vector向量空间里,根据向量规则并利用实体和relation累加算出answer的query embedding,然后相接近,最后用loss function让最终query的answer embedding和tail embedding距离变得更小,整体过程相当于做一个欧几里得的距离计算就可以完成。模型可以处理上面提到的四类基本逻辑计算,但是主要问题是需要记录中间变量让整体空间复杂度及时间复杂度变大。

  • 几何模型:Query2Box主要是将实体和relation 可通过mapping到一个矩形空间里面,矩形空间可首先通过一个中心节点和offset的计算来对应投影部分并且可以把该矩形空间理解为一个正方形,交的实现可通过引入注意力机制,利用self-attention通过softmax函数进行计算,其次通过DeepSets工具把该空间缩小到类似图中三个矩形这样的一个小空间进而得到相交的面积。这个模型的问题主要在于做union时比较困难,如图中所示,例如在引入v4后,query1和query2在取交集进行"或"逻辑处理时,旧有计算规则无法满足,换句话说矩形无法正常包括原先的v1v2或v1v3。


  • 几何模型-析取范式Disjunctive normal form:解决几何模型计算瓶颈问题,在做union时,首先将原图中的union部分删掉,用右图中的projection-intersection部分取代,最后再做union的计算,主要是求 mapping出来的query embedding和实体最后tail embedding的距离,去对应找到这些距离进而可求得最小值。这边距离的计算主要分成outside和inside两部分,通过outside加上inside并且前面乘一个固定的系数(0.7或0.9)最后结合loss对应的正采样去更新模型,但该模型无法解决"非"的问题计算,主要由于"非"的问题外围空间并不是矩形,无法利用矩形计算规则去解决。

  • 几何模型-ConE:解决"非"的问题计算,主要是将实体mapping到一个扇形空间,利用扇形计算来实现,计算逻辑与之前提到的Query2Box相同,唯一不同的是针对union采用的是De Morgan's laws这个方法。

  • 概率分布模型:将实体和relation投影到BETA分布,然后做它的intersection并通过α和β进行累加实现,该模型主要的问题集中在最后通过KL divergence来进行计算,其中如果存在交集会导致KL divergence等于0,进而会影响整体的计算结果,所以可以看到这个交点可能会导致一些边界问题。

②GammaE方法介绍

基于上述方法中存在的问题,我们提出了GammaE模型,主要实现原理是通过Gamma分布利用α和β的参数作为embedding并使用三层MLP来做projection;intersection这边则是跟BETAE类似,都是通过α和β进行累加并进行计算。这个模型比较出色的设计主要在于以下两点:

  • 高斯混合模型的适用:利用高斯混合模型实现union和negation,相较于传统方法用De Morgan和析取范式来实现计算复杂度大幅降低。

  • Elasticity弹性变量的引入:在"非"计算中引入弹性变量(参数固定为0.07)增加图中两个distribution的距离,KL divergence的值也相应增加。

③实验测评结果

整体实验测评结果如下:

  • 模型EPFO问题表现:在MRR上针对EPFO问题,对top 4 benchmark,整体performance都更好。

  • "非"问题表现:在"非"逻辑运算问题上,我们的整体表现如下图所示,也是比较亮眼的。

  • "合问句"表现:相比于De Morgan's Laws和析取范式,我们的Gamma混合模型效果更好。

  • 模型鲁棒性表现:我们用Spearman还有Pearson上的表现对比之前的模型效果也是更好。

  • 时间复杂度表现:GQE表现比之前模型整体要好,其他基本跟Q2B模型拉平,并且相较于其他模型表现较好。

最后,基于以上实践,我们还是更加希望在CHAOS模型基础上去做一些更泛化的工作,并且通过提出鲁棒性更强的方法去提升整体模型效果。另外,就模型趋势而言,我们其实更加希望把模型做小而不是越做越大。我们提出的GammaE模型在每种逻辑运算上都有着一些比较巧妙的设计。

03/精彩问答

Q1:在众多老师提到的将知识图谱融入到大模型的方法中,在您理解来看,最简单最直接并且成本较小的方法是否是直接线性化知识图谱?或者是否有其他更好的方法?

A1:目前最简单的方法就是把知识图谱融入到词表里,就是我们提出来的这个方法,是最线性并且是最快的,且可以节省一定计算资源。但是强行把知识图谱融进去,我并不认为它一定效果更好,其实更多的是要让这个模型去预测更加难的问题,进而提高其学习能力,这是最大的一个驱动力。如果你没有找到一个非常好的衔接点,就是简单的想把知识图谱融进去的话,文中列举的那些方法都可以去尝试,但是在整体泛化能力上面还有很大的差距。其实这也是我们一直面临的问题,知识图谱提出将近20年,但在解决泛化类的问题上面,好像就还差那么一道坎,还是希望把这道坎给迈过去。

Q2:如果把实体全部融到词表里,是不是实体的数量很大?

A2:实体的数量当然会选一些高频词,所以数量不会很大。我们当时的中文词表是从2万的词表最后扩充到一个6万的词表,并不是很大。

以上就是本次分享的全部内容,谢谢大家!



本文地址:https://www.6aiq.com/article/1688029541571
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出