0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何利用大规模语言模型将自然语言问题转化为SQL语句?

深度学习自然语言处理 来源:NLP日志 2023-03-22 11:48 次阅读

1 简介‍‍‍‍‍‍‍‍‍

有的工作尝试引出中间推理步骤,通过将复杂问题显示分解为多个子问题,从而以分而治之的方式来解决。考虑到组合泛化对于语言模型有一定的挑战,这种递归方法的对于复杂任务特定有用。根据解决子问题的方式可以分为串行跟并行两种,串行的方式每个子问题相互依赖,前面子问题的答案会加入到后续子问题的prompt中,生成后续子问题的答案,而并行的方式则各个子问题的答案生成是独立的,最后再将多个子问题的答案融合到一起。

2 并行式‍‍‍‍‍‍‍‍‍

DECOMPRC

在阅读理解场景下,多跳阅读理解要求从众多段落中进行推理跟归纳。于是出现了新的方案DECOMPRC,将多跳阅读理解问题分解成多个相对简单的子问题(现有阅读理解模型可以回复),从而提高阅读理解准确性。

59437718-c862-11ed-bfe3-dac502259ad0.png

图1:DECOMPRC示例

整个方案分为三个部分

a)将原始的多跳阅读理解问题分解为多个单跳子问题。可以根据多个不同的推理类型得到多种分解方式,这里需要根据不同推理类型分别训练多个用于问题分解的模型,对于每个分解模型,采用Point的方式,利用BERT对原问题进行预测,得到几个关键位置,利用关键位置原文本进行划分,再加上一些规则手段,就可以得到对应的子问题了。例如预测出一个中间位置,就可以将原问题分割成两部分,第一部分作为第一个子问题,第二部分作为第二个子问题,考虑到第二部分可能都是陈述句,就将前面的词转换成which。这里将分解模型简化为一个span prediction问题,只需要400个训练数据就得到很不错的效果了。

b)在第一步会产生多种问题分解方式,对于每一种分解方式,利用单跳阅读理解模型回复每个子问题,然后根据不同分分解类型的特性得到最终的答案。

c)对于每一种分解方式,将原问题,分解类型,该分解方式下的问题跟对应答案一同作为模型输入,预测哪种分解方式对应的结果最合理,将该分解方式下的答案作为多跳阅读理解问题的答案。

整个流程可以简单理解为,系统提供了几种将多跳问题分解为子问题的方式,分别计算每个分解方式的合理性,再选择其中最优的分解方式对应的答案作为原问题最终答案。

QA

在QA场景下,通过将复杂问题分解为相对简单的子问题(QA模型可以回复),从而提高问答的效果。具体到多跳QA问题上,现将复杂问题分解为多个子问题,利用单跳QA模型生成全部子问题的答案并融合到一起作为复杂问题的答案。

5a281f8a-c862-11ed-bfe3-dac502259ad0.png

图2: QA场景下的recursive prompting方案示例‍

整个系统分为三个部分

a)无监督问题分解,将原问题分解为多个相对简单的子问题。这里需要训练一个分解模型,用于将复杂问题分解成多个子问题。由于这个任务下的监督训练数据构造成本高昂,于是提出了一种无监督的训练数据构造方式,对于每一个复杂问题q,从语料集Q中检索召回得到N个对应的简单问题s作为q的子问题,N的取值可以依赖于具体任务或者具体问题。我们希望这些简单问题在某些方面跟q足够相似,同时这些简单问题s之间有明显差异。从而构造出复杂问题跟子问题序列之间的伪pair对(q, [s1,…sN]),用于训练分解模型。

5a77a01e-c862-11ed-bfe3-dac502259ad0.png

b)生成子问题回复,利用现有的QA模型,去生成各个子问题的回复。这里不对QA模型有太多限制,只要它能正确回复语料库S中的简单问题即可,所以尽量采用在S中效果优异的QA模型。

c)生成复杂问题回复,将复杂问题,各个子问题跟对应回复一同作为QA模型的输入,生成复杂问题的回复。这里的QA模型可以采用跟第二步一样的模型,只要将输入做对应调整即可。

