首页 > 其他分享 >创新实训 (九)CodeForces 数据和微调数据处理

创新实训 (九)CodeForces 数据和微调数据处理

时间:2024-06-23 23:55:47浏览次数:3  
标签:code CodeForces content range role 实训 chat 数据处理 rounds

Codeforces 数据获取

Codeforces的题目中存在一些数学公式,所以处理的时候需要比较小心的对其进行处理。

首先是题面数据,在 CF 当中标识一道题目的方式是 problemSet 与 problemId。其中 problemSet 是一个数字,而 problemId 是一个字母。

另外需要注意的是 CF 题面中存在许多数学公式,所以需要对这些公式进行处理,所以需要比较小心进行处理。将 三个美元符号$$$ 替换为 $。

urllib.request和BeautifulSoup4库对题面信息进行爬取,题面数据获取:

之后比较麻烦的是如何获取正确的代码,在 CF 当中,无法直接对应一个题目查看代码,只能根据比赛去进行查看。但是比赛的编号即为 problemSet。

对于一个比赛,其提交信息列表如下:

这里为了获取正确的代码,我们主要关注 提交编号、提交状态以及题目这三列,这样,我们可以使用爬虫获得这个页面,之后根据这三列的信息,来对数据进行获取。

加载比赛提交页面,从中获取 AC 代码的编号:

再去根据编号,获取 AC 的代码。

微调数据处理

训练数据为jsonl格式,每一行的数据格式如下,其中chat_rounds字段是必需的。

{
    "id":0,
    "data_name":"code-helper",
    "chat_rounds":[
        {
            "role": "system",
            "content": "你是一个智能代码助手,可以回复用户与代码相关的问题"
        },
        {
            "role": "human",
            "content": "写一个快速排序"
        },
        {
            "role": "bot",
            "content": "以下是一个快速排序算法xxxxxx"
        },
        {
            "role": "human",
            "content": "解释一下这段代码"
        },
        {
            "role": "bot",
            "content": "好的,这段代码xxx"
        }
    ]
}

所以需要将数据处理成为上面的形式,而爬虫获取的数据的形式为:question 与 solution 的词对形式,所以我们需要先将数据处理成上面的形式。

import os
import json

jsonl_file_path = os.path.join(os.getcwd(), 'output.jsonl')
tot = 0

prompt = { "role": "system","content": "You are an intelligent code assistant who can respond to users' questions related to code"}

prompt1 = {"role":"human","content":"1"}
prompt2 = {"role":"bot","content":"2"}

ls = []
with open(jsonl_file_path, 'r') as f:
  for line in f:
    da = json.loads(line)
    if len(da['solutions']) == 0:
      continue
    result = {
      "id": tot,
      "data_name": "code-helper",
      "chat_rounds": []
    }
    result["chat_rounds"].append(json.dumps(prompt))

    prompt1["content"] = da['question']
    prompt2["content"] = da['solutions'][0]

    result["chat_rounds"].append(json.dumps(prompt1))
    result["chat_rounds"].append(json.dumps(prompt2))

    ls.append(result)
    
with open("data.jsonl", "a+") as f:
  for data in ls:
    json.dump(data, f)
    f.write("\n")

整理后数据为:

{'id': 0,
 'data_name': 'code-helper',
 'chat_rounds': [{'role': 'system',
   'content': "You are an intelligent code assistant who can respond to users' questions related to code"},
  {'role': 'human',
   'content': 'Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.You may assume that each input would have exactly one solution, and you may not use the same element twice.You can return the answer in any order.'},
  {'role': 'bot',
   'content': "INF = 10000000000.0\nmax_n = 50\nmax_k = 2000\n\ndef main():\n\t(n, s, k) = map(int, input().split())\n\ts -= 1\n\tbuf = [''] * (max_n + 1)\n\tdp = [[0 for i in range(max_n + 1)] for j in range(max_k + 1)]\n\tr = list(map(int, input().split()))\n\tc = input()\n\tanswer = INF\n\tfor i in range(len(c)):\n\t\tbuf[i] = c[i]\n\tfor i in range(k, -1, -1):\n\t\tfor j in range(n):\n\t\t\tdp[i][j] = INF\n\tfor j in range(n):\n\t\tvalue = abs(j - s)\n\t\tif k - r[j] <= 0:\n\t\t\tanswer = min(answer, value)\n\t\telse:\n\t\t\tdp[k - r[j]][j] = value\n\tfor i in range(k, 0, -1):\n\t\tfor j in range(n):\n\t\t\tif dp[i][j] < INF:\n\t\t\t\tfor l in range(n):\n\t\t\t\t\tif buf[j] != buf[l] and r[j] < r[l]:\n\t\t\t\t\t\tvalue = dp[i][j] + abs(j - l)\n\t\t\t\t\t\tif i - r[l] <= 0:\n\t\t\t\t\t\t\tanswer = min(answer, value)\n\t\t\t\t\t\telse:\n\t\t\t\t\t\t\tdp[i - r[l]][l] = min(dp[i - r[l]][l], value)\n\tif answer == INF:\n\t\tprint(-1)\n\t\treturn\n\tprint(answer)\n\ndef __starting_point():\n\tmain()\n__starting_point()\n"}]}

