PaddleNLP开源UTC通用文本分类技术,斩获ZeroCLUE、FewCLUE双榜第一

news2024/11/26 18:37:59

飞桨PaddlePaddle 2023-01-12 20:02 发表于湖北

针对产业级分类场景中任务多样、数据稀缺、标签迁移难度大等挑战,百度提出了一个大一统的通用文本分类技术UTC(Universal Text Classfication)。

UTC在ZeroCLUE和FewCLUE两个榜单上均位居榜首,证明了其优异的零样本和小样本学习能力。飞桨PaddleNLP结合文心大模型中的知识增强NLP大模型文心ERNIE,开源了首个面向通用文本分类的产业级技术方案,仅三行代码即可快速体验多任务文本分类效果,同时提供了端到端的模型训练部署方案,支持复杂场景的产业落地。

图片

图:ZeroCLUE榜单(2023.01.12)

图片

图:FewCLUE榜单(2023.01.12)

图片榜单介绍

CLUE(Chinese Language Understanding Evaluation)作为中文语言理解权威测评榜单,在学术界和工业界都有着广泛影响。ZeroCLUE和FewCLUE是其设立的中文零/小样本学习测评子榜,旨在探索低资源场景下的最佳模型与实践。自发布以来已经吸引了美团、IDEA研究院、澜舟科技、网易、腾讯微信、阿里云等多家企业和研究院的参与。

图片通用文本分类技术UTC

随着企业智能化转型的加速,文本分类技术被广泛应用于各行各业的文本处理中,如对话意图识别、金融研报文档分类、票据归档、事件检测等。

分类任务看似简单,然而在产业级文本分类落地实践中,面临着诸多挑战:

  • 任务多样:单标签、多标签、层次标签、大规模标签等不同的文本分类任务,需要开发不同的分类模型,模型架构往往特化于具体任务,难以使用统一形式建模;
  • 数据稀缺:部分领域数据稀缺,难以获取,且领域专业性使得数据标注门槛高;
  • 标签迁移:不同领域的标签多样,并且迁移难度大,尤其不同领域间的标签知识很难迁移。

针对以上难题,百度构建了“任务架构统一、通用能力共享”的通用文本分类技术UTC,其实现了良好的零/少样本迁移性能。UTC是一个大一统诸多任务的开放域分类技术方案,其总体框架如下图所示。

图片

图:UTC总体框架

在详细分享其技术思路之前,先来看看UTC有哪些亮点。

图片UTC亮点

*亮点1:多任务统一建模*

在传统技术方案中,针对不同的分类任务需要构建多个分类模型,模型需单独训练且数据和知识不共享。而在UTC方案下,单个模型能解决所有分类需求,包括但不限于单标签分类、多标签分类、层次标签分类、大规模事件标签检测、蕴含推理、语义相似度计算等,降低了开发成本和机器成本。

图片

图:传统方案 vs UTC统一建模方案

*亮点2:零样本分类和小样本迁移能力强*

UTC通过大规模多任务预训练后,可以适配不同的行业领域,不同的分类标签。例如,在财务报销场景,无需训练数据,即可全部分类正确(图左)。针对稍复杂场景,标注少量数据微调即完成任务适配,例如金融文档分类(图中)和政务服务分类(图右)中,仅标注了几条样本,分类效果就取得大幅提升,大大降低标注门槛和成本。

图片

图:文本分类零样本和小样本效果展示

综合来看,在医疗、金融、法律等领域中,无需训练数据的零样本情况下UTC效果平均可达到70%+(如下表所示),标注少样本也可带来显著的效果提升:**每个标签仅仅标注1条样本后,平均提升了10个点!**也就是说,即使在某些场景下表现欠佳,人工标几个样本,丢给模型后就会有大幅的效果提升。

图片

图:自建数据集上UTC效果

说明:0-shot表示无训练数据直接预测,1-shot表示每个标签基于1条标注数据进行模型微调。

图片快速使用UTC

PaddleNLP结合文心ERNIE,基于UTC技术开源了首个面向通用文本分类的产业级技术方案。对于简单任务,通过调用 paddlenlp.Taskflow API ,仅用三行代码即可实现零样本(Zero-shot)通用文本分类,可支持情感分析、意图识别、语义匹配、蕴含推理等各种可转换为分类问题的NLU任务。仅使用一个模型即可同时支持多个任务,便捷高效!