5a95a370-c862-11ed-bfe3-dac502259ad0.png

图3: QA场景下的recursive prompting方案示例

5ae945ac-c862-11ed-bfe3-dac502259ad0.png

图4: 实验结果对比

从实验效果上可以明显看出这些问题分解的方式能够显著提升模型效果。

串行式

SEQZERO

如何利用大规模语言模型将自然语言问题转化为SQL语句?SEQZERO就是一种解法。由于SQL这种规范语言的复合结构,SQL语句很多情况下会显得复杂且冗长,要让语言模型学会生草本跟SQL语言需要大量训练数据,于是出现了一种基于few-shot的方法SEQZERO。

一个SQL语句包括多个部分,例如From **,SELCT **, WHERE **,只要能从自然语言问题中提出这几个部分对应的元素,然后通过规则可以转化为对应的SQL语句。于是SEQZERO的做法就是先利用语言模型预测得到其中一个元素,将该元素加入到原问题中生成下个元素,重复此操作直到生成全部元素,然后通过规则将所有结果组合起来的就得到对应的SQL语句。在预测每个元素的过程中,为了得到更加强大的泛化能力,采用了few-shot跟zero-shot的集成策略。

5b1801f8-c862-11ed-bfe3-dac502259ad0.png

图5: SEQZERO示例

Least-to-most

虽然chain-of-thought prompting在很多自然语言推理任务有显著效果,但是当问题比prompt里的示例更难时,它的表现会很糟糕。举个例子,比如任务抽取文本每个单词最后一个字母,prompt的示例输入是3个单词,输入相对较短,但是问题的长度却是10个单词,这种情况下chain-of-thought prompting的策略就会失效。于是提出了Least-to-most,通过两阶段的prompting来解决这种问题,第一阶段通过prompting将原问题分解为一系列子问题,第二阶段则是通过prompting依次解决子问题,前面子问题的问题跟答案会加入到候选子问题的模型输入中去,方便语言模型更好地回复候选子问题。由于这两个阶段任务有所区别,对应的prompt内容也不同。

5b812296-c862-11ed-bfe3-dac502259ad0.png

图6: Least-to-most示例

4 其他

Successive prompting

前面几种方法都是一开始就将问题分解为多个子问题,然后在通过串行或者并行的方式回复所有子问题,而successive prompting则是每次分解出一个子问题,让语言模型去回复该子问题,再将该子问题以及对应答案加入到模型输入种,进而分解出下一个子问题,重复这个过程直到没有新的子问题生成,那么最后一个子问题的答案就是原问题的答案。

5b9d881e-c862-11ed-bfe3-dac502259ad0.png

图7: successive prompting示例

5 总结‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

Recursive prompting这种思路其实蛮好理解的,目前大规模语言模型处理这些简单任务效果是很不错的,但是复杂问题就比较糟糕了,一方面构造这些复杂问题相关数据的工作很艰巨,另一方面直接让语言模型在这些复杂问题数据上训练效果也很一般(想想为什么有些数据集上sota指标也很低)。但是让语言模型学会根据具体问题进行拆解,通过将复杂问题分解为相对简单的子问题,采用分而治之的方式,再将子问题答案汇总,不就得到原问题的答案了嘛。这也跟我们人类的行为模式更加接近,对于复杂任务,我们会通过合理规划将其划分为具体多个子任务,然后再去一一解决这些子任务。想想中华民族伟大复兴的道路,不也是通过一个又一个的五年计划逐步向前推进的嘛。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    767

    浏览量

    44173
  • 语言模型
    +关注

    关注

    0

    文章

    528

    浏览量

    10292
  • SQL语句
    +关注

    关注

    0

    文章

    19

    浏览量

    7068

