just recode for myself 统计大模型SFT的结果与version2中text的结果bad case

问题描述:

利用Qwen大模型进行SFT (lora)。将生成的结果与version2版本下的中文test.txt进行bad case分析

代码实现:

from tqdm import tqdm, trange
import os
import re
from typing import List
import json
from pdb import set_trace as stoppipeline_data_path = "/public/home/hongy/qtxu/Qwen-main/data/version2/Ele-COQE/test.txt"
llm_generated_path= "/public/home/hongy/qtxu/Qwen-main/results/Ele_lora/pred_20231230_model2.jsonl" # 大模型的生成结果保存路径# dic_en = { -1: 'worse', 0: 'equal', 1: 'better', 2: 'different'}
dic_zh = { -1: '更差', 0: '等同', 1: '更好', 2: '不同'}def str_to_span(input_str):#[3&高 4&端 5&机]--> 高端机if len(input_str) == 0:span_str = ''indexs_str = ''else:if ' , ' in input_str:  # '21&没 22&有 , 25&细 26&致' --> '21&没 22&有 25&细 26&致'input_str = input_str.replace(' , ', ' ')indexs, span = zip(*[i.split('&') for i in input_str.split()])indexs_str = ':'.join(indexs)span_str = ''.join(span)return indexs_str, span_strdef process_line(text_line, label_line, kind, i):text = text_line.split('\t')[0].strip() # text_line:当前行, text:sentencehave_triples = int(text_line.split('\t')[1]) # obtain the label is comparative (1) or no-comparative (0)re_result = re.findall(r'\[\[(.*?)\];\[(.*?)\];\[(.*?)\];\[(.*?)\];\[(.*?)\]\]', label_line)raw_labels: List = [[x for x in y] for y in re_result] #一个样本label 存放在一个list中 if have_triples == 1:test_sent = textfinal_quintuples = ''number = 0for label in raw_labels: # 比较句number += 1sub, obj, asp, op, polarity = label[0], label[1], label[2], label[3], label[4]sub_index, sub_span =  str_to_span(sub)obj_index, obj_span =  str_to_span(obj)asp_index, asp_span =  str_to_span(asp)op_index, op_span =  str_to_span(op)polarity = dic_zh[int(polarity)]quintuple_span= "("+sub_span+","+obj_span +","+asp_span+","+op_span+","+polarity+")"if number >= 2:final_quintuples = quintuple_span + ';' + final_quintupleselse:final_quintuples = quintuple_spanreturn test_sent, final_quintuples    def load_data(path, kind):raw_data = []# with open(os.path.join(args.data_path, f'{mode}_char.txt'), 'r') as f:with open(path, 'r') as f:for line in f:raw_data.append(line)all_test_sents = []all_test_labels = []line_id, i = 0, 0text_line, label_line = '', ''for line_id in trange(len(raw_data), desc='processing data for mode'):cur_line = raw_data[line_id]if len(cur_line.split('\t')) != 2:label_line += '\n' + cur_lineelse:if text_line != '' and label_line != '\n[[];[];[];[];[]]\n':test_sent, test_label = process_line(text_line, label_line, kind, i)all_test_sents.append(test_sent)all_test_labels.append(test_label)i += 1text_line = cur_linelabel_line = ''if label_line != '\n[[];[];[];[];[]]\n':test_sent, test_label = process_line(text_line, label_line, kind, i)all_test_sents.append(test_sent)all_test_labels.append(test_label) return all_test_sents,all_test_labelsdef obtain_llms_predicted_labels(path):with open(llm_generated_path, 'r') as fr:llms_predicted = []for line in fr:cur_line = json.loads(line)cur_sent = cur_line['query'].split('\n\n')[-1][7:-57].strip()compar = cur_line['type'] # 是否是比较句if compar == 1:# fw.write(cur_sent + "\n")result = cur_line['output'].strip().split('\n')final_quintuple= ''for i in range(0, len(result), 2):cur_quintuple = result[i][7:].strip() # 有几个特殊的,不能以逗号分隔cur_quintuple_list = cur_quintuple[1:-1].split(',')sub, obj, asp, op, polarity = cur_quintuple_list[0].strip(), cur_quintuple_list[1].strip(), cur_quintuple_list[2].strip(), cur_quintuple_list[3].strip(), cur_quintuple_list[-1].strip()cur_quintuple = '('+sub +','+obj+','+ asp + ','+ op+','+polarity+')'if i > 1:final_quintuple=  cur_quintuple + ';' + final_quintuple else:final_quintuple= cur_quintuplellms_predicted.append(final_quintuple)  return  llms_predicteddef simple_identify_two_list(gold_label, predicted_label):if gold_label == predicted_label:return Trueelse:return Falsedef bad_case(gold_sentences, gold_labels, predicted_labels, bad_case_path):assert len(gold_labels) == len(gold_sentences) == len(predicted_labels), "gold_labels, gold_sentences, predicted_labels not equal to each other!!!"if not os.path.exists(bad_case_path):with open(bad_case_path, 'x') as file:print(f"文件{bad_case_path} 创建成功!")# stop()with open(bad_case_path, 'w') as fw:bad_case_num = 0for sent, gold_label, predicted_label in zip(gold_sentences, gold_labels, predicted_labels):# stop()if ", " in gold_label:gold_label = gold_label.replace(", ", ",")if ", " in predicted_label:predicted_label = predicted_label.replace(", ", ",")# stop()equal = simple_identify_two_list(gold_label, predicted_label)if not equal:bad_case_num += 1fw.write(sent + '\n')fw.write("gold:"+ gold_label)fw.write("\n")fw.write("predicted:"+predicted_label +"\n")# fw.write("\n")fw.write("bad case num is " + str(bad_case_num))kind = 'en' 
all_test_sents, all_test_labels = load_data(pipeline_data_path, kind) # 从version2的test.txt中获取比较句的句子,labels
llms_predicted = obtain_llms_predicted_labels(llm_generated_path)bad_case_path = "/public/home/hongy/qtxu/Qwen-main/bad_case/ele/bad_case.txt"
bad_case(all_test_sents, all_test_labels, llms_predicted, bad_case_path)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试新字符设备驱动代码

