doccano是documment anotation的缩写,是一个开源的文本标注工具,我们可以用它为NLP任务的语料库进行打标。它支持情感分析,命名实体识别,文本摘要等任务。
它的操作非常便捷,在小型语料库上,只要数小时就能完成全部的打标工作。
下面介绍一下如何在windows下anaconda安装、配置和使用doccano。
一、doccano 的安装与初始配置
打开anaconda prompt中的终端,在终端里输入
pip install doccano -i https://pypi.tuna.tsinghua.edu.cn/simple/
即可安装doccano。
然后,在终端里输入
# 初始化数据库
doccano init
# 创建一个super user。这里要把pass改成你需要的密码。当然,用户名也可以改成别的。
doccano createuser --username admin --password password
即可完成初始化,并创建一个doccano的超级用户。
二、启动doccano
首先,在终端中运行下面的代码来启动WebServer
# 启动webserver
doccano webserver --port 8000
然后,打开另一个终端,运行下面的代码启动任务队列:
# 启动任务队列
doccano task
此时,我们就完成了doccano的启动。
三、运行doccano与创建新的文本打标项目
首先,打开浏览器(最好是Chrome),在地址栏中输入http://127.0.0.1:8000/并回车。
此时,我们会看到这样的界面,有四种语言,中文,英语,法语,德语,
我们可以在红圈处切换语言,在蓝圈处切换成黑色模式(网页变成黑色背景)。
然后我们点击中间的蓝色按钮“快速开始”。
此时,我们会跳转到登陆的界面。这里,我们需要用之前创建的超级用户登陆。
(之后的图为借用)
完成登陆后,我们会来到“项目”的界面。我们可以点击左上角的“创建”按钮来创建新的项目;也可以点击“删除”按钮来删除已经创建的项目。
我们点击左上角的“创建”按钮,创建一个新的项目。
如上图所示,doccano总共支持三种NLP任务的文本标注,分别是文本分类、序列标注和序列到序列(例如文本翻译)。
在填写完要求的信息后,点击保存,我们就创建了一个新的NLP标注项目。在创建完成后,会自动跳转到项目的主页。
最左侧是一系列可以选择的页面。“主页”这个标签下面是doccano提供的一系列教程,其他的页面可以对项目进行设置。
稍后,我们将在上图所示的界面中的完成文本打标项目的各项设置。我们会依次点击左侧的各个标签,依次进行设置。
四、添加语料库
我们直接从“数据集”这个标签开始看。
在“数据集”这个页面,我们可以将准备好的文本添加到项目中,为将来的打标做准备。
我们首先点击左上角的“操作”→“导入数据集“。
此时,我们会来到”上传数据”的界面。
![](https://i-blog.csdnimg.cn/blog_migrate/a965aec9bc3632579b55e209c3ab76cc.png)
如上图所示,doccano总共支持4种格式的文本,他们的区别如下:
- Textfile:要求上传的文件为txt格式,并且在打标的时候,一整个txt文件在打标的时候显示为一页内容;
- Textline:要求上传的文件为txt格式,并且在打标的时候,该txt文件的一行文字会在打标的时候显示为一页内容;
- JSONL:是JSON Lines的简写,每行是一个有效的JSON值。
- CoNLL:是“中文依存语料库”,是根据句子的依存结构而建立的树库。其中,依存结构描述的是句子中词与词之间直接的句法关系。具体介绍看汉语树库。
注意:
- doccano官方推荐的文档编码格式为UTF-8。
- 在使用JSONL格式的时候,文字数据本身要符合JSON格式的规范。
- 数据集中不要包含空行。
这里我们以Textline格式举例。
点击“TextLine格式”。然后在跳转到的界面里,设置File Format和Encoding。然后点击下图中的“Drop files here…”来上传文件。最后,点击右下角的“injest”将数据集添加到项目(此处有拼写错误,正确的拼写估计为“inject”或者ingest“)。
此时,再点击“数据集”的标签,我们就可以看到一条一条的文本已经被添加到项目中了。将来我们将对这些文本进行打标。
五、添加标签
在这一部分,我们讲解如何往项目中添加在打标时可选的标签。
例如,在NER任务中,我们可能会添加People、Location、Organization等;在文本分类任务中,我们可能会添加Positive、Negative等标签作为打标时的可选标签。
注意,这里只是添加将来可供选择的标签,是项目配置的过程,而不是进行文本标注。
我们点击左侧的“标签”按钮,就来到了添加标签的界面。
我们继续点击“操作”按钮,并在下拉菜单中点击“创建标签”按钮。
在弹出的“创建标签”窗口里面,在第一行写上标签的名字。例如在NER的例子中,可以写People、Location、Organization等。
在第二行添加该标签对应的快捷键。例如,我们给People设置的快捷键是p。将来在打标的时候,右手用鼠标选中段落中的文字(例如“白居易”),左手在键盘按下快捷键p,就可以把被选中的文字打标成“People”。
再往下,我们可以给标签自定义颜色。
全部设置好以后,点击右下角的“保存”按钮。
此时,一个标签就添加完成了。我们以同样的方法添加其他所需要的标签。
六、添加成员
在为机器学习的语料库打标的时候,由于语料库一般比较大,如果让一个人给所有的文本打标的话,那到地老天荒都完不成。因此,我们需要多个人协同完成语料库的打标工作。
回忆一下,此时我们的项目还只有一个成员,也就是在初始配置doccano的时候创建的超级用户admin。因此,为了让其他人参与到打标项目中来,我们首先需要为其他成员创建账户。
我们打开网页http://0.0.0.0:8000/admin/,来到数据库的管理系统页面Django administration,并用超级用户的账号密码登陆该管理系统。
在这个页面可以对我们的项目对应的数据库进行各种管理与设置。
我们拉到页面最下面,点击Users旁边的“+Add”按钮,来添加一个新的用户。
输入用户名和密码,并点击右下角的Save来保存用户。
在创建完新的用户以后,我们可以在所跳转到的页面,输入一些用户的其他信息并保存。
此时,我们再返回项目的设置页面。点击左侧的“成员”标签,点击页面上的“添加”按钮,会弹出“添加成员”窗口。
其中,在“用户搜索接口”的下拉菜单里面可以找到我们刚添加的用户“小明”。
注意,在这里只能找到已经创建到的用户,而不能创建新的用户。如果要新建用户,必须要到前面Django administration界面。
同时,我们还可以设置不同的成员的角色,不同的角色对应着不同的权限。如下图,我们把小明设置为“标注员”。其他角色还有项目管理员和审查员。
七、添加标注指南
我们可以事前给标注员和审查员准备一些标注指南,便于项目成员理解我们标注的要求和注意点。
例如,在判断文本正负面倾向的文本分类任务中,我们要具体说明判断正负面的标准,例如满足哪些要求,我们就可以认为一个本文是正面的。
因为一万个读者眼里有一万个哈姆雷特,不同人对文本的理解和判断正负面的尺度是不一样的。我们只有把标准写具体、写明确了,让人不用动脑筋都能做出符合我们要求的判断,我们才能得到一个尺度统一的数据集。数据集上的打标尺度统一,是机器学习获得好的效果的前提。
添加指南的界面如下图所示。
八、开始给文本打标
准备工作忙活了老半天,终于可以进入正题了----给文本打标。
需要注意的是,上面的前期设置里面并不是所有的都是必须的。在最精简的情况下,我们可以在仅添加了数据集与标签后,就开始给文本打标。
这里,我们用标注员小明的账号登陆打标系统做演示。同样是打开http://0.0.0.0:8000/地址,输入小明的账号密码登陆。
和之前不一样的是,由于小明的角色是“标注员”,因此他只有打标的权限,没有对项目进行各项设置的权限,所以在左侧列表没有管理员用户的各项设置项目。
这里我们直接点击左上角的“开始标注”进行打标。
以NER任务为例,在打标的界面下,我们选中句子中的实体,会自动弹出一个下拉菜单,我们可以从这个下拉菜单中选择相应的实体类型People,也可以直接在键盘上按下p键。
这是添加标签之后的样子。
在文本框的上面还有一排小工具。
第一个是筛选,主要作用是控制程序显示全部文本、已标注的文本还是未标注的文本。
第二个是指南,就是显示我们事先写好的打标指南,如上图所示。
第三个是评论,可以针对某一条文本添加评论。
第四个是Auto Labeling。这个功能需要我们调用一些API来实现,doccano本身没有自动打标的功能。例如,可以在管理员用户下,在项目中添加Amazon Comprehend Entity Recognition的API信息(例如aws_access_key)来支持。
第五个是清除这一页上所有的标签。
完成一个文本的打标以后,可以点击右上角的向右箭头,切换到下一个文本。
我们也可以通过键盘上的左右方向键来快速切换上一个或者下一个文本。
注意,如果我们在项目设置中选择了在成员之间共享标注,那么一个用户打标的结果可以被其他所有用户看到。
九、审核标注结果
标注员小明把所有的文本标注完成后,由审核员小红来审核标注是否有错误。
我们在http://0.0.0.0:8000/地址用小红的账户登陆。进入项目以后点击开始标注,看到如下界面。
可以发现,审核员比起标注员多了一个“×”按钮(这个按钮管理员用户也有),表示这个文本目前没有经过审核。
如果小红点击一次“×”按钮,该按钮上的图像会变为“√”,表示已经经过审核。
我们对审核过后的标签信赖程度更高,将来在下载打标结果的时候,可以选择只下载经过审核的标签及文本(当然也可以所有文本均下载)。
十、导出打标结果
当我们要导出标注结果的时候,我们重新用管理员用户登陆,在“数据集”页面下,点击“操作”→“导出数据集”。
![](https://i-blog.csdnimg.cn/blog_migrate/ed25d09b96c750f2891c97a27b9c671d.png)
注意,在上图右侧,我们可以看到每一条文本的评论数量,例如红圈处。
在弹出的窗口中,根据我们的需要进行设置后,点击Export,即可导出标注结果。
保存好的文本是字典的格式。
如下图所示,保存了句子的ID、句子原文、实体的在句子中的位置、实体的类型。
![](https://i-blog.csdnimg.cn/blog_migrate/e964293d731f95190d45840a873533c9.png)
这也是NER任务的语料库常见的保存方式,例如CLUNER的语料库就是这样保存的,可以参考:手把手教你用BERT做命名实体识别。
十一、阅读项目信息
在管理员账户下,我们可以看到标注项目的进度以及其他信息。
在Comments页面下,我们可以看到所有标注员、审核员、管理员添加的评论。
![](https://i-blog.csdnimg.cn/blog_migrate/f008004f60d743d27c64631e1e96298c.png)
在“统计”页面下,我们可以看到在所有文本中,已完成和未完成的比例,各个标签的数量,各个用户的工作量等。
![](https://i-blog.csdnimg.cn/blog_migrate/5742ab2506d3ce011fb241c8f9c167d6.png)
到这里,关于doccano的安装、配置和使用就全部讲解完了。更多的内容,可以查看下面的链接。
开发者写的介绍知乎:
赤乐君:支持多语言的文本标注工具——doccano178 赞同 · 89 评论文章正在上传…重新上传取消
项目GitHub地址:
doccano/doccanogithub.com/doccano/doccano正在上传…重新上传取消
官方文档:
https://doccano.github.io/doccano/doccano.github.io/doccano/