以下是为聊天、问答、代码生成场景设计的数据处理全流程指南,包含数据清洗、标注、格式化的技术方案及可复现代码案例。内容综合了工业界实践与前沿研究成果,覆盖主流框架需求。
目录
- 数据处理通用原则
- 聊天场景数据构建
- 2.1 数据清洗策略
- 2.2 多轮对话标注模板
- 2.3 JSONL格式化案例
- 问答场景数据构建
- 3.1 知识库对齐清洗
- 3.2 指令-输出对标注
- 3.3 链式思维(CoT)增强
- 代码生成场景数据构建
- 4.1 代码质量过滤规则
- 4.2 代码注释对齐方法
- 4.3 安全合规性校验
- 全流程代码工具链
- 质量控制与评估指标
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 |
最佳实践建议:
- 使用DVC进行数据版本管理,记录每次处理的哈希值
- 对专业领域数据(如医疗、法律)引入领域专家审核环节
- 采用主动学习策略,优先标注模型困惑度高的样本
- 为代码生成数据添加类型注释和安全审计标签
完整代码示例及数据集模板可参考:GitHub示例仓库,结合具体业务需求调整参数阈值。