原文标题:增强语言模型之Recursive prompting

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    名单公布!【书籍评测活动NO.30】大规模语言模型:从理论到实践

    评测资格! 2022年11月,ChatGPT的问世展示了大模型的强大潜能,对人工智能领域有重大意义,并对自然语言处理研究产生了深远影响,引发了大模型研究的热潮。 距ChatGPT问世不到一年,截至
    发表于 03-11 15:16

    【大语言模型:原理与工程实践】揭开大语言模型的面纱

    语言模型(LLM)是人工智能领域的尖端技术,凭借庞大的参数量和卓越的语言理解能力赢得了广泛关注。它基于深度学习,利用神经网络框架来理解和生成自然语
    发表于 05-04 23:55

    【大语言模型:原理与工程实践】大语言模型的基础技术

    处理各种自然语言任务时都表现出了惊人的能力。这促使一个新的研究方向诞生——基于Transformer 的预训练语言模型。这类模型的核心思想是先利用
    发表于 05-05 12:17

    python自然语言

    最近,python自然语言是越来越火了,那么什么是自然语言自然语言(Natural Language )广纳了众多技术,对自然或人类语言
    发表于 05-02 13:50

    自然语言处理怎么最快入门?

    问答等等。我们日常场景中比较常见到的类似Siri、微软小冰之类的,这些的基础都是自然语言处理,另外还有一些语音处理,这就暂且不表了。总之,你看到的机器与人利用语言交互,用机器模拟人脑阅读,对话,评论等等这些
    发表于 11-28 10:02

    关于自然语言处理之54 语言模型(自适应)

    自然语言处理——54 语言模型(自适应)
    发表于 04-09 08:20

    自然语言处理的语言模型

    自然语言处理——53 语言模型(数据平滑)
    发表于 04-16 11:11

    什么是自然语言处理

    什么是自然语言处理?自然语言处理任务有哪些?自然语言处理的方法是什么?
    发表于 09-08 06:51

    嵌入式SQL语句与主语言之间的通信

    SQL嵌入到高级语言中混合编程,程序中会含有两种不同计算模型语句SQL语句高级
    发表于 12-22 07:44

    自然语言处理常用模型解析

    自然语言处理常用模型使用方法一、N元模型二、马尔可夫模型以及隐马尔可夫模型及目前常用的自然语言
    发表于 12-28 15:42 5905次阅读
    <b class='flag-5'>自然语言</b>处理常用<b class='flag-5'>模型</b>解析

    自然语言处理怎么最快入门_自然语言处理知识了解

    自然语言处理就是实现人机间自然语言通信,实现自然语言理解和自然语言生成是十分困难的,造成困难的根本原因是自然语言文本和对话的各个层次上广泛存
    发表于 12-28 17:10 5315次阅读

    基于自然语言生成多表SQL语句模板填充的方法

    自然语言生成SαL查询不仅是构建智能数据库查询系统的一个重要鉏成部分,亦是新型供电轨道交通系统混合时态大数据个性化运维的难点之一。目前利用深度学习模型的方法专注于数据库中单表SQL查询
    发表于 04-09 16:32 40次下载
    基于<b class='flag-5'>自然语言</b>生成多表<b class='flag-5'>SQL</b><b class='flag-5'>语句</b>模板填充的方法

    自然语言和ChatGPT的大模型调教攻略

    指令调整(Instruction Tuning)将多种任务转化自然语言表述的形式,再通过seq2seq的监督学习+多任务学习的方式调整大规模语言
    发表于 04-24 10:28 921次阅读
    <b class='flag-5'>自然语言</b>和ChatGPT的大<b class='flag-5'>模型</b>调教攻略

    自然语言处理的概念和应用 自然语言处理属于人工智能吗

      自然语言处理(Natural Language Processing)是一种人工智能技术,它是研究自然语言与计算机之间的交互和通信的一门学科。自然语言处理旨在研究机器如何理解人类语言
    发表于 08-23 17:31 1672次阅读

    大规模语言模型的基本概念、发展历程和构建流程

    大规模语言模型(Large Language Models,LLM),也称大规模语言模型或大型
    的头像 发表于 12-07 11:40 4344次阅读
    <b class='flag-5'>大规模</b><b class='flag-5'>语言</b><b class='flag-5'>模型</b>的基本概念、发展历程和构建流程