You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将排序算法数据集转换为Decoder-only Transformer训练的输入输出格式?

针对Decoder-only Transformer的排序算法数据集转换方案

Decoder-only模型(比如GPT系列)靠自回归方式生成代码,核心是把输入提示和目标代码拼接成单一序列,让模型学习从提示部分生成后续的代码。结合你手头的数据集字段,给你三种实用的输入输出构建方式:

1. 基于文档字符串(Docstring)的生成任务

这是最典型的代码生成场景:从功能描述生成完整排序函数。

  • 输入提示模板:请根据以下描述生成Python排序函数:{docstring}
  • 目标输出:包含函数名、文档字符串和实现代码的完整函数
  • 拼接后的训练序列示例:
请根据以下描述生成Python排序函数:对列表进行冒泡排序,重复走访待排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来<|endofprompt|>def bubble_sort(arr):
    """对列表进行冒泡排序,重复走访待排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来"""
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break

2. 基于函数名的生成任务

适合训练模型从函数名推断功能并实现代码:

  • 输入提示模板:请实现名为{function_name}的Python排序函数
  • 目标输出:包含文档字符串和实现代码的完整函数
  • 拼接后的训练序列示例:
请实现名为quick_sort的Python排序函数<|endofprompt|>def quick_sort(arr):
    """对列表进行快速排序,采用分治思想,选取基准元素划分左右子序列"""
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr)//2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)

3. 混合函数名+文档字符串的生成任务

结合两种信息,让模型生成的代码更精准:

  • 输入提示模板:请实现名为{function_name}的Python排序函数,功能描述:{docstring}
  • 目标输出:完整的排序函数代码
  • 这种方式能同时约束函数命名和功能,适合需要严格匹配需求的场景。

关键处理细节

  • 分隔符选择:用模型未见过的特殊符号(比如<|endofprompt|>)区分输入提示和目标代码,避免模型混淆自然语言和代码边界
  • 格式统一:所有样本的提示模板要保持一致,不要随机修改措辞,确保模型学习到稳定的输入输出映射
  • 序列截断:根据你的模型最大上下文长度,截断过长的样本(排序算法代码一般较短,这个问题不大)
  • 训练标签处理:Decoder-only模型不需要单独的标签列,直接把拼接后的完整序列作为训练数据,训练时通过mask忽略输入提示部分的token损失,只计算目标代码部分的预测损失

单样本处理代码示例

def convert_to_train_sample(sample):
    # 混合模板示例
    prompt = f"请实现名为{sample['function_name']}的Python排序函数,功能描述:{sample['docstring']}"
    separator = "<|endofprompt|>"
    # 构造完整的函数代码
    full_function = (
        f"def {sample['function_name']}(arr):\n"
        f"    {sample['docstring'].replace('\n', '\n    ')}\n"
        f"    {sample['code'].replace('\n', '\n    ')}"
    )
    # 拼接成训练序列
    return f"{prompt}{separator}{full_function}"

内容的提问来源于stack exchange,提问作者Manoj Nayak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:42:43