信息抽取里程碑式突破!终于要大规模落地了??

0359a789aaf18733a4bc8ddc1be4d047.png

文 | 卖萌酱

大家好,我是卖萌酱。

AI领域常见的工作突破有三类:

  1. 屠爆了学术界榜单,成为该领域学术层面的新SOTA

  2. 实现了大一统,用一个架构实现对该领域诸多子任务的统一建模,刷新建模认知

  3. 将NB的学术界新SOTA变成一件人人可傻瓜式使用的开源工具利器,带领该领域大规模落地开花

要单独实现其中的任何一点,都是一件很有挑战的事情。如果我说,在信息抽取领域,不久前的一个工作同时做到了这三种突破呢?

c32d872fb7ab6ed26835bea3daf8cd46.png

这次,卖萌酱倒着讲。

先讲第三点——

一个刷新认知的信息抽取开源工具

信息抽取是一个行业应用价值很高的技术,却因为任务难度大,落地成本居高不下。

像金融、政务、法律、医疗等行业,有大量的文档信息需要人工处理,比如政务人员处理市民投诉,工作人员需要从中快速提取出被投诉方、事件发生地点、时间、投诉原因等结构化信息,非常费时费力。若信息抽取技术能低成本、高性能的实现落地,可以大大提升诸多行业的生产效率,节约人力成本。

如今这个想法,迎来了史无前例的可能性。

话不多说,直接上代码,上效果!

实体抽取

from pprint import pprint
from paddlenlp import Taskflow
schema = ['时间', '选手', '赛事名称'] # Define the schema for entity extraction
ie = Taskflow('information_extraction', schema=schema)
pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!")) # Better print results using pprint
>>> 
[{'时间': [{'end': 6, 'probability': 0.9857378532924486, 'start': 0, 'text': '2月8日上午'}],'赛事名称': [{'end': 23,'probability': 0.8503089953268272,'start': 6,'text': '北京冬奥会自由式滑雪女子大跳台决赛'}],'选手': [{'end': 31,'probability': 0.8981548639781138,'start': 28,'text': '谷爱凌'}]}]

仅用三行代码就实现了精准实体抽取?

再来试试更困难的事件抽取任务:

事件抽取

schema = {'地震触发词': ['地震强度', '时间', '震中位置', '震源深度']} # Define the schema for event extraction
ie.set_schema(schema) # Reset schema
ie('中国地震台网正式测定:5月16日06时08分在云南临沧市凤庆县(北纬24.34度,东经99.98度)发生3.5级地震,震源深度10千米。')
>>> 
[{'地震触发词': [{'end': 58,'probability': 0.9987181623528585,'start': 56,'text': '地震','relations': {'地震强度': [{'end': 56,'probability': 0.9962985320905915,'start': 52,'text': '3.5级'}],'时间': [{'end': 22,'probability': 0.9882578028575182,'start': 11,'text': '5月16日06时08分'}],'震中位置': [{'end': 50,'probability': 0.8551417444021787,'start': 23,'text': '云南临沧市凤庆县(北纬24.34度,东经99.98度)'}],'震源深度': [{'end': 67,'probability': 0.999158304648045,'start': 63,'text': '10千米'}]}}]
}]

同样易用而精准!

需要留意的是,这还是开放域信息抽取的API接口,也就是说,给定任意要抽取的实体、关系、事件等类型(schema),模型均能从文本中抽取出对应的目标。

例如在第一个示例中,我们希望从文本中抽取出时间、选手和赛事名称这么三种实体,将其作为schema参数传给Taskflow后,模型就可以做到从文本中完成这三类实体的精准抽取。

为了避免精挑细选showcase的嫌疑,卖萌酱接连yy了若干实体类型去暴力测试,发现这个API竟然均能应对自如!

感兴趣的小伙伴可以通过以下传送门自行安装体验:

Github链接:
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie

这波操作放在2022年还是让人感觉有点梦幻了。要知道,市面上的信息抽取工具大多只能做特定领域的封闭域(有限预定义的schema)抽取,效果还很难保证,更不必说打造成三行代码即可完成调用的开放域工具了。

这不禁让人好奇,这个开源工具的背后是怎么做到的呢?

卖萌酱找PaddleNLP内部人士了解到,关键有二:

  1. 一个发表在ACL2022,屠遍信息抽取榜单的大一统信息抽取诸多子任务的技术UIE

  2. 首个知识增强语言模型——ERNIE 3.0

关于第一点,本文的下一章会做重点阐述,在此稍留作悬念。

关于第二点,我们知道,知识对于信息抽取任务至关重要,而ERNIE 3.0不仅参数量大,还吸纳了千万级别实体的知识图谱,可以说是中文NLP方面最有“知识量”的SOTA底座。在ERNIE 3.0的基础上,如果再构造一个面向开放域信息抽取的二阶段SOTA预训练上层建筑呢?