from pprint import pprint
from paddlenlp import Taskflow
# 情感分析
cls = Taskflow("zero_shot_text_classification", schema=["这是一条好评", "这是一条差评"])
cls("房间干净明亮,非常不错")
>>>
[{'predictions': [{'label': '这是一条好评', 'score': 0.9695149765679986}], 
  'text_a': '房间干净明亮,非常不错'}]

# 意图识别
schema = ["病情诊断", "治疗方案", "病因分析", "指标解读", "就医建议", "疾病表述", "后果表述", "注意事项", "功效作用", "医疗费用", "其他"]
pprint(cls("先天性厚甲症去哪里治"))
>>>
[{'predictions': [{'label': '就医建议', 'score': 0.9628814210597645}], 
  'text_a': '先天性厚甲症去哪里治'}]

# 语义相似度
cls = Taskflow("zero_shot_text_classification", schema=["不同", "相同"])
pprint(cls([["怎么查看合同", "从哪里可以看到合同"], ["为什么一直没有电话来确认借款信息", "为何我还款了,今天却接到客服电话通知"]]))
>>>
[{'predictions': [{'label': '相同', 'score': 0.9775065319076257}],
  'text_a': '怎么查看合同',
  'text_b': '从哪里可以看到合同'},
 {'predictions': [{'label': '不同', 'score': 0.9918983379165037}],
  'text_a': '为什么一直没有电话来确认借款信息',
  'text_b': '为何我还款了,今天却接到客服电话通知'}]

# 蕴含推理
cls = Taskflow("zero_shot_text_classification", schema=["中立", "蕴含", "矛盾"])
pprint(cls([["一个骑自行车的人正沿着一条城市街道朝一座有时钟的塔走去。", "骑自行车的人正朝钟楼走去。"],
            ["一个留着长发和胡须的怪人,在地铁里穿着一件颜色鲜艳的衬衫。", "这件衬衫是新的。"],
            ["一个穿着绿色衬衫的妈妈和一个穿全黑衣服的男人在跳舞。", "两人都穿着白色裤子。"]]))
>>>
[{'predictions': [{'label': '蕴含', 'score': 0.9944843058584897}], 
  'text_a': '一个骑自行车的人正沿着一条城市街道朝一座有时钟的塔走去。',
  'text_b': '骑自行车的人正朝钟楼走去。'},
 {'predictions': [{'label': '中立', 'score': 0.6659998351201399}], 
  'text_a': '一个留着长发和胡须的怪人,在地铁里穿着一件颜色鲜艳的衬衫。',
  'text_b': '这件衬衫是新的。'},
 {'predictions': [{'label': '矛盾', 'score': 0.9270557883904931}], 
  'text_a': '一个穿着绿色衬衫的妈妈和一个穿全黑衣服的男人在跳舞。',
  'text_b': '两人都穿着白色裤子。'}]

对于复杂任务,可以标注少量数据(Few-shot)进行模型训练,以进一步提升模型分类效果。PaddleNLP打通了数据标注-模型训练-模型调优-预测部署全流程,多场景文本分类任务可用单一模型实现,进一步节省模型训练和部署资源,助力高效文本分类产业落地。

  • 了解详情

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/zero_shot_text_classification

图片UTC技术思路

UTC基于百度最新提出的统一语义匹配框架USM(Unified Semantic Matching)[1],将分类任务统一建模为标签与文本之间的匹配任务,对不同标签的分类任务进行统一建模。具体地说:

(1)为了实现任务架构统一,UTC设计了标签与文本之间的词对连接操作(Label–>CLS-Token Linking),这使得模型能够适应不同领域和任务的标签信息,并按需求进行分类,从而实现了开放域场景下的通用文本分类。

例如,对于事件检测任务,可将一系列事件标签拼接为[L]上映[L]夺冠[L]下架 ,然后与原文本一起作为整体输入到UTC中,UTC将不同标签标识符[L]与[CLS]进行匹配,可对不同标签类型的分类任务统一建模,直接上图:

图片

