探索无监督域自适应,释放语言模型的力量:基于检索增强的情境学习实现知识迁移...

news2024/11/27 4:30:01

d3a26acee5ad74644b2d152e6ed4ace8.png

深度学习自然语言处理 原创
作者: Xnhyacinth

在自然语言处理(NLP)领域,如何有效地进行无监督域自适应(Unsupervised Domain Adaptation, UDA) 一直是研究的热点和挑战。无监督域自适应的目标是在目标域无标签的情况下,将源域的知识迁移到目标域,以提高模型在新领域的泛化能力。近年来,随着大规模预训练语言模型的出现,情境学习(In-Context Learning) 作为一种新兴的学习方法,已经在各种NLP任务中取得了显著的成果。然而,在实际应用场景中,我们经常面临一个问题:源领域的演示数据并不总是一目了然。这就导致了需要进行跨领域的上下文学习的问题。此外,LLMs在未知和陌生领域中仍然面临着一些挑战,尤其是在长尾知识方面。同时在无监督域自适应任务中,如何充分利用情境学习的优势进行知识迁移仍然是一个开放性问题。

本文旨在探讨如何在无监督域自适应场景下,通过检索增强的情境学习(Retrieval-Augmented In-Context Learning) 实现知识迁移。具体来说,作者提出了一种名为Domain Adaptive In-Context Learning (DAICL) 的框架,该框架通过检索目标域的相似示例作为上下文,帮助模型学习目标域的分布和任务特征。全面研究了上下文学习对于领域转移问题的有效性,并展示了与基线模型相比取得的显著改进。

接下来就让我们一起看看作者是如何实现检索增强情境学习的知识迁移!

33b7e3816b132586b8d2d0dd01437c85.png

论文: Adapt in Contexts: Retrieval-Augmented Domain Adaptation via In-Context Learning
地址: https://arxiv.org/pdf/2311.11551.pdf

前言

在自然语言处理领域,大型语言模型(LLMs)通过其强大的能力在各种任务上取得了显著的成功。然而,当面临跨领域的情景时,LLMs仍面临着挑战,由于目标域标签不可用,在实际场景中通常缺乏域内演示。从其他领域获取带标签的示例可能会遭受巨大的句法和语义领域变化。此外,LLMs很容易产生不可预测的输出, 而且LLMs在未知和陌生领域的长尾知识上仍然存在局限性。因此亟需有效的适应策略,将语言模型的知识从标记的源域转移到未标记的目标域,称为无监督域适应(UDA)。UDA 旨在调整模型,从标记的源样本和未标记的目标样本中学习与领域无关的特征

346fbdda9ebb8895ece39506da74039f.png

为了解决这些问题,本文提出了一种基于上下文学习的无监督领域适应(Unsupervised Domain Adaptation, UDA)方法,旨在将LLMs从源领域成功适应到目标领域,无需任何目标标签。从目标未标记语料库中检索类似的示例作为源查询的上下文,并通过连接源查询和目标上下文作为输入提示来执行自适应上下文学习。如上图所示,对于来自源域的每个输入,将其上下文与从目标未标记域检索到的语义相似的文本组合起来,以丰富语义并减少表面形式的域差异。然后,模型将学习源输入和目标上下文的任务区分。

方法

该研究提出了一种名为Domain Adaptive In-Context Learning (DAICL)的框架,通过检索目标域的相似示例作为上下文,帮助模型学习目标域的分布和任务特征,使LLMs同时学习目标领域分布和判别性任务信号。具体来说,对于给定的源域数据和目标域数据,首先使用检索模型(如SimCSE)在目标域中检索与源域数据相似的示例。然后,将检索到的示例作为上下文,与源域数据一起作为输入,进行情境学习。通过这种方式,模型可以在目标域的上下文中学习任务特征,同时适应目标域的数据分布。主要分为以下几个部分:

  • 检索目标域相似示例:首先,在目标域中检索与源域数据相似的示例。这一步的目的是找到能够代表目标域特征的示例,以便模型能够在目标域的上下文中学习任务特征。检索方法可以采用现有的密集检索模型,如SimCSE。

  • 构建上下文:将检索到的目标域相似示例与源域数据一起作为输入,形成上下文。这样,模型可以在目标域的上下文中学习任务特征,同时适应目标域的数据分布。

  • 情境学习:在构建的上下文上进行情境学习。这里采用了两种任务损失函数:(1)上下文任务损失,用于学习任务特征,预测标签值y;(2)上下文语言建模损失,用于学习目标域的分布。通过优化这两个损失函数,模型可以在目标域中实现知识迁移。

  • 模型训练:根据所使用的模型架构(如编码器,解码器模型),设计相应的prompting策略和训练策略。对于编码器模型,可以采用提示词(prompt)策略,将源域数据和检索到的目标域示例拼接在一起作为输入;对于解码器模型,可以直接将检索到的目标域示例作为输入,进行自回归学习。

  • 模型评估:在目标域的测试数据上评估模型性能。通过比较不同方法在命名实体识别(NER)和情感分析(SA)等任务上的结果,验证DAICL框架的有效性。

