本教程将教各位如下知识:
1 自己搭建pytorch框架进行 lstm+crf的训练预测。
2 使用flask框架简单的开发一个后端软件
3 进行部署 在线网页版进行识别
首先是一个视频的演示:flask 搭建命名实体识别网站进行地域实体识别_哔哩哔哩_bilibili
关于lstm+crf的原理请看:个人工作平台
然后是lstm + crf代码部分:GitHub - qi-dian-b/Named-entity-recognition: 命名实体识别 lstm+crf
然后是后端开发的项目部分:
app.py
from flask import Flask, request, jsonify, request, abort,render_template,request import io import sys import pickle import json app = Flask(__name__) # 先访问到这个页面 第一次 提交结果后访问到 index1.html @app.route('/index') def index(): return render_template("index.html") @app.route('/index1', methods=['POST']) def index1(): data = request.form['Name'] print("----") print(data) line=list(data) s_ceshi=[] for i in line: s_ceshi.append(vocab2id[i]) while len(s_ceshi)< 577 : s_ceshi.append(4465) with torch.no_grad(): optimizer.zero_grad() train_x=torch.tensor(s_ceshi).reshape(1,577).to(device) train_y=torch.randint(0,4,[577]).reshape(1,577).to(device) mask = torch.logical_not(torch.eq(train_x, torch.tensor(4465))) targets_pred_without_pad,crf_loss= model(train_x,train_y,mask) pre_label=[] for i in targets_pred_without_pad[0]: pre_label.append(label2id[i]) return render_template('index1.html', data=line,pre_label=pre_label) # 启动服务 app.run(host='0.0.0.0',debug=True) # http://192.168.136.205:5000/index # curl http://192.168.136.205:5000/index
目录结构:
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>地名实体命名识别测试网站</title> </head> <body> <h1>实体命名识别测试网站</h1> <p>注释:['O', 'B-PER', 'I-PER', 'B-ORG', 'I-ORG', 'B-LOC', 'I-LOC']</p> <p>注释:['其他', '人名', '人名', '地名', '地名', '机构名 ', '机构名 ']</p> <h1>测试用例</h1> <p>法国队5月25日去摩洛哥,参加在卡萨布兰卡举行的哈桑二世巡回赛。</p> <p>意大利队在与媒体接触中,回避了这个问题,只是在巴乔如何踢进点球上做文章,大讲上一次在美国与巴西决赛时怎么踢失,这次怎么踢进。</p> <p>国务委员兼国务院秘书长王忠禹今天在中南海会见了以日本经济同友会中国委员会委员长荒木浩为团长的日本经济同友会第三次访华团主要成员。</p> <form action = "http://192.168.136.205:5000/index1" method = "POST"> <p>请输入一句话<input type = "text" name = "Name" /></p> <p><input type = "submit" value = "提交" /></p> </form> </body> </html>