构建高质量古诗词数据集:从数据清洗到AI大模型微调全流程
2026/8/30 20:49:53 网站建设 项目流程

简介:本资源是一套面向大语言模型训练与古诗文NLP任务的高质量中文古诗词数据集,覆盖先秦至现代逾两千年的经典文本,专为LLM预训练、微调及诗词生成、赏析、问答等下游任务优化。数据经系统性清洗与标准化处理:统一标点、修正OCR/转录错误(如‘愚千慮切’→‘愚衷千虑切’)、补全文本节选(如《村民苦寒》)、规范标题格式(如删除冗余引号、方括号)、剔除无效注释与重复条目,并对花间集、纳兰性德词等子集完成作者名、词牌名、题序结构的深度校勘。压缩包共123.72MB,主体为结构化文本文件(含唐诗、宋词、曹操诗集、纳兰词等多源子集),适配数据加载与批量预处理流程。目前已有378人学习下载,提供开箱即用的干净语料、详尽整理说明文档及可追溯的修订日志,显著降低古籍数据清洗门槛,提升模型在古典文学领域的语义理解与生成质量。

1. 项目概述:一份为AI大模型“喂食”的高质量古诗词语料库

最近在整理和构建一个面向古诗词领域的垂直大模型,最头疼的就是数据问题。网上能找到的古诗词数据集不少,但要么是格式混乱、错漏百出,要么是标注信息不全,对于追求高质量训练效果来说,简直是“食之无味,弃之可惜”。直到我花了不少功夫,从多个源头爬取、清洗、校对、标注,最终整理出了这份“先秦到现代古诗词数据集(大模型高质量数据)”。这不仅仅是一个简单的文本打包文件,它更像是一份为AI精心准备的“营养食谱”,包含了从《诗经》《楚辞》的源头活水,到唐诗宋词的巅峰璀璨,再到元明清乃至近现代的诗词流变,时间跨度超过三千年。它的核心价值在于“高质量”和“大模型友好”,每一个字段的设计、每一处文本的校对,都直接指向一个目标:让大模型能更准确、更深刻地理解古诗词的格律、意境、情感与历史脉络,从而生成或分析出更有“诗味”的内容。

如果你正在从事AI+文学、古典文化数字化、智能写作辅助或教育科技相关的工作,或者你就是一个诗词爱好者,想用技术手段来探索这座语言艺术的宝库,那么这份数据集就是你不可或缺的基石。它省去了你从零开始数据工程的巨大时间成本,直接提供了一个干净、结构化、信息丰富的起点。接下来,我就把这套数据的“里里外外”、整理过程中的“坑”与“收获”,以及具体怎么用,毫无保留地分享给你。

2. 数据集核心设计与构建思路拆解

2.1 为什么需要一份“高质量”的专有数据集?

市面上常见的古诗词数据,大多来源于一些公开的诗词网站或爱好者整理,普遍存在几个痛点:一是文本错误,特别是生僻字的编码问题、繁体简体混杂、异体字未统一,这会导致模型训练时产生大量噪声;二是信息缺失,很多数据只有正文,没有作者、朝代、体裁(如五言绝句、七言律诗)、题目,更不用说更深层的标签了;三是格式不统一,有的用“|”分隔,有的用“,”有的甚至没有分隔,难以进行程序化处理;四是范围局限,要么只收录唐诗,要么只收录宋词,缺乏纵贯历史的体系性。

对于大模型训练而言,这些痛点会被放大。模型的学习本质上是寻找数据中的统计规律,脏数据会教给模型错误的规律,比如错误的用字习惯、混乱的格律对应。而信息缺失则让模型难以建立作者风格、时代背景、体裁范式与文本内容之间的关联,导致生成的诗词可能格律不对、风格穿越。因此,构建一份高质量数据集,首要任务就是解决准确性、完整性、一致性和体系性这四个问题。

2.2 数据集的整体架构与字段设计考量

