当前位置: 首页 > news >正文

每日读源码---Day1_processdata

def processdata(instance, noise_rate, passage_num, filename, correct_rate = 0):#instance: 一个字典,包含查询(query)、答案(answer)、正例(positive)、负例(negative)等信息。#从 instance 中提取 query 和 answer。query = instance['query']ans = instance['answer']#使用 math.ceil 计算负例数量 neg_num。并计算正例数量 pos_num。neg_num = math.ceil(passage_num * noise_rate)pos_num = passage_num - neg_num#根据文件名处理数据if '_int' in filename:for i in instance['positive']:random.shuffle(i)print(len(instance['positive']))docs = [i[0] for i in instance['positive']]if len(docs) < pos_num:maxnum = max([len(i) for i in instance['positive']])for i in range(1,maxnum):for j in instance['positive']:if len(j) > i:docs.append(j[i])if len(docs) == pos_num:breakif len(docs) == pos_num:breakneg_num = passage_num - len(docs)if neg_num > 0:negative = instance['negative'][:neg_num]docs += negativeelif '_fact' in filename:correct_num = math.ceil(passage_num * correct_rate)pos_num = passage_num - neg_num - correct_numindexs = list(range(len(instance['positive'])))selected = random.sample(indexs,min(len(indexs),pos_num))docs = [instance['positive_wrong'][i] for i in selected]remain = [i for i in indexs if i not in selected]if correct_num > 0 and len(remain) > 0:docs += [instance['positive'][i] for i in random.sample(remain,min(len(remain),correct_num))]if neg_num > 0:docs += instance['negative'][:neg_num]else:if noise_rate == 1:neg_num = passage_numpos_num = 0else:if neg_num > len(instance['negative']):neg_num = len(instance['negative'])pos_num = passage_num - neg_numelif pos_num > len(instance['positive']):pos_num = len(instance['positive'])neg_num = passage_num - pos_numpositive = instance['positive'][:pos_num]negative = instance['negative'][:neg_num]docs = positive + negative#使用 random.shuffle 打乱 docs 列表的顺序。random.shuffle(docs)#返回处理后的 query、ans 和 docs。return query, ans, docs
  • instance: 一个字典,包含查询(query)、答案(answer)、正例(positive)、负例(negative)等信息。
  • noise_rate: 噪声率,用于确定负例文档的数量。
  • passage_num: 每个查询应该返回的文档数量,它决定了每个查询处理后应该包含多少文档。这个数量包括正例(包含答案的文档)和负例(不包含答案的文档)。通过 passage_num,可以控制正例和负例在最终数据集中的比例。例如,如果 passage_num 较大,而正例文档数量有限,可能需要添加更多的负例文档来达到这个数量,反之亦然。
  • filename: 文件名,用于确定处理数据的方式。
  • correct_rate: 正确率,用于确定正确文档的数量(默认值为0)。

根据文件名处理数据:

  • 如果文件名包含 _int
    • 打乱正例文档的顺序。
    • 从正例中选择 pos_num 个文档。
    • 如果正例数量不足,从正例中继续选择,直到达到 pos_num
    • 计算剩余需要的负例数量 neg_num
    • 如果需要负例,从 instance['negative'] 中选择 neg_num 个文档。
    • 将正例和负例合并到 docs 中。
  • 如果文件名包含 _fact
    • 计算正确文档的数量 correct_num
    • 从正例中随机选择 pos_num 个文档。
    • 如果还有剩余的正确文档,从剩余的正例中随机选择 correct_num 个文档。
    • 如果需要负例,从 instance['negative'] 中选择 neg_num 个文档。
    • 将所有文档合并到 docs 中。
  • 其他情况:
    • 根据 noise_rate 调整正例和负例的数量。
    • instance['positive']instance['negative'] 中选择相应数量的文档。
    • 将正例和负例合并到 docs 中。

processdata 函数通过结合原始数据和指定的参数,生成了一组新的数据,这组数据模拟了真实世界中的查询场景,包括噪声和正确答案的混合。这种数据生成方法有助于训练和评估模型在处理复杂、噪声数据时的性能,从而提高模型的鲁棒性和实用性。


http://www.mrgr.cn/news/19434.html

相关文章:

  • C++11 --- function 包装器以及 bind 适配器
  • 如何打造抗冲击的超级电容器?用啥材料好?
  • 李宏毅机器学习笔记——反向传播算法
  • 如何防止邮件内容外发时泄露
  • 源代码为啥要进行加密?怎么给源代码进行加密?
  • 玻璃盖板视觉丝印机应用
  • kali——wpscan的使用
  • 增强RAG:选择最佳的嵌入和重排模型
  • fastadmin后台报expandOnHover错误
  • gcc编译与Linux下的库
  • 科学计算工具包Scipy介绍及功能学习
  • 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界!
  • 在Python中,文本查找和替换的常用操作
  • 【系统方案】网络空间安全态势感知与大数据分析平台建设方案(Doc完整版)
  • 1、正则表达式
  • 最完整的招投标流程步骤以及投标全流程和标书逐项检查表
  • Docker 部署 Mysql (图文并茂超详细)
  • 达梦创建新连接
  • GPT-SoVITS-WebUI 初体验
  • LLM代码实现-Qwen(Function Calling)