强强联合,便是这个工具带来梦幻体验的密码。

a876903f93d9651e0908f2385aa60e88.png

需要注意的是,这个包含强大知识储备的NLP基座和梦幻的信息抽取架构均集成到了PaddleNLP中,PaddleNLP却又不止是一个SOTA收纳箱,其还提供了非常易用的模型压缩部署方案、大模型加速技术、产业场景应用范例,做了扎实的易用性优化和性能优化。一句话总结,打造中文NLP应用的神器。

值得关注的是,UIE不仅具备惊艳的zero-shot开放域信息抽取能力,还有强大的小样本定制训练能力。

作者在互联网、医疗、金融三个行业关系、事件抽取任务上测试了小样本定制训练效果:

3564f13019b8cf1b951f818306c3e3bd.png

在金融场景,仅仅加了5条训练样本,uie-base模型F1值提升了25个点。

也就是说,即使工具在某些case或某些场景下表现欠佳,人工标几个样本,丢给模型后就会有大幅的表现提升。这个强大的Few-Shot能力则是工具在大量长尾场景落地的最后一公里保障。

对PaddleNLP内置的黑科技细节和玩法感兴趣的小伙伴,可以扫码报名进群,获取PaddleNLP官方近期组织的直播链接,进群还有更多福利哦~

加入PaddleNLP技术交流群ce17a343856c620e71e1458cd6530ba7.png

入群福利:

  1. 获取直播课程链接

  2. 获取PaddleNLP团队整理的10G重磅NLP学习大礼包

49e481b8ba92b98210a78f1115ad5915.png

挖掘该工具更多的潜力和惊喜,请进传送门:
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie

接下来还有第2点——

一个大一统信息抽取诸多子任务的架构

信息抽取领域的任务繁多,从大的任务类型上,可分为实体抽取、关系抽取、事件抽取、评价维度抽取、观点词抽取、情感倾向抽取等,而若要具体到每个任务类型下的抽取domain和schema定义,则更是无穷无尽了。

因此,以往信息抽取的落地是非常困难、成本高昂的,公司不仅要为每个细分的任务类型和domain标数据、开发模型、专人维护,而且部署起来也非常费力且消耗大量机器资源。

此外,各个子任务也不是完全割裂的,传统的子任务专用设计使得任务之间的通用知识难以共享,一座座“信息孤岛”的力量总是有限的,甚至有偏的。

但现在不是了。由中科院软件所和百度共同提出的一个大一统诸多任务的开放域信息抽取技术UIE,发表在ACL 2022的SOTA技术,直接上图:

794eedfff01528e3fd152856eebe7ab8.png

简单来说,UIE借鉴近年来火热的Prompt概念,将希望抽取的Schema信息转换成“线索词”(Schema-based Prompt)作为模型输入的前缀(SSI),使得模型理论上能够适应不同领域和任务的Schema信息,并按需抽取出线索词指向的内容,生成结构化语言表述的抽取结果(SEL)从而实现开放域环境下的通用信息抽取。

例如上图中,假如我们希望从一段文本中抽取出“人名”的实体和“工作于”的关系,便可以构造[spot] person [asso] work for的前缀,连接要抽取的目标文本[text] ,作为整体输入到UIE中。

那么这里关键的UIE模型是如何训练得到的呢?

UIE作者在预训练模型MLM loss的基础上又巧妙的构造了2个任务/loss:

  • 文本-结构预训练:给定一个<文本,结构>对,基于抽取出的schema通过随机采样spots和asso的方式来构造schema负例,将schema负例与原始的schema(正例)拼接得到meta-schema,最后再拼接上文本,来预测结构。作者表示这样可以避免模型在预训练阶段暴力记忆三元组,得到通用的文本-结构的映射能力ca3993927c6523456fd0fd5771927620.png

  • 结构生成预训练:这个任务是为了训练decoder的结构输出能力,将输出结构SEL作为decoder的优化目标,来学到严谨的SEL规则db15bd81833c419adc697e5775a3f637.png

通过2个loss的联合预训练,便得到了强大的UIE模型。

值得注意的是,尽管原论文使用了T5模型作为backbone,基于生成架构,实际上为了发挥模型在中文任务上的最大潜力,且让模型的推理效率变得可接受(毕竟生成任务还是太重了),在本文第一章提到的PaddleNLP信息抽取方案中,使用了强大的ERNIE 3.0模型+抽取式(阅读理解)架构。因此在中文任务上效果更佳,推理速度更快。

20502302787fa9d7244f9349a9b09113.png

对更多细节感兴趣的小伙伴,可以看原论文或在文末扫码海报预约UIE讲解直播~

论文链接:  
https://arxiv.org/pdf/2203.12277.pdf

最后讲第1点——

