【传知代码】受限前缀注意机制的事件关系识别(论文复现)

news2024/10/1 17:24:02

在自然语言处理的前沿,受限前缀注意机制正逐渐成为事件关系识别领域的关键技术。随着文本数据的不断增长和复杂性的提升,识别文本中事件之间的关系变得愈发重要和具有挑战性。受限前缀注意机制作为一种新兴的技术手段,通过有效地捕获文本中的关联信息,提升了事件关系识别的精度和效率。本文将探讨受限前缀注意机制的基本原理、应用实例以及在事件关系识别中的实际应用,帮助读者深入理解这一创新技术的价值和潜力。

本文所涉及所有资源均在传知代码平台可获取

目录

概述

核心逻辑

项目部署

写在最后


概述

        事件关系识别(Event Relation Identification,ERI)旨在挖掘事件句子中表达的事件间依赖关系。此任务的主要挑战在于识别那些没有明确指示关系的上下文词汇的隐含线索。当训练样本不足时,主流技术难以有效捕捉事件之间的微妙关系,因为神经网络的参数不能得到充分拟合。尽管有越来越多的方法尝试使用提示学习(prompt learning)来缓解这一问题,但现有方法在提示和提示调优过程中缺乏优化,导致共现干扰和提示歧义。为此,本文提出了一种受限前缀注意机制(Constrained Prefix ATTention,CPATT),并将其整合到传统的提示调优过程中。通过这种方式,将上下文语义特征整合到动态提示中,以减轻共现干扰。此外,CPATT通过将类别之间的互斥性引入损失函数来监督提示的指导效果。基于两个广泛使用的数据集的实验结果表明,在句内和句间事件关系识别任务中均优于所有最先进的基线,包括GPT-3.5-turbo,本文在原来代码的基础上添加了Bart模型“Bart-base”,不用访问外网就可以。

        通过将ERI任务转换为自然语言生成任务,使用生成性预训练语言模型(PLM)来解决该任务。提示学习框架的架构如图所示,包含三个主要模块:模板创建模块(2.1)、提示调优模块(2.2)和关系推理模块(2.3)。基于此框架,我们在提示调优模块中整合了受限前缀注意机制(CPATT)。

如图所示,CPATT机制将类别独有的偏置分配为不同前缀的相对位置,并在生成过程中增强正确前缀的作用:

核心逻辑

为了显式获得关系线索,生成模板应将关系特定的词汇放置在事件之间。对于图3中的例子,事件关系三元组(点燃,火灾,因果关系)被转换为一句话“点燃是火灾的原因”,这明显指示了点燃和火灾之间的因果关系。形式化地定义模板和相应的填空规则如下:

𝑇+ 𝑒𝑖,𝑒𝑗 = (𝑒𝑖)是(𝑒𝑗)的原因;𝑇− 𝑒𝑖,𝑒𝑗 = (𝑒𝑖)与(𝑒𝑗)无关

        其中,𝑒𝑖和𝑒𝑗分别表示两个输入事件。注意,我们使用上标“+”和“-”来区分因果相关和不相关的事件,在此模块中,使用生成性预训练语言模型BART-base通过合成样本(𝐼𝑛𝑝𝑢𝑡, 𝑂𝑢𝑡𝑝𝑢𝑡)进行微调。BART-base符合Transformer结构,利用自注意机制增强上下文意识,并应用交叉注意机制连接编码器和解码器层。为了捕捉上下文语义特征,设计了一种前缀偏置的全连接注意机制,该机制将类别敏感的注意偏置作为相对位置表示融入编码器的自注意机制中。此外,还考虑了前缀对生成文本的指导效果,并采用对比损失函数来提高前缀的正确指导性。方法的关键在于融合上下文特征以生成动态提示。将𝐼𝑛𝑝𝑢𝑡输入到编码器层,以获得隐藏表示𝑯𝑒𝑛𝑐。在BART-base中,注意头的数量为12,隐藏层维度为768。特别地,用前缀偏置的全连接注意机制升级了自注意机制。注意机制遵循传统的查询-键-值注意机制。对于每个输入词𝑥,使用𝑾𝑸,𝑾𝑲,𝑾𝑽产生其查询、键和值。在计算前缀与事件上下文之间的相似性时,引入了可训练的注意偏置𝜷𝒌,将上下文特征融合到前缀表示中。