图:UTC模型架构图

(2)为了实现通用能力共享,让不同领域间的标签知识跨域迁移,UTC构建了统一的异质监督学习方法进行多任务预训练,使不同领域任务具备良好的零/少样本迁移性能。统一的异质监督学习方法主要包括三种不同的监督信号:

  • 直接监督:分类任务直接相关的数据集,如情感分类、新闻分类、意图识别等。
  • 间接监督:分类任务间接相关的数据集,如选项式阅读理解、问题-文章匹配等。
  • 远程监督:标签知识库或层级标题与文本对齐后弱标注数据。

想详细了解UTC的强大能力,可访问:

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/zero_shot_text_classification

图片商业合作

在开源版本之外,商业版本融合了百度多年的业务落地经验,具有更好的效果和更完善的落地方案:

  • 效果更好:同任务上零/少样本效果会更好,同时包含更多预定义能力。
  • 支持大规模标签:支持千级别以上的大规模标签分类任务。
  • 部署成本更低:单卡GPU可以支持上百个任务同时部署。
  • 预置多种场景:减少产品探索,同时提供定制人力。

图片未来展望

通过这次ZeroCLUE和FewCLUE的实践,验证了UTC具备良好的零/少样本迁移性能。未来PaddleNLP将进一步提升UTC的零样本能力,做到更大规模场景下的“开箱即用”。

如果我们的开源工作对你有帮助,欢迎STAR支持。

相关地址

  • GitHub地址

https://github.com/PaddlePaddle/PaddleNLP

  • Gitee地址

https://gitee.com/paddlepaddle/PaddleNLP

参考

[1]Universal Information Extraction as Unified Semantic Matching:

https://arxiv.org/pdf/2301.03282.pdf

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

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

相关文章

css加载会造成阻塞吗?

目录 A.设置网络加载速度 B.css加载会阻塞DOM树的解析渲染吗? 1.css会阻塞DOM树解析? 2.css加载会阻塞DOM树渲染? 3.个人对这种机制的评价 3.css加载会阻塞js运行吗? 4.结论 可以使用以下几种方法解决CSS加载速度的问题: …

曲线曲率介绍和python求法

目录曲率1.1 弧长参数 s参考资料曲率 比如我们想知道曲线 AB\boldsymbol{AB}AB 上任一点处的弯曲程度怎么办呢?这时就需要一个十分重要的概念——曲率。 维基百科: 在数学中,曲率(curvature)是描述几何体弯曲程度的量…

Octave安装与使用

1. 介绍 Octave是一种编程语言,旨在解决线性和非线性的数值计算问题。Octave为GNU项目下的开源软件,早期版本为命令行交互方式,4.0.0版本发布基于QT编写的GUI交互界面。Octave语法与Matlab语法非常接近,可以很容易的将matlab程序…

机器学习/人工智能 实验二:图像特征自动学习方法实践与分析

写在前面 参考的是https://zh.d2l.ai/index.html 一、实验目的与要求 (1)利用基于深度学习的特征自动学习方法完成图像特征提取的实验方案的设计。 (2)编程并利用相关软件完成实验测试,得到实验结果。 (3)通过对实验数据的分析、整理,得出实验结论&am…

Unity | 序列化(Serialized)和反序列化(NonSerialized)是什么意思

一、什么是序列化 官方叙述:序列化是将对象的状态信息转换为可以存储或传输的形式的过程。 人话叙述:我们平时输入的代码,实际上是不能储存或者传输的,所以我们需要翻译一下,翻译成能储存或者翻译的文字,这…

【SpringBoot 学习】52、SpringBoot 使用 grpc 实现远程服务调用

文章目录一、SpringBoot 使用 grpc 实现远程服务调用1、服务端编写2、客户端编写一、SpringBoot 使用 grpc 实现远程服务调用 gRPC 是一个现代的、开源的、高性能的远程过程调用(RPC)框架,可以在任何地方运行。gRPC 使客户端和服务器应用程序…

Java-Thread多线程的使用

Java-Thread多线程的使用一、线程,进程,并发,并行的概念1.进程2.线程3.并发和并行二、线程的创建和使用1.通过继承Thread类,重写run方法2.实现Runnable接口,重写run方法3.使用案例三、线程的常用方法四、线程的退出和中…

