美文网首页
使用文本标注工具-doccano

使用文本标注工具-doccano

作者: 逍遥_yjz | 来源:发表于2022-11-29 20:57 被阅读0次

doccano是documment anotation的缩写,是一个开源的文本标注工具,我们可以用它为NLP任务的语料库进行打标。它支持情感分析,命名实体识别,文本摘要,关系抽取等任务。

它的操作非常便捷,在小型语料库上,只要数小时就能完成全部的打标工作。

下面介绍一下如何安装、配置和使用doccano。

1. 安装

本文是基于anaconda来进行安装。

首先,在anaconda下创建虚拟环境:

conda create -n doccano python=3.9

注:建议python版本为3.9+

然后,激活doccano环境:

conda activate doccano

在doccano环境下安装doccano:

pip install doccano

2. 运行

在doccano环境下执行:

# 初始化数据库
doccano init

# 创建一个super user。这里要把pass改成你需要的密码。当然,用户名也可以改成别的。
doccano createuser --username admin --password pass

启动doccano

首先,在终端中运行下面的代码来启动WebServer

# 启动webserver
doccano webserver --port 8000

然后,打开另一个终端,运行下面的代码启动任务队列:

# 启动任务队列
doccano task

此时,我们就完成了doccano的启动。

3. 文本标注

运行doccano与创建新的文本打标项目

首先,打开浏览器(最好是Chrome),在地址栏中输入http://localhost:8000/并回车。

此时,我们会看到这样的界面


点击右上角进行登录

3.1 项目创建

以江河数据标注任务为例:

UIE支持抽取与分类两种类型的任务,根据实际需要创建一个新的项目:

  • 抽取式任务项目创建

创建项目时选择序列标注任务,并勾选Allow overlapping entityUse relation Labeling。适配命名实体识别、关系抽取、事件抽取、评价观点抽取等任务。

  • 分类式任务项目创建

