基于 BERT 的非结构化领域文本知识抽取

文章目录

    • 题目
    • 摘要
    • 方法
    • 实验

题目

食品测试的大型语言模型

图片名称

论文地址:https://arxiv.org/abs/2103.00728

摘要

    随着知识图谱技术的发展和商业应用的普及,从各类非结构化领域文本中提取出知识图谱实体及关系数据的需求日益增加。这使得针对领域文本的自动化知识抽取颇有意义。本文提出了一种基于 BERT 的知识抽取方法,用于从非结构化的特定领域文本(例如保险行业的保险条款)中自动抽取知识点,以达到在构建知识图谱的过程中节约人力的目的。不同于常用的按照规则、模板或基于实体抽取模型的知识点抽取方法,本文将领域文本的知识点转化为问答对,以答案所在的位置前后的文本为上下文,以 BERT 基于 SQuAD 数据进行阅读理解任务的方式进行微调。用微调后的模型从更多保险条款中自动抽取知识点,获得了良好的效果。

方法

    近年来随着各行业数字化转型的深入,相关电子文本数量与日激增。与此同时,越来越多的企业开始重视数据分析、挖掘以及数据资源的开发利用,诸如知识图谱,智能对话等计算机应用系统已经成为了各类企事业单位对内对外提供服务的基础。这类应用往往需要从各类非结构化领域文本中提取出其蕴含的结构化信息,用于数字化知识库的构建。数据是计算机产品和服务的基础,为计算机提供数据成为了新时期企事业单位发展的新任务。企事业单位中原有的各类商务、业务文档资料蕴含了丰富的知识和信息,却都是为了人类阅读而撰写,相对于计算机程序的需求,多了很多的冗余信息。目前,在应用这类数据时,基本上需要投入大量人力,通过阅读文档人工抽取出所需信息,并将其表示成计算机能够读取(“理解”)的形式。如此造成了许多额外的学习成本和人力资源消耗。如何采用自动化的手段从非结构化的文本数据中发现知识,用以作为各种智能化应用所依存的数据资源,是知识抽取领域的研究热点。本文以特定领域的非结构化文本为研究对象,提出了通过基于深度学习的语言理解模型对其进行知识抽取的方法。这一方法将待抽取知识点以问题-答案对形式呈现,并以人工标注数据作为训练数据,在预训练模型的基础上进行迁移学习,通过微调(Fine Tuning)获得在同领域文本上自动抽取知识点的模型。

    对于具有统一结构规范的文档,可以采用构建规则的方式进行知识抽取。规则的构建往往通过人工的归纳总结来完成——即阅读大量同领域文本,从中选取,总结出最终的抽取规则。Jyothi等人使用基于规则的方式从大量个人简历中抽取有效信息,构建数据库。JunJun等人用类似的方法从学术文献中提取学术概念知识。这种方法的优点是不需训练模型,简单高效;缺点也很明显,我们构建的规则仅适用于相同结构的文本,而且必须具有较严格的格式规范,一旦文本结构稍有改变,就需要人工构建新的知识抽取规则,因此该方法不具备可移植性。

    知识抽取的一种任务称为实体提取,即从文本中抽取预先定义的标签内容,如时间,地点等,具体标签根据应用而定,其中最常用的一种知识抽取称为命名实体识别(named entity recognition, NER)。实体抽取本身可直接作为序列标注任务来解决,后者可使用传统的统计学习方法,如隐马尔可夫模型(HMM),或条件随机场(CRF)处理。近年来一些深度学习模型也被应用到这类问题中,如结合了 BiLSTM 和 CRF 的序列标注方法曾取得很好的效果。Lample等人提出了一种新的网络结构,使用堆叠的 LSTM 来表示一个栈结构,直接构造多个单词的表示,并与 LSTM-CRF 模型做了比较。Ma等人提出了基于 BiLSTM-CNN-CRF 的端到端序列标注模型。此外,微调后的 BERT模型也能够在序列标注任务上达到很好的效果。

    除了从文本中提取实体,实体之间的关系也是知识抽取的关注点,通常把实体及其关系组成三元组<E1, R, E2>,那么任务目标为从文本中抽取所有可能的实体关系三元组,其关系限定在预先设定的 schema 之内。Zeng等人设计了 CNN 来进行关系分类,但并非三元组。Makoto等人通过构建基于 BiLSTM和 Bi-TreeLSTM 的堆栈网络同时进行实体抽取和关系检测,从而实现实体关系的端到端预测。Li等人采用一个编码器-解码器架构的双层 LSTM,构建了一个不局限于三元组形式的知识抽取模型,可以预测出固定格式的结构化知识。Zheng等人通过一种标注策略把实体和关系提取任务转化为序列标注任务,而后构建与前面类似的 Bi-LSTM 模型来处理之。Luan[等人设计了一种多任务学习框架用于在科学文献中识别实体和关系,以构建科学知识图谱,此模型在没有任何领域先验知识的情况下优于现有模型。

    除了以上提到的知识抽取模式,一个不同的角度是将知识点本身看作一个问题,将知识点的内容作为该问题的答案,将知识点所在的文本段作为这个问答对的上下文,这样知识抽取模型便可以用问答模型来构造。近年来,GPT和 BERT等预训练模型的出现使得这类问答阅读理解任务可以很好地作为其下游任务,仅需简单改造原有网络结构,并进行微调,即可得到很好的效果。Wang等人在原始BERT 的基础上使用多段落预测的方式改进了其在 SQuAD数据集上的效果。Alberti等人在BERT 与 SQuAD 的基础上改进后,将其应用在一个更困难的问答数据集 NQ上,𝐹1分数相对之前的基准线提升了 30%。这种问答形式的知识抽取可以更灵活地处理不同结构的知识——只需将其定义为不同的问题,而不需要根据知识的形式单独设计新的网络结构。

    不同行业的结构化文本因其行业特征而特色迥异。有些行业的特定文档(例如医药说明书)不仅具备严格的结构而且在术语和用词上要求非常严格,比较适合基于规则的知识抽取。还有一些行业的文本与通用文本区别不大(例如新闻报道、访谈等),对其可以直接应用通用抽取技术。还有一些领域的文本,介于两者之间,有一定的专业性,但不很严格,不同企业的同类文本结构和措辞近似,但又有所差别,同一企业内部的术语使用和展示方式相对统一。保险行业的保险条款文档,就属于这第三类文本之列。保险条款是保险合同双方当事人——保险人(保险公司)与投保人——共同约定的有关双方权利和义务的条文。一个保险条款一般由三部分组成:

  1. 基本信息,即条款自身信息,包括:保险人,条款名称,条款简称,条款类型,期限类型,犹豫期,诉讼时效,备案号和备案时间,能否作为主险销售等;
  2. 购买条件,即要本条款承接的被保险人需要具备的客观条件,包括:被保险人的年领、性别、职业/工种要求,体检要求,社保要求,必须如实告知的个人情况等;
  3. 保险责任,也就是本条款的责任范围和赔付内容等;

    虽然保险条款具备一定程度的专业词汇,但专业词汇的使用大多没有业界统一标准(例如:“犹豫期”又可称为“冷静期”等),而且条款文档作为交付给投保人阅读的文件,需要抽取的知识点大多混杂在一段自然语言表述之中,并不适合依据静态规则来进行文本抽取。所需抽取知识点本身虽然可以采用实体抽取的方式来获取,但知识点对应的值却往往混杂在一段自然语言表述之中,无法与知识点描述一起被抽取出 。例如:某条款的诉讼时效是 2 年,这个“2 年”可能出现在下列这段描述中:“受益人向我们请求给付保险金或保险费豁免的诉讼时效期间为 2 年,自其知道或应当知道保险事故发生之日起计算。”因此在需要从保险条款中抽取基本信息、购买条件和保险责任等知识点时,我们就直接排除了基于规则和基于实体抽取的方法。如果采用 Schema 式抽取,将知识点转化为三元组,则所需要的训练数据集和标注量都相对较大,相对于我们的目的而言,难免得不偿失。因此,我们最终选取了基于问答的知识抽取方式。

    近年来,基于预训练模型通过微调进行学习的方法在自然语言处理(Natural Language Process, NLP)领域取得了巨大成功,BERT 模型是其中的重要代表。BERT 是一种基于转换器(transformer)的双向编码表示模型,它的拓扑结构是一个多层的双向转换器网络。BERT 模型是基于微调学习的典型应用,也就是说它的构建包含预训练和微调两个步骤。首先在预训练阶段,对大量不同训练任务的未标记语料数据进行训练,将语料中的知识迁移进了预训练模型的文本嵌入(Embedding)中。这样,在微调阶段,只需要在神经网络中增加一个额外的输出层,就可以对预训练模型进行调整了。具体而言,微调就是用预训练参数初始化 BERT 模型,然后,使用来自下游任务的标记数据对模型进行微调。针对我们从保险文档中抽取知识点的需求,只需使用保险条款数据针对 BERT 的问答任务进行微调,就可以适应保险条款知识抽取的需求了。

图片名称

    保险条款知识抽取过程首先将人工标注的保险条款知识点制作成<question, answer>的形式,然后使用文本解析程序将一份保险条款文档解析为一颗文档树,其中主标题为根节点,其后每一级标题都为上一级的子节点,而每段文字都被读取为一个叶子节点。根据问题-答案对中的答案匹配到其所在叶子节点,以整个叶子节点对应的文本为该问题-答案对的上下文(context),最终构造成一个由<question, answer, context>组成的问答数据集,最后使用这一数据集对 BERT 预训练模型,按照针对 SQuAD 数据进行阅读理解任务的微调方式进行训练,得到最终的知识抽取模型。如上图所示,对于问答任务,只需在 BERT 输出的编码向量后添加一层额外的全连接层,预测answer 在 context 中的位置即可。在测试时,对于新的保险条款,需要以同样的方式分析不同知识点问题所在的上下文,然后再将<question, context>作为模型的输入,得到各知识点的 answer。使用上面的方法可以较好地处理同一公司、同一类型的保险条款,这是因为同公司的保险条款文章结构具有一致性,可以用同一程序来分析上下文,但是对于不同公司、类型的保险条款,由于术语和结构不同,原分析程序无法处理,而为每种条款重新编写一份文本分析程序是不具可行性的,因此该模型需要改进。

    为了使知识抽取过程具有更好的泛用性,我们首先修改预测过程:将新条款的原文按照字数进行分段,每段约 300 字(尽量不打碎句子),而后将每一文本段都作为任何一个知识点的可能的context,作为模型的输入。如果输出的 answer是空,则说明这一段不存在相应的知识点,否则综合考虑每个知识点在所有文本段下的输出,选择其中概率最高的作为该知识点的 answer。这种新的预测方法对于任何条款具有泛用性,不再需要进行额外的文本解析。我们用这种方法测试了几个不同公司的条款,结果表明其在旧模型上的效果并不好,准确率的下降很明显。原因在于:改进前在训练时,每个知识点的上下文都是根据文档结构精确定位的,没有很多的负样本,导致模型也只能够通过精确定位的上下文来进行预测。一旦文本组织结构、标题格式发生变化,原有的文本解析程序就无法精确定位问题上下文,产生了很多干扰数据,影响了模型的效果。因此模型的训练过程需要修改,我们添加分段文本数据,即对训练集中每个条款按照同样的方式分段,如果该段包含该知识点标注的答案,则作为新的样本,否则作为负样本(answer 为空)。在实际测试中,如果将这些新的样本全部加入到训练集中,产生的训练数据过多,且负样本数量远超正样本。为了平衡此过程,我们进一步作如下改进:对于每个知识点问题,如果该条款本身不包含该知识点(因为知识点是针对所有保险条款统一定义的,因此对于某份特定的条款而言,未必所有知识点都包含在其中),则每个片段以 10%的概率作为该问题的负样本;如果条款本身包含该知识点,则分两种情况,如果当前文本片段包含目标知识点,则作为正样本,否则以 50%的概率选取为负样本,如此构造新的训练集得到新模型。这样做的想法是:如果条款中包含某一知识点,就增加与该知识点相关的负样本数量,以期模型能够更好地处理相似片段的干扰,提高答案的准确性。而如果条款中本身不包含该知识点,则文本片段与知识点的契合程度应该较差,选取少量的负样本就足够。经过测试,新的模型相对于旧模型有很大改进,更契合新的预测方法,可以作为更通用的保险条款知识抽取模型。

实验

    我们的数据集由某保险公司的保险条款组成,每个条款具有人工标注的知识点,如犹豫期,诉讼期,保险金额等。在实验过程中,训练集,测试集分别由 251 个条款和 98 个条款组成。经过统计,这些条款中所有可能的知识点问题数量为309 条,平均每个条款有 45 条知识点需要提取。测试过程中,我们将条款文本分段,尝试从所有段中提取知识点𝑘𝑖,并根据模型输出的概率,选择概率最高的文本作为该知识点的答案。如果最终得到的输出为空字符串,则代表条款不存在该知识点。由于每个条款提取的知识点只占 309条中的小部分,大多数知识点的输出应当是空的,因此我们在评估时忽略这部分空知识点,关注两个指标:模型输出的知识点正确率𝑃,即精准率(precision),以及应提取知识点中确实被正确提取的比率𝑅,即召回率(recall)。假设知识点𝑘𝑖标注为𝑦𝑖,模型的输出为𝑦̃𝑖,则𝑃和𝑅可定义为:

    我们使用 Google 开源的 BERT 中文预训练模型 BERT_chinese_L-12_H-768_A-12,在此基础上进行后续的测试。参数设置上,初始学习率为 3E-5,批量大小为 4,训练 epoch 数为 4,其余参数采用该模型的默认配置。本文的实验包含两部分的测试,第一部分是基准模型的测试,其训练过程为:首先使用文本解析程序解析保险条款的结构,提取出对应知识点所在的 context 后,再组合成训练集对 BERT 模型作 fine-tuning。第二部分是新模型的测试,其训练过程为:在基准模型的训练集的基础上添加新样本。对相应的保险条款按字数进行分段,每段文本约 300 字。对于每个知识点问题,构建训练集来训练得到新模型。测试结果是测试集中 98 个保险条款统计的平均值,如下表所示:

图片名称

    可以看出,以前文所述的方法添加有限的负样本后训练的模型明显优于基准模型,其中𝑃提高了约 40%,𝑅提高了约 20%。𝑃的提升相当显著。基准模型的训练集中,仅通过文本解析程序精确定位知识点的上下文信息,导致模型只具备从正确的上下文中抽取对应的知识点的能力,而不具备辨别无效上下文的能力,因此基准模型存在很大比例的无效输出。而按比例添加负样本后,新模型的无效输出大幅度减少,输出的知识点中 60%以上是有效且正确的输出。而由于添加了相对于基准模型粒度更粗的上下文信息(文本段)组成的正样本,使得模型能够更好地从无规则截取的文本段中抽取出目标知识点,因此召回率𝑅也有大幅提升。最终𝐹1值提升了约30%。

    实验结果表明,经过我们优化训练集后训练得到的新模型在文本分段预测的方法中效果优于原始的基准模型,从而能够进一步用于更具泛用性的保险条款知识抽取任务中。同时,当前的模型依然还有很大的提升空间。

  • 由于现实条件(数据标注量)的限制,我们的训练仅囊括了 251 个条款,且所有训练数据均来自于同一个保险人。在扩大数据集规模,囊括更多保险人制定的条款数据后,应当进一步优化模型的效果。
  • 当前我们的数据标注仅包含条款知识点的内容,而训练数据中对应的上下文是通过自主编写的文本分析程序得到的,这样得到的上下文存在小部分错误。可优化人工标注策略,同时标注知识点及其上下文,这样得到的数据可以更精确。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【UE5】调用ASR接口,录制系统输出。录制音频采样率不匹配

暂时测出window能用。阿里的ASR接口当前仅支持8000和16000。UE默认采样44100。

MES系统助力塑料制品行业数字化转型

注塑MES系统助力工厂生产力提升具体体现在&#xff1a;覆盖生产全流程&#xff1b;数据自动收集、科学规划排产&#xff1b;优化配送模型、平衡物流运转&#xff1b;严格把控品质、异常自动分析&#xff1b;实时监控设备&#xff0c;保证正常运转&#xff1b;产品快速追溯&…

教学神器大比拼:SmartEDA、Multisim、Proteus,谁是你的最佳选择?

随着科技的飞速发展&#xff0c;教学工具也在不断升级。在电子设计自动化&#xff08;EDA&#xff09;和电路仿真领域&#xff0c;SmartEDA、Multisim和Proteus三款软件备受关注。那么&#xff0c;对于广大教育工作者和学生们来说&#xff0c;这三者之间该如何选择呢&#xff1…

AI绘画之儿童绘本制作变现途径(附详细教程)

AI技术飞速发展&#xff0c;创作儿童绘本或是故事书已经不再是专业插画师和作家的专利。在AI技术的介入下&#xff0c;为那些有创意但缺乏绘画技巧的人们打开了一扇新的大门。通过AI工具&#xff0c;我们可以轻松地创作出既有趣又富有教育意义的儿童故事书&#xff0c;并通过多…

LLMs可以进行任务规划吗?如果不行,LLMs+GNN可以吗?

深度图学习与大模型LLM(小编): 大家好,今天向大家介绍一篇最新发布的研究论文&#xff08;20240530&#xff09;。这篇论文探讨了如何通过引入GNN来提高大模型在任务规划(task planning)中的性能。*论文分析了LLMs在任务规划上的局限性,并提出了一种简单而有效的解决方案。* 1.…

@RequiredArgsConstructor实现构造器注入

RequiredArgsConstructor实现构造器注入 1. Autowired 和 Resource 注解 Autowired Autowired 是 Spring 框架提供的注解&#xff0c;用于自动装配依赖。可以用于字段、构造函数和 setter 方法。 Autowired private ISysUserService userService;Resource Resource 是 Jav…

python接口自动化(二十一)--unittest简介(详解)

宏哥微信粉丝群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 简介 前边的随笔主要介绍的requests模块的有关知识个内容&#xff0c;接下来看一下python的单元测试框架unittest。熟悉 或者了解java 的小伙伴应该都清楚常见的单元测试框架 Junit 和…

广州旭之源模块电源PIN TO PIN替换金升阳

广州旭之源科技有限公司&#xff0c;创立ATAZ工业电源品牌&#xff0c;是一家集研发、生产、销售和服务于一体的标准工业电源解决方案提供商。 以电力电子和自动化控制为核心技术&#xff0c;产品涵盖了壳架式、模块式、导轨式等工业电源。所生产的产品广泛应用于工业控制、电力…

AIGC产品经理学习路径

基础篇&#xff08;课时 2 &#xff09; AIGC 行业视角 AIGC 的行业发展演进&#xff1a;传统模型/深度学习/大模型 AIGC 的产品设计演进&#xff1a;AI Embedded / AI Copilot / AI Agen AIGC 的行业产业全景图 AIGC 的产品应用全景图 AIGC 职业视角 AI 产品经理/ AIGC…

vue3中antd上传图片组件及回显

实现效果&#xff1a; 调用后端接口后&#xff0c;后端返回的数据&#xff1a; 1.在项目components/base下新建UploadNew.vue文件&#xff08;上传图片公共组件&#xff09; <template><div class"clearfix"><a-uploadv-model:file-list"fileL…

视频汇聚平台EasyCVR设备录像回看请求播放时间和实际时间对不上,是何原因?

安防监控EasyCVR视频汇聚平台可提供多协议&#xff08;RTSP/RTMP/国标GB28181/GAT1400/海康Ehome/大华/海康/宇视等SDK&#xff09;的设备接入、音视频采集、视频转码、处理、分发等服务&#xff0c;系统具备实时监控、云端录像、回看、告警、平台级联以及多视频流格式分发等视…

【自监督学习】DINO in ICCV 2021

一、引言 论文&#xff1a; DINO: Emerging Properties in Self-Supervised Vision Transformers 作者&#xff1a; Facebook AI Research 代码&#xff1a; DINO 特点&#xff1a; 对于一张图片&#xff0c;该方法首先进行全局和局部的裁剪与增强并分别送入教师和学生网络&am…

关于.NETCORE站点程序部署到nginx上无法访问静态文件和无法正确生成文件的问题解决过程。

我的netcore6项目&#xff0c;部署到IIS的时候&#xff0c;生成报告时&#xff0c;需要获取公司LOGO图片放到PDF报告文件中&#xff0c;这时候访问静态图片没有问题。 然后还有生成邀请二维码图片&#xff0c;这时候动态创建图片路径和图片也没有问题&#xff0c;可以在站点的…

本地部署:Real-ESRGAN: 高效的图像超分辨率解决方案

目录 引言 什么是 Real-ESRGAN Real-ESRGAN 的特点 工作原理 应用场景 本地部署 本地运行 实验与结果 未来发展方向 结语 Tip&#xff1a; 引言 图像超分辨率&#xff08;Super-Resolution, SR&#xff09;技术旨在从低分辨率图像生成高分辨率图像&#xff0c;应用…

初学SpringMVC之 RestFul 风格、重定向和转发

RestFul 风格改变 URL 形式 比如之前是&#xff1a;http://localhost:8080/add?a1&b2 现在是&#xff1a;http://localhost:8080/add/a/b&#xff08;全是斜杠&#xff09; package com.demo.controller;import org.springframework.stereotype.Controller; import org…

this.$confirm不要取消按钮以及右上角的差号

this.$confirm(保存成功! 订单号为&#xff1a;${res.data}, , {confirmButtonText: 确定,showCancelButton: false, // 不显示取消按钮showClose: false, // 不显示右上角的叉号type: success}).then(() > {}) 效果图下&#xff1a;

基于4G、5G和卫星宽带的应急通信车载聚合路由器组网方案

应急指挥车、现场应急指挥系统作为整个应急指挥平台的主要组成部分&#xff0c;被广泛用于救灾抢险,安全保障等特殊场景&#xff0c;可通过应急指挥车或现场应急指挥系统与后方指挥中心间传输音视频信息&#xff0c;实现现场与指挥中心的实时通信&#xff0c;进行视频会议和远程…

realsense D435l+mid360标定

目录 一、安装realsense环境 二、获取realsense D450L相机内参 三、标定雷达和相机 1.下载livox_camera_calib 2.修改配置参数 3.使用fastlio生成点云 4.标定 一、安装realsense环境 git clone https://github.com/IntelRealSense/librealsense.git cd librealsense //更…

Python基础教学之一:入门篇——迈入编程世界的第一步

Python基础教学之一&#xff1a;入门篇——迈入编程世界的第一步 一、Python简介&#xff1a;历史与现状 Python&#xff0c;一种解释型、高级和通用的编程语言&#xff0c;由Guido van Rossum在1989年圣诞节期间创造&#xff0c;并于1991年首次发布。设计哲学强调代码的可读性…

vb.netcad二开自学笔记9:界面之ribbon

一个成熟的软件怎么能没有ribbon呢&#xff0c;在前面的框架基础上再加个命令AddRibbon <CommandMethod("AddRibbon")> Public Sub AddRibbon() Dim ribbonControl As RibbonControl ComponentManager.Ribbon Dim tab As RibbonTab New RibbonTab() tab.Tit…