热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NLP范式新变化:Prompt:目前的NLP研究范式

本文主要介绍关于自然语言处理,人工智能,机器学习的知识点,对【NLP范式新变化:Prompt】和【目前的NLP研究范式】有兴趣的朋友可以看下由【洛克-李】投稿的技术文章,希望该技术和经验能帮到你解决你

本文主要介绍关于自然语言处理,人工智能,机器学习的知识点,对【NLP范式新变化:Prompt】和【目前的NLP研究范式】有兴趣的朋友可以看下由【洛克-李】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的NLP,趣AI,深度学习相关技术问题。

目前的NLP研究范式

文章目录 1.Prompt简介2.NLP中的两次重大改变3.Prompt的标注描述3.1 添加Prompt3.2 搜索和映射[z] 4.后续

1.Prompt简介

最近,NLP上又开发出了一种新的范式:Prompt。它通过定义模板来提醒下游任务模型学习的特定目标,在更少的更新参数场景下达到了和fine-tuning方法一样的效果。
具体可以看一下这篇综述文章:《Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing》


简单的来说,不同于fine-tuning方法,prompt范式需要给出一个定义好的模板,这个模板可以是离散的或者是连续的,来提醒模型在预训练的时候学习的知识。这是因为预训练的任务和下游任务往往差别较大,模型可能会存在特定性遗忘。

为了使用这些模型执行预测任务,使用未填充的文本字符串prompt x ′ x' x,将原始输入 x x x进行修改。然后使用语言模型填充文本信息来获取最终字符串 x ~ \tilde{x} x~它允许对语言模型进行大量原始文本的预训练,并通过定义新的模板函数,使得模型能够进行few-shot和zero-shot学习,以适应几乎没有或没有标记数据的场景。

从上图可以看出,prompt方法本质上就是定义了不同的手工模板:“JDK is developed by __”,“This is a super long text. TLjDR: ”, “Birds can __”。就可以使得预训练模型适应不用的任务场景。

2.NLP中的两次重大改变

一直以来,监督学习(supervised learning)使用在很多机器学习任务上,这其中也包括NLP任务。由于传统的机器学习模型,不能够很好的对特征进行提取,因此在NLP任务上往往需要**特征工程(feature engineering)**进行辅助。但神经网络的出现改变了这一现状,使得原始特征可以与模型本身的训练一起学习,因此研究重点转移到神经网络结构工程(architecture engineering)上。在结构工程中,通过设计有助于学习输入特征的合适网络架构来提供归纳偏差。

年份 NLP模型范式变化2017年以前传统机器学习模型、神经网络2017-2019预训练 + 微调(pre-train + fine-tune)2019-至今 ”预训练,prompt和预测“(pre-train,prompt and predict)范式 NLP模型的第一次重大变化

从2017-2019年开始,NLP模型引来了第一次重大的变化。从以前的监督学习,转变为**“预训练 + 微调(pre-train + fine-tune)”**范式。**在这种范式下,模型提前预训练好一个language model(LM),然后在下游任务中对文本数据进行微调预测。**由于训练LM模型所需的原始文本数据非常丰富,因此可以在大型数据集上训练这些模型,在这个过程中,可以通过LM模型学习到文本之间的通用特征。而在下游任务中,则需要引入额外的参数进行fine-tuning,以此来适应特定的任务。目前这种范式称为NLP界的主流范式,它可以在不同任务上提升模型的效果。

NLP模型的第二次重大变化

NLP范式从预训练+微调,已经变成了**”预训练,prompt和预测“**(pre-train,prompt and predict)范式。在这种范式中,不是通过目标工程将预先训练的LM来适应下游任务,而是重新制定下游任务,使其看起来更像在文本提示的帮助下利用原始的LM模型接近特定任务。

下面举几个例子:

