[1] 项目架构
在我们深入古诗生成AI项目的具体实践之前,让我们首先理解整个项目的架构。本项目的代码流程主要分为三个关键阶段:
1、数据处理阶段;
2、模型训练阶段;
3、文本生成阶段。
第一步:在数据处理阶段,我们将重点放在文本的分割、清洗和标准化上。这个阶段的开始是对原始文本进行清洗,然后进行字级别的分词处理。例如,将“床前明月光”分词为[床,前,明,月,光]。这样的处理后,我们接着构建词典
vocabulary
,并从官方词向量库中提取出词典中的词对应的向量。
注意:如果你是初学者,可能会对词典构建和官方词向量的概念感到困惑。不用担心,我们将在后续的章节中详细解释这些概念。
第二步:模型训练阶段。这一阶段的核心任务是加载数据集,将其处理成模型可接受的输入
input
和标签
label
格式,并进行训练。训练完成后,模型的保存变得至关重要。我们会保存训练好的模型,以便在不同环境中重复使用,避免每次都从头开始训练。同时,我们还会特别保存那些表现最佳的模型,以便于后续生成高质量的古诗。
第三步:文本生成阶段。在这一阶段,我们将使用保存好的模型来处理新的文本数据。这里的“文本数据”可以是空的,即直接从模型中生成古诗。经过模型处理后,我们将得到新生成的古诗文本。
接下来,我们将逐一深入每个阶段,详细解析它们的工作流程和关键点。
[1.1] 数据处理阶段
数据处理阶段流程图如下:
为了确保项目代码具有高度的灵活性和扩展性,使其能够轻松适应其他数据集和不同的下游任务,我们精心设计了任务加载器
task
和预处理器
processor
。
通过任务加载器
task
和预处理器
processor
的处理,数据集中的所有字符被有效地整理和组织,形成了一个全面的字典。这个过程至关重要,因为它决定了模型如何理解和处理文本数据。值得注意的是,虽然第三方Word2Vec库通常非常庞大,大约有1GB的大小,并且包含了30万到100万个单字和词汇,但我们的字典大小大约只有7千左右(比如,Bert的词典大小也只有3万)。因此,一个关键的步骤是从这些庞大的第三方Word2Vec中精确地提取出与我们字典中的词汇相对应的词向量。
这一过程不仅优化了我们模型的存储和运算效率,而且确保了模型能够准确地理解和处理我们特定的数据集。这样的设计思路使得整个项目更加高效、灵活,为后续的不同应用场景奠定了坚实的基础。
[1.2] 模型训练阶段
模型训练阶段流程图如下:
同理,为了使项目代码有较强的拓展性,方便拓展到其他数据集上和其他下游任务上,我们设计了模型包装器
wrapper
,真正的模型结构
model
放入模型包装器
wrapper
。
在训练结束后,将最好的模型结果保存下来。
[1.3] 文本生成阶段
文本生成阶段流程图如下:
在我们的模型训练完成之后,一个令人兴奋的阶段就是利用训练好的模型来生成文本。在这个阶段,你可以选择输入一些自定义的前缀词,或者完全不输入任何内容。这取决于你想要模型生成的古诗的风格和内容。
一旦输入(如果有的话)被送入模型,模型就会根据输入预测下一个最可能的字。这个预测的字接着被拼接到原始输入的末尾,形成新的输入字符串。然后,这个更新后的字符串再次被送入模型。这个过程不断重复,直到生成了一整段文本。
这个生成过程非常有趣,因为它不仅展示了模型学习古诗的结构和语言风格的能力,而且还允许我们以创造性的方式使用模型,无论是模仿经典古诗风格,还是创作全新的诗句。这种交互式的文本生成过程为探索AI在文学创作领域的潜力提供了一个有趣的窗口。
[2] 古诗生成训练原理
理解整个实战项目的架构之后,你一定好奇模型的输入输出是什么,训练的目标是什么,如何让模型可以有生成能力呢?请参考下面的模型原理图:
在讨论古诗生成模型的细节之前,让我们先看一下典型的序列生成模型的架构。在这种模型中,输入通常是一个序列,例如一句或一整首古诗。这个模型的目标是生成一个与输入序列往左偏移一个单位的输出序列。
为了让模型能够识别古诗的开头和结尾,我们引入了特殊的符号来表示开始和结束。具体的符号并不重要,但为了示例,我们可以将开始符设为B(Begin)和结束符设为E(End)。
现在,让我们来详细探讨一下训练目标。
例如,如果输入序列是[B,床,前,明,月,光,E],那么我们将这个序列向左偏移一个单位作为训练标签,即目标序列是[床,前,明,月,光,E,E]。当输入通过模型处理后,我们希望每个输入元素都能准确地预测其下一个元素。也就是说,我们期望输入‘B’时模型预测出的字是‘床’,输入‘床’时预测出的字是‘前’,以此类推。当到达结束符‘E’时,我们预期模型接下来不断预测出‘E’,这表示古诗生成的结束。
图中的长方形“model”代表神经网络模型本身。这个模型通常是一个多层神经网络,比如循环神经网络(RNN)、长短期记忆网络(LSTM)或门控循环单元(GRU)。这些类型的网络非常擅长处理序列数据,并能记住前面的信息,这对于生成连贯和有吸引力的古诗至关重要。
[3] 进行下一篇实战
【古诗生成AI实战】之三——任务加载器与预处理器
版权归原作者 征途黯然. 所有, 如有侵权,请联系我们删除。