【大模型解惑】针对聊天、问答、代码生成等场景,如何清理、标注和格式化训练数据(JSONL、Prompt–Completion 对)?

以下是为聊天、问答、代码生成场景设计的数据处理全流程指南,包含数据清洗、标注、格式化的技术方案及可复现代码案例。内容综合了工业界实践与前沿研究成果,覆盖主流框架需求。


目录

  1. 数据处理通用原则
  2. 聊天场景数据构建
    • 2.1 数据清洗策略
    • 2.2 多轮对话标注模板
    • 2.3 JSONL格式化案例
  3. 问答场景数据构建
    • 3.1 知识库对齐清洗
    • 3.2 指令-输出对标注
    • 3.3 链式思维(CoT)增强
  4. 代码生成场景数据构建
    • 4.1 代码质量过滤规则
    • 4.2 代码注释对齐方法
    • 4.3 安全合规性校验
  5. 全流程代码工具链
  6. 质量控制与评估指标

1. 数据处理通用原则

  • 数据去重:使用MinHash算法对相似度>95%的文本去重
  • 噪声过滤:正则表达式过滤乱码(如[^\w\s.,?!])、删除低信息密度文本(如字符数<10)
  • 标准化处理:统一大小写、全角转半角、修复常见拼写错误
  • 敏感信息脱敏:使用re.sub(r"\b\d{11}\b", "[PHONE]")替换手机号等隐私信息

2. 聊天场景数据构建

2.1 数据清洗策略
def clean_chat_data(text):
    # 删除机器人自动回复
    text = re.sub(r"【系统提示】.*", "", text)  
    # 合并连续短句
    text = re.sub(r"(\S{5,}?)\s+(\S+)", r"\1\2", text)  
    # 分离多用户对话
    return [line.strip() for line in text.split("\n") if len(line)>3]
2.2 多轮对话标注模板
# 基于Vicuna格式
{
  "conversations": [
    {"role": "user", "content": "如何用Python读取CSV文件?"},
    {"role": "assistant", "content": "使用pandas库的read_csv函数..."},
    {"role": "user", "content": "需要安装什么依赖?"},
    {"role": "assistant", "content": "需安装pandas: pip install pandas"}
  ]
}
2.3 JSONL格式化案例
import jsonlines

with jsonlines.open('chat_data.jsonl', mode='w') as writer:
    for dialog in cleaned_dialogs:
        writer.write({
            "prompt": dialog[:-1],  # 历史对话
            "completion": dialog[-1]  # 最后一句回复
        })

3. 问答场景数据构建

3.1 知识库对齐清洗
# 基于BM25算法筛选相关段落
from rank_bm25 import BM25Okapi

corpus = ["段落1文本", "段落2文本", ...]  
bm25 = BM25Okapi([doc.split() for doc in corpus])
query = "问题文本"
top_docs = bm25.get_top_n(query.split(), corpus, n=3)
3.2 指令-输出对标注
# Alpaca格式增强版
{
  "instruction": "解释量子纠缠现象",
  "input": "读者群体为高中生", 
  "output": "量子纠缠是...", 
  "knowledge_source": "《量子力学导论》第5章"
}
3.3 链式思维(CoT)增强
# 添加推理步骤
def add_cot(example):
    example["output"] = f"""思考过程:
1. 确定问题核心:{example['instruction']}
2. 检索相关知识:{example['knowledge_source']}
3. 分步骤解释:{example['output']}
"""
    return example

4. 代码生成场景数据构建

4.1 代码质量过滤规则
# 使用AST解析检测语法错误
import ast

def validate_code(code):
    try:
        ast.parse(code)
        return True
    except SyntaxError:
        return False
4.2 代码注释对齐方法
# 生成Prompt-Completion对
{
  "prompt": "# 写一个Python函数计算斐波那契数列\n# 要求:时间复杂度O(n)", 
  "completion": "def fib(n):\n    a, b = 0, 1\n    for _ in range(n):\n        a, b = b, a+b\n    return a"
}
4.3 安全合规性校验
# 检测危险函数调用
blacklist = ["os.system", "subprocess.Popen", "eval"]
def check_safety(code):
    return not any(fn in code for fn in blacklist)

5. 全流程代码工具链

# 综合处理管道
from datasets import Dataset

def process_pipeline():
    dataset = Dataset.from_json("raw_data.jsonl")
    dataset = dataset.map(clean_chat_data) \
                   .filter(lambda x: len(x["text"]) > 20) \
                   .map(add_cot)
    dataset.to_json("processed_data.jsonl")

6. 质量控制与评估指标

指标计算方法达标阈值
语义一致性BERTScore对比原始与生成文本>0.85
事实准确性知识库检索命中率>90%
代码可执行率单元测试通过率100%
对话连贯性人工评估打分(1-5分)≥4.0

最佳实践建议

  1. 使用DVC进行数据版本管理,记录每次处理的哈希值
  2. 对专业领域数据(如医疗、法律)引入领域专家审核环节
  3. 采用主动学习策略,优先标注模型困惑度高的样本
  4. 为代码生成数据添加类型注释和安全审计标签

完整代码示例及数据集模板可参考:GitHub示例仓库,结合具体业务需求调整参数阈值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值