这份数据集采用了一种多层级的结构化设计,旨在为每首诗词提供尽可能丰富的上下文信息。核心数据表通常包含以下字段,每个字段的存在都有其明确目的:

  1. 朝代:这是最基础的时间锚点。我们按“先秦”、“汉”、“魏晋”、“唐”、“宋”、“元”、“明”、“清”、“近现代”等进行划分。将“先秦”独立出来,是因为《诗经》《楚辞》的语言模式和后世差异较大,方便模型区分早期诗歌的源头特征。
  2. 作者:标准化的人名。对于有字、号的作者,统一使用最广为人知的名称(如李白,不用李太白)。建立作者索引,是为后续分析作者风格嵌入(Author Embedding)做准备。
  3. 标题:诗词的题目。很多模型会忽略标题,但标题往往是理解诗词主旨和创作背景的钥匙,尤其是像杜甫《秋兴八首》这类组诗,标题是重要的区分标识。
  4. 正文:这是核心文本。处理时,我们严格遵循以下原则:
    • 分句清晰:律诗、绝句按句分行;词按阕分段,句子分行。例如:“床前明月光,疑是地上霜。举头望明月,低头思故乡。”应分为四行。
    • 标点统一:去除所有现代标点(如逗号、句号),保留或统一为古诗词常见的顿点“、”和句读“。”,或者干脆无标点,只保留空格和换行。这有助于模型学习诗句的自然断句和节奏。
    • 异体字处理:将“著”统一为“着”(在某些语境下),“峯”统一为“峰”等,减少模型的困惑度。
  5. 体裁/词牌:这是一个关键特征。对于诗,标注“五绝”、“七律”、“古风”等;对于词,标注“沁园春”、“水调歌头”、“菩萨蛮”等。这个字段是模型学习格律、平仄、句式的“监督信号”。我们为此专门建立了一个格律规则对照表,作为元数据。
  6. 标签/主题:这是提升模型理解深度的“增值信息”。我们采用人工+算法辅助的方式,为诗词打上主题标签,如“山水田园”、“边塞战争”、“咏史怀古”、“送别思乡”、“爱情闺怨”、“咏物言志”等。这能引导模型在生成或分类时,更好地把握情感基调与内容主题。
  7. 创作背景/注释(可选但推荐):对于部分经典诗词,我们附上了简短的创作背景或难点字词注释。这部分数据虽然不全,但作为“小样本精调”数据极其珍贵,能让模型接触到“诗外之功”。
  8. ID与来源:每首诗词有唯一ID,并记录其可信来源(如《全唐诗》、《全宋词》某卷),便于溯源和后续更新。

这样的设计,使得数据集不再是一个扁平的文本列表,而是一个多维度的、关联丰富的知识网络,非常适合作为大模型的训练原料。

2.3 数据来源与处理流水线

数据质量源于源头和处理过程。我们的数据主要来自以下几个经过验证的源头:

  • 权威古籍数字化工程:如国学网、中华经典古籍库等相对权威的数字化版本,错误率较低。
  • 高质量开源项目:GitHub上一些star数高、维护活跃的古诗词数据库项目,它们通常已经过初步整理。
  • 纸质书籍扫描与OCR校对:对于部分稀缺或校勘精良的版本,我们进行了扫描、OCR识别,并进行了严格的人工二次校对,这是最耗时但质量最高的环节。

处理流水线如下:

  1. 多源采集与去重:从上述源头爬取或导入原始数据,根据标题、作者和正文首句进行初步去重。
  2. 文本清洗与规范化
    • 去除HTML标签、多余空格、乱码。
    • 统一字符编码(UTF-8)。
    • 执行繁简转换(根据目标需求,我们保留了一套简体版本和一套繁体版本)。
    • 异体字、古今字标准化。
  3. 结构化信息提取与补全
    • 利用规则和正则表达式,从原始文本中抽取出朝代、作者、标题。
    • 对于缺失的信息,通过查询外部知识库(如已有的诗人朝代对应表)进行补全。
    • 体裁识别:通过分析句数、字数、句式规律,结合词牌名库进行自动识别,并对结果进行人工抽检。
  4. 深度标注(主题标签)
    • 首先,我们建立了一个包含几百个主题标签的体系。
    • 然后,使用预训练的语言模型(如BERT)对诗词正文进行初步的零样本分类,给出概率分布。
    • 最后,由具有文学背景的志愿者对模型的预测结果进行审核和修正,特别是对经典名篇,确保标签的准确性。这是一个迭代的过程,模型也在人类的反馈中不断优化。
  5. 质量校验与最终打包
    • 编写校验脚本,检查字段完整性、格式合规性(如律诗是否为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库为例:

  1. 加载与查看

    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', encoding='utf-8') as f: for line in f: data.append(json.loads(line))
  2. 构建训练文本

    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, axis=1)
  3. 分词与格式化

    • 对于古诗词,不建议直接使用针对现代中文优化的分词器(如jieba),因为它会错误地切分诗句的连贯性。例如,“床前明月光”可能被切成“床前/明月/光”,破坏了“明月光”的意象。
    • 推荐方案
      • 字符级(Char-level):最简单有效的方法。将每个汉字(包括标点)作为一个独立的token。这对学习古诗词的格律(固定字数)非常友好,也是很多古文模型的基础。
      • 使用专门预训练的古文分词器:如果使用像“Chinese-BERT-wwm”或“GuwenBERT”这类在古文语料上训练过的模型,可以使用其自带的分词器。
      • 子词级(如BPE):使用现代中文大模型(如ChatGLM、Qwen)的tokenizer时,需注意其词表对古汉语生僻字的覆盖度。可能需要在自己的数据上重新训练一个BPE词表。
  4. 保存为模型训练格式

    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 条件生成任务的指令微调