创建项目时选择文本分类任务。适配文本分类、句子级情感倾向分类等任务。

  • 创建项目。点击左上角的CREATE,跳转至以下界面。

  • 选择序列标注模块

  • 勾选序列标注(Sequence Labeling

  • 填写项目名称(Project name)等必要信息

  • 勾选允许实体重叠(Allow overlapping entity)、使用关系标注(Use relation labeling

  • 创建完成后,项目首页视频提供了从数据导入到导出的七个步骤的详细说明。


3.2 数据上传

doccano总共支持4种格式的文本,他们的区别如下:

  • Textfile:要求上传的文件为txt格式,并且在打标的时候,一整个txt文件在打标的时候显示为一页内容;
  • Textline:要求上传的文件为txt格式,并且在打标的时候,该txt文件的一行文字会在打标的时候显示为一页内容;
  • JSONL:是JSON Lines的简写,每行是一个有效的JSON值。
  • CoNLL:是“中文依存语料库”,是根据句子的依存结构而建立的树库。其中,依存结构描述的是句子中词与词之间直接的句法关系。具体介绍看汉语树库

注意:

  • doccano官方推荐的文档编码格式为UTF-8。
  • 在使用JSONL格式的时候,文字数据本身要符合JSON格式的规范。
  • 数据集中不要包含空行。

选择Textline

3.3 添加标签

构建抽取式任务标签

抽取式任务包含SpanRelation两种标签类型,Span指原文本中的目标信息片段,如实体识别中某个类型的实体,事件抽取中的触发词和论元;Relation指原文本中Span之间的关系,如关系抽取中两个实体(Subject&Object)之间的关系,事件抽取中论元和触发词之间的关系。

注意,这里只是添加将来可供选择的标签,是项目配置的过程,而不是进行文本标注。

3.4 关系标注

标注数据。点击每条数据最右边的Annotate按钮开始标记。标记页面右侧的标签类型(Label Types)开关可在实体标签和关系标签之间切换。

  • 实体标注:直接用鼠标选取文本即可标注实体。
  • 关系标注:首先点击待标注的关系标签,接着依次点击相应的头尾实体可完成关系标注。

关系抽取(Relation Extraction,简称RE),是指从文本中识别实体并抽取实体之间的语义关系,即抽取三元组(实体一,关系类型,实体二)。

标注示例:


示例中定义了作品名人物名时间三种Span类型标签,以及歌手发行时间所属专辑三种Relation标签。Relation标签由Subject对应实体指向Object对应实体

3.5 数据导出

3.5.1 导出抽取式任务数据

导出数据。在Datasets一栏点击ActionsExport Dataset导出已标注的数据。

选择导出的文件类型为JSONL(relation),导出数据示例:

{
    "id": 38,
    "text": "百科名片你知道我要什么,是歌手高明骏演唱的一首歌曲,1989年发行,收录于个人专辑《丛林男孩》中",
    "relations": [
        {
            "id": 20,
            "from_id": 51,
            "to_id": 53,
            "type": "歌手"
        },
        {
            "id": 21,
            "from_id": 51,
            "to_id": 55,
            "type": "发行时间"
        },
        {
            "id": 22,
            "from_id": 51,
            "to_id": 54,
            "type": "所属专辑"
        }
    ],
    "entities": [
        {
            "id": 51,
            "start_offset": 4,
            "end_offset": 11,
            "label": "作品名"
        },
        {
            "id": 53,
            "start_offset": 15,
            "end_offset": 18,
            "label": "人物名"
        },
        {
            "id": 54,
            "start_offset": 42,
            "end_offset": 46,
            "label": "作品名"
        },
        {
            "id": 55,
            "start_offset": 26,
            "end_offset": 31,
            "label": "时间"
        }
    ]
}

标注数据保存在同一个文本文件中,每条样例占一行且存储为json格式,其包含以下字段

  • id: 样本在数据集中的唯一标识ID。

  • text: 原始文本数据。

  • entities
    

    : 数据中包含的Span标签,每个Span标签包含四个字段:

    • id: Span在数据集中的唯一标识ID。
    • start_offset: Span的起始token在文本中的下标。
    • end_offset: Span的结束token在文本中下标的下一个位置。
    • label: Span类型。
  • relations
    

    : 数据中包含的Relation标签,每个Relation标签包含四个字段:

    • id: (Span1, Relation, Span2)三元组在数据集中的唯一标识ID,不同样本中的相同三元组对应同一个ID。
    • from_id: Span1对应的标识ID。
    • to_id: Span2对应的标识ID。
    • type: Relation类型。

3.5.2 导出句子级分类任务数据

选择导出的文件类型为JSONL,导出数据示例:

{
    "id": 41,
    "data": "大年初一就把车前保险杠给碰坏了,保险杠和保险公司 真够倒霉的,我决定步行反省。",
    "label": [
        "负向"
    ]
}

标注数据保存在同一个文本文件中,每条样例占一行且存储为json格式,其包含以下字段

  • id: 样本在数据集中的唯一标识ID。
  • data: 原始文本数据。
  • label: 文本对应类别标签。

3.6 标注完数据转化:

该章节详细说明如何通过doccano.py脚本对doccano平台导出的标注数据进行转换,一键生成训练/验证/测试集。

3.6.1 抽取式任务数据转换

  • 当标注完成后,在 doccano 平台上导出 JSONL(relation) 形式的文件,并将其重命名为 doccano_ext.json 后,放入 ./data 目录下。
  • 通过 doccano.py 脚本进行数据形式转换,然后便可以开始进行相应模型训练。
python doccano.py \
    --doccano_file ./data/doccano_ext.json \
    --task_type ext \
    --save_dir ./data \
    --splits 0.8 0.2 0 \
    --schema_lang ch

可配置参数说明:

  • doccano_file: 从doccano导出的数据标注文件。
  • save_dir: 训练数据的保存目录,默认存储在data目录下。
  • negative_ratio: 最大负例比例,该参数只对抽取类型任务有效,适当构造负例可提升模型效果。负例数量和实际的标签数量有关,最大负例数量 = negative_ratio * 正例数量。该参数只对训练集有效,默认为5。为了保证评估指标的准确性,验证集和测试集默认构造全负例。
  • splits: 划分数据集时训练集、验证集所占的比例。默认为[0.8, 0.1, 0.1]表示按照8:1:1的比例将数据划分为训练集、验证集和测试集。
  • task_type: 选择任务类型,可选有抽取和分类两种类型的任务。
  • options: 指定分类任务的类别标签,该参数只对分类类型任务有效。默认为["正向", "负向"]。
  • prompt_prefix: 声明分类任务的prompt前缀信息,该参数只对分类类型任务有效。默认为"情感倾向"。
  • is_shuffle: 是否对数据集进行随机打散,默认为True。
  • seed: 随机种子,默认为1000.
  • separator: 实体类别/评价维度与分类标签的分隔符,该参数只对实体/评价维度级分类任务有效。默认为"##"。
  • schema_lang: 选择schema的语言,可选有chen。默认为ch,英文数据集请选择en

备注:

  • 默认情况下 doccano.py 脚本会按照比例将数据划分为 train/dev/test 数据集
  • 每次执行 doccano.py 脚本,将会覆盖已有的同名数据文件
  • 在模型训练阶段我们推荐构造一些负例以提升模型效果,在数据转换阶段我们内置了这一功能。可通过negative_ratio控制自动构造的负样本比例;负样本数量 = negative_ratio * 正样本数量。
  • 对于从doccano导出的文件,默认文件中的每条数据都是经过人工正确标注的。

更多不同类型任务(关系抽取、事件抽取、评价观点抽取等)的标注规则及参数说明,请参考doccano数据标注指南

3.6.2 句子级分类任务数据转换

  • 当标注完成后,在 doccano 平台上导出 JSON 形式的文件,并将其重命名为 doccano_cls.json 后,放入 ./data 目录下。
  • 在数据转换阶段,我们会自动构造用于模型训练的prompt信息。例如句子级情感分类中,prompt为情感倾向[正向,负向],可以通过prompt_prefixoptions参数进行声明。
  • 通过 doccano.py 脚本进行数据形式转换,然后便可以开始进行相应模型训练。
python doccano.py \
    --doccano_file ./data/doccano_cls.json \
    --task_type "cls" \
    --save_dir ./data \
    --splits 0.8 0.1 0.1 \
    --prompt_prefix "情感倾向" \
    --options "正向" "负向"

参考文章:doccano标注

相关文章

  • 使用文本标注工具-doccano

    doccano是documment anotation的缩写,是一个开源的文本标注工具,我们可以用它为NLP任务的...

  • 安装标注工具——doccano

    doccano可以进行命名实体标注,情感极性标注以及语言翻译标注,基本满足NLP里的经典识别场景。安装启动步骤: ...

  • Anaconda,doccano(NLP工具包)的安装使用

    NLP标注工具——doccano 大致功能:支持命名实体识别,情感分类,机器翻译任务,界面比较友好。 环境: wi...

  • 安利一个NLP标注工具:brat

    brat是一个基于web的文本标注工具,可以对文本进行结构化注释。能够用于NLP中实体、关系、事件的数据标注,使用...

  • pyltp的使用教程

    1 LTP 简介 LTP提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法...

  • 设计汉语的组合标注器

    设计汉语的组合标注器 训练和测试语料使用thulac标注过的汉语文本。 (1)首先要对文本Leipzig10kse...

  • HTML5基础标签

    ###锚点定位 1.使用“a href=”#id名>“链接文本" 创建链接文本。 2.使用相应的id名标注跳转目标...

  • Doccano部署踩坑

    项目地址:https://github.com/doccano/doccano[https://github.co...

  • 02-文本标注工具brat

    本文主要介绍两个部分: A,安装部署 brat B,配置brat用于中文任务 NLP基本上都是监督学习,而监督学习...

  • 中文文本标注工具调研以及BRAT安装使用

    背景:最近的工作需要对文本先进行标注,然后才可以做接下来的文本分类工作。其中主要内容是对一段文本打标签,标记该文本...

网友评论

      本文标题:使用文本标注工具-doccano

      本文链接:https://www.haomeiwen.com/subject/dljrfdtx.html