bd15fbdff7cb4f54c4127aa4532f5179.png

如上图所示, 显示了 NER 任务上仅编码器模型的训练过程概述,MLM 目标会鼓励编码器学习与源域无法区分的目标分布。对于任务学习目标,在源输入上使用平均汇聚(average pooling) 作为情感分析任务的预测机制,而在语言模型特征之上使用附加的条件随机场(CRF)层进行命名实体识别任务的标记级别分类。

对于仅解码器架构,包括仅推理微调两种范式,下图图为带有推理提示的示例,在给定目标测试查询的情况下从源标记数据集中搜索输入标签对。虚线框包含从源检索的演示。

3b98ee7126e53e55d7aaae1360fca37f.png

对于微调设置下,利用lora用更少的计算资源微调更大的 LM,微调数据示例形式为,如下所示:

3a996d99391b4732e7fcf2bf8d94802c.png

实验设置

为了评估DAICL方法的有效性,该研究在命名实体识别(NER)和情感分析(SA)任务上进行了广泛的实验。实验采用了多种源域和目标域的组合,涵盖了新闻、社交媒体、金融和生物医学等领域。CoNLL-03(英语新闻)作为源域数据集,目标域数据集包括:金融(FIN)、社交媒体(WNUT-16、WNUT-17)、生物医学(BC2GM、BioNLP09、BC5CDR) 对于情感分析(SA)任务,使用了亚马逊评论数据集,涵盖了四个领域:书籍(BK)、电子产品(E)、美容(BT)和音乐(M)。

本文对比了多种基线方法,包括无监督域自适应的传统方法(如Pseudo-labeling和对抗训练)、基于检索的LM方法(如REALM和RAG)和情境学习方法(如In-context learning)。在实验中,将不同的LLMs架构与提出的In-Context Learning方法进行对比,并评估其在领域适应中的性能。对于评估指标,NER任务使用了F1分数,SA任务使用了准确率acc。

结果分析

76fe560b1d19386a5473dca92993efbc.png 83cf03014b570cc61fec3904eeb1c1a6.png

由以上两个任务的性能对比表可知,DAICL 同时学习两个目标,在大多数适应场景中都大大超过了基线。从 ICL-sup 的结果来看,我们发现仅使用任务目标进行训练对 UDA 略有帮助。正如前面所讨论的,好处源于利用目标上下文的任务判别能力。通过将 DAICL 与 ICL-sup 和 ICL-source 进行比较,可以发现所提出的上下文适应策略通过同时联合学习任务信号和语言建模来增强领域适应。

微调有益于UDA,在 NER 实验中,ChatGPT 的性能非常低,但微调更小的 RoBERTa 模型可以在大多数适应场景中实现最先进的分数。在 SA 实验中,使用更少的可训练参数 (1.7M) 微调 LLaMA 优于所有其他方法。因此,我们假设虽然法学硕士具有很强的泛化能力,但他们不能解决所有领域的问题。对于UDA来说,设计一个有效的适配策略还是有好处的。

38eb6b46d7463d6c5707aaa178ded8d9.png

最后作者也对比了自适应ICL和自适应预训练,自适应 ICL 在执行任务预测时将源输入与目标上下文混合,而自适应预训练只需要源输入;自适应ICL同时学习两个损失。为了比较这两种方法,在 LLaMA-LoRA 上进行了实验以执行自适应预训练。在第一阶段,使用目标未标记文本预训练 LoRA 权重。第二阶段,从上一阶段获得的LoRA检查点开始,通过任务监督继续对其进行微调。使用相同的羊Alpaca模板,但不提供说明性上下文。结果见上表,可以观察到,与 NoICL 相比,预训练对 SA 任务带来的收益很小,可以推测 SA 数据集中的域差距比 NER 数据集中的域差距更小。从而得出结论所提出的自适应 ICL 策略优于自适应预训练,这可能归因于自适应 ICL 下的仅解码器模型可以学习具有示范上下文的两个目标

