数据挖掘英文原版书,数据挖掘英文论文

  

  论元挖掘是从文本中提取论元成分的任务,通常作为自动写作评价系统的一部分。这是自然语言处理中非常热门的领域。一个好的AM模型可以将一系列原始文本标记为它们所属的论元内容。虽然这个问题在历史上一直被认为是一个语义切分问题,但是最先进的(SOTA) AM技术把它看作是一个命名实体识别的长序列文本(NER)问题。   

  

     

  

  尽管该领域有历史,但关于NER AM数据集的文献相对较少,自2014年以来的唯一贡献是Iryna Gurevych的Christian Stab和Argument Annotated Essays。最近(截至2022年3月)随着说服(用于Kaggle竞赛反馈奖)和ARG2020数据集(发表于GitHub)的使用,虽然这种情况有所改善,但是在AM模型上的跨数据集性能测试很少。因此,没有关于对抗性训练如何提高AM模型的跨数据集性能的研究。关于AM模型对实例的稳健性研究很少。   

  

  由于每个数据集以不同的格式存储,上述挑战变得更加复杂,这使得实验中的数据处理难以标准化(反馈奖竞赛可以证实这一点,因为大部分代码都是用来处理数据的)。   

  

  本文介绍的ArgMiner是一个pytorch包,用于使用基于Transformer的模型对SOT argument挖掘数据集标准化进行数据处理、数据增强、训练和推理。本文首先介绍了包的特性,然后介绍了SOTA数据集,并详细描述了ArgMiner的处理和扩展特性。最后,简要讨论了论证挖掘模型的推理和评价(通过Web应用程序)。   

  

  ArgMiner简介ArgMiner的主要特性总结如下:   

  

  无需编写任何额外的代码就可以处理SOTA数据集,可以在单词和子标记级别生成以下标记方法{io,bio,bioo,bixo},并且可以在不改变数据处理管道的情况下进行定制和增强。使用任何HuggingFace TokenClassification模型为微调参数挖掘提供PyTorch数据集类提供了高效的训练和推理过程。下图显示了ArgMiner的端到端工作:   

  

     

  

  数据处理和增强型数据集   

  

  议论文(Argument Annotated Essays):这是402篇论文的合集。它有三个参数组成部分:Claim,MajorClaimPremise.数据集可在图达姆斯塔特找到;原论文在ACL上,后续论文在MIT Press Direct上。   

  

  劝导:这是一个收集了6-12年级美国学生写的15000篇文章。它有七个参数组成部分:Lead,Position,Claim,Counterclaim,Rebuttal,Evidence,ConcludingStatement.数据集可以通过Kaggle竞争。   

  

  ARG2020:这是145篇中学生作文的合集。它有两个参数组件:Claim Premise.这个数据集发表在GitHub上,关于这项工作的论文发表在ArXiv上。   

  

  这些数据集以不同的方式存储和处理。例如,AAE和ARG2020数据集有ann文件,并且数据附有原始论文文本的. txt文件。与ARG2020不同,AAE数据集具有用于分割数据的训练和测试id。   

  

  PERSUADE有一个更复杂的目录结构,包括原来的培训和测试目录。txt论文。关于参数标记的实际信息包含在train.csv中   

  

  没有一个数据集实际上指明了文章中不属于论点的部分,即所谓的“其他”类。但是NER问题通常需要这样做(否则你是有选择地从文章中查看信息,而不是整篇文章)。因此,我们需要从论文本身中提取这些内容。   

  

  为了以标准化的格式处理这些变化很大的原文,ArgMiner采用了三个stages :   

  

  预处理:从源中提取数据   

  

  此步骤获取原始格式的数据(对于每个数据集),并使用span_start和span_end功能以及原始文本来生成具有如下结构的数据帧:3360。   

这样可以支持使用标准方法来生成NER标签,或增强数据。这些处理都基于一个基本的DataProcessor类,该类具有保存和应用train-test-split的内置特性,因此可以轻松地从它创建新的处理类。

  

from argminer.data import TUDarmstadtProcessor, PersuadeProcessor, DataProcessor# process the AAE dataset from sourceprocessor = TUDarmstadtProcessor('path_to_AAE_dir').preprocess()print(processor.dataframe.head())# process the Persuade dataset from sourceprocessor = PersuadeProcessor('path_to_persuade_dir').preprocess()print(processor.dataframe.head())# create a custom processor for new dataset (e.g. ARG2020 will be done this way)class ARG2020Processor(DataProcessor):def __init__(self, path=''):super().__init__(path)def _preprocess(self):pass生成标签和(可选)增加数据

  

