UIE开发文档

标注数据

安装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()
...
posted @ 2023-01-18 14:03  凯尔哥  阅读(131)  评论(0编辑  收藏  举报