社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

这个 GitHub 项目,绝对称得上是 AI 技术的大突破!

GitCube • 3 年前 • 335 次点击  
公众号关注 “GitCube”
设为 “星标”,每天带你逛 GitHub!


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

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

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

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


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

这次,先倒着讲。

先讲第三点 ——


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

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


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

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


话不多说,直接上代码,上效果!
# 实体抽取
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千米'}]}
    }]
}]
同样易用而精准!感兴趣的小伙伴可以通过以下传送门自行安装体验。

欢迎大家提前码住链接,建议访问 Github

点个 Star 关注收藏

https://github.com/PaddlePaddle/PaddleNLP


当然,我们在自行测试的时候可能会觉得,短短的三行代码就可以任意 DIY 抽取了,这未免有点夸大?


并不是,该接口实际上是向大家展示了一个通用的开放域信息抽取范式,即一个开放域信息抽取的 API 接口,也就是说,给定任意要抽取的实体、关系、事件等类型(schema),“提示” 模型从文本中抽取出对应的目标。


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


这样,就做到了对任何信息抽取需求都能够应对自如。


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


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


我找 PaddleNLP 内部人士了解到,关键有二:


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

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


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


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


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

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


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


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

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

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


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


加入 PaddleNLP 技术交流群

入群福利


  1. 获取直播课程链接

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

(设好闹钟噢!不确定是否有回放 QvQ)


挖掘该工具更多的潜力和惊喜,请进传送门:


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


接下来还有第 2 点 ——


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

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


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


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


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

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


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


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


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


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

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

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


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

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


论文链接:

https://arxiv.org/pdf/2203.12277.pdf

最后讲第 1 点 ——


不小心,刷了 13 个 SOTA

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

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

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


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

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


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


入群福利


  1. 获取直播课程链接

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

(设好闹钟噢!不确定是否有回放 QvQ)


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/134526