这是让模型变得“可控”和“有用”的关键一步。我们要教会模型根据我们的指令(包含朝代、作者、体裁、主题)来生成诗词。

  1. 构建指令微调数据集: 利用我们数据集中丰富的元数据,构造“指令-输出”对。

    • 指令(Input)请模仿唐代诗人李白的风格,创作一首以山水为主题的七言绝句。
    • 输出(Output)《望庐山瀑布》日照香炉生紫烟,遥看瀑布挂前川。飞流直下三千尺,疑是银河落九天。(这里放数据集中李白真实的诗,作为示范) 你需要为大量数据构造这样的配对。可以设计多种指令模板,增加任务的多样性。
  2. 微调方法

    • 全参数微调:如果资源充足,这是最直接有效的方法。
    • LoRA/LoRA+强烈推荐。这是一种参数高效微调技术,只训练模型中的一部分低秩适配器参数,能极大节省显存和存储空间,且效果接近全参数微调。对于古诗词生成这种风格鲜明的任务,LoRA通常能取得非常好的效果。
    • 提示词工程(Prompt Engineering):在微调阶段,将条件信息更精巧地设计在提示词中。例如,除了简单的字段拼接,还可以加入自然语言描述:“你是一位宋代词人,擅长婉约风格,请以‘相思’为主题,填一首《浣溪沙》。”
  3. 一个简单的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_type=TaskType.CAUSAL_LM, r=8, # LoRA秩 lora_alpha=32, lora_dropout=0.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_size=4, gradient_accumulation_steps=4, num_train_epochs=3, learning_rate=2e-4, fp16=True, save_steps=500, logging_steps=100, ) # 创建Trainer trainer = SFTTrainer( model=model, args=training_args, train_dataset=your_instruction_dataset, # 你的指令数据集 tokenizer=tokenizer, max_seq_length=512, ) # 开始训练 trainer.train()

4.3 多任务学习与评估指标

为了让模型能力更全面,可以考虑多任务学习:

  • 任务一:条件生成(如上所述)。
  • 任务二:诗歌补全:给出诗的前几句,让模型补全后续。这能锻炼模型对格律和意境的连贯性把握。
  • 任务三:体裁/作者/朝代分类:给出诗歌正文,让模型判断其体裁、作者或朝代。这可以作为辅助任务,增强模型的表征能力。

评估指标

  • 自动评估
    • 困惑度(PPL):在预留的测试集上计算,衡量模型对古诗词语言的建模能力。
    • BLEU、ROUGE:对比生成诗和参考诗(数据集中同主题同体裁的诗)的n-gram重叠度,但这对诗词这种创造性文本参考价值有限。
    • 格律检查准确率:写一个格律检查器,评估生成诗词的平仄、押韵是否符合规范。这是一个非常硬核且重要的指标。
  • 人工评估最关键的评估。组织具有文学背景的评估者,从“格律合规性”、“语言流畅性”、“意境契合度”、“创新性”等多个维度对模型生成的结果进行打分(如1-5分)。这是衡量模型“诗味”的黄金标准。

5. 常见问题、避坑指南与效果优化