不小心,刷了13个SOTA

UIE在各类IE任务的数据集上表现怎么样呢?

首先是常规设定下,4类抽取任务,13个经典测试集与SOTA的对比:

a882a5d9ffcbf49f2feca65e0295e9d9.png

表格右数第二列是未经过UIE预训练的结果(基于T5+SEL直接微调),右数第一列是UIE预训练后微调的结果,可以看出SEL+强大生成模型就可以在信息抽取的统一建模方面取得很强的效果,而经过UIE预训练后则进一步提升了模型表现。

我们知道,模型经过微调,其实会弱化不同预训练策略带来的模型差异。因此UIE预训练的价值在小样本方面得到了更加酣畅淋漓的体现:

6b31fd84af30192036dde50236852187.png

经过UIE预训练后,模型的小样本学习能力得到了极大的提升,这便是UIE工具具备强大定制化能力,进而实现中长尾行业落地的关键。

最后,百度高工会在5.18-5.19日针对信息抽取行业痛点,对UIE和PaddleNLP的玩法和潜力进行深入讲解,通过以下海报扫码预约,进群还有更多福利哦~

加入PaddleNLP技术交流群f9071205a7b84da94725071f54869109.png

入群福利:

  1. 获取直播课程链接。

    34530e6b1880445d0c9eb38f6f546e21.png

  2. 获取PaddleNLP团队整理的10G重磅NLP学习大礼包

21f7982e9f7f830657989de4ba2d8693.png

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

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

相关文章

Spring Boot 2.x基础教程:使用 Thymeleaf开发Web页面

通过本系列教程的前几章内容&#xff08;API开发、数据访问&#xff09;。我们已经具备完成一个涵盖数据存储、提供HTTP接口的完整后端服务了。依托这些技能&#xff0c;我们已经可以配合前端开发人员&#xff0c;一起来完成一些前后端分离的Web项目&#xff0c;或是一些小程序…

《剑指Offer》解题目录(更新完毕)

题目来源于LeetCode上的《剑指Offer》&#xff0c;这里做一个目录方便大家查找。另外有本人的LeetCode解题目录、《程序员面试金典》解题目录、LintCode解题目录 可点击链接查看。updated on 2020.3.18 不懂的概念可以参考《数据结构与算法之美》学习汇总 已解决 75/75 - 简单…

信息抽取里程碑式突破!要大规模落地了?

声明&#xff1a;本文原创首发于公众号夕小瑶的卖萌屋。作者&#xff1a;卖萌酱大家好&#xff0c;我是卖萌酱。AI领域常见的工作突破有三类&#xff1a;屠爆了学术界榜单&#xff0c;成为该领域学术层面的新SOTA实现了大一统&#xff0c;用一个架构实现对该领域诸多子任务的统…

Spring Boot 2.x基础教程:使用Spring Data JPA访问MySQL

在数据访问这章的第一篇文章《Spring中使用JdbcTemplate访问数据库》 中&#xff0c;我们已经介绍了如何使用Spring Boot中最基本的jdbc模块来实现关系型数据库的数据读写操作。那么结合Web开发一章的内容&#xff0c;我们就可以利用JDBC模块与Web模块的功能&#xff0c;综合着…

剑指Offer - 面试题6. 从尾到头打印链表(栈,递归,反转链表)

文章目录1. 题目2. 解题2.1 stack解题2.2 递归2.3 反转链表1. 题目 输入一个链表的头节点&#xff0c;从尾到头反过来返回每个节点的值&#xff08;用数组返回&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,3,2] 输出&#xff1a;[2,3,1]限制&#xff1a; 0 &…

CV未来,路在何方?李飞飞指路!

编 | LRS源 | 新智元【导读】ImageNet见证了计算机视觉发展的辉煌历程&#xff0c;在部分任务性能已超越人类的情况下&#xff0c;计算机视觉的未来又该如何发展&#xff1f;李飞飞最近发文指了三个方向&#xff1a;具身智能&#xff0c;视觉推理和场景理解。在深度学习革命进程…

Spring Boot 2.x基础教程:找回启动日志中的请求路径列表

如果您看过之前的Spring Boot 1.x教程&#xff0c;或者自己原本就对Spring Boot有一些经验&#xff0c;或者对Spring MVC很熟悉。那么对于Spring构建的Web应用在启动的时候&#xff0c;都会输出当前应用创建的HTTP接口列表。 比如下面的这段日志&#xff1a; 2020-02-11 15:32…

剑指Offer - 面试题9. 用两个栈实现队列

1. 题目 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回 -1 ) 类似题目&#xff1a;LeetCode 232. …

被深度学习框架逼疯的N大瞬间!何解?