在推理阶段,引入模板解析算法来累积揭示最终结果的关系特定分数。具体地,给定一个候选事件对(𝑒𝑖, 𝑒𝑗)及其对应的句子(𝑠𝑖, 𝑠𝑗),我们首先根据公式(8)构建𝐼𝑛𝑝𝑢𝑡。其次,生成两句关系特定的句子𝑇+ 𝑒𝑖,𝑒𝑗 和𝑇− 𝑒𝑖,𝑒𝑗 ,分别表示因果关系和无关关系的目标序列。最后一步,将它们输入训练好的BART,并通过选择不同关系的最大分数来确定是否存在因果关系,作者的方法可以无缝适应多种事件关系识别任务,只需设计简单而有效的模板。通过引入类别敏感的前缀及其偏置,可以有效处理多事件关系识别任务。最终,我们可以将每个特定事件关系𝑟替换到公式(20)中,并将具有最大分数的视为最终结果。

项目部署

配置环境如下所示:

requirments
attrdict==2.0.1
PyYAML==6.0pi
transformers==4.29.0
numpy
pandas
scikit_learn
torch
tqdm

训练,train.py:

推理, inference.py:

核心代码如下:

def predict_relation(input_TXT, event1, event2):  # 预测一个句子中两个事件的关系
    input_TXT = [input_TXT]*2
    input_ids = tokenizer(input_TXT, return_tensors='pt')['input_ids']
    model.to(device)
    
    relation_dict = {0: 'Cause-Effect', 1: 'NONE'}
    temp_list = []
    
    temp_list.append(event1+"is the cause of "+event2)
    temp_list.append(event1+"has no relation to "+event2)
    output_ids = tokenizer(temp_list, return_tensors='pt',
                           padding=True, truncation=True)['input_ids']
    # 加一个unused字符
    output_ids[:, 0] = 2
    output_length_list = [0]*2

    base_length = ((tokenizer(temp_list[0], return_tensors='pt', padding=True, truncation=True)[
                   'input_ids']).shape)[1]-2

    output_length_list[0:1] = [base_length]*2

    score = [1]*2
    with torch.no_grad():
        
        outputs = model(input_ids=input_ids.to(device), decoder_input_ids=output_ids[:, :output_ids.shape[1] - 2].to(device))
        output = outputs[0]
        # print(tokenizer.decode(output_ids[1, :output_ids.shape[1] - 2]))
        for i in range(output_ids.shape[1] - 3):
        # output = model(input_ids=input_ids.to(device), decoder_input_ids=output_ids.to(device))[0]

            logits = output[:, i, :]
            logits = logits.softmax(dim=1)
            logits = logits.to('cpu').numpy()
            # for j in range(0, 2):
            #     if int(output_ids[j][i + 1]) not in [16, 34, 5, 117, 1303, 9355, 9, 7]:
            #         weight = 1
            #     else:
            #         weight = 1.5
            #     if i < output_length_list[j]:
            #         score[j] = score[j] * (logits[j][int(output_ids[j][i + 1])] ** weight)
            for j in range(0, 2):
                if i < output_length_list[j]:
                    score[j] = score[j] * logits[j][int(output_ids[j][i + 1])]  
    # print(temp_list[0],score[0])
    # print(temp_list[1],score[1])
    # print(relation_dict[(score.index(max(score)))])

    return relation_dict[(score.index(max(score)))]