一. 简介 上一篇文章编写了新字符设备驱动框架的代码,并编写了 LED灯IO初始化工作,也编写了Led的开与关函数。文章地址如下: 向新字符设备驱动代码框架中添加Led功能函数-CSDN博客 本文对所完成的新字符设备驱动代码进行测试。通过测试程…

12、高可用性

什么是高可用性 高可用性不是绝对的,只有相对更高的可用性。百分之百的可用性是不可能达到的。可用性的定义不仅仅包括服务正在运行的时间段,还包括应用是否能以足够好的性能处理请求。 导致宕机的原因 在运行环境的问题中,最普通的问题是…

7-1 sdut-Collection-sort--C~K的班级(II)--笔记篇

题目 经过不懈的努力,CXK终于当上了班主任。 现在他要统计班里学生的名单,但是CXK在教务系统中导出班级名单时出了问题,发现会有同学的信息重复,现在他想把重复的同学信息删掉,只保留一个, 但是工作量太大…

LeetCode 热题 100——283. 移动零

283. 移动零 提示 简单 2.3K 相关企业 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,…

使用anaconda创建notebook工程

1.由于每个工程使用的环境都可能不一样,因此一个好的习惯就是不同的工程都创建属于自己的环境,在anaconda中默认的环境是base: //括号中名字,代表当前的环境 (base)dragonmachine: $ conda create --nameexample2.激活环境 // 环…

伺服电机:电子齿轮比

电子齿轮比的概念 位置控制模式下,输入的位置指令是对负载位移进行设定,而电机的位置指令是编码器单位,是对电机的位移进行进行设定,电机位置指令与输入位置指令的比例就是电子尺齿轮比。 输入的位置指令,所对应的位…

JVM内存区域与常见问题

