智慧城市-疫情流调系列2.1-Prompt-UIE信息抽取,解决抽取结果不准的问题

1、增加参数

        train_examples = _create_ext_examples(raw_examples[:p1],
                                                  -1,
                                                  args.prompt_prefix,
                                                  args.options,
                                                  args.separator,
                                                  args.is_shuffle,
                                                  is_train=False,
                                                  schema_lang=args.schema_lang)

在这里插入图片描述

2、运行参数配置

--doccano_file
./data_rl/all.jsonl
--task_type
ext
--save_dir
./data_rl_dev
--splits
0
1.0
0
--negative_ratio
-1
--is_shuffle
True

3、以dev的数据作为训练集训练,不以官方默认的数据集拆分,以免引入额外噪音

在这里插入图片描述单条样本为空的也标注出来,不交叉构造负样本,以免引入额外噪音
在这里插入图片描述

或者直接更改训练集制作函数在这里插入图片描述# 后处理,排除不准确数据

    def do_predict_history(self, texts):
        """
        pass
        """
        texts = texts.split('history')
        outputs = self.predictor.predict(texts)
        history_result = []
        for result in outputs:
            history_list = []
            result['时间'].sort(key=lambda x: x['start'])
            print(result)
            for index, res in enumerate(result['时间']):
                history_dict_sm = {}.fromkeys(self.history, '')
                for res_key in res:
                    if res_key == 'text':
                        history_dict_sm[self.history[0]] = res['text']
                    if res_key == 'relations':
                        for res_key_k in res['relations']:
                            if res_key_k == '接触者':
                                res['relations'][res_key_k].sort(key=lambda x: x['start'])
                                contact = []

                                if index < len(result['时间']) - 1:
                                    res_contact_res = \
                                        [i for i in res['relations'][res_key_k] if
                                         result['时间'][index + 1]['start'] > i['start'] > res['start']]
                                else:
                                    res_contact_res = \
                                        [i for i in res['relations'][res_key_k] if i['start'] > res['start']]

                                for res_contact in res_contact_res:
                                    contact_dic = {'姓名': res_contact['text'], '电话': '', '身份证': ''}
                                    if '接触者' in result:
                                        for res_contact_s in result['接触者']:
                                            if res_contact_s['text'] == res_contact['text']:
                                                if 'relations' in res_contact_s:
                                                    if '电话' in res_contact_s['relations']:
                                                        if 10 > res_contact_s['relations']['电话'][0]['start'] \
                                                                - res_contact['start'] > 0:
                                                            contact_dic['电话'] = \
                                                                res_contact_s['relations']['电话'][0]['text']

                                                    if '身份证' in res_contact_s['relations']:
                                                        if 30 > res_contact_s['relations']['身份证'][0]['start'] \
                                                                - res_contact['start'] > 0:
                                                            contact_dic['身份证'] = \
                                                                res_contact_s['relations']['身份证'][0]['text']
                                    contact.append(contact_dic)
                                history_dict_sm[self.history_map[res_key_k]] = contact if contact else ''
                            else:
                                res['relations'][res_key_k].sort(key=lambda x: x['start'])
                                if index < len(result['时间']) - 1:
                                    res_key_res = \
                                        [i['text'] for i in res['relations'][res_key_k] if
                                         result['时间'][index + 1]['start'] > i['start'] > res['start']]
                                else:
                                    res_key_res = \
                                        [i['text'] for i in res['relations'][res_key_k] if i['start'] > res['start']]
                                history_dict_sm[self.history_map[res_key_k]] = res_key_res[0] if res_key_res else ''
                history_list.append(history_dict_sm)
            history_result.extend(history_list)
        return {'流行病学史': history_result}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值