标注数据
安装doccano
-
创建一个虚拟环境
conda create -n doccano python=3.8
-
进入虚拟环境
conda activate doccano
-
启动doccano
初始化doccano(以下两行命令仅在安装成功之后第一次执行,后续就不需要执行了)
# Initialize database. doccano init # Create a super user. doccano createuser --username admin --password pass
启动doccano服务
# Start a web server. doccano webserver --port 8000
在另一个终端执行如下命令
# Start the task queue to handle file upload/download. doccano task
-
浏览器访问http://127.0.0.1:8000/地址,打开doccano可视化界面,开始进行数据标注工作。
标注数据
每个标签的数量统计如下
保存数据
将标注好的数据转化为json
格式,保存到本地。
转化数据
使用model_zoo/uie/doccano.py
脚本将标注好的数据转换为模型要求的格式。
训练模型
将标注好的数据传入模型进行训练:model_zoo/uie/finetune.py
模型的输入格式
[CLS]实体类型[SEP]原始文本
模型的损失函数
由于每一个 token 都是一个二分类任务,因此选用 BCE Loss 作为损失函数。分别计算起始/结束向量的 BCE Loss 再取平均值即可,如下所示:
criterion = torch.nn.BCELoss()
...
start_prob, end_prob = model(input_ids=batch['input_ids'].to(args.device),
token_type_ids=batch['token_type_ids'].to(args.device),
attention_mask=batch['attention_mask'].to(args.device))
start_ids = batch['start_ids'].to(torch.float32).to(args.device) # (batch, seq_len)
end_ids = batch['end_ids'].to(torch.float32).to(args.device) # (batch, seq_len)
# start_prob 预测值 start_ids 真实值
loss_start = criterion(start_prob, start_ids 真实值) # 起止向量loss -> (1,)
# end_prob 预测值 end_ids 真实值
loss_end = criterion(end_prob, end_ids) # 结束向量loss -> (1,)
loss = (loss_start + loss_end) / 2.0 # 求平均 -> (1,)
loss.backward()
...
标签:loss,UIE,doccano,ids,batch,start,开发,文档,end
From: https://www.cnblogs.com/kyle-blog/p/17059687.html