内存结构 这里先以JDK1.8 hotspot垃圾收集器为例,讲讲每块区域存储的数据以及可能会抛的异常。 堆 存放对象实例,会出现内存溢出或内存泄露等情况。 栈 一次方法调用会产生一个栈帧,如果出现递归死循环调用栈空间满了,会出现…

【全网首发】洛谷贪心题解集合

贪心 1.P2240 【深基12.例1】部分背包问题 【深基12.例1】部分背包问题 - 洛谷 思路 万不要被题目给误导了,这道题是贪心。 所有金币都可以分开,也就是说只要按照性价比最高的取一定得到的价值最大。 性价比就是这堆金币的价值除以重量。 只需要把…

85双指针解三数之和

问题描述:给你一个包含n个整数的数组nums,判断nums中是否勋在三个元素a,b,c使得abc0,请你找出所有和为0且不重复的三元组。 求解思路:如果使用for循环的方式,n3的时间复杂度,可以采用双指针的方式,先将整个…

企业级大数据架构设计

企业级大数据架构设计 企业级大数据架构设计 又名: 学习大数据概念, 写框架(第1天) 数据架构与设计:概述与设计考虑 引言数据架构概述设计考虑因素构建数据架构的步骤 大数据的核心架构内容:构建高效和…

14.用户管理

目录 1、权限表 1、user表 1.用户列 2.权限列 3.安全列 4.资源控制列 2、db表和host 表 1.用户列 2.权限列 3. tables_priv 表和 columns _priv 表 4.procs_priv 表 2、账户管理 1. 登录和退出MySQL服务器 2、创建普通用户: 1.使用CREATE USER语创建…

前端crypto-js 库: MD5

文章目录 什么是crypto-js安装依赖MD5 什么是crypto-js github地址: https://github.com/brix/crypto-js cryptojs文档: https://cryptojs.gitbook.io/docs/#encoders CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。 CryptoJS是一个JavaScript加密算法库&a…

免费的CISSP备考学习网站

CISSP(Certified Information Systems Security Professional)是一项高级的信息安全认证,官方认证机构是(ISC)。虽然(ISC) 提供了官方培训资料,但是很多学习资料都是商业性质的,需要付费购买。尽管如此,仍然…

基于Java SSM框架实现健康管理系统项目【项目源码】

基于java的SSM框架实现健康管理系统演示 JSP技术 JSP是一种跨平台的网页技术,最终实现网页的动态效果,与ASP技术类似,都是在HTML中混合一些程序的相关代码,运用语言引擎来执行代码,JSP能够实现与管理员的交互&#xf…

二分算法

目录 二分 数的三次方根 算法模板 二分 给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。 对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 00 开始计数)。 如果数组中不存在该元素,则返回 -1…

pycharm配置pyrcc5外部工具

pyrcc5这是 PyQt5 中用来将资源文件(.qrc)转换为 Python 文件的工具。类似地,如果你想在 PyCharm 中配置 pyrcc5 将 .qrc 文件转换为 .py 文件的外部工具,你可以遵循以下步骤: 打开 PyCharm 的设置: 选择 File > Se…

GO语言基础笔记(九):工程实践

单元测试(Unit Testing) 单元测试是指对软件中的最小可测试单元进行检查和验证。在Go语言中,可以使用内置的testing包来进行单元测试。进行单元测试时,您应该关注以下几个要点: 测试代码的独立性:确保每个…

P1163 银行贷款

P1163 银行贷款 P1163 银行贷款 题意 1.从银行贷款后,在一段时间内每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。 2.三个用空格隔开的正整数。第一个整数表示贷款的原值n,第二个整数表示每月支付的分期付款金…

解决idea文件properties中文乱码问题

解决idea文件properties中文乱码问题_idea properties文件中文乱码-CSDN博客

[react]脚手架create-react-app/vite与reac项目

[react]脚手架create-react-app/vite与reac项目 环境问题描述create-react-app 脚手架根据脚手架修改项目结构安装脚手架注入配置文件-config文件夹package.json文件变更删除 serviceWorker.js新增reportWebVitals.js文件更新index.js文件 脚手架creat-react-app 缺点 vite 脚手…