一站式文本标注工具doccano(你值得拥有)

1 前言

今天要介绍的是一款开源的语料标注工具doccano[1]。对于NLP中常见的情感分类、命名体识别、序列到序列等的数据标注任务都可以通过doccano来完成。由于工作的关系,笔者还看到一些厂商的标注工具也是基于doccano开发的。在这个项目的另一个主页中[2],作者也介绍了该项目的四种不同的部署方法,但可能有的地方不是特别详细,因此在安装过程中还是会遇到一些问题。

在接下来的这篇文章中,笔者将对其中的Python部署方法进行介绍,对于期间可能遇到的问题也给出了相应的解决方案;同时,笔者也在原项目的基础上做了一点修改:①将一些每次都需要获取的js等文件部署到了本地以加快访问速度;②对整个doccano项目进行了汉化处理[3]。因此,下面你既可以下载笔者修改后的项目文件,也可以下载原来的工程文件。

这个地址http://124.71.156.219:8000/是笔者已经部署好的doccano,大家可以先进行体验。用户名为admin,密码公众号后台回复doccano可以获取。

2 安装

2.1 安装Python环境

对于该项目我们首先需要一个Python3.6的环境。如果是已经安装过了conda,那么只需要下面一条命令即可完成python环境的安装。

conda create -n docc python=3.6

如果没有conda环境,请参见这篇文章进行安装。

注意:务必建立一个python3.6版本的虚拟环境,因为以下Python依赖包都必须建立在此基础上。

2.2 安装Python依赖包

  • 下载doccano工程文件

    首先,我们需要下载doccano项目文件,下面两个工程文件,下载其中一个到本地即可。

    #原始项目文件
    git clone https://github.com/doccano/doccano.git
    
    # 笔者汉化后的项目文件
    git clone https://github.com/moon-hotel/doccano.git
    
  • 安装Python依赖包

    下载完成后进入目录doccano/app中安装Python依赖包,如果出现443的网络错误,重新运行即可。

    pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    此时,不出意外会有如下报错信息:

    Error: pg_config executable not found.
    pg_config is required to build psycopg2 from source.  Please add the directory
        containing pg_config to the $PATH or specify the full executable path with the
        option:
    

    解决方法,以root身份运行如下命令:

完整内容点击:一站式语料标注工具(你值得拥有)

安装完成后重新运行上面的python包安装命令。但如果不出意外的话,还会有下面这个错误提示:

#include <sql.h>
              ^~~~~~~
    compilation terminated.
    error: command 'gcc' failed with exit status 1

解决方法,以root身份运行如下命令:

完整内容点击:一站式语料标注工具(你值得拥有)

安装完成后继续运行上面的python包安装命令。如果还出现了如下错误提示:

while (interp->next)
It appears you are missing some prerequisite to build the package from source.
error: command 'gcc' failed with exit status 1

那请赶快换成python3.6的环境。

到此为止,我们就把需要的python依赖包给安装完成了,比较多估计得有近百个。如果你还出现了其它错误,请自行搜索相关错误提示。接下来,下一步就是配置安装前端的相关依赖环境了。

2.3 配置前端环境

  • 以管理员身份安装npm

    sudo apt-get install npm
    
  • 安装相关依赖包

    切换到如下目录:

    doccano/app/server/static
    

    然后运行命令:

    npm install 
    

    接着安装结束后就会看到如下的提示信息[3] [4]

    loadDep:fsevents → 304    ▌ ╢████████████████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╟
    WARN engine fsevents@2.1.3: wanted: {"node":"^8.16.0 || ^10.6.0 || >=11.0.0"} (current: {"node":"8.10.0","npm":"3.5.2"})
    npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
    npm WARN notsup Not compatible with your operating system or architecture: fsevents@2.1.3
    

    注意,从最后一行可以看到此处有一个警告。虽然只是警告,但不解决却不行。

    解决方法:

    sudo npm install npm -g
    npm install –g n
    n latest    #(升级node.js到最新版)
    

    然后再次运行npm install,运行结束后就不会出现上面不兼容的提示了。接下来再次运行命令:

    npm run build
    

    此时就会出现如下提示:

    [./pages/download_speech2text.js] 221 bytes {download_speech2text} [built]
    [./pages/download_text_classification.js] 250 bytes {download_text_classification} [built]
    [./pages/guideline.js] 246 bytes {guideline} [built]
    [./pages/index.js] 774 bytes {index} [built]
    [./pages/label.js] 167 bytes {label} [built]
    [./pages/projects.js] 181 bytes {projects} [built]
    [./pages/seq2seq.js] 209 bytes {seq2seq} [built]
    [./pages/sequence_labeling.js] 287 bytes {sequence_labeling} [built]
        + 433 hidden modules
    

    到此,就完成了整个doccano的环境部署,接着就是启动服务。

    执行如下命令并启动服务:

2.4 启动服务

首先切换到目录doccano/app中,然后依次运行如下命令:

python manage.py migrate
python manage.py create_roles
python manage.py create_admin --noinput --username "admin" --email "admin@example.com" --password "password"
python manage.py runserver #启动服务

执行完成后会看到如下提示信息:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
September 21, 2020 - 11:23:37
Django version 2.2.13, using settings 'app.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

到此整个工程就算是部署完成了。如果你是在自己电脑上部署的,请直接输入127.0.0.1:8000即可访问;如果是在服务器上部署的,输入ip:8000即可访问。例如笔者部署在了华为云上,输入http://124.71.156.219:8000/就可以进行访问。

如果出现不能访问,或者是如下错误提示:

Unable to round-trip http request to upstream: dial tcp 124.71.156.219:8000: connectex: No connection could be made because the target machine actively refused it.

