doccano自动标注——以NER为例

一、doccano安装

本部分不赘述,按照doccano官方文档自行安装。

二、编写模型API接口

任务以命名实体识别为例、模型以百度UIE为例。其中,任务及模型可根据个人需求自行配置。

  • 利用UIE进行标注,首先我们需要一个UIE运行的环境,以及写接口的工具,在这里我用的是flask。
pip install paddlepaddle==2.3.1
pip install paddlenlp==2.3.4
pip install flask
  • 在服务所在的设备上创建一个api.py,然后写识别的接口。
from flask import Flask, request, jsonify, render_template
from paddlenlp import Taskflow
app = Flask(__name__)
# 在这里定义你想要识别的实体类型
# UIE具有zero-shot能力,所以类型可以随便定义,但是识别的好坏不一定
schema = ['时间', '选手', '赛事名称']
# 第一次运行时,联网状态下会自动下载模型
ie = Taskflow('information_extraction', schema=schema)

def convert(result):
    result = result[0]
    formatted_result = []
    for label, ents in result.items():
        for ent in ents:
            formatted_result.append(
                {
                    "label": label,
                    "start_offset": ent['start'],
                    "end_offset": ent['end']
                })
    return formatted_result

@app.route('/', methods=['POST'])
def get_result():
    # text = request.json['text']
    text = request.form.get("text") or request.json.get("text") or request.values.get("text")
    print(text)
    result = ie(text)
    formatted_result = convert(result)
    return jsonify(formatted_result)

@app.route("/show/info")
def index():
    # return "China"
    # Flask内部会自动打开这个文件,并读取内容,将内容返回给用户
    # 默认:去当前项目目录的templates文件夹中找
    return render_template("index.html")

if __name__ == '__main__':
    # 这里写端口的时候一定要注意不要与已有的端口冲突
    # 这里的host并不是说访问的时候一定要写0.0.0.0,但是这里代码要写0.0.0.0,代表可以被本网络中所有的看到
    # 如果是其他机器访问你创建的服务,访问的时候要写你的ip
    app.run(host='0.0.0.0', port=5739)
  • 运行程序,看到如下信息即表明接口编写成功。

 

 三、添加自动标注功能

Select a tempalte:

安装如下图中所示,选择Custom REST Request后点击NEXT

 Set parameters:

Params
URL:http://127.0.0.1:5739/    该URL为请求的URL地址
method:POST   鉴于原始文本的长度不一,故采用POST请求,以免超出长度范围
Headers
Key:Content-Type
Value:application/json
Body
Key:text
Value:{{ text }}   注意:Value中的text跟前后的{}有一个空格

测试参数:

Sample Text:2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!

输入文本完成后点击Test按钮,Response栏目中的值不为 [ ] 即为测试成功。测试成功后,Test按钮会变成Next按钮,然后点击Next按钮。

 Set a template:

在Mapping template中填写如下信息:

[
    {% for entity in input %}
        {
            "start_offset": {{ entity.start_offset }},
            "end_offset": {{ entity.end_offset}},
            "label": "{{ entity.label }}"
        }{% if not loop.last %},{% endif %}
    {% endfor %}
]

填写完成后点击右下角的Test按钮,Result中显示如下信息即为成功(显示的信息为模型抽取到的结果),然后点击Next按钮。

 Set mappings:

该模块负责设置标签映射,举例:2023-05-08在doccano标注平台中的标签为时间日期,而在api中设定的schema为时间,则需要建立时间日期和时间之间的映射。【建议api和标注平台的标签名称保持一致】

如下图所示,如果有就需要进行添加,添加标签映射后点击Test,得到Result即为成功,点击Finish完成。

最终测试

点击左侧的Dataset,选择要进行标注的数据,然后点击Auto Labeling按钮,勾选红色圈位置的按钮后点击右下角的colse按钮即可。

 每点击下一页就会进行自动标注,在后台也可以看到结果,如下图所示。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值