总结

本文提出了一种名为Domain Adaptive In-Context Learning (DAICL)的框架,用于实现无监督域自适应(UDA)。该框架通过检索目标域的相似示例作为上下文,结合任务损失和领域适应损失进行情境学习,以实现知识迁移。实验采用了多个源域和目标域的数据集,包括命名实体识别(NER)和情感分析(SA)任务。与多种基线方法相比,DAICL在多种跨域场景下均取得了显著的性能提升,证明了其有效性。

尽管本文的方法在领域自适应上取得了令人满意的结果,但仍有一些可以进一步探索和改进的方向。首先,可以进一步研究不同的上下文学习策略,以进一步提高语言模型的领域适应能力。其次,可以考虑在不同任务和领域之间进行联合训练,以进一步提升模型的泛化性能。此外,还可以探索如何将上下文学习与其他领域自适应技术(如对抗训练)相结合,以进一步改进模型的适应性和抗干扰能力;可以考虑将多个任务同时进行无监督域自适应,以提高模型的泛化能力和适应性。通过在这些方向进行探索和改进,未来研究有望进一步提高无监督域自适应方法的性能,为实际应用提供更有效的解决方案。


备注:昵称-学校/公司-方向/会议(eg.ACL),进入技术/投稿群

fe7db50bba521b40c785d07cb7c7a6db.png

id:DLNLPer,记得备注呦

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

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

相关文章

排序算法---选择排序

1.实现流程&#xff1a; 1. 把第一个没有排序过的元素设置为最小值&#xff1b; 2. 遍历每个没有排序过的元素&#xff1b; 3. 如果元素 < 现在的最小值&#xff1b; 4. 将此元素设置成为新的最小值&#xff1b; 5. 将最小值和第一个没有排序过的位置交换 选择排序执行流程…

数据分析基础之《numpy(2)—ndarray属性》

一、ndarray的属性 1、属性方法 属性名字属性解释ndarray.shape数组维度的元组&#xff08;形状&#xff09;ndarray.ndim数组维数ndarray.size数组中的元素数量ndarray.itemsize一个数组元素的长度&#xff08;字节&#xff09;ndarray.dtype数组元素的类型使用方法 数组名.…

AS安装目录

编辑器&#xff1a; sdk: gradle: gradle使用的jdk目录&#xff1a;Gradle使用的jdk是android studio安装目录下的jbr 成功项目的android studio配置&#xff1a;

从Centos-7升级到Centos-Stream-8

如果在正式环境升级&#xff0c;请做好数据备份以及重要配置备份&#xff01;因为升级会造一部分应用被卸载。 注意&#xff1a;升级前请备份好数据&#xff0c;升级可能会导致ssh的root用户无法登陆、网卡名称发生改变、引导丢失无法开机等问题。 1.安装epel源 yum -y install…

vue3中关于echars的使用

今天介绍一个好用的插件echars&#xff0c;一个可视化插件Apache ECharts 一、使用步骤 1、安装 npm install echarts --save 2、导入 import * as echarts from echarts 3、正式使用 echars的使用非常的简单&#xff0c;直接点击官网有现成的代码的可用 代码示例 <t…

Spring Boot中的事务是如何实现的?懂吗?

SpringBoot中的事务管理&#xff0c;用得好&#xff0c;能确保数据的一致性和完整性&#xff1b;用得不好&#xff0c;可能会给性能带来不小的影响哦。 基本使用 在SpringBoot中&#xff0c;事务的使用非常简洁。首先&#xff0c;得感谢Spring框架提供的Transactional注解&am…

为 Compose MultiPlatform 添加 C/C++ 支持(1):在 kotlin 中使用 cinterop 实现与 C/C++ 互操作

前言 在安卓中我们可以使用 jvm 提供的 jni 方便的编写 C/C 代码并与 java/kotlin 互操作。 但是当使用 kotlin MultiPlatform 时想要调用 C/C 代码将变得麻烦甚至是不可用&#xff0c;因为对于 Android 和 Desktop 来说依旧使用的是 jvm &#xff0c;所以只要稍微适配一下也…