数据经过了处理已经变为标准格式了,那么下一步就可以为数据生成NER样式标签。在这一步结束时,数据集将像这样:

  

有时人们可能会对增强数据感兴趣,无论是对抗性训练还是对抗性例子的鲁棒性测试。在这种情况下,可以提供一个接受一段文本并返回一段增强文本的函数。在这个函数种可以使用其他的NLP扩充库,如textattack和nlpaug。

  

from argminer.data import PersuadeProcessorprocessor = PersuadeProcessor().preprocess().process(strategy='bio')# augmenters# remove first word (toy example) on io labellingfirst_word_removal = lambda x: ' '.join(x.split()<1:>)processor = PersuadeProcessor().preprocess().process(strategy='io', processors=)# remove last word (toy example) on bieo labellinglast_word_removal = lambda x: ' '.join(x.split()<:-1>)processor = PersuadeProcessor().preprocess().process(strategy='io', processors=)后处理:将序列聚合到文档

  

最后一步非常简单,因为标签已经创建好了,最后就需要通过段的doc_id来连接它们。这个阶段的结果输出是一个DataFrame:。使用内置的训练和测试集的分割也是非常容易的。

  

from argminer.data import PersuadeProcessorprocessor = PersuadeProcessor().preprocess().process('bio').postprocess()# full dataprint(processor.dataframe.head())# train test splitdf_dict = processor.get_tts(test_size=0.3, val_size=0.1)df_train = df_dict<'train'>df_test = df_dict<'test'>df_val = df_dict<'val'>PyTorch数据集PyTorch数据集被设计为接受.postprocess()阶段的输入,变量strategy_level可以确定标记策略是否应该应用于单词级别还是标记级别。数据集将类标签可以扩展到子标记。与Kaggle上的例子相比,这是一个巨大的改进,因为它是矢量化的可以有效地使用GPU。数据集还创建了一个映射,将扩展标签合并到它们的核心标签,以进行推断(例如“B-Claim, I- claim, E-Claim”都被合并为Claim)。

  

它的使用也非常简单,而且由于它是基于PyTorch的可以很容易地将它集成到训练中。例如:

  

from argminer.data import ArgumentMiningDatasettrainset = ArgumentMiningDataset(df_label_map, df_train, tokenizer, max_length)train_loader = DataLoader(trainset)for epoch in range(epochs):model.train()for i, (inputs, targets) in enumerate(train_loader):optimizer.zero_grad()loss, outputs = model(labels=targets,input_ids=inputs<'input_ids'>,attention_mask=inputs<'attention_mask'>,return_dict=False)# backward passloss.backward()optimizer.step()推理ArgMiner还提供了用于训练模型训练和进行推理的函数。

  

ArgMiner将推断函数编写成高效的(在可能的情况下,它们利用GPU和矢量化)和批处理的(因此非常适合低内存设置),这意味着推断函数也可以在针对验证数据的训练过程中使用。在推理过程中当从标记映射回单词时,可以轻松地选择聚合级别。例如,给定两个标记“Unit”和“ed”以及每个类的概率,可以使用单词“Unit”的最佳概率、最佳平均概率或最佳最大概率将它们聚合成“United”。

  

与Feedback Prize竞赛中使用的方案相比,该推理方案具有一些优势。

  

Web应用程序ArgMiner还包含有一个web应用程序,可以查看模型给出的输出(或任何来自HuggingFace的模型),也可用于评估自定义数据集上的模型的性能。这是一种有用的(非正式的)方法,可以在特定的例子上探究模型,以了解它在做什么。

  

  

总结很长一段时间以来,论点挖掘的文献对数据集的描述非常少,但随着PERSUADE和ARG2020的发布,这种情况发生了改变。论点挖掘中的知识转移问题以及鲁棒性问题还有待进一步研究。但首先从数据处理方面来看,这通常是困难的,因为不同源的数据格式、表示数据有很多多种方法,以及由于使用不相等的段进行表示和推断而导致的效率问题。

  

ArgMiner是Early Release Access中的一个包,可以用于对SOTA论点挖掘数据集进行标准化处理、扩充、训练和执行推断

  

虽然包的核心已经准备好了,但是还有一些零散的部分需要解决,例如:ARG2020数据集的数据处理还不完善,还没有扩展DataProcessor类以允许分层的训练测试分割。

  

如果您对论点挖掘和NLP感兴趣,并且对本文感兴趣,可以联系该项目的并申请称为合作者。因为作者想将这个项目做成长期的项目并帮助更多的人能够方便的构建论点挖掘的模型。

  

项目地址如下:

  

namiyousef/argument-mining

  

作者:yousefnami

相关文章