写在最后

        本文深入探讨了受限前缀注意机制在事件关系识别中的重要性和应用。通过介绍其基本原理和在处理复杂文本数据中的优势,我们可以看到这一技术在提升识别精度和效率方面的潜力。受限前缀注意机制不仅能够有效捕捉文本中的关联信息,还能帮助系统更好地理解事件之间的复杂关系,为自然语言处理领域的研究和应用带来新的视角和方法。未来,随着技术的进一步演进和应用场景的拓展,受限前缀注意机制有望成为事件关系识别的重要技术支持,为解决现实世界中复杂的语境和关系提供更为精确和智能的解决方案。

详细复现过程的项目源码、数据和预训练好的模型可从该文章下方附件获取。

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

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

相关文章

不同太阳光波长定制设备太阳光模拟器

日光中不同波长的作用 太阳光不仅是地球上生命活动的能量来源&#xff0c;也对人类的生活产生了深刻的影响。了解太阳光的特性和对地球生态系统的贡献&#xff0c;对于我们保护环境、合理利用太阳能资源具有重要意义。科迎法电气作为太阳光模拟器的制造商可以根据不同的需求定制…

【Verilog-CBB】开发与验证(4)——RS前向打拍器

引言 我们知道时序路径的建立时间收敛依赖于触发器之间的组合逻辑延迟&#xff0c;以及时钟周期。对于一个确定的设计一般来说&#xff0c;时钟频率不会有太多的让步&#xff0c;因此修时序的时候主要发力点就是减小触发器之间组合逻辑延迟。一方面可以通过组合逻辑优化来降低…

Studying-代码随想录训练营day56| 108.冗余连接、109.冗余连接II

第56天&#xff0c;图论06&#xff0c;并查集题目类型冗余连接(ง •_•)ง&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 108.冗余连接 109.冗余连接II 总结 108.冗余连接 文档讲解&#xff1a;手撕冗余连接 题目&#xff1a;108. 冗余连接 (kamacoder.com) 学习&…

SpringSecurity-3(认证和授权+SpringSecurity入门案例+自定义认证+数据库认证)

SpringSecurity使用数据库数据完成认证 5 SpringSecurity使用数据库数据完成认证5.1 认证流程分析5.1.1 UsernamePasswordAuthenticationFilter5.1.2 AuthenticationManager5.1.3 AbstractUserDetailsAuthenticationProvider5.1.4 AbstractUserDetailsAuthenticationProvider中…

跟《经济学人》学英文:2024年08月03日这期 How to make tourism work for locals and visitors alike

How to make tourism work for locals and visitors alike Holidays don’t have to be hell 原文&#xff1a; The dollar is hovering near a two-decade high. That has unleashed a multitude of American tourists keen to exercise their newfound spending power, m…

图的应用---最短路径

目录 一. 前言 二. Dijkstra算法 三. Floyd算法 一. 前言 所谓最短路径&#xff1a;就是在有向网当中&#xff0c;A点&#xff08;源点&#xff09;到达B点&#xff08;终点&#xff09;的多条路径中&#xff0c;寻找一条各边权值之和最小的路径&#xff0c;即最短路径。 如果…

Linux--TCP协议

传输层协议TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;会对数据的传输进行一个详细的控制。 TCP协议段格式 TCP协议段格式是TCP协议在网络传输数据时所使用的结构单…

Google paly开发者账号因恶意软件被封,也能申诉成功?怎么做?

想必在Google Play上摸爬滚打多年的各位开发者&#xff0c;在面对谷歌那似乎越来越严格的审核机制&#xff0c;都遭遇过应用被下架、账号被封的困境。 尤其是当你的应用被莫名其妙地判定为恶意软件&#xff0c;然后账号被封&#xff0c;更是让人头疼不已。 但别急&#xff0c;虽…

flutter开发环境搭建与android studio 安装配置

flutter开发环境搭建与android studio 安装配置 安装 android studio 下载安装 Android Studio 开发工具 Android Studio官网安装的时看到配置路径就换成自己其他盘的路径即可&#xff0c;其他的一路下一步就ok安装完毕&#xff0c;运行打开缺少 android sdk 按照提示下载即可…

python nicegui实现TodoList应用案例

