首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >通用文本标注工具 labelme

通用文本标注工具 labelme

原创
作者头像
理查德
修改于 2017-11-09 03:17:29
修改于 2017-11-09 03:17:29
11.5K0
举报
文章被收录于专栏:理查德的专栏理查德的专栏

导语: 一个支持文本类目标注和关键词打分的通用标注工具,为文本分类模型和关键词抽取任务提供训练和测试数据。-- by 慕福楠 & 孙振龙

1. 背景

很多 NLP 任务训练和评估都依赖大量标注数据,对于文本分类,使用标注数据进行模型训练和评测,如商业兴趣分类、电商分类、APP分类;对于关键词抽取,使用标注数据进行评测。在标注数据获取过程中存在以下问题:Excel 标注方式效率低下;腾讯系数据源多,标注数据难于管理;标注质量难以保证,依赖人工抽样,费时费力。因此,我们快速开发了一个通用的文本标注工具并开源,工具名称为labelme,翻译成“来标我”,现在labelme已经支持组内所有的标注任务。

2. 支持的特性

图1 labelme支持的特性

2.1 多场景

目前支持文本类目标注(图2)和关键词标注(图3)两个场景。类目标注支持树状类目体系,标注时自顶向下标注,从root标注到叶节点,例如图2中,先标一级“餐饮美食”,再标二级“餐馆”。关键词标注支持正在打分的关键词在文档中高亮和增加候选中没有的关键词功能。

图2 类目标注界面

图3 关键词标注界面

2.2 多任务

labelme支持多个任务同时标注,通过简单的配置即可增加新的标注任务,配置如图4,然后在系统登录页选择相应的Task进行标注,如图5所示。

图4 配置定义

图5 系统登录页

2.3 质量校验

为了保证标注数据质量,labelme引入质量校验特性,利用专家标注的数据验证普通标注人员的标注数据的准确率。将开发或者产品定义为Owner(专家),将外包同学定义为Labeler(普通标注人员),Owner标注的数据作为Golden Set,Labeler每天的标注数据中掺一定比例的Golden Set,比例可配置(配置定义中的owner_sample_ratio字段),每天以Golden Set作为正确答案,计算Labeler标注的准确率。Labeler之间的标注数据不会有交集,见图6,每天分配给Labeler的Golden Set是Labeler没有标注过的,所以一旦Golden Set用完,系统无法计算准确率,需要Owner定期标注一些Golden Set计算Labeler的准确率。

图6 各角色标注数据交集情况

2.4 Active Learning(待实现)

对于类目标注, 为了提高标注效率和减少不必要的标注,可以利用已有标注数据训练弱分类器,对未标注数据进行预测,假定预测的结果为Pi (i = 1, 2, ...N;N是类目的个数),预测结果为c = argmax_i Pi,即样本的预测类别为c,概率为Pc,labelme将Pc低于threshold的样本返回给标注人员进行标注,Pc高于threshold的样本认为是跟已标注样本很相似,不需要再标注。每天重新训练弱分类器,重新预测未标注样本的类别,重新估计threshold。另外,为了降低系统复杂度,弱分类器与labelme解耦,labelme提供接口给弱分类器,接口包括获取已标注数据和未标注数据,更改未标注数据预测类别,弱分类器由用户自行选择。另外,labelme优先展示概率比较大的类目,提高标注效率。

2.5 CDB数据管理

labelme采用mysql管理标注数据,mysql使用CDB,保证数据安全,毕竟标注数据需要大量人力。

2.6 报表推送

labelme会向任务的owner和labeler推送报表,报告样本总量,已标数据,剩余数量,每个人前一天标注数量和准确率。

3. 未来计划