文 | 卖萌酱大家好&#xff0c;我是卖萌酱。对一个深度学习从业者来说&#xff0c;无论你的场景是CV、NLP、Speech还是搜广推现金牛&#xff0c;手头使用最高频的工具莫过于深度学习框架&#xff0c;涵盖了模型训练、模型部署&#xff0c;乃至数据标注、数据清洗等环节。站在20…

Spring Boot 2.x基础教程:使用国产数据库连接池Druid

上一节&#xff0c;我们介绍了Spring Boot在JDBC模块中自动化配置使用的默认数据源HikariCP。接下来这一节&#xff0c;我们将介绍另外一个被广泛应用的开源数据源&#xff1a;Druid。 Druid是由阿里巴巴数据库事业部出品的开源项目。它除了是一个高性能数据库连接池之外&…

剑指Offer - 面试题10- I. 斐波那契数列

文章目录1. 题目2. DP解题3. 面试题 08.01. 三步问题4. LeetCode 509. 斐波那契数1. 题目 写一个函数&#xff0c;输入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第 n 项。斐波那契数列的定义如下&#xff1a; F(0) 0, F(1) 1 F(N) F(N - 1) F…

关于深度学习框架的忆苦思甜

声明&#xff1a;本文原创首发于公众号夕小瑶的卖萌屋。作者&#xff1a;卖萌酱大家好&#xff0c;我是卖萌酱。对一个深度学习从业者来说&#xff0c;无论你的场景是CV、NLP、Speech还是搜广推现金牛&#xff0c;手头使用最高频的工具莫过于深度学习框架&#xff0c;涵盖了模型…

Spring Boot 2.x基础教程:默认数据源Hikari的配置详解

通过上一节的学习&#xff0c;我们已经学会如何应用Spring中的JdbcTemplate来完成对MySQL的数据库读写操作。接下来通过本篇文章&#xff0c;重点说说在访问数据库过程中的一个重要概念&#xff1a;数据源&#xff08;Data Source&#xff09;&#xff0c;以及Spring Boot中对数…

关于深度学习、NLP和CV,我们写了一本1400页的全栈手册

不知不觉写文章已经四年了。最开始是一个人&#xff0c;后来恰了恰饭&#xff0c;就招揽了很多比小夕厉害的小伙伴一起写。不知不觉已经积累了300多篇了。。三年以来&#xff0c;我跟小伙伴们原创的300篇深度学习、NLP、CV、知识图谱、跨模态等领域的入门资料、子方向综述、201…

基于sklearn的LogisticRegression二分类实践

文章目录1. 预备知识2. 实践代码3. 结果对比3.1 正态分布3.2 均匀分布3.3 修改Pipeline3.3.1 删除多项式转换3.3.2 删除归一化项3.3.3 删除多项式转换&归一化3.4 总结4. 附4.1 matplotlib.pyplot.contourf4.2 numpy 之 np.r_[a,b], np.c_[a,b]本文使用 sklearn的逻辑斯谛回…

Spring Boot 2.2 正式发布,大幅性能提升 + Java 13 支持

之前 Spring Boot 2.2没能按时发布&#xff0c;是由于 Spring Framework 5.2 的发布受阻而推迟。这次随着 Spring Framework 5.2.0 成功发布之后&#xff0c;Spring Boot 2.2 也紧跟其后&#xff0c;发布了第一个版本&#xff1a;2.2.0。下面就来一起来看看这个版本都更新了些什…

剑指Offer - 面试题10- II. 青蛙跳台阶问题

1. 题目 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e97&#xff08;1000000007&#xff09;&#xff0c;如计算初始结果为&#xff1a;1000000008&#xff0c;请返回 1。 示例 1&#xff1a…

Gitee倒下了

你好呀&#xff0c;我是歪歪。昨日&#xff0c;趁着午休的美好时光&#xff0c;我正在互联网上愉&#xff08;疯&#xff09;快&#xff08;狂&#xff09;的冲&#xff08;内&#xff09;浪&#xff08;卷&#xff09;。在查询某个技术点的时候&#xff0c;我一不小心&#xf…

Spring Boot 2.x基础教程:Swagger接口分类与各元素排序问题详解

之前通过Spring Boot 2.x基础教程&#xff1a;使用Swagger2构建强大的API文档一文&#xff0c;我们学习了如何使用Swagger为Spring Boot项目自动生成API文档&#xff0c;有不少用户留言问了关于文档内容的组织以及排序问题。所以&#xff0c;就特别开一篇详细说说Swagger中文档…

剑指Offer - 面试题15. 二进制中1的个数(位运算)

1. 题目 请实现一个函数&#xff0c;输入一个整数&#xff0c;输出该数二进制表示中 1 的个数。例如&#xff0c;把 9 表示成二进制是 1001&#xff0c;有 2 位是 1。因此&#xff0c;如果输入 9&#xff0c;则该函数输出 2。 示例 1&#xff1a; 输入&#xff1a;0000000000…