参考&#xff1a; https://nicegui.io/ https://nicegui.io/#demos 版本 nicegui 1.4.30代码&#xff1a; python todolist.py from nicegui import ui from typing import List import jsonclass Todo:def __init__(self, text: str, completed: b…

连载|浅谈红队中的权限维持(六)-Linux 主机后门与Linux 隐藏文件

本文来源无问社区&#xff0c;更多实战内容&#xff0c;渗透思路可前往查看http://www.wwlib.cn/index.php/artread/artid/11584.html 0x01 Linux 主机后门 1、添加用户 一句话添加用户 useradd test;echo -e "123456n123456n" |passwd test 或者使用 openssl …

测试——Selenium

内容大纲: 什么是自动化测试 什么是Selenium Selenium工作原理 Selenium环境搭建 Selenium API 目录 1. 什么是自动化测试 2. 什么是Selenium 3. Selenium工作原理 4. Selenium环境搭建(java) 5. Selenium API 5.1 定位元素 5.1.1 CSS选择器定位元素 5.1.2 XPath定位元…

arr的谜思

arr到底是个啥&#xff1f; 在C语言中&#xff0c;arr 本身不是一个指针&#xff0c;而是一个数组名。然而&#xff0c;在大多数表达式中&#xff0c;数组名会被转换为指向数组首元素的指针。这种转换是自动的&#xff0c;并且是C语言的一个基本特性。 具体来说&#xff0c;当…

LDR6020快充线,科技与便捷的新宠

在快节奏的现代生活中&#xff0c;充电效率成为了我们不可忽视的一个重要因素。随着智能手机、平板电脑等电子设备的普及&#xff0c;快充线以其独特的优势逐渐成为充电设备市场的新宠。 快充线&#xff0c;相比于传统的普通充电线&#xff0c;快充线在充电速度上有着显著的提升…

Linux用户-sudo命令

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注我&#xff0c;我尽量把自己会的都分享给大家&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux是一个多用户多任务操作系统,这意味着它可以同时支持多个用户登录并使用系统。…

明日周刊-第19期

演唱会现场的感受确实跟耳机里的感觉非常不一样&#xff0c;听见音响和人声真真切切出现在你身边&#xff0c;那种震撼可以让你暂时忘却生活的烦恼。感谢8月3日的蔡健雅演唱会&#xff0c;凑巧的是这一场是今年巡演的最后一场。 文章目录 资源分享言论歌曲推荐 资源分享 nginx…

DC-8靶机通关

今天我们来学习DC-8这个靶机&#xff01;&#xff01;&#xff01; 1.实验环境 攻击机&#xff1a;kali2023.2 靶机&#xff1a;DC-8 2.1主机扫描 2.2端口扫描 还是熟悉的配方&#xff01;&#xff01;&#xff01; 3.1查看网页 其实可以先尝试一下爆破&#xff0c;但是爆…

在VScode中导入conda环境的记录【原创】

今天在vscode编辑器中运行一个python代码&#xff0c;发现终端可以运行&#xff0c;但是编辑器中点击Run会显示缺包&#xff0c;但是python包明明是有的&#xff0c;在自己的conda环境中。后来发现&#xff0c;是vscode没有发现我自己创建的conda环境&#xff0c;在vscode中导入…

暑假第三周——学生管理系统仿写

iOS学习 前言账号界面主页添加学生信息&#xff1a;修改学生信息&#xff1a;删除学生信息&#xff1a;学生信息排序&#xff1a;查找学生信息 总结 前言 学生管理系统的仿写较为简单&#xff0c;与c语言的学生管理系统逻辑上相差不大。 账号界面 账号界面与3G share的相同&am…

推荐几款卓越的 .NET 开源搜索组件

目录 前言 一、Lucene.NET 1、介绍 2、地址 二、Elasticsearch.NET 和 NEST 1、介绍 2、文档地址 3、开源地址 三、Algolia.Search 1、介绍 2、文档地址 3、开源地址 四、SolrNet 1、介绍 2、文档开源地址 3、Solr社区 五、Masuit.LuceneEFCore.SearchEngine …