未来工作包括UI优化和Active Learning。UI优化包括上一页按钮和查询界面,上一页按钮为了修改误标的数据,查询界面是报表的扩展,提供更多维度的查询,比如某个外包同学特定时间段内所有任务的标注量和正确率。对于Active Learning上文提到了未来的实现方式,这里不再赘述。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
EasyC++58,构造函数
我们定义了类之后,在使用之前,往往还需要对类进行初始化。这篇介绍的就是对类进行初始化的方法。
TechFlow-承志
2022/08/26
1730
类中的知识点
1.this 指针 在简单的程序中,类成员函数通常涉及一个对象,但是复杂时有可能涉及两个对象,这种情况就要用到指针。 多说无益,look!
用户8247415
2021/04/13
3810
C++中的类
类是一种将抽象转换为用户定义类型的C++++工具,他将数据表示和操纵数据的方法组合成一个整洁的包。 比如有一个股票的类,可以把他的价格,持有人,数量等等,我们可以将股票简化,将操作限制为获得股票、增持、卖出股票、更新股票价格、显示关于股票的信息。此外我们还需要存储一些信息
用户7272142
2023/10/11
5120
C++中的类
C++ Primer Plus习题及答案-第十章
类是用户定义的类型的定义。类声明指定了数据将如何存储,同时提供了访问和操作这些数据的方法。
艰默
2022/11/22
7160
EasyC++57,类的实现
我们通常会在同名的cpp文件当中实现,实现的时候,需要使用作用域解析运算符来表示函数所属的类:
TechFlow-承志
2022/08/26
1650
当我学会了类,就离领悟面向对象编程不远了(基础)!!(熬夜爆肝)
偷偷告诉你们码神的上一篇this指针上热搜了,为了不辜负大家的关注,我今天就不跑赛道了,开始再肝一篇——类,,这也是我和许多初学者的通病,但是我们一起一定可以克服的!下面来讲一下我认为及我使用的类,欢迎评论区指正,感谢大家的帮助!
秋名山码神
2022/12/13
1760
当我学会了类,就离领悟面向对象编程不远了(基础)!!(熬夜爆肝)
this指针
我们目前接触到的都是对单个对象的操作,show是用来输出对象中的价格总计,如果要让程序知道类的数据,一般是让方法返回一个值供外部使用。即
用户7272142
2023/10/11
1800
EasyC++56,类的定义
根据C++ Primer中的描述,类的定义是一种将抽象转换为用户定义类型的C++工具。也就是说类的实质是一种用户自定义类型,它可以将数目表示和操作数据的方法组合成一个整洁的包。
TechFlow-承志
2022/08/26
2870
C++ Primer Plus习题及答案-第十二章
a. 语法是正确的,但该构造函数没有初始化str指针。该构造函数应该使用new[]来初始化它,或者将其设置为NULL。
艰默
2022/11/16
7560
C/C++开发基础——类对象与构造析构
private: 类的成员可以被同一个类中的成员函数访问,或者被友元函数访问,该修饰符可以禁止一些针对类中成员的高风险操作。
Coder-ZZ
2023/09/18
3380
C/C++开发基础——类对象与构造析构
c++——构造函数和析构函数
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情
lovevivi
2022/12/21
6850
c++——构造函数和析构函数
const详解
const名叫常量限定符,用来限定特定变量,以通知编译器该变量是不可修改的。习惯性的使用const,可以避免在函数中对某些不应修改的变量造成可能的改动。
用户7272142
2023/10/11
5280
const详解
C++新旅程:类的构造函数和析构函数
https://cloud.tencent.com/developer/article/2466159?shareByChannel=link
池央
2024/11/22
2210
【C++】构造函数与析构函数
我们通常的函数是都需要有返回值的,但是有这样一类函数不需要返回值,而且函数名必须与类名相同(类中的特有的函数),这就是构造函数。
啊QQQQQ
2024/11/19
1990
【C++】构造函数与析构函数
七、构造函数与析构函数
在C++中,构造函数是一种特殊的成员函数,它用于初始化类的对象。当创建类的对象时,构造函数会被自动调用。构造函数的名字与类的名字相同,并且没有返回类型(即使是void也没有)。
用户11332765
2024/10/28
3830
【C++】构造函数和析构函数
说明:C++把类型分成内置类型(基本类型)和自定义类型。内置类型就是语言提供的原生数据类型如:int/char/double/指针等,自定义类型就是我们使用class/struct等关键字自己定义的类型。
用户11328191
2024/10/23
2860
【C++】构造函数和析构函数
C++构造函数和析构函数详解
构造函数是特殊的成员函数,需要注意的是,构造函数虽然名叫做构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象。
用户11316056
2024/10/16
1860
C++构造函数和析构函数详解
C++:构造函数与析构函数
构造函数用于对象的初始化,一旦建立对象,就需要有一个有意义的初始值,构造函数的作用即是在对象初始化时被调用,给对象分配内存空间以及完成初始化。
字节星球Henry
2021/08/09
6680
【C++】构造函数与析构函数概念简介 ( 构造函数和析构函数引入 | 构造函数定义与调用 | 析构函数定义与调用 | 代码示例 )
在 C++ 语言中 , 创建对象时 , 需要进行对象创建的初始化工作 , 如 : 创建集合数组 , 为成员变量设置初始值 ;
韩曙亮
2023/10/15
6450
【C++】构造函数与析构函数概念简介 ( 构造函数和析构函数引入 | 构造函数定义与调用 | 析构函数定义与调用 | 代码示例 )
从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字
文章主要讲述了C++构造函数、析构函数、拷贝构造函数、赋值运算符以及初始化语句的区别和用法,并介绍了如何在C++中进行对象初始化。
s1mba
2017/12/28
1.9K0
从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字
推荐阅读
相关推荐
EasyC++58,构造函数
更多 >
交个朋友
加入数据技术工作实战群
获取实战干货 交流技术经验
加入数据技术趋势交流群
大数据技术前瞻 数据驱动业务实践
加入[数据库] 腾讯云官方技术交流站
数据库问题秒解答 分享实践经验
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档