请从如下方面入手调试:

  • 服务器的网络出入规则的入口是否打开了8000端口;
  • 在启动服务的时候再次手动指定端口;
    • python manage.py runserver 0.0.0.0:8000

访问成功页面:

图 1. 访问成功页面图

3 使用方法

对于整个项目的功能点,笔者几乎算是都测试了一遍。对于单独的一个人进行标注的话还比较完善,但是在多人协同标注方面还有好几个bug。但由于笔者并不熟悉前端所以也就无法修复了。接下来笔者将选择性的对其中的一项功能进行介绍。

3.1 用户管理

3.1.1 添加

手动输入地址http://139.217.80.90:8000/admin/进入到后台管理系统,然后点击“Add”按钮:

图 2. 用户添加按钮

在跳转后的页面中,输入相应的用户信息后,点击页面右边的保存。

图 3. 注册页面图

在再次跳转出的页面中,可以填入相关个人信息也可以不填,最后再点击页面最右下角的保存按钮即可完成创建。

3.1.2 删除

在后台系统中,点击如图4所示的"User",进入人员查看页面:

图 4. 用户查看按钮图

在用户查看页面中,选择需要删除的用户,然后点击“Go”按钮即可完成用户的删除操作。

图 5. 人员删除图

3.2 工程创建

3.2.1 创建工程

再次回到主页面(http://124.71.156.219:8000/),用管理员账户登录然后创建标注工程。

图 6. 登录图

登录后点击“创建工程“按钮,并填入相关信息(此处以序列标注的任务为例,其它任务类似):

图 7. 工程创建图

其中,打乱样本顺序的作用是使得每个标注员分配到的样本数量相同,但是标注时出现的顺序不同;共享标注结果的作用是使得每个标注员标注的结果可以共享,并且以最后依次的标注结果作为最终样本的标注结果。勾选完成后点击”创建“按钮即可完成工程的创建。

3.2.1工程管理

在完成工程创建后就会跳转到如图8所示的页面:

图 8. 工程管理页面

下面笔者只对导入数据和人员管理两个模块儿进行介绍,其它的模块点进入就知道怎么设置的了。

  • 导入数据

    点击图8上面的”导入数据“按钮即可来到原始数据的导入界面(其实就是图8这个页面)。选择Plain(.txt)格式,然后点击”选择文件“上传需要进行标注的语料。需要注意的是在.txt的文本中,每一行就视为标注过程中的一个样本,同时不能出现空白行,不然会报错无法上传。

    在完成原始数据的上传后,就能在”数据管理“中看到上传后的数据,并且点击样本右边对应的删除按钮还可以对部分样本进行删除:

图 9. 数据管理图
  • 人员管理

    点击图8中的”人员管理“按钮进入到标注工程的人员管理页面中。

图 10. 人员管理图

如图10所示,点击左上角的”添加标注人员“按钮就能为该工程添加其他标注人员。在图10中上面部分,只能选择已存在的用户为某个标注工程的标注人员(也就是先要按照3.1.1小节中的方法添加账户)。在这里我们选择添加前面创建的’moonhotel’用户为该项目的标注人员之一,在选择完权限分配后点击右边的添加即可。

同时,对于每个标注人员来说都有三种权限可供分配,其权限对应的功能如下:

  • project_admin:项目管理员,可以对整个标注工程进行管理,即有如图8所示的管理功能;
  • annotator:普通标注人员,无任何查看与编辑权限只可以对数据进行标注;
  • annotation_approver:普通标注人员,只比annotator多了审阅标注的功能(多人协同标注时);

在这里,我们将账户’moonhotel’设置为annotation_approver。按照同样的方法,我们可以按需要为标注工程创建更多不同权限下的标注人员。

3.3 数据标注

完整内容点击:一站式语料标注工具(你值得拥有)

3.4 结果导出

当工程标注完成后,项目管理员(或者是系统管理员admin)就可以登录到后台对标注好的数据进行导出操作。

图 12. 工程查看图

如图12所示,项目管理员登录到系统后点击编辑按钮回到图8所示的工程管理界面。然后点击导出数据,选择需要的格式导出即可。

图 13. 数据导出图

如下所示就是导出后的结果,可以根据自己的需要通过python来进行提取。

{"id": 13, "text": "doccano是一个面向人类的开源文本标注工具。它为文本分类、序列标记和序列到序列任务提供注释功能。因此,您可以为情感分析、命名实体识别、文本摘要等创建标注数据。", "meta": {}, "annotation_approver": null, "labels": [[0, 7, "名词"], [12, 15, "形容词"], [19, 23, "名词"], [26, 30, "名词"], [62, 68, "名词"], [57, 61, "名词"], [69, 73, "名词"]]}

4 总结

在这篇文章中,笔者首先介绍了如何安装部署doccano项目,并且对可能出现的错误给你了一定的解决办法;然后介绍了doccano的主要使用方法,包括用户管理、工程创建、数据标注和结果导出等。当然,还有很多细枝末节的地方没有进行说明,大家可以自行尝试,有疑问也请欢迎文末留言。

本次内容就到此结束,感谢您的阅读!如果你觉得上述内容对你有所帮助,欢迎关注并传播本公众号!若有任何疑问与建议,请添加笔者微信’nulls8’加群进行交流。青山不改,绿水长流,我们月来客栈见!

QQ交流群:883638095

引用

[1]https://github.com/doccano/doccano

[2]https://doccano.github.io/doccano/getting-started/

[3]https://github.com/moon-hotel/doccano

[4]https://blog.csdn.net/weixin_44912159/article/details/103473275

[5]https://www.jianshu.com/p/97a5cd731f27

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页