模型语料
语料应用的全流程
timeline
title 大模型训练中语料应用的全流程
section 数据准备阶段
语料收集与清洗
: 原始文本 → 清洗文本
分词器训练
: 文本子集 → 分词规则
语料预处理
: 清洗文本 → Token序列
section 预训练阶段
无监督学习
: Token序列 → 基础模型权重
下一个词预测
: 万亿级token训练
section 监督微调阶段
指令-回答对
: 高质量对话数据 → 指令跟随模型
任务特定数据
: 对齐基础能力
section 对齐阶段
人类反馈学习
: 偏好排序数据 → 奖励模型
强化学习
: 优化策略 → 对齐模型
section 部署阶段
少样本学习
: 示例prompts → 上下文学习
持续学习
: 新数据 → 模型更新
分词器构建
分词器构建流程概要
graph TD
数据准备--> 训练
训练-->优化
优化--> 部署与验证
subgraph 数据准备
A1[语料收集]
A2[数据清洗]
A3[配置设定]
end
subgraph 训练
B1[算法选择]
B2[参数训练]
B3[规则生成]
end
subgraph 优化
C1[压缩优化]
C2[特殊标记添加]
C3[格式转换]
end
subgraph 部署与验证
D1[质量评估]
D2[集成测试]
D3[版本管理]
end
分词器构建关键环节
准备阶段(数据与配置准备)
核心任务
corpus_source ={
"网页数据":["Common Crawl","Wikipedia"],
"书籍文本":["Project Futenberg","arXiv论文"],
"对话数据":["客服记录","论坛讨论"],
"代码数据":["GitHup 公开仓库"],
"多语言数据":["OSCAR","mC4"]
}
def sample_corpus(full_corpus,target_size="50GB"):
samples = {
"英语": 40%,
"中文": 15%,
"代码":10%,
"其他语言":35%,
"学术文本": 5%,
"对话文本":5%
}
return balanced_sample(full_corpus,samples)
清洗流程 =[
"去重(模糊去重+精度去重)",
"语言识别与分类",
"质量过滤",
"毒性内容过滤",
"标准化(Unicode,大小写,空格)"
]
训练阶段(核心算法与执行)
核心任务
BPE算法训练详细过程
class BPETrainer:
def _init_(self,corpus,vocab_size=32000):
self.corpus=corpus
self.target_size=vocab_size
self.vocab=set() // 最终的词汇表
self.merges=[] // 合并规则记录
def train(self):
self.initialize_base_vocab()
iterator=0
while len (self.vocb)<self.target_size:
iterator+=1
pair_frequences=self.count_pairs(self.corpus)
best_pair=self.select_best_pair(pair_frequences)
if not best_pair or best_pir.frequency<self.min_frequency:
break
new_token= best_pair.left+best_pair.right
self.vocab.add(new_token)
self.merges.append(best_pair,new_token)
self.corpus =self.apply_merge(self.corpus,best_pair,new_token)
if(iteration) %1000==0:
self.save_checkpoint(iteration)
return self.vocab,self.merge
优化阶段
任务核心
def optimize_vocabulary(raw_vocab,raw_merges):
optimized_merges=[]
for merge in raw_merges:
if merge.frequency>MIN_FREQ_THRSHOLD:
optimized_merges_append(merge)
must_keep=[
"ChatGPT","Transformer","深度学习",
"COVID-19","Blockchain",
"😊","👌"
]
lang_balance ={
"en",45%
"zh","15%",
"es":80%,
"code":12%,
"other":20%
}
ensure_language_balance(optimized_vocab,lang_balance)
add_special_tokens(optimized_vocab,["<|endoftext|>","<|padding|>"]
return optimized_vocab,optimized_merges