【论文复现】ChatGPT多模态命名实体识别

news2024/11/14 13:29:12

在这里插入图片描述

📝个人主页🌹:Eternity._
🌹🌹期待您的关注 🌹🌹

在这里插入图片描述
在这里插入图片描述

❀ChatGPT

  • ChatGPT辅助细化知识增强!
  • 1. 研究背景
  • 2. 模型结构和代码
  • 3. 任务流程
    • 第一阶段:辅助精炼知识启发式生成
    • 第二阶段:基于辅助精炼知识的实体预测
  • 4. 数据集介绍
  • 5. 性能展示
  • 6. 实现过程
  • 7. 运行过程

ChatGPT辅助细化知识增强!

在这里插入图片描述
多模态命名实体识别(MNER)技术近期备受瞩目。随着社交媒体上涌现出海量由图像与文本交织而成的非结构化内容,这些帖子展现出了社交媒体特有的属性,诸如言简意赅及不拘一格的表达方式。这些独特之处,无疑给传统的命名实体识别(NER)手段带来了前所未有的挑战。

在本文的探讨中,我构思了一个双阶段架构,其核心在于将ChatGPT作为隐性的知识宝库,并激发其潜力,以启发式的方式产生辅助性的知识,从而助力实体预测的精准度更上一层楼。具体而言,该架构中融入了一个多模态相似样例感知组件,该组件能够从预设的少量人工样本中精挑细选,筛选出恰当的样例。随后,这些样例将被巧妙地嵌入到专为MNER设计的格式化提示模板之中,进而引导ChatGPT生成更为精细的辅助知识。最终,这些宝贵的知识将与原始文本融合,一并输入至下游模型,进行更为深入的加工处理。

【注】 文章中所用到的数据集,都经过预处理的数据集文件(.txt),代码和数据集都放在了附件中,感兴趣的小伙伴可以进行下载,谢谢支持!

1. 研究背景


社交媒体平台上的多模态命名实体识别(MNER)任务,其核心在于借助图像信息来强化文本实体的预测能力。当前的研究焦点大多集中在如何最大限度地挖掘和利用与文本相关的图像数据,或是如何将外部知识库中的显式知识融入其中。然而,这些研究路径要么未能充分意识到为模型引入外部知识的重要性,要么在知识检索过程中遭遇了信息冗余的难题。

本文所涉及的所有资源的获取方式:这里

2. 模型结构和代码


我的模型设计包含两个核心阶段。在首个阶段,即辅助细化知识的生成过程中,我运用了一组精心挑选的预定义人工样本,并借助多模态相似示例感知模块来精准筛选相关性高的实例。随后,这些精心挑选的示例被巧妙地融入格式规范的提示中,以此强化给予ChatGPT的启发式信息,从而提炼出更为精确的知识。进入第二个阶段,即基于辅助知识的实体预测阶段,我将原始文本与ChatGPT所产出的知识信息加以整合。这一整合后的输入随后被送入基于转换器的编码器,以生成相应的token表示。最终,这些表示被进一步传递给线性链条件随机场层,用以预测原始文本序列的概率分布。

3. 任务流程