关于机器人状态估计(11)-VIO单目与双目/雷达Lidar SLAM/未来的机器人

写这篇文章的时候刚发生行业大事件: Google收购ROS 其实一开始还是水,绝对大量文不对题,但是必有干货,毕竟用的是这个关键的系列标题。 最近有几件行业内发生的大小事,让我觉得有必要更一下。 首先是Livox的mid-360…

VueUse(中文)——核心函数:State相关函数

VueUse官方地址 一、createGlobalState 将状态保持在全局范围内,以便跨Vue实例重用 1、没有持久性(存储在内存中) 例如: 或者 2、持久性存储 使用useStorage()存储在localStorage:例如: 组件使用: 二、createInjectionSt…

【图灵商城】前、后端项目搭建与运行

【图灵商城】前、后端项目搭建与运行 项目介绍 图灵商城-基础班架构图,如下所示: 本节是项目代码的初始化,今天是2023-01-15,先预祝大家新年快乐!!! 图灵商城这个项目是一个前后端分离的项目…

我这是这样知道 React TS 中的 Event Handler 类型的

开头 现在 TypeScript 的发展也越来越成熟,已逐渐应用到我们开发的前端项目之中,它能够带来类型提示,提前规避类型上的错误,来提高项目代码的健壮性,以及更高效的编码效率,前提就是我们需要定义好相应的类…

创客匠人赋能线上瑜伽健身实现流量增长

近年来,我国的儿童、成年人肥胖率逐年攀升。身边发胖的人越来越多,尤其是步入中年的人群,很多都有“发福”的现象。 超重肥胖已经成为影响我国居民健康的重要公共卫生问题。在身材焦虑和疫情肆虐下,很多人开始重视自己的健康问题…

python学习笔记---Python基础【廖雪峰】

Python基础 数据类型和变量 整数 对于很大的数,例如10000000000,很难数清楚0的个数。Python允许在数字中间以_分隔,因此,写成10_000_000_000和10000000000是完全一样的。十六进制数也可以写成0xa1b2_c3d4。 >>> prin…

Qt opencv编译详细教程(windows版)

在Qt中使用opencv这个算法视觉库,前期环境步骤搭建如下: 1、下载cmake。 2、下载opencv库,我这里下载的是opencv-3.3.1版本。 3、没有安装Qt的下载Qt软件,Qt的环境安装部署,这里不做介绍。 4、安装cmake后,…

python学习笔记---IO编程【廖雪峰】

IO编程 ​ IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。 ​ IO编程中,S…

冒泡排序算法的实现和优化~

冒泡排序算法: 算法思想: 反复扫描待排序记录序列,在扫描的过程中,顺次比较相邻的两个元素的大小,若逆序就交换位置 文字描述该算法: 以升序为例: 依次比较数组中相邻两个元素大小&#xf…

win10+ubuntu23.04双系统安装

win10win10先安装好(确保主板上各个螺丝稳定,至少4对螺丝铜柱,否则会各种蓝屏)如果双系统安装失败了,连win10都进不去了,用原版ISO刻录的U盘或者光驱来修复引导。Easybcd安装Ubuntu23.04使用的ubuntu镜像文…

【项目实战】使用Java Keytool工具生成的CSR给第三方云平台签名

一、背景 客户要求我们提供一个CSR文件,给他们签名,他们的服务器是部署在Amazon上的。 二、Keytool是什么? Keytool 是一种 Java中的数字证书管理工具,用于管理密钥和证书。 它可以用来生成/申请数字证书、导入证书、导出证书、…

优秀的程序员是如何做好时间管理的

程序员是一项既消耗脑力,又消耗体力的职业,想成为一名成功的程序员,不仅要靠坚持不懈的努力,异于常人的天赋,更需要一套行之有效的时间管理方法,才能让自己在有限的时间内写出更好的代码,获得更…

用C语言图形库画一个红色爱心

这次我教大家用代码画一个心,这样你们就可以送给你们的女(男)朋友了。没找到对象的也可以用来表白啊。1.首先,我去百度找了心形线的函数,如下:2. 联系高中的数学知识,我们知道:f(x)&…