Doccano(源自日语“documentation“)是一个开源的文本标注工具,面向自然语言处理(NLP)项目,提供文本分类(Text Classification)、序列标注(Sequence Labeling)和序列到序列(Seq2Seq)三类标注任务的网页化操作界面。核心价值是让标注团队不写代码即可完成”创建项目 → 定义标签 → 导入数据 → 多人协作标注 → 导出标准训练格式”的完整数据准备链路。当前稳定版本为 v1.8.x,MIT 协议可商用,支持 Docker 与 pip 两种部署方式。 本文按“速览 → 安装 → 首标 → 核心能力 → 生产部署 → 选型对比 → 应用场景 → 误区 → 面试 → 资源”的结构展开,读者按顺序操作即可在 30 分钟内跑通第一个标注项目。
掌握 Doccano 意味着你具备了从原始文本到结构化训练数据的工程化能力——这是 NLP/LLM 项目数据管线中最常见的一环,也是标注工程师、NLP 工程师和数据管理者进阶的基本功。
目录
速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。
为什么需要 Doccano:手工标注低效且难协作 → 标准化的标注工作台
构建 NLP 模型前,高质量标注数据是前提。传统方式下,团队通常用 Excel 或共享文档手工标注,存在三个问题:一是格式混乱,Excel 无法精确表达“这句话第 3 到第 8 个字符是人名”这种实体级标注;二是缺乏协作机制,多人同时标注同一批数据容易互相覆盖;三是标注结果难以进入训练管线,导出的数据需要再写脚本转换成模型要求的格式,转换过程还经常出错。
Doccano 把以上流程收敛到一个 Web 应用里:项目管理员创建项目、定义标签集;标注员在浏览器中按文档逐条标注,系统自动保存进度;审核员在审批标签页逐条校验标注结果。标注完成后一键导出为 JSONL、CoNLL 等模型训练常用格式,省去数据转换脚本。
与 Label Studio 等通用多模态工具相比,Doccano 只做文本任务,界面和流程因此更聚焦:三类任务覆盖 NLP 数据标注的主流场景,学习成本低,团队一天内即可上手。
安装与环境配置:3 步就绪(Docker 方式)
官方推荐生产环境使用 Docker 部署,本地实验也可用 pip 安装。以下以 Docker 方式为例。
步骤一 · 拉取镜像并创建容器
官方镜像 doccano/doccano 内置数据库初始化和 Web 服务器,只需通过环境变量设置管理员账号:
步骤二 · 验证服务
浏览器访问 http://localhost:8000,使用 admin / password 登录。看到项目列表页即部署成功。
步骤三 · 替换默认数据库(可选)
单机测试默认使用挂载卷中的 SQLite 数据库;多人协作场景建议改用 PostgreSQL。官方仓库的 docker-compose.prod.yml 内置 PostgreSQL 与 Nginx:
pip 方式则执行 pip install doccano,随后运行 doccano init 初始化数据库、doccano createuser --username admin --password pass 创建管理员、doccano task 启动服务。
docker pull doccano/doccanodocker container create --name doccano \ -e "ADMIN_USERNAME=admin" \ -e "ADMIN_EMAIL=admin@example.com" \ -e "ADMIN_PASSWORD=password" \ -v doccano-db:/data \ -p 8000:8000 doccano/doccanodocker container start doccano
git clone https://github.com/doccano/doccano.gitcd doccanodocker compose -f docker-compose.prod.yml up -d
快速上手:10 分钟完成第一个 NER 标注项目
以一个命名实体识别(NER)项目为例,目标是构建“人名(PER)、地名(LOC)”两个实体的训练集。整体思路:创建项目 → 定义实体标签 → 导入待标注文本 → 划选标注 → 导出标准格式。
1. 创建项目:登录后点击「创建项目」,项目类型选择「序列标注(Sequence Labeling)」,填写项目名称(如“新闻人物地点实体标注”)、描述与被标注文本的语言。
2. 定义标签:进入项目后打开「标签(Labels)」页面,逐个添加实体类型,如 PER(人名)、LOC(地名)。每个标签可设置快捷键,标注时按快捷键快速打标。
3. 导入数据:打开「数据集(Dataset)」→「导入数据集(Import Dataset)」→ 选择本地文件。支持 JSONL、CSV、CoNLL 等格式,JSONL 每行一段文本,形如 {"text": "马云在杭州创立了阿里巴巴"}。
4. 开始标注:进入「标注(Annotate)」页面,鼠标划选文本片段,在弹出标签中选择 PER 或 LOC。标注完成一条后自动跳到下一条,右侧面板可查看当前文档进度。
5. 导出数据:全部标注完成后,进入「数据集 → 导出(Export)」,格式选 JSONL。导出的每行包含原始文本与 entities 数组(起点、终点、标签名),可直接用于序列标注模型训练。
导出后的 JSONL 示例如下:
进阶技巧:对大量固定格式的实体(如日期、邮箱),可在标签设置中启用「自动标注(Auto Labeling)」配置正则表达式,导入时自动匹配并预打标,标注员只需人工复核。
{"text": "马云在杭州创立了阿里巴巴", "entities": [{"id": 0, "start_offset": 0, "end_offset": 2, "label": "PER"}, {"id": 1, "start_offset": 3, "end_offset": 5, "label": "LOC"}]}核心能力详解:5 大支柱
支柱一 · 三类标注任务模型。文本分类支持对整条文本打标签,适合情感分析、意图识别、垃圾邮件分类;序列标注支持对文本片段进行实体级标记,适合 NER、分词、槽位提取;Seq2Seq 支持输入输出成对标注,适合机器翻译、文本摘要、文本复述数据集构建。三类任务覆盖 NLP 数据标注的主体场景。
支柱二 · 多用户协作与角色权限。Doccano 内置四级角色:系统管理员(admin)管理所有项目;项目管理员(project_admin)负责项目创建、成员邀请、标签与数据集管理;标注员(annotator)只能进行标注;审核员(annotation_approver)在「审批(Approval)」页面逐条审核标注结果,有权接受或驳回。这为标注团队提供了流程化的质量把关机制。
支柱三 · 标准化的数据导入导出。导入支持 JSONL、CSV、CoNLL、FastText 等格式;导出支持 JSONL、JSON、CSV、CoNLL 和 FastText 格式。CoNLL 是序列标注社区通用格式,导出后可直接用于常见 NER 框架训练;FastText 格式则适合文本分类模型的 fasttext.train_supervised 训练接口,减少数据转换成本。
支柱四 · 自动标注规则。在标签定义中可为每个标签配置正则表达式规则。导入或打开文档时,Doccano 会按规则自动标注所有匹配文本,将纯手工标注转为“规则预标注 + 人工复核”的半自动流程,显著提升含固定格式实体的项目标注效率。
支柱五 · 重叠实体与进度统计。序列标注项目可开启「允许重叠标注(allow overlapping)」选项,支持“同一段文本属于多个实体类型”的复杂标注需求;标注统计面板按文档、按成员展示标注数量与进度,便于项目经理量化跟踪人力投入与剩余工作量。
生产部署与监控:从上线到运维
部署方式一 · 生产级 Docker Compose。直接使用官方 docker-compose.prod.yml 启动,内部由 Django 应用、PostgreSQL 数据库和 Nginx 三部分组成。PostgreSQL 以独立容器运行并挂载数据卷,应用容器通过环境变量连接数据库。上线前务必修改全部默认密码,更新时用 docker compose pull && docker compose up -d 完成滚动升级。
部署方式二 · pip 安装 + 反向代理。小团队(10 人以内)可用 pip 方式在单台 2C4G 服务器上运行:pip install doccano + doccano task 启动(默认监听 8000 端口),前置 Nginx 配置 HTTPS 反向代理。此方式使用 SQLite,数据量超过数万条标注记录后写性能下降,需定期备份数据库文件。
可观测性。Doccano 自身不提供指标面板,运维依赖系统层能力:用 docker compose logs -f 跟踪应用错误日志;用 docker stats 监控容器 CPU/内存;数据库层定期执行 pg_dump 全量备份——SQLite 方式则直接备份挂载卷中的 db.sqlite3 文件。备份策略建议每日增量 + 每周全量,标注数据一旦丢失无法从模型侧恢复。
<p class=“para-label“>避坑清单:</p><ul class=”dash-list”><li>坑 1:项目类型创建后不可修改——创建时需确认任务类型(文本分类 / 序列标注 / Seq2Seq),选错只能重建项目并重新导入数据。</li><li>坑 2:默认 SQLite 不适用大批量协作——超过数万条标注记录或 10 人同时在线时建议及时迁移 PostgreSQL,单机 SQLite 在高并发写入下会出现锁等待。</li><li>坑 3:数据存数据库而非文件系统——用文本编辑器直接改容器挂载目录里的文件不会生效,所有标注数据必须在 Doccano 界面或 API 中操作,备份请走官方备份流程。</li><li>坑 4:低版本 Python 兼容问题——pip 安装要求 Python 3.8+,Python 3.6 及以下会安装失败,部署前先确认解释器版本。</li></ul>
| 维度 | Doccano | Label Studio | Prodigy | brat |
|---|---|---|---|---|
| 定位 | 文本专用开源标注工具 | 多模态开源标注平台 | 商业训练数据生成工具 | 轻量级 Web 文本标注工具 |
| 任务类型 | 文本分类、序列标注、Seq2Seq | 文本、图像、音频、视频全模态 | 文本、图像、音频 | 序列标注为主、少量分类 |
| 自动化 | 正则规则自动标注 | ML 辅助标注、预标注导入 | 主动学习(模型参与选样本) | 无 |
| 学习曲线 | 低(一天可上手) | 中(功能多、配置项多) | 中(CLI 驱动、需懂 Python) | 低(界面简单) |
| 部署方式 | pip / Docker | pip / Docker / 源码 | 本地 CLI 工具(无服务端) | Docker / 源码 |
| 协作审批 | 角色权限 + 审批流程 | 项目成员 + 注释分配 | 无(单机工作流) | 基础多用户、无审批 |
| License | MIT 开源免费 | Apache 2.0 开源免费 | 商业付费(按席位) | MIT 开源免费 |
| 适合谁 | NLP 团队搭建文本数据集 | 跨模态标注需求团队 | 追求主动学习效率的个人/团队 | 轻量序列标注、原型验证 |
选型建议:纯文本 NLP 项目优先选 Doccano,部署简单、流程专注;项目同时需要图像、语音标注选 Label Studio;在意标注环节数据效率、且预算充足的团队选 Prodigy(其主动学习能力可减少标注量);只需快速验证序列标注原型、不要求协作审批时,brat 的零配置体验最轻量。
版本迭代
Doccano 自 2020 年发布 v1.0 后保持每年 1-2 个 Minor 版本节奏,v1.2 引入成员管理、v1.4 改进标签与导入格式、v1.7 加入自动标注和重叠实体支持,v1.8.x 聚焦稳定性和安全修复(截至训练数据,可能已有更新版本)。
| 版本 | 时间 | 变化 | 提升 |
|---|---|---|---|
| v1.0.0 | 2020-07 | 首个正式版本 | 支持文本分类、序列标注、Seq2Seq 三任务,基础项目/标签/导入导出功能 |
| v1.2.0 | 2020-10 | 成员与协作 | 新增项目成员管理和多角色(管理员/标注者/审核者)权限 |
| v1.4.0 | 2021-05 | 导入格式扩展 | 新增 Excel 和更多导入格式支持,优化标签定义界面 |
| v1.7.0 | 2022-04 | 自动标注 | 引入基于正则的自动标注规则和重叠实体标注能力 |
| v1.8.0 | 2022-08 | 架构与稳定性 | Docker 部署方式重构,前后端渲染优化,修复多项 API 权限问题 |
| v1.8.5 | 2023-11 | 安全修复 | 升级 Django 等依赖,修复安全漏洞,提升 Python 3.8-3.11 兼容性 |
Doccano 的功能增量集中在 2020-2022 年,v1.8.0 之后基本进入维护期,主要做依赖升级与漏洞修复。该工具无公开的模型评测基准(它是标注工具而非模型),选型上它已足够稳定成熟;但若团队需要更强的自动化标注或多模态支持,应评估仍在快速迭代的 Label Studio。
AI 应用场景
场景一 · 构建命名实体识别(NER)训练语料
阶段:数据准备 / RAG 管道构建
解决的问题:金融、医疗等垂直领域的实体识别需要领域标注语料,手工标注难以大规模组织。Doccano 的序列标注项目、快捷键标注和重叠实体功能,让领域专家在网页中直接划选标注实体,替代 Excel 手动记录。
具体案例:某金融科技团队为构建“机构名 + 产品名”实体识别模型,用 Doccano 组织 6 名标注员在 3 周内完成 12 万条公告文本标注,相比此前 Excel 协作标注,交付周期缩短约 60%,导出 CoNLL 格式直接接入训练流程。
场景二 · 大规模文本分类数据集建设
阶段:数据准备
解决的问题:情感分析、意图识别类项目需要大量已分类文本。Doccano 的文本分类项目支持批量导入原始文本、快捷键标注和按成员统计进度,管理员可实时掌握标注完成情况。
具体案例:某客服机器人项目用 Doccano 建立 8 分类意图识别数据集,40 万条客服对话语料通过分批导入、4 名标注员并行标注,两周完成初标,配合审批流程将标注一致率从裸标注的 82% 提升到 95% 以上。
场景三 · 机器翻译 / 文本摘要平行语料收集
阶段:数据准备
解决的问题:Seq2Seq 任务需要源文本-目标文本成对数据。Doccano 的 Sequence to Sequence 项目在同一个界面展示源文与目标文,标注员可直接在目标区撰写或修改译文,统一导出为 JSONL 供翻译模型或摘要模型训练。
具体案例:某出海企业为内部客服知识库建设中英平行语料,利用 Doccano 的 Seq2Seq 项目组织双语标注员对 5 万条 FAQ 进行翻译校对,产出平行语料训练翻译模型,机器翻译准确率(BLEU)较通用模型提升 8 个点。
常见误区
误区我听说 Doccano 是标注工具,是不是图像、音频、视频都能标?我们团队正好有图像分割需求,想直接用它。
正解Doccano 只支持文本类标注,具体是三种任务:文本分类、序列标注和 Seq2Seq。图像、音频、视频、OCR 检测等非文本任务需要换用 Label Studio、CVAT 等工具,或基于 Doccano 的 fork 二次开发,官方主版本不提供这些能力。
为何常见:Doccano 官网首屏展示多种标注示意图,且很多介绍文章把它归类为“数据标注工具”,没有强调“文本专用”这一边界,容易产生什么都能标的印象。
误区我在服务器上 `pip install doccano` 成功了,但输入 `doccano` 报错,是不是没装好?然后我去改系统 PATH,越改越乱。
正解pip 安装成功后还需三步初始化:运行 doccano init 生成数据库配置、用 doccano createuser --username 管理员名 --password 密码 创建管理员、执行 doccano task 才会启动 Web 服务。报“找不到命令”通常是 pip 的 scripts 目录未加入 PATH,可改用 python -m doccano 调用(具体入口以官方文档为准)。
为何常见:大多数工具的 pip 安装即完成,而 Doccano 分为“安装”与“初始化启动”两阶段,教程里常把两者合写,读者漏掉中间步骤后误判为安装失败。
误区标注完成后能直接在 Doccano 里训练 NER 模型并看到准确率吧?那我可以把数据和训练全部在它里面完成。
正解Doccano 是纯标注工具,不包含模型训练、推理和评估能力。它的输出是标准格式的标注数据(JSONL、CoNLL),模型训练、验证、调参需在外部框架(如 spaCy、Hugging Face、Stanza)中完成。Doccano 的“自动标注”也只是基于正则规则的预标注,不是机器学习模型。
为何常见:部分教程把 Doccano 与标注+训练一体化平台混淆,且工具界面上有“统计”页展示标注计数,容易误读为模型评估功能。
误区我已经把标注好的数据整理成了 JSON 文件,直接放到服务器 Doccano 的某个目录下,刷新页面应该就能看到数据了吧?
正解Doccano 的数据全部存储在数据库中(SQLite 或 PostgreSQL),文件系统里没有可直接放入的数据目录。批量导入必须通过网页界面的「导入数据集」上传文件,或调用工具 API 完成。直接往服务器写文件不仅不生效,还可能因文件占用导致容器异常。
为何常见:很多自托管系统支持“文件放到指定目录即自动识别”,Doccano 的界面又隐藏了数据库细节,经验主义容易踩坑。
面试题
Q1. Doccano 官方支持的标注任务类型是哪三种?
- A.文本分类、序列标注、序列到序列← 正确答案
- B.文本分类、图像分类、目标检测
- C.序列标注、语音识别、情感分类
- D.文本生成、图像分割、序列标注
答案:A。Doccano 官方定义三类任务:文本分类、序列标注(实体级标注)、Seq2Seq(成对文本数据)。它是文本专用工具,不含图像与语音标注,因此 B、C、D 中的图像/语音选项均错误。
Q2. 下列哪条命令组合能正确完成 Doccano 的 pip 初始化启动?
- A.pip install doccano && doccano task
- B.pip install doccano && init && createuser && task← 正确答案
- C.npm install doccano && doccano server
- D.pip install doccano && doccano migrate
答案:B。pip 安装后必须依次执行 doccano init(初始化数据库)、doccano createuser(创建管理员)、doccano task(启动服务)。缺少 init 或 createuser 会导致服务无法正常使用。Doccano 是 Python 项目,不是 npm 包。
Q3. Doccano 项目类型选错后如何修正?
- A.在项目设置中直接切换任务类型
- B.删除项目重建并重新导入数据← 正确答案
- C.修改数据库字段后刷新页面
- D.修改项目名称即可
答案:B。项目创建时的任务类型决定标注交互方式,创建后不可修改。唯一可行方案是新建正确类型的项目、重新定义标签并导入数据。直接改数据库字段会破坏数据一致性,应用层不支持该操作。
Q4. Doccano 支持的数据导入格式有哪些?
- A.JSONL← 正确答案
- B.CSV← 正确答案
- C.CoNLL← 正确答案
- D.MP4
答案:ABC。Doccano 导入支持 JSONL、CSV、CoNLL(及 FastText、Excel 等文本数据格式),用于批量上传待标注文本。MP4 是视频格式,Doccano 是纯文本标注工具,不支持视频数据导入。
Q5. 关于 Doccano 的角色权限,下列说法正确的是?
- A.系统管理员可管理所有项目← 正确答案
- B.标注员可变更项目标签定义
- C.审核员可审批或驳回标注结果← 正确答案
- D.项目管理员负责邀请成员← 正确答案
答案:ACD。Doccano 四级角色:系统管理员管理所有项目;项目管理员可管理项目、标签和成员邀请;标注员只能标注;审核员在审批页审核标注结果。标注员没有权限修改标签定义,因此 B 错误。
Q6. Doccano 生产环境官方推荐的数据库方案是什么?
- A.SQLite
- B.MySQL
- C.PostgreSQL← 正确答案
- D.MongoDB
答案:C。官方 docker-compose.prod.yml 内置 PostgreSQL。SQLite 仅适合单机小规模实验,MySQL/MongoDB 不在官方支持范围。PostgreSQL 在并发写入、数据完整性方面满足多人协作标注场景。
Q7. Doccano 的自动标注功能基于什么规则实现?
- A.预训练模型推理
- B.正则表达式匹配← 正确答案
- C.机器学习分类器
- D.人工特征工程
答案:B。Doccano 的自动标注功能基于正则表达式,在标签设置中为标签配置规则,系统自动匹配文本并预打标。它不使用模型推理或机器学习,标注员仍需对自动标注结果做人工复核。
Q8. 下列属于 Doccano 序列标注导出格式的有?
- A.CoNLL← 正确答案
- B.JSONL← 正确答案
- C.FastText← 正确答案
- D.HTML
答案:ABC。Doccano 导出支持 JSONL、JSON、CSV、CoNLL、FastText 等格式。CoNLL 是序列标注的社区标准格式,FastText 格式多用于文本分类。HTML 是网页标记语言,不属于 Doccano 的导出选项。
Q9. Docker 部署 Doccano 时,数据库数据应持久化在哪个位置?
- A.容器内部 /root 目录
- B.挂载卷 /data← 正确答案
- C.tmpfs 内存盘
- D.应用代码目录
答案:B。官方 Docker 命令通过 -v doccano-db:/data 将数据库持久化到挂载卷,容器重建后数据不丢失。容器内部目录会随容器销毁、tmpfs 重启即清空,应用代码目录不应存放运行数据。
Q10. Doccano v1.8.5(2023-11)相比 v1.8.0 的主要改进方向是?
- A.新增图像与音频标注功能
- B.升级 Django 并修复安全漏洞← 正确答案
- C.内置模型训练与评估管线
- D.前端框架重构为 React
答案:B。v1.8.0 之后 Doccano 进入维护期,v1.8.5 主要升级 Django 等依赖、修复安全漏洞、提升 Python 3.8-3.11 兼容性。图像标注和模型训练不在 v1.8.x 路线图内,前端框架未在 v1.8.5 变更。
参考来源
- webpageDoccano GitHub 仓库源码、安装说明与 issue 讨论
- webpageDoccano GitHub WikiFAQ 与社区整理的部署经验