ChatQA实现策略:兼看大模型进行时序事件挖掘的思路

一、ChatQA:两阶段指令微调的对话思路

《ChatQA: Building GPT-4 Level Conversational QA Models》(https://arxiv.org/pdf/2401.10225.pdf)提出了一个两阶段的对话问答思路。

1、指令微调

微调包含两个阶段,Supervised Fine-tuning和Context-Enhanced Instruction Tuning,如下图所示:

图片

image

在第一阶段,在指令跟随和对话数据集上进行监督微调(Supervised Fine-tuning),该阶段用于让模型获取基本的对话和指令遵循能力。

在这个阶段,为了构建一个大型、全面的监督微调(SFT微调(SFT)数据集,从高质量指令调谐数据集中收集128KSFT样本,包括社会对话数据集Soda、一个长式QA数据集ELI5、FLAN和思维链数据集、Self-Instruct 、Unnatural Instructions、公共对话数据集:OpenAssistant以及Dolly。

在准备阶段,将所有SFT数据的结构统一为对话格式,首先在开头添加了一个“System”角色,以设置一个通用指令,指导LLM提供礼貌和有帮助的回答,还添加了“User” and “Assistant”角色,以纳入指令调整数据集中的指令和回复对,在LLM基础模型上使用这种统一格式进行微调。

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
User: {Question 1}
Assistant: {Answer 1}
...
User: {Latest Question}
Assistant:

第二阶段为语境增强指令调整的后续阶段(Context-Enhanced Instruction Tuning),该阶段专门用于增强模型在对话中的语境感知或检索增强生成能力,这里的重点是怎么获取这方面的数据。

一个是人工标注的会话质量保证数据集(称为HumanAnnotatedCon-vQA),该数据集仅由7k个对话组成。为了建立这个数据集,首先从互联网上收集了7k篇涵盖不同主题的文档。然后,指示标注人员提出有关文档的问题(和后续问题),并给出答案,最终为每份文档创建了一个多回合对话,共产生了7k个QA对话,每个对话平均有5个回合。

此外,为了减少在无法回答的情况下产生的幻觉答案,在数据集中加入了无法回答的样本,这里的构建方式很有趣,通过让标注者提供所有上下文位置给用户问题,然后删除相关文本来构建的,对于无法回答的问题,使用“对不起,我无法根据上下文找到答案”(“Sorry. I cannot Page 1 of 2 find the answer based on the context”)作为回复。

一个是GPT-3.5-turbo生成合成对话式QA数据集,从网络抓取中收集了7k篇文档(平均每篇文档的字数在1k左右),这些文档涵盖了广泛的领域,每个文档都用于生成一个会话QA样本,这样就生成了总共7k个多回合QA对话,每个对话平均有4.4个用户代理回合(称为SyntheticConvQA)。

与HumanAnnotatedConvQA类似,还构建了另外1.5k个带有无法回答的多轮数据集。在这个合成数据集中,由于没有注释的上下文位置注释,因此构建了SyntheticConvQA中的合成无法回答样本。

这块也很有趣,首先将文档(针对每段对话)切割成不同的块。然后,只有当有与对话者的回答"高度重叠"的语块被删除,而其余语块与对话者的回答"低度重叠"时,才将其视为有效的无法回答样本。

这里的重叠度计算方式为:使用每个语块与代理答案之间的4-gram召回得分(它衡量了答案的4-gram短语在每个语块中的比例)作为衡量标准来确定它们之间的重叠度,并将高于0.5视为"高重叠度",低于0.1视为"低重叠度"。

最后,为了提高处理表格文档和算术计算的QA能力,添加了包含着两个能力的TAT-QA数据集,第二阶段的训练混合数据集包括:会话式QA数据集:HumanAnnotatedConvQA或SyntheticConvQA;单轮QA数据集:DROP、NarrativeQA、Quoref、ROPES、SQuAD1.1、SQuAD2.0、NewsQA、TAT-QA以及第一阶段的所有SFT数据集。

这个阶段对应的prmpt如下:

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
{Context for Latest Question}
User: {Instruction} + {Question 1}
Assistant: {Answer 1}
...
User: {Latest Question}
Assistant:

2、对话式问答检索

在对话式问答中,当文档变得过于冗长而无法直接输入LLM时,能够处理对话式查询的检索器就变得至关重要,这种会话检索器会对对话历史和当前查询进行编码,然后从文档中检索相关上下文,然后只有相关上下文才会被用作LLM的输入。

这块的方式包括两种:

一个是查询重写query rewrite,一个是微调一个检索模块。

图片

 

其中:

在微调检索模块方面,由于Dragon等代表方案,都是针对单轮查询进行优化的,因此对多轮对话查询的泛化能力有限,因此使用会话查询和上下文对来进一步微调单轮检索器,以更好地应对会话输入,为了建立高质量的微调数据集,利用来自HumanAnnotat-edConvQA或SyntheticConvQA的会话QA数据集来构建会话查询和上下文对。

对于HumanAnnotatedConvQA,直接采用会话查询和上下文对,并利用它们进一步微调查询检索器。对于SyntheticConvQA,首先将对话式QA数据集中的每篇文档切割成不同的块。然后,计算回答与每个语块之间的4-gram召回得分。然后,将召回分数最高的语块视为当前用户问题的正确语块。最后,将构建的会话查询和上下文数据集进行微调。

另一种解决方案是会话查询重写,使用查询重写器根据会话历史记录重写当前问题,重写后的查询直接作为单轮查询检索器的输入,用于检索相关上下文。

除了嵌入和搜索成本外,查询重写模型还为生成重写查询带来了大量额外的计算费用,这一块使用GPT-3.5-turbo作为重写器,不仅为GPT-3.5-turbo提供了改写任务指令,还为其提供了少量改写示例,以提高改写结果的质量。

对应的prompt如下:

You are a helpful, pattern-following assistant.
role-user:
Given the following conversation between PersonU and PersonA:
PersonU: Hello, I would like to know what to do if I do not agree with any decision.
PersonA: disagree with our decision about your monthly income adjustment amounts?
PersonU: no. Where can I find my SHIP contact information?
PersonA: You can find your local SHIP contact information in the back of your
Medicare & You 2020 Handbook online.
PersonU: and how do they calculate the adjustments?
Instead of having this entire conversation, how can PersonU get what he or she is
looking for using a single question? Respond with that question.
role-assistant:
How is the calculation for adjustments made by SHIP determined?
role-user:
Given the following conversation between PersonU and PersonA:
PersonU: I need to know how to prepare for college.
PersonA: You should first define your goals and interest and be sure to know the
costs and how to plan financially and academically for college.
PersonU: Is there something I can use as a guide to get ready for it?
Instead of having this entire conversation, how can PersonU get what he or she is
looking for using a single question? Respond with that question.
role-assistant:
What resources or guides can I use to help me prepare for college?
role-user:
Given the following conversation between PersonU and PersonA:
{Dialogue History + Latest Question}
Instead of having this entire conversation, how can PersonU get what he or she is
looking for using a single question? Respond with that question.
role-assistant:

二、基于大模型进行时序事件抽取

事件序列模型在分析和预测事件方面非常有效,建立此类模型需要大量高质量的事件序列数据。然而,在某些应用中,无法获得干净的结构化事件序列,自动序列提取也会导致数据过于嘈杂和不完整。在金融领域,事件模型可用于预测股市趋势并做出明智的投资决策,在医疗保健领域,事件模型可以帮助识别病人数据中的模式和相关性,从而改进诊断和治疗计划,在网络安全领域,这些模型可以通过分析导致入侵的一系列事件来检测和预防潜在的网络攻击。

《Distilling Event Sequence Knowledge From Large Language Models》(https://arxiv.org/pdf/2401.07237.pdf)这一文章探索了如何使用大型结构模型(LLM)来生成事件序列,从而有效地用于概率事件模型的构建,假设是,在大型语料库中接受过训练的 LLM 已经收集了关于可信事件序列的所需知识,因此可以在适当的指导下生成多样化和高质量的事件序列,设计了一种新的上下文迭代提示策略,用于使用LLM生成高质量的事件序列。

1、实现思路

该工作将从LLM中提炼事件序列知识的任务分为两个子任务,如图2所示:

图片

 

(i)给定事件触发类型,生成新的、独特的事件序列;

(ii)挖掘知识图谱中尚未推导出的高置信度序列模式,并学习概率模型以发现复杂的事件序列规则。

图2中的每个事件类型都对应维基数据中的一个高级事件概念,这些事件概念没有相关的时间戳,但有因果关系(如has_cause或has_effect,例如地震导致海啸)。

其中,为了得到这些事件概念集合,从维基数据中整理出一个新的数据集,其中包含代表有新闻价值事件的高级事件概念(类)。

为此,在维基数据中查询了与维基新闻文章有链接的事件概念,这些概念是发生类的子类,即表示它们是有新闻价值的事件类的实例,为这些事件概念收集了50个顶级类,每个类都有多个标签(如冲突→冲突(心理)、争议、分歧等)。

这样,50个顶级类共产生了202个独特的事件标签,这些事件概念中的大多数都有一些因果关系(即has_cause或has_effect),可以使用这些关系对作为上下文示例来创建提示。

2、利用LLMs进行事件序列生成器

首先分析了LLMs将事件预测建模为条件生成任务的能力,这种条件生成任务可以zero-shot生成,也可以是few shot生成,目标是事件概念的线性化序列,首先用一个事件触发器提示一个大型语言模型(带有上下文中的示例)从一组定义好的标签中生成下一个概念,然后重复这一过程,直到得到一个所需长度的序列。

具体的提示如下:

图片

image

例如,给定一个事件触发器T,对生成长度为T的线性化字符串y的概率进行建模,该字符串包含依次跟随T的N个唯一事件概念,这是标准的条件语言建模目标。

图片

3、挖掘事件序列链

应用经典的模式挖掘算法(即 GSP)来识别潜在has_cause和has_effect事件序列链,为了在提取的事件类别之间推导出新的、未见过的关系(has_cause或has_effect),使用上一步骤生成的新事件序列,然后使用经典的频繁项集挖掘算法。

图片

图2右上角部分展示了整个工作流程的这一方面,即从事件序列中挖掘规则。

为了在zeroshot环境中生成新的事件序列,从一个事件触发器(如工作场所事故等概念)开始,创建一个带有描述期望关系的说明和一些上下文示例的提示(ICL提示),并将模型输出限制为原始的50个事件概念标签,以生成序列中的下一个事件。

将模型输出附加到另一个ICL提示中,其中包含连接事件示例(即问题形式为 "X、Y和Z之后会发生什么"),通过重复这一过程,直到达到预先设定的最大序列长度(本例中为10),或直到模型在k次最大尝试中无法生成词汇内应答(。

图片

用来挖掘新事件模式的经典模式挖掘算法(即GSP和SPADE)都是基于先验的方法。

在这两种方法中,给定相同事件概念类的两个序列 α=<a1,a2,...an>和β=<b1,b2,...bn>, α是β的子序列,表示为α⊆β,如果存在值集1≤j1<j2<...<jn≤m,使得a1⊆bj1,a2⊆bj2,...,an⊆bjn,则β是α的超序列,给定多个这样的序列和一个支持阈值,就能找到一组频繁事件子序列。

4、通过SuMM模型识别事件序列规则

了解在大量事件序列中导致给定事件类型的潜在影响事件,是分析多变量事件序列(即没有时间戳的事件,如模型生成的事件)的一个重要方面,来识别特定感兴趣事件类型的潜在影响事件(即父事件类型)。

图片

经典的k阶马尔可夫链通过模拟在前k个事件序列中观察到特定事件类型的概率来捕捉这些动态。

《Summary Markov Models for Event Sequences》(https://arxiv.org/abs/2205.03375)通过利用汇总历史事件发生情况的函数,以及识别影响相关事件类型发生概率的事件类型子集(这就形成了影响集),对其他事件序列马尔可夫模型进行了概括。

该工作利用LLM生成的序列来学习两种类型的SuMM:二元SuMM(BSuMM)和顺序SuMM(OSuMM)。在二元SuMMs中,只有相关历史中某个事件的存在或不存在才会对其他事件的发生产生影响,而在OSuMMs中,事件的顺序也会被考虑在内。

图片

例如,图1展示了使用BSuMMs学习难民危机和大规模移民事件影响集的示例。

大规模移民和饥荒这两个事件被确定为难民危机的影响事件。

大规模移民和饥荒同时发生时,作为事件序列的一部分,导致难民危机的概率为0.91。

另一方面,在没有饥荒的情况下发生大规模移民导致难民危机的概率为0.31。

总结

本文主要介绍了三个话题,是最近读起来稍微有趣的工作,其中介绍的数据构造方式、算法思路,可以再延伸阅读。

参考文献

1、https://arxiv.org/pdf/2401.10225.pdf

2、https://arxiv.org/pdf/2401.07237.pdf

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cortex-M3/M4内核NVIC及HAL库函数详解(2):HAL库中断底层函数实现

0 工具准备 Keil uVision5 Cortex M3权威指南&#xff08;中文&#xff09; Cortex M3与M4权威指南 stm32f407的HAL库工程 STM32F4xx中文参考手册 1 HAL库中断底层函数实现 打开stm32f407的HAL库工程&#xff0c;可以在CMSIS->Include->core_cm4.h内找到有关NVIC寄存器设…

ctfshow信息收集(web1-web20)

目录 web1 web2 web3 web4 web5 web6 web7 web9 web10 web11 web14 web15 web16 web17 web18 web19 web20 web1 根据提示的孩子开发的时候注释没有被及时删除 web2 js原因无法查看源代码 第一种方法 在url前加入 view-source&#xff1a; 会显示页面源代…

【LeetCode: 295. 数据流的中位数 + 堆】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Windows如何给已经启动的Docker容器添加或者修改端口映射(通过修改配置文件实现)

需求&#xff1a;已经启动的Docker容器添加或者修改端口映射 找到配置文件&#xff1a; \wsl.localhost\docker-desktop-data*data*\docker\containers[hash_of_the_container] 有些版本在&#xff1a; \wsl$\docker-desktop-data*version-pack-data*\community\docker\contai…

Lambda支持的方法引用

目录 引用类中的静态方法替换lambda引用对象实例化方法替换lambda引用类中的实例方法替换lambda引用构造器替换lambda 引用类中的静态方法替换lambda 引用类方法&#xff1a;引用类的静态方法&#xff1b;类名::静态方法名 demo: 将String类型数据转换成为Integer类型 创建一个…

HCIA-HarmonyOS设备开发认证-序

序 最近涉及到HarmonyOS鸿蒙系统设备开发&#xff0c;在网络上已经有很多相关资料&#xff0c;视频教程&#xff0c;我也移植了公司的一个stm32G474板卡&#xff0c;运行LiteOS-m L0系统。 一面看资料一面移植&#xff0c;遇到不少坑&#xff0c;当看到运行的LOGO时&#xff0…

制冷培训一

常用制冷方法 1 相变制冷&#xff1a;汽液、液固 2 气体膨胀制冷&#xff1a;节流膨胀、膨胀机膨胀 3 半导体制冷&#xff1a; 4 涡流管制冷&#xff1a; 5 磁制冷&#xff1a; 6 稀释制冷&#xff1a; 7 激光制冷&#xff1a; 汽液相变制冷 1 蒸汽压缩制冷 2 蒸汽吸收制冷 3 …

大创项目推荐 深度学习验证码识别 - 机器视觉 python opencv

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x…

C++参悟:正则表达式库regex(更新中)

正则表达式库regex&#xff08;更新中&#xff09; 一、概述二、快速上手Demo1. 查找字符串2. 匹配字符串3. 替换字符串 三、类关系梳理1. 主类1. basic_regex 2. 算法3. 迭代器4. 异常5. 特征6. 常量1. syntax_option_type2. match_flag_type3. error_type 一、概述 C标准库为…

软件测试技术之【自动化测试】

自动化测试 自动化测试的定义&#xff1a;使用一种自动化测试工具来验证各种软件测试的需求&#xff0c;它包括测试活动的管理与实施、测试脚本的开发与执行。 自动化测试只是测试工作的一部分&#xff0c;是对手工测试的一种补充; 自动化测试绝不能代替手工测试;多数情况下&a…

自动控制原理——数学模型建立

目标 1.数学模型概念 描述系统输入、输出变量以及内部个变量之间的关系的数学表达式 2.建模方法 解析法&#xff08;机理解析法&#xff09;: 根据系统工作所依据的物理定律写运动方程 实验法&#xff08;系统辨识法&#xff09;&#xff1a; 给系统施加某种测试信号&am…

【C/Python】用GTK实现多文档窗体程序

一、用C语言 在GTK&#xff08;GIMP Toolkit&#xff09;中实现多文档接口&#xff08;MDI&#xff09;程序可以使用多种方法。GTK本身并没有提供专用的MDI窗口小部件&#xff0c;但可以使用标签页&#xff08;Notebook&#xff09;或多个窗口&#xff08;Window&#xff09;来…

P2P DMA并不是所有场景都会有性能提升

P2P (Peer-to-Peer) DMA技术理论上可以带来性能提升&#xff0c;特别是在特定的工作负载和场景下。例如&#xff0c;当两个高速设备&#xff08;如GPU与NVMe SSD&#xff09;需要频繁进行大量数据交换时&#xff0c;通过P2P DMA&#xff0c;数据可以直接在设备间传输&#xff0…

MacOS X 安装免费的 LaTex 环境

最近把工作终端一步步迁移到Mac上来了&#xff0c;搭了个 Latex的环境&#xff0c;跟windows上一样好用。 选择了 Mactex 做编译&#xff0c;用 Texmaker 做编辑&#xff1b; 1. 下载与安装 1.1 Mactex 下载安装 MacOS 安装和示例 LaTex 的编译器 与 编辑器 编译器使用免费…

支付宝小程序开发踩坑笔记(支付宝、学习强国小程序)

1、接口请求安卓端回调 success&#xff0c;IOS 端回调 fail 原因&#xff1a;dataType 设置不对&#xff0c;默认是 json 格式&#xff0c;对返回数据会进行 json 解析&#xff0c;如果解析失败&#xff0c;就会回调 fail 。加密传输一般是 text 格式。 2、input 禁止输入空格…

Qt5项目拆解第一集解决:中文乱码| 全局字体|注册表|QSS/CSS

# 一、乱码解决代码片段 QTextCodec是Qt中用于处理文本编码和字符集转换的类。它提供了一系列静态函数来实现不同编码的文本转换,包括编码转换、字符集检测和转换、以及数据流中的文本编码处理。QTextCodec类使得Qt可以在不同的编码和字符集之间进行无缝转换,从而方便地处理…

代码随想录算法训练营第三天 | 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表

链表理论基础 链表是一种通过指针串连在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域&#xff0c;一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;。最后一个节点的指针指向 null。链表的存储方式&#xff1a;数组在内存中是连续…

深度强化学习Task2:策略梯度算法

本篇博客是本人参加Datawhale组队学习第二次任务的笔记 【教程地址】 文章目录 基于价值算法和基于策略算法的比较策略梯度算法策略梯度算法的直观理解策略梯度算法REINFORCE算法基于平稳分布的策略梯度算法REINFORCE算法实现策略函数设计模型设计更新函数设计 练习总结 基于价…

注解实现校验接口传参是否超出取值范围

文章目录 1、定义注解2、使用注解3、其余校验实现思路2.04、其余校验实现思路3.0 写接口&#xff0c;Dto里很多字段要检验传参范围&#xff0c;自定义个注解来校验。 1、定义注解 注解定义代码&#xff1a; import javax.validation.Constraint; import javax.validation.Con…

2023年12月 电子学会 青少年软件编程等级考试Scratch三级真题

202312 青少年软件编程等级考试Scratch三级真题 一、单项题 第 1 题 运行左图程序&#xff0c;想得到右图中的效果&#xff0c;红色框应填写的数值是&#xff1f;&#xff08; &#xff09; A&#xff1a;12 B&#xff1a;11 C&#xff1a;10 D&#xff1a;9 第 2 题 下列…