【传知代码】基于知识引导提示的因果概念提取(论文复现)

前言:在当今信息爆炸的时代,我们被海量的数据所包围,然而,这些数据中的真正价值往往隐藏在深层的因果关系之中。无论是科学研究、商业决策,还是日常生活中的选择,理解并准确把握事物之间的因果关系,都显得至关重要。然而,如何从海量的信息中有效地提取出这些因果关系,一直以来都是个挑战。本文旨在深入探讨基于知识引导提示的因果概念提取技术的原理、应用及其在未来的发展前景。本文将首先介绍这一技术的背景和理论基础,随后详细阐述其实现方法和关键技术。在此基础上,本文将结合具体案例,展示这一技术在实际应用中的强大能力和广泛应用前景。

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

目录

概述

演示效果

核心代码

写在最后


概述

        预训练语言模型(PLMs)在进行概念提取时,通常更多地依赖于文本中的共现关系,而不是实际存在的因果关系,这导致了提取结果的偏差和低精度。为了应对这一难题,本研究提议利用知识导向的提示来介入PLM的概念提炼过程。这一建议通过利用已有的知识图谱来协助PLM更加关注相关的概念,从而降低对虚假共现的依赖,并进一步提升数据提取的准确性。经过实验验证,此种技术显著地降低了误差,并大幅度增强了概念提取的效果,本文参考 论文 如下:

论文主要采用的方法如下图所示:

        在本文中,我们提出了一个名为KPCE(Knowledge-Prompted Concept Extraction)的概念提取(CE)框架,该框架主要关注于如何通过知识引导提示(prompt)来缓解基于深度学习模型的概念偏差问题。KPCE框架由两个核心模块组成:提示构造器和概念提取器。

提示构造器:是KPCE框架的第一个关键模块,它负责从现有的知识库(KG)中提取与给定实体相关的主题作为提示。这一模块的核心作用在于通过前门调整策略,降低实体与偏差概念之间的虚假共现相关性,从而帮助后续的概念提取器更准确地识别和提取相关概念。

具体而言,提示构造器的工作流程如下:

1)知识库准备:首先,从大规模的知识库中收集与特定实体或主题相关的知识条目。

2)主题识别:从收集到的知识条目中,识别出与给定实体最相关的主题或概念。

3)提示构造:基于识别的主题,构造出能够引导概念提取器进行准确识别的提示。

概念提取器:是KPCE框架的第二个模块,它负责根据提示构造器提供的提示,从文本数据中提取出相关的概念。这一模块的关键在于如何有效利用提示信息,提高概念提取的准确性和效率。

概念提取器的工作流程如下:

1)文本输入:接收待处理的文本数据作为输入。

2)提示应用:将提示构造器生成的提示应用于文本数据,引导概念提取器关注与提示相关的部分。

3)概念识别:在提示的引导下,从文本数据中识别出与给定实体相关的概念。

4)概念输出:将识别出的概念进行整理并输出。

        KPCE框架通过结合提示构造器和概念提取器两个模块,实现了基于知识引导提示的概念提取功能。这一框架不仅能够有效缓解基于深度学习模型的概念偏差问题,还能够提高概念提取的准确性和效率。通过在实际数据集上的实验验证,我们证明了KPCE框架的有效性,并为未来的研究工作提供了有价值的参考。

演示效果

        对于CN-DBpedia:从最新版本的中文知识图谱CN-DBpedia(Xu等,2017)和维基百科中获取样本池。每个样本由一个实体及其概念和摘要文本组成。然后,从样本池中随机抽取500个样本作为测试集,并按照9:1的比例将其余样本划分为训练集和验证集。

        对于Probase:从Probase和维基百科中获取英语样本池,共包含50,000个样本。训练集、验证集和测试集的构建方式与中文数据集相同。

配置环境如下:

Requirements
torch == 1.4.0
transformers == 4.2.0

最后进入到main.py文件进行训练,得到的结果如下图所示:

核心代码

        下面这段代码定义了一个名为Prompt_MRCModel的PyTorch模型类,用于执行基于Bert模型的机器阅读理解(MRC)任务,并且在输入中加入了一些prompt信息,通过生成默认输入的方法generate_default_inputs,接受一个batch的数据、主题嵌入topic_embed和设备device作为输入。在这个方法中,首先从batch中获取input_ids,然后使用self.model和self.topic_model分别对input_ids和topic_embed进行处理,得到输入的嵌入表示input_embeds,并构建出模型所需的inputs字典。

        代码的作用是封装了一个带有prompt信息的Bert模型,并提供了生成默认输入、前向传播和训练步骤等方法,方便进行机器阅读理解任务的训练和推理,具体如下所示:

class Prompt_MRCModel(nn.Module):
    def __init__(self, model_name, tokenizer, max_topic_len=35, max_seq_len = 256):
        super(Prompt_MRCModel, self).__init__()
        self.model = BertForQuestionAnswering.from_pretrained(model_name)
        self.topic_model = BertForQuestionAnswering.from_pretrained(model_name)
        self.tokenizer = tokenizer
        self.max_topic_len = max_topic_len
    
    
    def generate_default_inputs(self, batch, topic_embed, device):

        input_ids = batch['input_ids']
        bz = batch['input_ids'].shape[0]
        block_flag = 1
        raw_embeds = self.model.bert.embeddings.word_embeddings(input_ids.to(device)).squeeze(1)
        topic_embeds = self.topic_model.bert.embeddings.word_embeddings(topic_embed.to(device)).squeeze(1)
        input_embeds = torch.cat((topic_embeds,raw_embeds),1)
                
        inputs = {'inputs_embeds': raw_embeds.to(device), 'attention_mask': batch['attention_mask'].squeeze(1).to(device)}
        inputs['token_type_ids'] = batch['token_type_ids'].squeeze(1).to(device)
        return inputs

    def forward(self, inputs_embeds=None, attention_mask=None, token_type_ids=None, labels=None):

        return self.model(inputs_embeds=inputs_embeds,
                          attention_mask=attention_mask,
                          labels=labels,
                          token_type_ids=token_type_ids)

    def mlm_train_step(self, batch, topic_embed, start_positions, end_positions, device):

        inputs_prompt = self.generate_default_inputs(batch, topic_embed, device)
        bert_out = self.model(**inputs_prompt, start_positions=start_positions, end_positions=end_positions)
        return bert_out

写在最后

        在本文中,我们深入探讨了基于知识引导提示的因果概念提取技术,并详细阐述了其原理、方法和应用。我们提出的KPCE框架,通过结合提示构造器和概念提取器两个核心模块,成功实现了在文本数据中精准提取因果概念的目标。这一框架不仅充分利用了现有的知识库资源,还通过提示的方式引导模型关注于与给定实体相关的部分,从而大大提高了概念提取的准确性和效率。

        回顾我们的研究成果,我们不禁为这一技术的潜力和应用前景所折服。想象一下,在未来的科学研究中,研究人员可以利用这一技术从海量的实验数据中提取出关键的因果关系,为科学发现提供有力的支持;在商业决策中,企业可以利用这一技术从市场数据中分析出消费者行为的因果关系,为制定更加精准的市场策略提供数据支撑;在日常生活中,我们也可以通过这一技术更加深入地理解周围的世界,做出更加明智的选择。

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

【传知科技】关注有礼     公众号、抖音号、视频号

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

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

相关文章

Nginx 文件下载 限速设置 限制访问频率 下载速率 并发连接数 简单实用教程

1 没有限速之前 2 nginx配置 #增加如下配置 limit_conn_zone $binary_remote_addr zoneaddr:10m; location / {limit_conn addr 1; #按照来源,限制每个IP 的连接数为1limit_rate_after 1000k;不限速下载的数据量limit_rate 100k; #限制最大传输速率root /data/log…

Lesson6--排序(初级数据结构完结篇)

【本节目标】 1. 排序的概念及其运用 2. 常见排序算法的实现 3. 排序算法复杂度及稳定性分析 1.排序的概念及其运用 1.1排序的概念 排序 :所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来…

随身wifi和手机流量卡,你知道该怎么选吗?

网络已经成为我们这个时代的代名词! 那么,在上网的时代,我们有很多问题都要考虑,比如如何选择上网方式,是选择一张流量卡,还是一个随身WIFI? 听小编一句劝,先不要着急买&#xff0c…

2024年中国CRM行业发展方向和前景 | 《连接型CRM》文章精选

01、创新突破,技术为本 中国经济发展处于增速换挡期,企业数字化需求旺盛,同时云计算、大数据、物联网、区块链、5G等新技术的发展,为CRM系统的应用与发展提供了更多的机遇和可能。 近些年来,技术的发展对CRM的重要性…

打造你的专属Vue组件:超实用“高级筛选弹窗组件“实战

打造你的专属Vue组件:超实用“高级筛选弹窗组件“实战 在现代前端开发中,组件化思想是提高开发效率、维护性和代码复用性的关键。本文将通过一个实例——创建一个自定义的“高级筛选”弹窗组件,来展示如何在Vue框架下利用Composition API和E…

AI图书推荐:使用GPT-4和ChatGPT开发AI应用APP

这本书是面向想要学习如何使用大型语言模型构建应用程序的 Python 开发人员的全面指南。作者 Olivier Caelen 和 Marie-Alice Blete 涵盖了 GPT-4 和 ChatGPT 的主要特征和好处,并解释了它们的工作原理。您还将获得使用 GPT-4 和 ChatGPT Python 库开发应用程序的逐…

解决3D模型变黑及贴图不显示的问题---模大狮模型网