Android画布Canvas绘图scale,Kotlin

Android画布Canvas绘图scale&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.…

【密码学基础】Diffie-Hellman密钥交换协议

DH介绍 Diffie-Hellman密钥协议算法是一种确保共享密钥安全穿越不安全网络的方法。 这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥&#xff0c;然后可以用这个密钥进行加密和解密。 但是注意&#xff0c;这个密钥交换协议 只能用于密钥的交换&#xff0c;而…

【Table/SQL Api】Flink Table/SQL Api表转流读取MySQL

引入依赖 jdbc依赖 flink-connector-jdbc mysql-jdbc-driver 操作mysql数据库 <!-- Flink-Connector-Jdbc --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc_${scala.binary.version}</artifactId>…

深度学习——第4.1章 深度学习的数学基础

第4章 深度学习的数学基础 目录 4.1 向量 4.2 求和符号 4.3 累乘符号 4.4 导数 4.5 偏导数 4.6 矩阵 4.7 指数函数和对数函数 注意&#xff1a;4.6和4.7位于4.2章 第4章 深度学习的数学基础 本章总结一下机器学习所需的数学知识&#xff0c;同时介绍如何在Python中使用…

PolarCTF网络安全2023冬季个人挑战赛 WEB方向题解 WriteUp

完工&#xff0c;最后CB链没时间打了&#xff0c;估计也不怎么打得出来&#xff0c;今天一边在打polar一边弄服务外包赛&#xff0c;好累呜呜呜。 Polar 冬 干正则&#xff08;WEB&#xff09; 直接给了源码 parse_str()&#xff1a;将字符串解析成多个变量 payload&#xff…

基于JavaWeb+SSM+Vue马拉松报名系统微信小程序的设计和实现

基于JavaWebSSMVue马拉松报名系统微信小程序的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.…

23 秋 计网真题回忆

总体 计网整体部分还是以全龙老师的PPT和王道的考研题和课后题考的部分很细 都是PPT上的内容 最好不要光做王道 PPT上很细的点也要看题量很大25个选择 5个判断 十个填空 5个大题好像是 不熟练的话可能写不完所有的配图都是网上找的资源 比如19-22的学校题和408真题 非本人所有…

Low Cost and High Performance FPGA with ARM and SDRAM inside

AG10KSDE176 AGM AG10KSDE176 是由 AGM FPGA AG10K 与 SDRAM 叠封集成的芯片&#xff0c;具有 AG10K FPGA 的可编程功能&#xff0c;提供更多可编程 IO&#xff0c;同时内部连接大容量 SDRAM。  FPGA 外部管脚输出 EQFP176 封装底部 Pad 为 GND&#xff0c;管脚说明请见下表&…

使用cmake构建的工程的编译方法

1、克隆项目工程 2、进入到工程目录 3、执行 mkdir build && cd build 4、执行 cmake .. 5、执行 make 执行以上步骤即可完成对cmake编写的工程进行编译 &#xff0c;后面只需执行你的编译结果即可 $ git clone 你想要克隆的代码路径 $ cd 代码文件夹 $ mkdir bu…

鸿蒙前端开发-构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。 选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Serv…

四. 基于环视Camera的BEV感知算法-环视背景介绍

目录 前言0. 简述1. 环视背景介绍2. 环视思路3. 主流基于环视Camera的算法详解总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基于环视Camer…

Kafka Streams:深度探索实时流处理应用程序

Apache Kafka Streams 是一款强大的实时流处理库&#xff0c;为构建实时数据处理应用提供了灵活且高性能的解决方案。本文将深入探讨 Kafka Streams 的核心概念、详细原理&#xff0c;并提供更加丰富的示例代码&#xff0c;以帮助读者深入理解和应用这一流处理框架。 1. Kafka…

Redis,什么是缓存穿透?怎么解决?

Redis&#xff0c;什么是缓存穿透&#xff1f;怎么解决&#xff1f; 1、缓存穿透 一般的缓存系统&#xff0c;都是按照key去缓存查询&#xff0c;如果不存在对用的value&#xff0c;就应该去后端系统查找&#xff08;比如DB数据库&#xff09;。一些恶意的请求会故意查询不存在…