ViT: Google
Swin-Transformer: Microsoft
V-MOE: Google
SAM: Meta
盘古CV: 华为
文心UFO: 百度
…
预训练大模型
# 导入必要的库和模块
import argparse
import json
import pathlib
# 定义 Stanford Alpaca 使用的 prompt 格式
PROMPT_DICT = {
"prompt_input": "..." # 包含 instruction 和 input 的 prompt 格式,
"prompt_no_input": "..." # 只包含 instruction 的 prompt 格式
}
# 主函数
def main(args_param):
data_path = pathlib.Path(args_param.data_path)
with data_path.open() as f:
data = json.load(f)
# 构造新的对话格式数据
sources = [prompt_input.format_map(example) if example.get("input", "") != "" else prompt_no_input.format_map(example) for example in data]
targets = [example["output"] for example in data]
new_data = []
cnt = 1
for s, t in zip(sources, targets):
new_data.append(
{
"id": str(cnt),
"conversations": [
{"from": "human", "value": s},
{"from": "gpt", "value": t},
],
}
)
cnt += 1
# 将新的对话格式数据写入输出文件
json.dump(new_data, open(args_param.output_path, "w"), indent=2)
if __name__ == "__main__":
# 解析命令行参数
parser = argparse.ArgumentParser()
parser.add_argument("--data_path", type=str, default="alpaca-data.json")
parser.add_argument("--output_path", type=str, default="alpaca-data-conversation.json")
args = parser.parse_args()
# 执行主函数
main(args)
流程:
-
数据集准备: 首先需要收集大规模的文本图片数据作为预训练的训练集,数据量越大效果越好。大模型常用的数据集包括维基百科、书籍文集、网络新闻等。
-
数据预处理: 对采集的文本数据进行预处理,例如tokenize、建立词表等。
-
模型构建: 构建模型的网络结构, transformers类模型最为常用。选择合适的编码器,如BERT的Encoder。
-
预训练任务设计: 选择合适的预训练任务,让模型在大数据上进行自监督学习。常见的有 Masked Language Model、Next Sentence Prediction 等。
-
模型预训练: 在预训练数据上针对设定的预训练任务训练模型,取得最优的参数。一般在大规模集群中训练,模型大小会非常大。
-
Fine-tuning: 在下游任务数据集上,Freeze部分预训练参数,仅 Fine-tune 部分任务相关参数,从而快速让模型适应新任务。
-
模型部署: 选择合适的方式部署训练好的模型,进行文本生成、文本分类等生产应用。
通过预训练,模型可以学习到通用的语言表示,然后迁移至下游任务中,以提高效果、减少人工标注需求。这就是预训练语言模型的全流程。