前言:在当今信息爆炸的时代,我们被海量的数据所包围,然而,这些数据中的真正价值往往隐藏在深层的因果关系之中。无论是科学研究、商业决策,还是日常生活中的选择,理解并准确把握事物之间的因果关系,都显得至关重要。然而,如何从海量的信息中有效地提取出这些因果关系,一直以来都是个挑战。本文旨在深入探讨基于知识引导提示的因果概念提取技术的原理、应用及其在未来的发展前景。本文将首先介绍这一技术的背景和理论基础,随后详细阐述其实现方法和关键技术。在此基础上,本文将结合具体案例,展示这一技术在实际应用中的强大能力和广泛应用前景。
本文所涉及所有资源均在传知代码平台可获取
概述
预训练语言模型(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模型,并提供了生成默认输入、前向传播和训练步骤等方法,方便进行机器阅读理解任务的训练和推理,具体如下所示:
py
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框架,通过结合提示构造器和概念提取器两个核心模块,成功实现了在文本数据中精准提取因果概念的目标。这一框架不仅充分利用了现有的知识库资源,还通过提示的方式引导模型关注于与给定实体相关的部分,从而大大提高了概念提取的准确性和效率。
回顾我们的研究成果,我们不禁为这一技术的潜力和应用前景所折服。想象一下,在未来的科学研究中,研究人员可以利用这一技术从海量的实验数据中提取出关键的因果关系,为科学发现提供有力的支持;在商业决策中,企业可以利用这一技术从市场数据中分析出消费者行为的因果关系,为制定更加精准的市场策略提供数据支撑;在日常生活中,我们也可以通过这一技术更加深入地理解周围的世界,做出更加明智的选择。
详细复现过程的项目源码、数据和预训练好的模型可从该文章下方附件获取。
【传知科技】关注有礼 公众号、抖音号、视频号