在3D建模和渲染过程中,模型变黑或贴图不显示是常见的挑战之一。这不仅影响了模型的视觉效果,还可能导致后续的工作流程受阻。本文将针对这两个问题,提供详细的解决方法和步骤,帮助读者快速有效地解决问题。 一、检查并调整光照设置…

【SpringBoot】怎么在一个大的SpringBoot项目中创建多个小的SpringBoot项目,从而形成子父依赖

父子项目工程创建 步骤 先创建父项目 具体操作步骤请看本文章:使用maven工程创建spring boot项目 创建子项目 file- project structure module–new module 剩下步骤请看创建父工程时的操作使用maven工程创建spring boot项目 应用 确认即可 之后创建启动类…

【实战JVM】-实战篇-05-内存泄漏及分析

【实战JVM】-实战篇-05-内存泄漏及分析 1 内存溢出和内存泄漏1.1 常见场景1.2 解决内存溢出的方法1.2.1 发现问题1.2.1.1 top1.2.1.2 ViusalVM1.2.1.3 arthas1.2.1.4 PrometheusGrafana 1.2.2 堆内存状况对比1.2.3 内存泄漏原因-代码中1.2.3.1 equals()-hashCode()1.2.3.2 内部…

倪师哲学。能让我好,我就接受

还有有些人更搞笑的是,把自己的行为啊,建立在别人的基础之上,如果那个人么样对我,我肯定能怎么样对这个人。 生而为人呐,你是一个独立的人,不要去总是拿着各种各样的前提,来限制了自己个人的成长…

工作流 Activiti7 初始

文章目录 ☃️1.1 Activiti 介绍☃️1.2 Activiti 开发流程☃️1.3 BPMN 2.0 规范是什么☃️1.4 BPMN 2.0 基本流程符号❄️❄️1.4.1 事件 Event❄️❄️1.4.2 活动❄️❄️1.4.3 网关 Gateway ☃️1.5 Activiti API 服务接口❄️❄️1.5.1 核心Service接口及其获取 ☃️1.1 A…

单片机按键处理模块

一 介绍 1.key_board用于单片机中的小巧多功能按键支持,软件采用了分层的思想,并且做到了与平台无关,用户只需要提供按键的基本信息和读写io电平的函数即可,非常方便移植,同时支持多个矩阵键盘及多个单io控制键盘。 …

儿童节快乐!探索图形化编程桌面的“童年”成长之路

在这个充满童真与快乐的儿童节,我要向在CSDN平台上努力拼搏的每一位朋友,送上我最热切、最深情的祝福!愿你们心中那份孩童般的纯真与对世界无尽的好奇永不褪色,愿你们的人生道路如同这个美好的节日,流光溢彩、欢乐永恒…

nginx搭建简单负载均衡demo(springboot)

目录 1 安装nignx 1.1 执行 brew install nginx 命令(如果没安装brew可百度搜索如何安装brew下载工具。类似linux的yum命令工具)。 1.2 安装完成会有如下提示:可以查看nginx的配置文件目录。 1.3 执行 brew services start nginx 命令启动…

【qt】多窗口开发

多窗口开发 一.应用场景二.嵌入的窗口1.设计Widget窗口2.创建窗口3.添加窗口4.总代码 三.独立的窗口1.创建窗口2.显示窗口 四.总结 一.应用场景 多窗口,顾名思义,有多个窗口可以供我们进行操作! 截个小图,你应该就知道了 OK,话不多说,直接开干,先来设计我们的主窗口 需要蔬菜…

Mysql基础教程(13):GROUP BY

MySQL GROUP BY 【 GROUP BY】 子句用于将结果集根据指定的字段或者表达式进行分组。 有时候,我们需要将结果集按照某个维度进行汇总。这在统计数据的时候经常用到,考虑以下的场景: 按班级求取平均成绩。按学生汇总某个人的总分。按年或者…

如何让Google收录网站?

Google收录网站的前提条件是确保网站可以公开访问,并且页面加载速度需要快,这样Google爬虫才可以访问到你的网站,并且索引你网站中的内容。实现了上面的前提条件,可以通过优化数据结构、创建站点地图、使用Google Search Console、…

postgressql——PGPROC XLOG(6)

PGPROC相关结构 在共享内存中,核心数据结构围绕PROC_HDR指向的两个list:PROC和XACT PRCO内存连续,维护链表结构方便申请释放,对应每个后台服务进程,PID为OS标识、PGPROCNO为内部标识 XACT内存连续,维护快照需要的xmin和xid,XACT从PROC拆出来是为了更高的cache line命中…

华为诺亚等发布MagicDrive3D:自动驾驶街景中任意视图渲染的可控3D生成

文章链接:https://arxiv.org/pdf/2405.14475 项目链接:https://flymin.github.io/magicdrive3d 虽然可控生成模型在图像和视频方面取得了显著成功,但在自动驾驶等无限场景中,高质量的3D场景生成模型仍然发展不足,主…

排序算法之直接选择排序【图文详解】

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:LiUEEEEE                        …