标签:code,CodeForces,content,range,role,实训,chat,数据处理,rounds
From: https://www.cnblogs.com/asuldb/p/18235969

相关文章

  • 创新实训 (十)大模型微调
    1.数据部分CodeGeeX基于ChatGLM基座语言模型,所以需要关注ChatGLM的训练数据。训练数据为jsonl格式,每一行的数据格式如下,其中chat_rounds字段是必需的,可以根据实际需求添加或删除其他字段。在本项目当中,我们更加关注的是模型的单轮对话能力,所以只需要单轮对话数据。推理......
  • 创新实训(十)——代码美化部分:导航栏的active
    代码美化部分————导航栏的active对于导航栏来说,当选定在某个功能部分时,当前模块会有高亮显示。查看main-nav.php中有管导航栏的代码<divclass="collapsenavbar-collapse"id="navbarSupportedContent"> <ulclass="navnav-pillsmain-navmr-auto"> <liclass="......
  • 创新实训(八)——题目相关的逻辑处理解释
    题目部分题目是整个OJ系统的练习基础,无论是平时学生的练习还是比赛时的准备用题,题目系统在OJ中都是至关重要的。在controllers文件夹下,负责题目部分的代码文件分别为:problem_set.php,problem.php,problem_statistics.php,problem_data_manage.php,problem_statement_manage.php,p......
  • 创新实训(10)- 大模型服务进一步完善&邮件服务
    之前为应付中期检查简单接入了一个基础服务,并未对prompt词等做太深入的细分,为了实现更人性化的效果,我对大模型的服务进行了更进一步的完善首先是前端的效果:超级用户端:一般用户端:三个按钮分别对应AI整理格式,AI基础纠错,AI结合题目和代码详细检查错误。前两者的返回值是......
  • 创新实训(8)- 大模型服务进一步完善&邮件服务
    之前为应付中期检查简单接入了一个基础服务,并未对prompt词等做太深入的细分,为了实现更人性化的效果,我对大模型的服务进行了更进一步的完善首先是前端的效果:超级用户端:一般用户端:三个按钮分别对应AI整理格式,AI基础纠错,AI结合题目和代码详细检查错误。前两者的返回值是......
  • 探索PostgreSQL的JSON宝石:深入掌握JSON数据处理
    探索PostgreSQL的JSON宝石:深入掌握JSON数据处理引言在数据驱动的世界中,JSON已成为数据交换的事实标准。PostgreSQL,作为一款领先的关系型数据库管理系统,通过其强大的JSON支持,为开发者提供了丰富的工具来存储、查询和处理JSON数据。本文将深入探讨PostgreSQL中的JSON特性,引......
  • [本科项目实训] Anaconda 环境迁移
    问题描述由于本地显卡GeForceRTX4070Ti推理速度较慢,我们拟采用服务器GeForceRTX3090进行最后的项目展示,因而需要重新配置环境。由于Cuda版本和Conda版本基本一致,拟采用condapack指令进行快速迁移。解决方案第一步,在base环境下载condapack:pipinstallconda-pack第......
  • [本科项目实训] NVIDIA-GPU 显存异常与处理
    现象描述在运行程序时,发现torch.cuda.OutOfMemoryError:CUDAoutofmemory.错误,考虑模型大小远小于所用显卡显存,使用:$nvidia-smi#或每隔两秒自动刷新$watch-n2-dnvidia-smi进行查看,发现显存占用高且GPU利用低,结果如下:+------------------------------------------......
  • [本科项目实训] HuggingFace简介与Git lfs模型下载
    HuggingFace[1]HuggingFace是一个人工智能领域尤其是自然语言处理领域的开源平台,包含数据集、模型、文档、解决方案等内容的分享。由于LLM的参数量较大,往往将参数文件托管到该平台并使用transformers[3]库进行模型调用。模型下载由于项目要求模型本地运行,因而需要下载模......
  • [本科项目实训] Node.js、npm、pnpm配置及GLIBC_2.28缺失解决方案
    问题描述Node.js是一个基于Google的V8引擎的事件驱动I/O服务端JavaScript环境。以下主要解决在Ubuntu环境中的Node配置问题。解决方案使用node-v可以查看当前的node版本,如果未安装node和npm可以尝试以下指令:aptupdateaptupgradeapt-getinstallnodejsapt-get......