大模型预测结果导入到Doccano,人工修正预测不准的数据

背景

使用大语言模型做实体识别的实验时,发现大模型关于实体的边界预测一直不准。
主要原因在于当时找了很多同学标注数据,由于不同组同学关于实体的边界没有统一,故导致数据集中实体边界也没统一。
(找太多人标,会有这样的缺点)

如果重新标注数据,那么之前的标的数据就浪费了,而且又得折腾人来标。
虽然之前标的数据不好,但训练出的大模型,还是学到了一些东西。于是便打算让训练后的大模型预测,将大模型预测的结果导入到Doccano,再人工修正大模型预测不准的实体,这样可以减轻人工标注压力还能轻易获得更多的数据集。

简介

  • 展示大模型预测输出的数据格式;
  • 展示Doccano 命名实体识别导入的数据集格式;
  • 提供将大模型输出数据转为Doccano 导入数据集格式代码;

大模型预测结果的样例如下:

{
	"instruction": "你是专门进行实体抽取的专家。请从text中抽取出符合schema定义的实体,不存在的实体类型返回空列表。请按照JSON字符串的格式回答。schema:['数据', '项目', '任务'], text:三大攻坚战取得关键进展", 
	"input": "", 
	"output": "{\"数据\": [], \"项目\": [\"三大攻坚战\"], \"任务\": []}", 
	"predict": {"数据": [], "项目": ["三大攻坚战取得关键进展"], "任务": []}
}

Doccano 导入的数据集样例如下:

{"id":17168,"text":"三大攻坚战取得关键进展","label":[[0,5,"任务"]],"Comments":[]}

大模型输出数据转为Doccano 代码

找出模型预测的实体,在text句子的开始下标和结束下标:

def find_substring_indices(parent_string, substring):  
    start_index = parent_string.find(substring)  
    if start_index != -1:
        end_index = start_index + len(substring)
        return start_index, end_index  
    else:  
        return -1, -1
import re

def tran_llm_doccano(input_file, output_file, schema):
    doccano_format = {
        "text": None,
        "label": [],
        "Comments": []
    }

    def _find_text(text):
        pattern = r'text:(.*?)",'  
        match = re.search(pattern, text, re.MULTILINE)
        text_content = match.group(1)
        return text_content

    with open(input_file, 'r') as f:
        with open(output_file, 'w') as w:
            for line in f:
                text = _find_text(line)
                doccano_format["text"] = text
                data = json.loads(line)
                predict = data["predict"]
                tmp = []
                for ent_cls in schema:
                    for predict_ent_name in predict[ent_cls]:
                        start_idx, end_idx = find_substring_indices(text, predict_ent_name)
                        if start_idx == -1 or end_idx == -1:
                            continue
                        tmp.append([start_idx, end_idx, ent_cls])
                doccano_format["label"] = tmp
            w.write(json.dumps(doccano_format, ensure_ascii=False) + '\n')

schema = ['数据', '项目', '任务']
tran_llm_doccano('data.jsonl', "doccano_import.jsonl", schema)

tran_llm_doccano(input_file, output_file, schema):

  • input_file 大模型预测的结果文件;
  • output_file 到入到 doccano的文件;
  • schema 实体类别;

将 大模型的预测结果转换后的Doccano格式的 output_file 文件,导入到Doccano的结果如下图所示:
在这里插入图片描述

开源

完整的代码点击查看: https://github.com/JieShenAI/csdn/blob/main/24/04/tran_llm_doccano/tran_llm_doccano.ipynb

相关文章推荐

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jieshenai

为了遇见更好的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值