如何使用doccano+flask+花生壳+服务器实现命名实体识别ner自动标注
doccano安装与配置
首先,本地安装教程有太多了,我就不详细写了。而且我本地也没成功run起来,但是想到标数据这种活怎么能一个人干呢?所以还是部署在服务器上比较好,添加几个用户之后访问服务器搭建的网站大家就可以一起愉(痛)快(苦)的标数据了,还可以比比谁标得快!
正式开始:
我们首先进入doccano的github仓库,然后开始读README.的docker部分
Docker
As a one-time setup, create a Docker container as follows(直接在服务器的终端依次运行下面的代码):
下面前面的端口号的8000指的是服务器的端口,也就是我们到时候访问的网址端口;相应修改管理员邮箱、密码
docker pull doccano/doccano
docker 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/doccano
Next, start doccano by running the container(docker容器创建完成就可以run起来了):
docker container start doccano
Go to http://127.0.0.1:8000/.
这时候在任意一台电脑输入服务器ip:端口8000就可以访问doccano网站了,一个共享标注网站就搭建好了,也就是说把127.0.0.1换成服务器的公网IP地址就能访问了
To stop the container, run docker container stop doccano -t 5
. All data created in the container will persist across restarts.
If you want to use the latest features, please specify nightly
tag:
docker pull doccano/doccano:nightly
本地配置自动标注模型flask
原理是本地运行成品深度学习模型,配制成api供远程调用。首先这一步是把深度学习模型配制好。借用百度飞桨提供的通用标注模型,我们可以做到零知识启动,但是实体类别过于小众(本质上就是理解你说的实体名称是什么意思)效果可不能保证,识别人名和城市还是没有问题的。
你需要修改的是schema
里面的实体类别,另外就是把paddle
和paddlenlp
两个库pip安装一下,不然跑不起来。
from flask import Flask, request, jsonify
from paddlenlp import Taskflow
app = Flask(__name__)
# 在这里定义你想要识别的实体类型
# UIE具有zero-shot能力,所以类型可以随便定义,但是识别的好坏不一定
schema = ['政策', '政府机构', '省份', '城市','人','人的称号']
# 第一运行时,联网状态下会自动下载模型
# device_id为gpu id,如果写-1则使用cpu
ie = Taskflow('information_extraction', schema=schema, device_id=-1)
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']
print(text)
result = ie(text)
formatted_result = convert(result)
return jsonify(formatted_result)
if __name__ == '__main__':
# 这里写端口的时候一定要注意不要与已有的端口冲突
# 这里的host并不是说访问的时候一定要写0.0.0.0,但是这里代码要写0.0.0.0,代表可以被本网络中所有的看到
# 如果是其他机器访问你创建的服务,访问的时候要写你的ip
app.run(host='0.0.0.0', port=88)
代码运行起来后(终端python xxx.py或者就在pycharm中run)只能本地访问这个接口,至于调试还是看下面两篇教程,也不重复写了。
post请求run代码之后给出的网址,内容写在body
(1条消息) NLP工具——doccano标注系统自动标注功能使用_常鸿宇的博客-CSDN博客
本地使用花生壳内网穿透
服务器一般内存不超过2GB所以上面的自动标注模型是跑不起来的,那么我们要放弃自动标注吗?我想到的解决办法就是用自己的本地电脑内网穿透供服务器搭建的doccano调用自动标注api.
内网穿透花生壳勉强够用,关键免费稳定。安装之后我们开始把模型flask部署到公网。
开启部署内网穿透。
配置doccano自动标注
接下来我就不解释了,看这两个教程。主要看第一个csdn的就够了。
(1条消息) NLP工具——doccano标注系统自动标注功能使用_常鸿宇的博客-CSDN博客
ps:上面这个教程
Set parameters
设置参数里面说这里的value
中,text和括号之间有两个空格,其实是前后各一个
doccano数据标注工具 -自动标注功能实现 - 知乎 (zhihu.com)
Set 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 %}
]
教程结束,如有问题可以留言评论。