标记工具doccano私有化部署及二次开发
什么是doccano?
doccano 是一种面向机器学习从业者的开源数据标记工具。您可以使用多种数据格式执行不同类型的标记任务。
背景
当时所在的组是AI技术组,算法同学分析客服与客户的对话,从而进行自然语言处理(NLP)研究;所以需要一个工具,来标记对话中的文本是积极的还是消极的,作为算法的数据源来分析;正好开源工具doccano基本符合我们的需求,有特殊的需求,前端可以自己进行二次开发;
因此需要进行私有化部署以及二次开发;
私有化部署
doccano后端使用Python来实现的,前端使用nuxt来实现的。一起通过docker提供服务。
部署架构设计
私有化部署按照文档流程来进行就可以了。由于该开源工具提供的服务是前后端都在一个docker容器里启动,提供服务的。为了保证服务稳定性而且要满足可以二次开发,我设计的部署架构如下图所示。这样用户访问的前端是前端自己二次开发的仓库,调用的接口是开源工具私有化部署的docker服务;
前端二次开发
在doccano中把前端仓库frontend拷贝出来就可以二次开发,然后单独部署提供前端服务了。
前端部署脚本改动:
为了提高服务的稳定性已经增加服务启动、停止、报错等日志记录功能。通过pm2来启动服务。
新增文件pm2.config.js
javascript
// pm2 start pm2.config.js
module.exports = {
apps: [
{
name: 'doccano-frontend',
script: './node_modules/nuxt/bin/nuxt.js',
args: 'start',
cwd: './', // current workspace
// watch: [
// // watch directorys and restart when they change
// '.nuxt'
// ],
ignore_watch: [
// ignore watch
'node_modules',
'logs',
'static'
],
max_memory_restart: "2G",
instances: 2, // start 2 instances
node_args: '--harmony',
exec_mode: 'cluster',
autorestart: true,
watch: false,
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
},
// env: {
// NODE_ENV: process.env.NODE_ENV,
// },
out_file: './logs/out.log', // normal log
error_file: './logs/err.log', // error log
merge_logs: true,
log_date_format: 'YYYY-MM-DD HH:mm Z' // date format
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
然后在package.json中增加scripts脚本命令,这样方便启动服务
js
"scripts": {
"lint": "eslint --ext .ts,.js,.vue --ignore-path .gitignore .",
"lintfix": "eslint --fix --ext .ts,.js,.vue --ignore-path .gitignore .",
"precommit": "yarn lint",
"test": "jest",
"dev": "nuxt",
"pm2": "pm2 start pm2.config.js",
"build": "nuxt build",
"start": "nuxt start",
"generate": "nuxt generate"
},
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
之后就可以按照需求修改项目中的前端页面和交互了,还可以自定义新增功能。
使用手册备忘
私有化部署完,当时官网文档并不友好,不全面,所以记录了一下操作文档备忘。
管理员新建用户
登录超级管理员账号访问如下链接,添加用户并授予相关权限
{前端部署域名}/admin/
其中AUTHENTICATION AND AUTHORIZATION这一栏可以添加Groups和添加修改Users
主页介绍
如图右上角按钮依次为
- 白天夜晚主题切换
- 语言切换
- 进入项目视图
- 登录与退出
项目新建与删除
访问点击项目按钮进入
{前端部署域名}/zh/projects
删除:选中直接可以直接删除
新建项目
如图填写相关信息,选择项目类型即可创建项目 然后进入项目详情页面:
主页这里面有一些介绍引导的视频,已经比较详细了,下面也大致说一下
设置标签
可以导入导出标签,这里手动新建结果标签
这里可以设置新标签的名称、快捷键(标注时会用到)、标签颜色 这里我们新建两个标签
书写打标签指南
这里可以书写不同标签打标机的规则,在打标签时不确定可以看这个指南的预览
成员管理
添加人员并分配角色
数据集导入导出
导入:
点击选择文件或者拖动文件到按钮处
这里我上传的附件test.csv
点击蓝色确认上传
点击左上角按钮开始打标签
如果不清楚打标签的规则可以预览指南文档
选中关键字的时候可以点击选择,也可以快捷键选择标签
然后就可以数据导出或者查看统计了
针对已经标记部分数据的数据集如何处理呢,pre-label 上面项目中的数据导出文件为admin.jsonl
我们新建下一个项目的时候可以直接导出,看到已经标记的标签,如新建pre-lebel项目
上传数据集的时候选择jsonl时要注意这里的text和label要根据具体数据源字段修改字段名
由于我们需要导入的数据结构是这样的:
所以把text=>修改为data,然后上传数据
上传上面的admin.jsonl文件,可以直接看到之前的标记结果
评论
标注过程中,在导航预览旁边也有评论的入口,评论数据都可以在侧边栏评论处统一查看
设置
这里数据量比较大的时候,可能Auto Labeling的功能也很强大,但是还不太会用