5.1 数据与训练过程中的典型问题

  1. 问题:模型生成的内容现代感太强,夹杂网络用语或现代语法。

    • 原因:基座模型是在大量现代网络文本上训练的,其语言风格根深蒂固。
    • 解决
      • 增加领域预训练比重:在继续预训练阶段,使用更高比例的古诗词数据,并适当延长训练时间。
      • 数据过滤:在指令微调数据中,严格检查并剔除任何不符合古汉语表达习惯的示例。
      • 在提示词中强化约束:在推理时,明确指令:“请使用古典文言文风格进行创作,避免使用现代白话词汇。”
  2. 问题:模型能模仿格式,但意境空洞,堆砌常见意象(如“明月”、“清风”、“孤舟”)。

    • 原因:模型学到了表面词汇共现,但未深入理解意象背后的情感逻辑。
    • 解决
      • 引入“创作背景”信息:在微调数据中,对于部分诗,将简短的背景说明也作为输入的一部分。让模型学习“安史之乱”与“沉郁顿挫”风格、“贬谪”与“孤寂悲愤”情感之间的关联。
      • 多轮对话式训练:构造一些对话数据,例如:“用户:我想写一首表达壮志未酬的诗。助手:你可以借鉴杜甫在安史之乱后漂泊西南时的作品风格,常用‘衰鬓’、‘孤舟’、‘寒江’等意象来烘托苍凉心境。例如:《登高》‘艰难苦恨繁霜鬓,潦倒新停浊酒杯。’” 这能教会模型如何解释和运用意象。
  3. 问题:生成的律诗平仄不对,或词牌句式错误。

    • 原因:模型没有显式学习到格律规则。
    • 解决
      • 在输入中强化格律信息:对于近体诗,可以在前缀中加入平仄格式的编码(如“平平仄仄平平仄”)。对于词,可以加入该词牌的“词谱”作为参考信息。这相当于给了模型一个“模板”。
      • 后处理校验与重排序:生成多个候选结果后,用一个独立的格律检查程序进行过滤和打分,选择格律最合规的作为最终输出。
  4. 问题:训练时损失(Loss)下降很慢,或者波动很大。

    • 原因:学习率不合适、数据噪声大、批次设置问题。
    • 排查
      • 检查数据:随机抽样一些训练样本,查看training_text的格式是否正确,是否有乱码或异常字符。
      • 调整学习率:尝试一个更小的学习率(如从2e-4降到1e-5),并使用学习率预热(Warmup)。
      • 调整批次大小:在显存允许的前提下,适当增大per_device_train_batch_size,或增加gradient_accumulation_steps来获得更稳定的梯度估计。
      • 监控验证集损失:确保验证集损失也在同步下降,防止过拟合。

5.2 推理与应用阶段的技巧

  1. 温度(Temperature)与核采样(Top-p)

    • 创作诗词需要一定的创造性,不宜使用温度=0的贪婪解码(会生成最保守、重复的结果)。
    • 推荐设置temperature=0.7~0.9top_p=0.9。这个区间能在“创造性”和“连贯性”之间取得较好平衡。温度越高,用词越新奇但也可能越离谱;top_p采样能避免选择概率太低的生僻字。
  2. 重复惩罚(Repetition Penalty)

    • 设置repetition_penalty=1.1~1.3,可以有效抑制模型生成重复的词语或句子,这对于生成四句或八句的诗歌尤为重要。
  3. 提示词(Prompt)工程

    • 具体化:不要只说“写一首关于春天的诗”。要说“写一首描绘早春时节,细雨蒙蒙,草木初生景象的七言绝句,风格清新明快”。
    • 提供示例(Few-shot):在提示词中给出一两个符合要求的例子(One-shot/Few-shot Learning),能极大地引导模型的生成方向。
    • 分步引导:对于长词或排律,可以尝试让模型先列出意向和韵脚,再进行填充。

5.3 资源与工具推荐

  • 计算平台:如果没有本地高性能GPU,可以考虑阿里云PAI、百度AI Studio、Google Colab Pro等云平台,它们通常提供带GPU的Notebook环境。
  • 深度学习框架PyTorch+Transformers是当前微调大模型的事实标准。
  • 高效微调库PEFT(Parameter-Efficient Fine-Tuning)是实现LoRA等技术的核心库,必学。
  • 训练加速DeepSpeed(微软)或FSDP(PyTorch Fully Sharded Data Parallel)可以帮助你在多卡或有限显存下训练更大模型。
  • 模型评估:除了人工评估,可以搭建一个简单的Gradio或Streamlit网页应用,方便地输入条件、生成诗歌并收集反馈。

整理和运用这份数据集的过程,本身就是一个深入理解古诗词与AI结合点的旅程。最大的感触是,技术是骨架,文学素养是灵魂。数据集的质量决定了模型的下限,而如何设计训练任务和评估标准,则决定了模型的上限。这份数据集提供了一个坚实的起点,但要让AI真正写出打动人心的诗句,还有很长的路要走,其中最关键的一环,永远是人对美的理解和定义。希望这份详尽的拆解,能帮你避开我踩过的那些坑,更高效地开启你的“AI诗人”培育计划。如果在使用中遇到任何具体问题,欢迎随时交流。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询