比如,但我们识别句子的情感时,”I missed the bus today.“,我们在后面接上手工模板"I felt so ___"。这样就可以让预训练好的LM模型填充情感词语。又或者,可以制定下面模板”English:I missed the bus today。French:____“。让LM模型填充词语作为法语翻译。

通过这种方法,可以选择合适的prompts,让LM模型与预测对应的输出结果,不需要额外的特定任务训练。该方法的优点是,在给定一组适当prompts的情况下,以完全无监督方式训练的单个LM可以用于解决大量任务。然而,它还是会存在一定局限性,这种方法引入了即时工程的必要性,需要找到最合适的提示,让LM去解决任务。

下面这个图对比了NLP中的目前有的范式:

传统的监督学习(不需要神经网络) 神经网络-监督学习:不同NLP任务需要单独训练 pre-train + fine-tune:目前流行的范式,可以适应不同的场景任务 pre-train + prompt + predict:模板prompt范式,可以适应不同的场景任务 3.Prompt的标注描述

让我们先来看一下,以前NLP中监督学习的流程。

我们有输入 x x x,基于模型 P ( y ∣ x ; θ ) P(y|x;\theta) P(yx;θ)得到预测值 y y y。由于要学习模型参数 θ \theta θ,因此在给定输入和输出数据下,训练模型来更新参数。例如:

在情感分类任务上,输入句子 x = x= x=“I love this movie”,输出 y y y + 1 , − 1 {+1, -1} +1,1在机器翻译任务上,输入句子为Finnish x = x= x=”“Hyv ̈a ̈a huomenta.”“,输出句子为English y = y= y=“Good morning”

接下来介绍具体的prompt流程。

3.1 添加Prompt


如上图所示,函数 f p r o m p t ( ⋅ ) f_{prompt}(\centerdot) fprompt()应用在输入句子 x x x中得到Prompt x ′ = f p r o m p t ( ⋅ ) x'=f_{prompt}(\centerdot) x=fprompt()。这个函数包含以下两个步骤:

使用模板,这个模板有两个填充位,包括输入填充[x],和对应的回应填充[z]。其中[x]表示为输入句子,[z]表示模型预测位,这在之后需要映射到 y y y标签中把输入句子 x x x填充到[x]

在上面例子中, x = x= x=“I love this movie”,模板为"[x] Overall, it was a [z] movie."。应用模板后会得到 x ′ = x'= x=“I love this movie. Overall, it was a [z] movie.”。当然,这种模板不一定是指固定某些词语,也可以是一些连续性的embedding空间。如果[z]在模板中间,则称为cloze prompt,如果[z]在模板最后,则称为prefix prompt。

3.2 搜索和映射[z]

我们可以首先定义 Z Z Z为所有 z z z值的集合。对于分类任务来说, Z Z Z可以是{excellent, good, OK, bad, horrible}。然后可以利用预训练的LM模型预测最合适的词语。

最后,从得到的最高分数的词语中,映射到 y y y值,就可以完成整体Prompt的流程。

下图贴了具体的Prompt在不同场景上,常用的手工模板,读者可以针对不同任务进行选择:

4.后续

Prompt中,最主要的一般来说是设计模板,因此目前主流门派分为:离散型prompt和连续型prompt。在后续的文章中,主要介绍自己读到的连续型prompt论文。

本文《NLP范式新变化:Prompt》版权归洛克-李所有,引用NLP范式新变化:Prompt需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战
    OpenAI首席执行官Sam Altman展望:人工智能的未来发展方向与挑战 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 每日学术推荐:异质图神经网络在抽取式文档摘要中的应用研究
    在抽取式文档摘要任务中,学习跨句子关系是至关重要的一步。本文探讨了利用异质图神经网络来捕捉句子间复杂关系的有效方法。通过构建包含不同类型节点和边的图结构,模型能够更准确地识别和提取关键信息,从而生成高质量的摘要。实验结果表明,该方法在多个基准数据集上显著优于传统方法。 ... [详细]
author-avatar
彬哥唔系我
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有