Doccano自动标注实战:我用它3天搞定了一个NER项目的数据标注
Doccano自动标注实战我用它3天搞定了一个NER项目的数据标注1. 项目背景与挑战上个月接到了一个从新闻文本中抽取公司名和职位的NER任务标注量约5000条。作为独立开发者既没有专业标注团队也没有充足预算购买商业标注服务。传统人工标注效率太低而完全依赖预训练模型又担心准确率。经过技术选型最终决定采用Doccano轻量级模型的半自动方案没想到3天就完成了全部工作。这个方案的核心优势在于80%标注工作由模型自动完成人工仅需校验和修正Doccano的协同功能支持多人并行校验全流程可视化标注进度和质量实时可控关键决策点选择UIE模型而非spaCy因为前者支持zero-shot自定义实体类型更适合本项目快速启动2. 环境搭建与数据准备2.1 快速部署Doccano 1.6.2在Ubuntu 20.04服务器上部署仅需三步# 创建Python3.8虚拟环境 python -m venv doccano_env source doccano_env/bin/activate # 安装指定版本 pip install doccano1.6.2 # 初始化服务 doccano init # 设置管理员账号 doccano webserver --port 8000 # 后台运行 doccano task # 启动任务队列常见踩坑点端口冲突导致服务无法启动建议先用netstat -tulnp检查未安装SQLite3开发库导致数据库初始化失败Ubuntu需apt install libsqlite3-dev2.2 原始数据处理技巧新闻数据往往包含大量HTML标签和特殊字符需要预处理import re from bs4 import BeautifulSoup def clean_text(text): # 去除HTML标签 text BeautifulSoup(text, html.parser).get_text() # 合并连续空格 text re.sub(r\s, , text) # 过滤特殊字符 return text.encode(ascii, ignore).decode().strip()预处理后的数据按每行一条文本的格式保存为news_data.txt方便后续导入。3. 自动标注系统搭建3.1 模型选型对比模型准确率推理速度显存占用定制难度UIE-base78%15ms/条2.3GB★★☆☆☆spaCy-zh65%8ms/条1.1GB★★★★☆BERT-CRF82%45ms/条4.5GB★★★★★最终选择UIE模型因其在少样本场景下表现最佳from paddlenlp import Taskflow schema [公司名, 职位] ie Taskflow(information_extraction, schemaschema, device_id0) # 使用GPU # 测试样例 text 阿里巴巴CEO张勇宣布组织架构调整 print(ie(text)) # 输出: [{公司名: [{text: 阿里巴巴, start: 0, end: 4}], 职位: [{text: CEO, start: 4, end: 7}]}]3.2 自动化接口开发使用FastAPI构建高性能标注接口from fastapi import FastAPI from pydantic import BaseModel app FastAPI() class RequestData(BaseModel): text: str app.post(/predict) async def predict(data: RequestData): result ie(data.text) return { entities: [ { label: label, start_offset: ent[start], end_offset: ent[end], text: ent[text] } for label in result[0] for ent in result[0][label] ] }启动服务uvicorn api:app --host 0.0.0.0 --port 57394. 标注流程优化实战4.1 Doccano配置关键步骤项目创建选择Sequence Labeling类型标签设置公司名蓝色、职位红色自动标注集成// REST接口配置 { url: http://your_server_ip:5739/predict, method: POST, headers: {Content-Type: application/json}, body: {text: {{text}}} }标签映射接口返回的公司名→ Doccano标签公司名接口返回的职位→ Doccano标签职位4.2 效率提升技巧第一天完成2000条自动标注发现模型对缩写公司名识别差如阿里→阿里巴巴解决方案在接口层添加别名映射表company_alias { 阿里: 阿里巴巴, 腾讯: 腾讯控股, # ... } def normalize_company(name): return company_alias.get(name, name)第二天团队协作校验3人同时工作通过Doccano的Assign功能分配任务使用Comments功能标记有争议的标注第三天质量检查与导出随机抽样500条检查准确率达到92%导出格式选择JSONL包含原始文本和标注span5. 关键问题与解决方案5.1 典型错误案例复合职位识别错误示例高级产品经理被拆分为高级和产品经理修复方法在UIE的schema中添加复合职位类别公司名包含职位错误示例腾讯研究院被误标为公司名解决方案添加否定词表过滤5.2 性能优化当处理长文本时1000字UIE速度明显下降。采用分块处理策略def chunk_text(text, max_len500): sentences text.split(。) chunks [] current_chunk for sent in sentences: if len(current_chunk) len(sent) max_len: current_chunk sent 。 else: chunks.append(current_chunk) current_chunk sent 。 if current_chunk: chunks.append(current_chunk) return chunks6. 项目成果与经验最终获得的标注数据质量准确率91.2%人工评估覆盖率88.7%相比纯人工标注成本对比方式耗时人力成本工具成本纯人工2周60000本方案3天1500300几个实用建议自动标注前先人工标注100条作为模型微调数据设置明确的标注规范文档特别是边界案例定期导出数据备份防止意外丢失
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2611244.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!