1. 任务公式化
将MNER任务视为一个序列标注任务。给定一个包含n个词元的句子
T= t 1 t_1 t1…, t n t_n tn及其对应的图像I,MNER的目标是定位并分类句中提到的命名实体,生成标签序列y= y 1 y_1 y1…, y n y_n yn,其中 ( y i ∈ Y (y_i \in Y (yiY) 是使用BIO2标注体系的预定义语义类别。

2. 上下文学习
GPT-3及其后续模型ChatGPT(以下简称GPT)是基于大量数据集预训练的自回归语言模型。在推理过程中,上下文少样本学习通过在冻结的GPT模型上执行文本序列生成任务的方式来完成新的下游任务。具体来说,给定一个测试输入x,其目标y基于格式化的提示p(h,C,x)作为条件进行预测,其中h指的是描述任务的提示头,C= c 1 c_1 c1…, c n c_n cn是n个上下文示例构成的上下文。所有的h、C、x、y均为文本序列,目标y= y 1 y_1 y1…, y L y_L yL,是长度为L的文本序列。在每一步解码过程中,我们有: y l = arg ⁡ max ⁡ y l p LLM ( y l ∣ p , y < l ) y_l = \arg\max_{y_l} p_{\text{LLM}}(y_l \mid p, y_{<l}) yl=argylmaxpLLM(ylp,y<l)

其中,LLM代表预训练的大型语言模型的权重,这些权重在新任务中是冻结的。每个上下文示例
c i c_i ci=( x i x_i xi, y i y_i yi)由任务的输入-目标对构成,这些示例可以手动构建或从训练集中采样。

虽然GPT-4可以接受多模态信息输入,但这一功能仅处于内部测试阶段,尚未公开使用。此外,与ChatGPT相比,GPT-4的成本更高,API请求速度较慢。为了提高可复现性,我们仍然选择ChatGPT作为主要的研究对象,并且提供的这一范式也可以用于GPT-4。

为了使ChatGPT能够完成图文多模态任务,使用了先进的多模态预训练模型将图像转换为图像说明。最后将测试输入x设计为以下模板:
在这里插入图片描述
其中,t、p和q 代表特定的测试输入。\n 表示模板中的换行符。同样,每个上下文示例
c i c_i ci的定义也遵循以下类似模板:
在这里插入图片描述
其中, t i ​ t_i​ ti​, p i ​ p_i​ pi,q, a i ​ a_i​ ai指的是从预定义的人工样本中检索的文本-图像问题-答案四元组。 MNER 的完整提示模板由固定提示头、一些上下文示例和测试输入组成,被馈送到 ChatGPT 以进行辅助知识生成。

第一阶段:辅助精炼知识启发式生成

人工精选的上下文样本
在提升ChatGPT于MNER任务中的效能方面,关键在于精心挑选恰当的上下文样本。获取那些准确标注且能精准体现数据集标注风格,并能为辅助知识扩展提供渠道的样本,是一项艰巨的任务。直接从原始数据集中筛选这些样本并不现实。为此,我采取了随机抽样的策略,从训练集中审慎地选取了一部分样本进行人工标注。针对Twitter-2017数据集,我随机抽取了200个训练样本进行细致标注;而对于Twitter-2015数据集,则标注了120个样本。标注流程包含两大环节:首先是识别句子内的命名实体,其次是结合图像、文本内容及相关知识,给出全面详尽的阐释。在标注实践中,标注者需从人类视角出发,准确判断并解析样本。对于图像与文本相关联的样本,我们明确指出图像突出了文本中的哪些实体;对于图像与文本无关的样本,则直接表明图像描述与文本内容无直接联系。这一精细的标注流程为ChatGPT提供了明确指引,助力其生成高度相关且富有价值的回应。

多模态相似样本智能筛选模块
鉴于GPT的少样本学习能力在很大程度上受上下文样本选择的影响,我研发了多模态相似样本智能筛选(MSEA)模块,旨在精准挑选适合的上下文样本。MNER作为一项典型的多模态任务,其预测精准度依赖于文本与视觉信息的深度融合。因此,我们将文本与图像的融合特征作为衡量样本相似性的基准。而这种多模态融合特征可源自前期的多模态命名实体识别(MNER)模型。在将MNER数据集D和预定义的人工样本G表示为:

D = { ( t i , p i , y i ) } i = 1 M D = \{(t_i, p_i, y_i)\}_{i=1}^M D={(ti,pi,yi)}i=1M

G = { ( t j , p j , y j ) } j = 1 M G = \{(t_j, p_j, y_j)\}_{j=1}^M G={(tj,pj,yj)}j=1M

其中, t j t_j tj, p j p_j pj, y j y_j yj,分别指代文本、图像和真实标签。基于D训练的基础MNER模型
M主要由骨干编码器 M b M_b Mb和CRF解码器 M c M_c Mc组成。输入的多模态图像-文本对通过编码器
M b M_b Mb编码,得到多模态融合特征H:
H = M b ( t , p ) H = M_b(t, p) H=Mb(t,p)

在以往的研究中,经过交叉注意力投射到高维潜在空间的融合特征H会直接输入到解码层,以进行结果预测。我们的模型选择H作为相似示例的判断依据,因为在高维潜在空间中相近的示例更有可能具有相同的映射方式和实体类型。计算测试输入与每个预定义人工样本的融合特征H的余弦相似度。然后,选择前N个相似的预定义人工样本作为上下文示例,以启发ChatGPT生成辅助的精炼知识:
( I = arg ⁡ max ⁡ j ∈ { 1 , 2 , . . . , N } ∥ H ∥ 2 ∥ H j ∥ 2 H T H j (I = \arg\max_{{j \in \{1, 2, ..., N\}}} \frac{\|H\|_2 \|H_j\|_2}{H^T H_j} (I=argmaxj{1,2,...,N}HTHjH2Hj2)

I 是G中前N个相似样本的索引集。上下文示例C定义如下:
C = { ( t j , p j , y j ) ∣ j ∈ I } C = \{(t_j, p_j, y_j) \mid j \in I\} C={(tj,pj,yj)jI}

为了高效实现相似示例的感知,所有的多模态融合特征可以提前计算并存储。

3. 启发式增强提示生成
在获得上下文示例C之后,构建了一个完整的启发式增强提示,以利用ChatGPT在MNER任务中的少样本学习能力。提示头、一组上下文示例和测试输入共同构成了一个完整的提示。提示头根据任务需求以自然语言描述MNER任务。鉴于输入的图像和文本不一定总是直接相关,鼓励ChatGPT发挥其自主判断力。上下文示例由MSEA模块的结果 C = c 1 , ⋯   , c n C = c_1, \cdots, c_n C=c1,,cn 构建。对于测试输入,答案部分留空,由ChatGPT生成。

第二阶段:基于辅助精炼知识的实体预测


定义经过上下文学习后由ChatGPT生成的辅助知识为Z = {z_1, ···, zm},其中m是Z的长度。将原始文本的长度。将原始文本T = {t_1, ···, t_n}与获得的辅助精炼知识Z拼接为与获得的辅助精炼知识Z拼接为[T; Z]$,并将其输入基于Transformer的编码器:
h 1 , ⋯   , h n , ⋯   , h n + m = embed ( [ T ; Z ] ) h_1, \cdots, h_n, \cdots, h_{n+m} = \text{embed}([T; Z]) h1,,hn,,hn+m=embed([T;Z])

由于Transformer编码器中使用的注意力机制,得到的词元表示 H = ( h 1 , ⋯   , h n ) H = (h_1, \cdots, h_n) H=(h1,,hn)包含了来自辅助知识Z的相关线索。与先前的研究类似,将H输入标准的线性链条件随机场层,定义给定输入句子T的标签序列y的概率为:

P ( y ∣ T , Z ) = ∑ y ′ ∈ Y ∏ i = 1 n ψ ( y i − 1 ′ , y i ′ , h i ) ∏ i = 1 n ψ ( y i − 1 , y i , h i ) P(y \mid T, Z) = \frac{\sum_{{y' \in Y}} \prod_{{i=1}}^{n} \psi(y'_{i-1}, y'_i, h_i)}{\prod_{{i=1}}^{n} \psi(y_{i-1}, y_i, h_i)} P(yT,Z)=i=1nψ(yi1,yi,hi)yYi=1nψ(yi1,yi,hi)

其中 ( ψ ( y i − 1 , y i , h i ) (\psi(y_{i-1}, y_i, h_i) (ψ(yi1,yi,hi))和 ( ψ ( y i − 1 ′ , y i ′ , h i ) (\psi(y'_{i-1}, y'_i, h_i) (ψ(yi1,yi,hi))是势函数。最后,使用负对数似然作为带有真实标签 y∗的输入序列的损失函数:
L NLL ( θ ) = − log ⁡ P θ ( y ∗ ∣ T , Z ) L_{\text{NLL}}(\theta) = -\log P_\theta(y^* \mid T, Z) LNLL(θ)=logPθ(yT,Z)

4. 数据集介绍


我们在两个公共 MNER 数据集上进行了实验:Twitter-2015和 Twitter-2017。这两个数据集都是从Twitter平台上收集的,包含了文本和图像的配对信息,主要用于研究在社交媒体短文本场景下的多模态命名实体识别和情感分析等任务。

1. Twitter-2015: 推文中的文本部分被手动标注了命名实体,并使用BIO2(Beginning- Inside-Outside)标注方案对命名实体进行分类。实体类别包括人物(Person)、组织(Organization)、地点(Location)等。3373/723/723(train/development/test)

2. Twitter-2017: 相比于Twitter-2015,Twitter-2017数据集的规模更大,包含了更多的推文样本。Twitter-2017不仅扩大了数据规模,还提高了标注的多样性和复杂性,推文中的命名实体更加丰富。此外,推文配对的图像信息在识别命名实体方面也具有重要作用,尤其是那些无法通过文本直接判断的实体。4000/1000/3257(train/development/test)

5. 性能展示


1. Twitter-2015:

ModelPreRecF1
UMT71.6775.2373.41
UMGF74.4975.2174.85
MNER-QG77.7672.3174.94
R-GCN73.9576.1875.00
CAT-MNER78.7578.6978.72
Proposed79.2179.4579.33

2. Twitter-2017:

ModelPreRecF1
UMT85.2885.3485.31
UMGF86.5484.5085.51
MNER-QG88.5785.9687.25
R-GCN86.7287.5387.11
CAT-MNER90.2790.6790.47
Proposed90.8692.0191.43

6. 实现过程


在下载附件并准备好数据集并调试代码后,进行下面的步骤,附件已经调通并修改,可直接正常运行;

1. 环境要求

python == 3.7
torch == 1.13.1
transformers == 4.30.2
modelscope == 1.7.1

2. 我们的项目基于AdaSeq, AdaSeq项目基于Python版本>= 3.7和PyTorch版本>= 1.8。

3. 下载

git clone https://github.com/modelscope/adaseq.git
cd adaseq
pip install -r requirements.txt -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html

4. 将我们的附件文件夹复制到/adaseq/examples/

-adaseq
---|examples
-----|ER
-------|twitter-15-txt.yaml
-------|twitter-17-txt.yaml

5. 用我们的adaseq文件夹替换原来的adaseq文件夹

-adaseq
---|.git
---|.github
---|adaseq   <-- (Use our adaseq replace it)  
---|docs
---|examples
---|scripts
---|tests
---|tools

6. 训练模型

	python -m scripts.train -c examples/ER/twitter-15.yaml
	python -m scripts.train -c examples/ER/twitter-17.yaml

7. 运行过程


  1. 训练过程
    在这里插入图片描述

  2. 最终结果
    在这里插入图片描述


编程未来,从这里启航!解锁无限创意,让每一行代码都成为你通往成功的阶梯,帮助更多人欣赏与学习!

更多内容详见:这里

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

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

相关文章

隆盛策略正规炒股恒生科技指数跌4.19%,中芯国际跌近8%

查查配分析11月12日,香港恒生指数收跌2.84%,恒生科技指数跌4.19%。中兴通讯跌超9%,中芯国际跌近8%,蔚来跌超6%,美团、京东集团、理想汽车均跌超5%。 11月12日,港股跌幅扩大,恒生科技指数跌超4%,恒生指数跌超3%。 隆盛策略以其专业的服务和较低的管理费用在市场中受到不少关注。…

MFC图形函数学习07——画扇形函数

绘制扇形函数是MFC中绘图的基本函数&#xff0c;它绘制的仍是由椭圆弧与椭圆中心连线构成的椭圆扇形&#xff0c;特例是由圆弧与圆心连线构成的圆扇形。 一、绘制扇形函数 原型&#xff1a;BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); …

qt QHttpMultiPart详解

1. 概述 QHttpMultiPart是Qt框架中用于处理HTTP多部分请求的类。它类似于RFC 2046中描述的MIME multipart消息&#xff0c;允许在单个HTTP请求中包含多个数据部分&#xff0c;如文件、文本等。这种多部分请求在上传文件或发送带有附件的邮件等场景中非常有用。QHttpMultiPart类…

SpringBoot使用TraceId日志链路追踪

项目场景&#xff1a; 有时候一个业务调用链场景&#xff0c;很长&#xff0c;调了各种各样的方法&#xff0c;看日志的时候&#xff0c;各个接口的日志穿插&#xff0c;确实让人头大。为了解决这个痛点&#xff0c;就使用了TraceId&#xff0c;根据TraceId关键字进入服务器查询…

SSE (Server-Sent Events) 服务器实时推送详解

Server-Sent Events 一、什么是 SSE ?二、SSE 的工作原理三、SSE 的基本配置1.HTTP 请求和响应头设置2.SSE 字段介绍3.SSE 事件数据流示例 四、SseEmitter 的基本配置1.SseEmitter 介绍及用法2.使用 SseEmitter 示例11)编写核心 SSE Client2)编写 Controller3)前端接收与处理 …

【C++】踏上C++的学习之旅(六):深入“类和对象“世界,掌握编程的黄金法则(一)

文章目录 前言1. "面向过程"和"面向对象"的碰撞1.1 面向过程1.2 面向对象 2. "类"的引入3. "类"的定义3.1 &#x1f349;语法展示&#xff1a;3.2 "类"的两种定义方式3.3 "类"的命名规则 4. 类的访问限定符以及封…

机器学习:梯度提升树(GBDT)——基于决策树的树形模型

梯度提升树&#xff08;Gradient Boosting Decision Trees&#xff0c;GBDT&#xff09;是一种强大的机器学习方法&#xff0c;广泛用于回归和分类任务。它通过构建一系列决策树来优化模型的预测能力&#xff0c;基于梯度提升框架&#xff0c;使得每一棵树都试图纠正前一棵树的…

Spark SQL大数据分析快速上手-伪分布模式安装

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 Hadoop完全分布式环境搭建步骤-CSDN博客,前置环境安装参看此博文 伪分布模式也是在一台主机上运行&…

github使用基础

要通过终端绑定GitHub账号并进行文件传输&#xff0c;你需要使用Git和SSH密钥来实现安全连接和操作。以下是一个基本流程&#xff1a; 设置GitHub和SSH 检查Git安装 通过终端输入以下命令查看是否安装Git&#xff1a; bash 复制代码 git --version配置Git用户名和邮箱 bash …

Python OpenCV孤立点检测

孤立点检测 在Python中使用OpenCV进行孤立点&#xff08;异常点&#xff09;检测&#xff0c;可以通过应用统计分析或者使用OpenCV的findContours和convexHull函数来识别。以下是一个简单的例子&#xff0c;使用OpenCV的findContours和convexHull来识别并绘制孤立点。 孤立点…

Vue自定义指令详解——以若依框架中封装指令为例分析

自定义指令 在Vue.js中&#xff0c;自定义指令提供了一种非常灵活的方式来扩展Vue的功能。以下是对Vue中自定义指令的详细解释&#xff1a; 一、自定义指令的基本概念 自定义指令允许开发者直接对DOM元素进行低层次操作&#xff0c;而无需编写大量的模板或者JavaScript代码。…

云渲染:服务器机房与物理机房两者有什么区别

云渲染选择服务器机房与物理机房两者主要区别在哪里呢&#xff1f; 服务器机房和物理机房作为云渲染的基础设施&#xff0c;各自扮演着不同的角色。 服务器机房的特点 服务器机房&#xff0c;通常指的是那些专门用于托管服务器的设施&#xff0c;它们可能位于云端&#xff0c…

即插即用篇 | YOLOv8 引入 代理注意力 AgentAttention

Transformer模型中的注意力模块是其核心组成部分。虽然全局注意力机制具有很强的表达能力,但其高昂的计算成本限制了在各种场景中的应用。本文提出了一种新的注意力范式,称为“代理注意力”(Agent Attention),以在计算效率和表示能力之间取得平衡。代理注意力使用四元组(Q…

机器学习基础02

目录 1.特征工程 1.1特征工程概念 1.2特征工程的步骤 1.3特征工程-特征提取 1.3.1字典特征提取 1.3.2文本特征提取 英文文本提取 中文文本提取 1.3.3TF-IDF文本特征词的稀有程度特征提取 2.无量纲化 2.1归一化 2.2标准化 2.3fit、fit_transform、transform 3.特征…

vue-h5:在h5中实现相机拍照加上身份证人相框和国徽框

1.基础功能 参考&#xff1a; https://blog.csdn.net/weixin_45148022/article/details/135696629 https://juejin.cn/post/7327353533618978842?searchId20241101133433B2BB37A081FD6A02DA60 https://www.freesion.com/article/67641324321/ https://github.com/AlexKrat…

【Elasticsearch入门到落地】1、初识Elasticsearch

一、什么是Elasticsearch Elasticsearch&#xff08;简称ES&#xff09;是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。它使用Java编写&#xff0c;基于Apache Lucene来构建索引和提供搜索功能&#xff0c;是一个分布式、可扩展、近实…

Rust开发一个命令行工具(一,简单版持续更新)

依赖的包 cargo add clap --features derive clap命令行参数解析 项目目录 代码 main.rs mod utils;use clap::Parser; use utils::{editor::open_in_vscode,fs_tools::{file_exists, get_file, is_dir, list_dir, read_file}, }; /// 在文件中搜索模式并显示包含它的行。…

Xshell,Shell的相关介绍与Linux中的权限问题

目录 XShell的介绍 Shell的运行原理 Linux当中的权限问题 Linux权限的概念 Linux权限管理 文件访问者的分类&#xff08;人&#xff09; 文件类型和访问权限&#xff08;事物属性&#xff09; 文件权限值的表示方法 文件访问权限的相关设置方法 如何改变文件的访问权…

golang 实现比特币内核:公钥的 SEC 编码格式详解

比特币作为区块链的一个应用,它建立在分布式系统之上,‘节点’遍布全球。为了使所有节点协同工作并作为一个整体系统运行,需要保持所有节点同步在相同的状态中,也就是说节点之间需要频繁通信,并且相互交换大量数据消息。这要求在网络上传输的消息或数据要使用某种格式编码…

【JAVA】使用IDEA创建maven聚合项目

【JAVA】使用IDEA创建maven聚合项目 1.效果图 2.创建父模块项目 2.1删除父模块下面的src目录以及不需要的maven依赖 3创建子模块项目 3.1右击父模块项目选择Module… 3.2创建子模块 3.3删除子模块下不需要的maven依赖 4.子模块创建完成后引入SpringBoot依赖启动项目