构建高质量古诗词数据集:从数据清洗到AI大模型微调全流程

发布时间:2026/8/30 20:50:20
构建高质量古诗词数据集:从数据清洗到AI大模型微调全流程 简介本资源是一套面向大语言模型训练与古诗文NLP任务的高质量中文古诗词数据集覆盖先秦至现代逾两千年的经典文本专为LLM预训练、微调及诗词生成、赏析、问答等下游任务优化。数据经系统性清洗与标准化处理统一标点、修正OCR/转录错误如‘愚千慮切’→‘愚衷千虑切’、补全文本节选如《村民苦寒》、规范标题格式如删除冗余引号、方括号、剔除无效注释与重复条目并对花间集、纳兰性德词等子集完成作者名、词牌名、题序结构的深度校勘。压缩包共123.72MB主体为结构化文本文件含唐诗、宋词、曹操诗集、纳兰词等多源子集适配数据加载与批量预处理流程。目前已有378人学习下载提供开箱即用的干净语料、详尽整理说明文档及可追溯的修订日志显著降低古籍数据清洗门槛提升模型在古典文学领域的语义理解与生成质量。1. 项目概述一份为AI大模型“喂食”的高质量古诗词语料库最近在整理和构建一个面向古诗词领域的垂直大模型最头疼的就是数据问题。网上能找到的古诗词数据集不少但要么是格式混乱、错漏百出要么是标注信息不全对于追求高质量训练效果来说简直是“食之无味弃之可惜”。直到我花了不少功夫从多个源头爬取、清洗、校对、标注最终整理出了这份“先秦到现代古诗词数据集大模型高质量数据”。这不仅仅是一个简单的文本打包文件它更像是一份为AI精心准备的“营养食谱”包含了从《诗经》《楚辞》的源头活水到唐诗宋词的巅峰璀璨再到元明清乃至近现代的诗词流变时间跨度超过三千年。它的核心价值在于“高质量”和“大模型友好”每一个字段的设计、每一处文本的校对都直接指向一个目标让大模型能更准确、更深刻地理解古诗词的格律、意境、情感与历史脉络从而生成或分析出更有“诗味”的内容。如果你正在从事AI文学、古典文化数字化、智能写作辅助或教育科技相关的工作或者你就是一个诗词爱好者想用技术手段来探索这座语言艺术的宝库那么这份数据集就是你不可或缺的基石。它省去了你从零开始数据工程的巨大时间成本直接提供了一个干净、结构化、信息丰富的起点。接下来我就把这套数据的“里里外外”、整理过程中的“坑”与“收获”以及具体怎么用毫无保留地分享给你。2. 数据集核心设计与构建思路拆解2.1 为什么需要一份“高质量”的专有数据集市面上常见的古诗词数据大多来源于一些公开的诗词网站或爱好者整理普遍存在几个痛点一是文本错误特别是生僻字的编码问题、繁体简体混杂、异体字未统一这会导致模型训练时产生大量噪声二是信息缺失很多数据只有正文没有作者、朝代、体裁如五言绝句、七言律诗、题目更不用说更深层的标签了三是格式不统一有的用“|”分隔有的用“”有的甚至没有分隔难以进行程序化处理四是范围局限要么只收录唐诗要么只收录宋词缺乏纵贯历史的体系性。对于大模型训练而言这些痛点会被放大。模型的学习本质上是寻找数据中的统计规律脏数据会教给模型错误的规律比如错误的用字习惯、混乱的格律对应。而信息缺失则让模型难以建立作者风格、时代背景、体裁范式与文本内容之间的关联导致生成的诗词可能格律不对、风格穿越。因此构建一份高质量数据集首要任务就是解决准确性、完整性、一致性和体系性这四个问题。2.2 数据集的整体架构与字段设计考量这份数据集采用了一种多层级的结构化设计旨在为每首诗词提供尽可能丰富的上下文信息。核心数据表通常包含以下字段每个字段的存在都有其明确目的朝代这是最基础的时间锚点。我们按“先秦”、“汉”、“魏晋”、“唐”、“宋”、“元”、“明”、“清”、“近现代”等进行划分。将“先秦”独立出来是因为《诗经》《楚辞》的语言模式和后世差异较大方便模型区分早期诗歌的源头特征。作者标准化的人名。对于有字、号的作者统一使用最广为人知的名称如李白不用李太白。建立作者索引是为后续分析作者风格嵌入Author Embedding做准备。标题诗词的题目。很多模型会忽略标题但标题往往是理解诗词主旨和创作背景的钥匙尤其是像杜甫《秋兴八首》这类组诗标题是重要的区分标识。正文这是核心文本。处理时我们严格遵循以下原则分句清晰律诗、绝句按句分行词按阕分段句子分行。例如“床前明月光疑是地上霜。举头望明月低头思故乡。”应分为四行。标点统一去除所有现代标点如逗号、句号保留或统一为古诗词常见的顿点“、”和句读“。”或者干脆无标点只保留空格和换行。这有助于模型学习诗句的自然断句和节奏。异体字处理将“著”统一为“着”在某些语境下“峯”统一为“峰”等减少模型的困惑度。体裁/词牌这是一个关键特征。对于诗标注“五绝”、“七律”、“古风”等对于词标注“沁园春”、“水调歌头”、“菩萨蛮”等。这个字段是模型学习格律、平仄、句式的“监督信号”。我们为此专门建立了一个格律规则对照表作为元数据。标签/主题这是提升模型理解深度的“增值信息”。我们采用人工算法辅助的方式为诗词打上主题标签如“山水田园”、“边塞战争”、“咏史怀古”、“送别思乡”、“爱情闺怨”、“咏物言志”等。这能引导模型在生成或分类时更好地把握情感基调与内容主题。创作背景/注释可选但推荐对于部分经典诗词我们附上了简短的创作背景或难点字词注释。这部分数据虽然不全但作为“小样本精调”数据极其珍贵能让模型接触到“诗外之功”。ID与来源每首诗词有唯一ID并记录其可信来源如《全唐诗》、《全宋词》某卷便于溯源和后续更新。这样的设计使得数据集不再是一个扁平的文本列表而是一个多维度的、关联丰富的知识网络非常适合作为大模型的训练原料。2.3 数据来源与处理流水线数据质量源于源头和处理过程。我们的数据主要来自以下几个经过验证的源头权威古籍数字化工程如国学网、中华经典古籍库等相对权威的数字化版本错误率较低。高质量开源项目GitHub上一些star数高、维护活跃的古诗词数据库项目它们通常已经过初步整理。纸质书籍扫描与OCR校对对于部分稀缺或校勘精良的版本我们进行了扫描、OCR识别并进行了严格的人工二次校对这是最耗时但质量最高的环节。处理流水线如下多源采集与去重从上述源头爬取或导入原始数据根据标题、作者和正文首句进行初步去重。文本清洗与规范化去除HTML标签、多余空格、乱码。统一字符编码UTF-8。执行繁简转换根据目标需求我们保留了一套简体版本和一套繁体版本。异体字、古今字标准化。结构化信息提取与补全利用规则和正则表达式从原始文本中抽取出朝代、作者、标题。对于缺失的信息通过查询外部知识库如已有的诗人朝代对应表进行补全。体裁识别通过分析句数、字数、句式规律结合词牌名库进行自动识别并对结果进行人工抽检。深度标注主题标签首先我们建立了一个包含几百个主题标签的体系。然后使用预训练的语言模型如BERT对诗词正文进行初步的零样本分类给出概率分布。最后由具有文学背景的志愿者对模型的预测结果进行审核和修正特别是对经典名篇确保标签的准确性。这是一个迭代的过程模型也在人类的反馈中不断优化。质量校验与最终打包编写校验脚本检查字段完整性、格式合规性如律诗是否为8句。随机抽样进行人工精读校对重点校对正文文本和关键信息。将所有数据按朝代分文件夹整合为CSV或JSON Lines.jsonl格式方便流式读取。最终打包成最新整理.zip。注意整个过程中最深的体会是“人力不可完全替代”。尤其是在异体字处理和主题标注环节算法只能做到80%的准确率剩下的20%必须依靠人的文学素养来判断。这也是这份数据集“高质量”的核心保障之一。3. 数据集核心内容解析与使用要点3.1 数据规模与分布概览解压最新整理.zip后你会看到按朝代组织的文件夹以及一个总的元数据文件。以我们整理的版本为例数据总量约12万首诗词时间分布上并非均匀这与各朝代诗词创作的真实繁荣程度相符唐代约5.5万首占比近46%是绝对的主力这也符合“唐诗”在中国诗歌史上的地位。宋代约3.8万首诗约2.6万词约1.2万占比约32%。先秦至隋约8000首其中《诗经》305篇《楚辞》等贡献了主要部分。元、明、清各朝代约5000-8000首合计约2.2万首。近现代约7000首收录了毛泽东、鲁迅、王国维等近现代名家的作品。体裁分布上诗约占70%词约占28%其他如曲、赋等约占2%。在诗的范围内近体诗格律诗又占大部分。这种分布决定了用此数据集训练的模型在创作格律诗和宋词风格作品上会更具优势。3.2 关键字段的实操含义与使用建议在实际用于大模型训练时不同字段有不同的用法训练主文本正文这是模型学习语言模式的核心。建议在预处理时将“标题”和“正文”以特定格式拼接。例如[标题]标题文本 [正文]分行的正文文本。这样模型会学习到标题与内容的关系。对于词可以加上[词牌]词牌名的前缀。条件控制信息朝代、作者、体裁、标签这些是强大的“控制开关”。在训练时可以将这些信息作为**前缀Prefix或分隔符Separator**加入到输入序列中。例如在微调阶段你的输入提示Prompt可以是“[朝代唐][作者李白][体裁七绝][主题山水]”然后让模型续写正文。这需要你在数据构造阶段就生成这样的条件文本对。元数据ID、来源主要用于数据管理和划分数据集训练集/验证集/测试集。建议按作者或朝代进行分层抽样来划分避免同一作者的诗句同时出现在训练和测试集导致数据泄露虚高模型性能。3.3 数据预处理与格式转换实战拿到数据后直接扔给模型是不行的。以下是一个典型的预处理流程以使用Hugging Face Transformers库为例加载与查看import pandas as pd import json # 假设是CSV格式 df pd.read_csv(poetry_dataset.csv) print(df.columns) # 查看字段 print(df.head()) # 或者JSON Lines格式 data [] with open(poetry.jsonl, r, encodingutf-8) as f: for line in f: data.append(json.loads(line))构建训练文本def build_training_text(row): # 示例将关键信息作为前缀 prefix f[朝代]{row[dynasty]}[作者]{row[author]}[体裁]{row[genre]}[主题]{row[tags]} # 标题和正文 content f{row[title]}{row[content]} # 组合成最终文本用换行符或特殊标记分隔 full_text prefix \\n content return full_text df[training_text] df.apply(build_training_text, axis1)分词与格式化对于古诗词不建议直接使用针对现代中文优化的分词器如jieba因为它会错误地切分诗句的连贯性。例如“床前明月光”可能被切成“床前/明月/光”破坏了“明月光”的意象。推荐方案字符级Char-level最简单有效的方法。将每个汉字包括标点作为一个独立的token。这对学习古诗词的格律固定字数非常友好也是很多古文模型的基础。使用专门预训练的古文分词器如果使用像“Chinese-BERT-wwm”或“GuwenBERT”这类在古文语料上训练过的模型可以使用其自带的分词器。子词级如BPE使用现代中文大模型如ChatGLM、Qwen的tokenizer时需注意其词表对古汉语生僻字的覆盖度。可能需要在自己的数据上重新训练一个BPE词表。保存为模型训练格式from datasets import Dataset dataset Dataset.from_pandas(df[[training_text]]) dataset.save_to_disk(processed_poetry_dataset)实操心得在构建training_text时分隔符的选择很重要。我试过用空格、换行、特殊符号如|sep|。最终发现对于解码式模型如GPT类使用换行符\n作为前缀和正文的分隔效果比较自然模型能学会在“前缀”结束后开始创作正文。同时确保你的训练文本末尾有明确的结束符如|endoftext|告诉模型哪里该停止生成。4. 基于数据集的大模型训练与微调策略4.1 模型选型与预训练基础如果你是从零开始预训练一个古诗词大模型计算资源和时间成本极高。更实用的策略是在现有通用中文大模型的基础上进行领域适应Domain Adaptation或指令微调Instruction Tuning。基座模型选择大规模通用模型如Qwen、ChatGLM、Baichuan。它们词表大语言理解能力强但需要在大量古诗词数据上继续预训练Continue Pre-training以强化领域知识。轻量级高效模型如InternLM、Phi。如果资源有限从这些模型开始微调也能在特定任务如格律判断、风格模仿上取得不错效果。专用古文模型优先寻找在古文语料上预训练过的模型如“古文BERT”系列。这是最对口的起点。继续预训练Continue Pre-training 目标让模型“浸泡”在古诗词的语言环境中学习其词汇、句法和常见意象。数据使用清洗后的正文字段可以不加或少加条件前缀让模型进行无监督的下一句预测。关键参数学习率通常设置得比微调更小例如1e-5到5e-5因为模型参数已经在大规模通用语料上收敛我们只是进行温和的调整。训练步数需要足够多的步数例如在12万首诗词上训练3-5个epoch让模型充分吸收新领域知识。注意力掩码确保模型在预测时只能看到上文这是标准的语言模型训练方式。4.2 条件生成任务的指令微调这是让模型变得“可控”和“有用”的关键一步。我们要教会模型根据我们的指令包含朝代、作者、体裁、主题来生成诗词。构建指令微调数据集 利用我们数据集中丰富的元数据构造“指令-输出”对。指令Input请模仿唐代诗人李白的风格创作一首以山水为主题的七言绝句。输出Output《望庐山瀑布》日照香炉生紫烟遥看瀑布挂前川。飞流直下三千尺疑是银河落九天。这里放数据集中李白真实的诗作为示范 你需要为大量数据构造这样的配对。可以设计多种指令模板增加任务的多样性。微调方法全参数微调如果资源充足这是最直接有效的方法。LoRA/LoRA强烈推荐。这是一种参数高效微调技术只训练模型中的一部分低秩适配器参数能极大节省显存和存储空间且效果接近全参数微调。对于古诗词生成这种风格鲜明的任务LoRA通常能取得非常好的效果。提示词工程Prompt Engineering在微调阶段将条件信息更精巧地设计在提示词中。例如除了简单的字段拼接还可以加入自然语言描述“你是一位宋代词人擅长婉约风格请以‘相思’为主题填一首《浣溪沙》。”一个简单的LoRA微调示例使用PEFT库from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments from peft import LoraConfig, get_peft_model, TaskType from trl import SFTTrainer # 加载模型和分词器 model_name Qwen/Qwen-1_8B-Chat # 举例 model AutoModelForCausalLM.from_pretrained(model_name) tokenizer AutoTokenizer.from_pretrained(model_name) # 配置LoRA lora_config LoraConfig( task_typeTaskType.CAUSAL_LM, r8, # LoRA秩 lora_alpha32, lora_dropout0.1, target_modules[q_proj, v_proj] # 针对Qwen模型注意力模块 ) model get_peft_model(model, lora_config) # 配置训练参数 training_args TrainingArguments( output_dir./lora-poetry-model, per_device_train_batch_size4, gradient_accumulation_steps4, num_train_epochs3, learning_rate2e-4, fp16True, save_steps500, logging_steps100, ) # 创建Trainer trainer SFTTrainer( modelmodel, argstraining_args, train_datasetyour_instruction_dataset, # 你的指令数据集 tokenizertokenizer, max_seq_length512, ) # 开始训练 trainer.train()4.3 多任务学习与评估指标为了让模型能力更全面可以考虑多任务学习任务一条件生成如上所述。任务二诗歌补全给出诗的前几句让模型补全后续。这能锻炼模型对格律和意境的连贯性把握。任务三体裁/作者/朝代分类给出诗歌正文让模型判断其体裁、作者或朝代。这可以作为辅助任务增强模型的表征能力。评估指标自动评估困惑度PPL在预留的测试集上计算衡量模型对古诗词语言的建模能力。BLEU、ROUGE对比生成诗和参考诗数据集中同主题同体裁的诗的n-gram重叠度但这对诗词这种创造性文本参考价值有限。格律检查准确率写一个格律检查器评估生成诗词的平仄、押韵是否符合规范。这是一个非常硬核且重要的指标。人工评估最关键的评估。组织具有文学背景的评估者从“格律合规性”、“语言流畅性”、“意境契合度”、“创新性”等多个维度对模型生成的结果进行打分如1-5分。这是衡量模型“诗味”的黄金标准。5. 常见问题、避坑指南与效果优化5.1 数据与训练过程中的典型问题问题模型生成的内容现代感太强夹杂网络用语或现代语法。原因基座模型是在大量现代网络文本上训练的其语言风格根深蒂固。解决增加领域预训练比重在继续预训练阶段使用更高比例的古诗词数据并适当延长训练时间。数据过滤在指令微调数据中严格检查并剔除任何不符合古汉语表达习惯的示例。在提示词中强化约束在推理时明确指令“请使用古典文言文风格进行创作避免使用现代白话词汇。”问题模型能模仿格式但意境空洞堆砌常见意象如“明月”、“清风”、“孤舟”。原因模型学到了表面词汇共现但未深入理解意象背后的情感逻辑。解决引入“创作背景”信息在微调数据中对于部分诗将简短的背景说明也作为输入的一部分。让模型学习“安史之乱”与“沉郁顿挫”风格、“贬谪”与“孤寂悲愤”情感之间的关联。多轮对话式训练构造一些对话数据例如“用户我想写一首表达壮志未酬的诗。助手你可以借鉴杜甫在安史之乱后漂泊西南时的作品风格常用‘衰鬓’、‘孤舟’、‘寒江’等意象来烘托苍凉心境。例如《登高》‘艰难苦恨繁霜鬓潦倒新停浊酒杯。’” 这能教会模型如何解释和运用意象。问题生成的律诗平仄不对或词牌句式错误。原因模型没有显式学习到格律规则。解决在输入中强化格律信息对于近体诗可以在前缀中加入平仄格式的编码如“平平仄仄平平仄”。对于词可以加入该词牌的“词谱”作为参考信息。这相当于给了模型一个“模板”。后处理校验与重排序生成多个候选结果后用一个独立的格律检查程序进行过滤和打分选择格律最合规的作为最终输出。问题训练时损失Loss下降很慢或者波动很大。原因学习率不合适、数据噪声大、批次设置问题。排查检查数据随机抽样一些训练样本查看training_text的格式是否正确是否有乱码或异常字符。调整学习率尝试一个更小的学习率如从2e-4降到1e-5并使用学习率预热Warmup。调整批次大小在显存允许的前提下适当增大per_device_train_batch_size或增加gradient_accumulation_steps来获得更稳定的梯度估计。监控验证集损失确保验证集损失也在同步下降防止过拟合。5.2 推理与应用阶段的技巧温度Temperature与核采样Top-p创作诗词需要一定的创造性不宜使用温度0的贪婪解码会生成最保守、重复的结果。推荐设置temperature0.7~0.9top_p0.9。这个区间能在“创造性”和“连贯性”之间取得较好平衡。温度越高用词越新奇但也可能越离谱top_p采样能避免选择概率太低的生僻字。重复惩罚Repetition Penalty设置repetition_penalty1.1~1.3可以有效抑制模型生成重复的词语或句子这对于生成四句或八句的诗歌尤为重要。提示词Prompt工程具体化不要只说“写一首关于春天的诗”。要说“写一首描绘早春时节细雨蒙蒙草木初生景象的七言绝句风格清新明快”。提供示例Few-shot在提示词中给出一两个符合要求的例子One-shot/Few-shot Learning能极大地引导模型的生成方向。分步引导对于长词或排律可以尝试让模型先列出意向和韵脚再进行填充。5.3 资源与工具推荐计算平台如果没有本地高性能GPU可以考虑阿里云PAI、百度AI Studio、Google Colab Pro等云平台它们通常提供带GPU的Notebook环境。深度学习框架PyTorchTransformers是当前微调大模型的事实标准。高效微调库PEFTParameter-Efficient Fine-Tuning是实现LoRA等技术的核心库必学。训练加速DeepSpeed微软或FSDPPyTorch Fully Sharded Data Parallel可以帮助你在多卡或有限显存下训练更大模型。模型评估除了人工评估可以搭建一个简单的Gradio或Streamlit网页应用方便地输入条件、生成诗歌并收集反馈。整理和运用这份数据集的过程本身就是一个深入理解古诗词与AI结合点的旅程。最大的感触是技术是骨架文学素养是灵魂。数据集的质量决定了模型的下限而如何设计训练任务和评估标准则决定了模型的上限。这份数据集提供了一个坚实的起点但要让AI真正写出打动人心的诗句还有很长的路要走其中最关键的一环永远是人对美的理解和定义。希望这份详尽的拆解能帮你避开我踩过的那些坑更高效地开启你的“AI诗人”培育计划。如果在使用中遇到任何具体问题欢迎随时交流。本文还有配套的精品资源点击获取