【古诗生成AI实战】之二——项目架构设计

[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实战】之三——任务加载器与预处理器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/173016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费分享一套基于springboot的餐饮美食分享平台系统,挺漂亮的

大家好,我是java1234_小锋老师,看到一个不错的基于springboot的餐饮美食分享平台系统,分享下哈。 项目视频演示 【免费】基于springboot的餐饮美食分享平台 Java毕业设计_哔哩哔哩_bilibili【免费】基于springboot的餐饮美食分享平台 Java毕…

【SQL Server2019SSMS】安装与卸载手册

目录 📋前言 ⛳️【SQL Serverssms】安装 1. SQL Server自定义安装 2. SSMS安装 ⛳️【SQL Server】卸载 📋前言 🌈个人主页:Sarapines Programmer 🔥 系列专栏:本期文章收录在《宝藏工具使用手册》&am…

校园导游程序及通信线路设计(结尾附着总源码)

校园导游程序及通信线路设计 摘  要 新生或来访客人刚到校园,对校园的环境不熟悉。就需要一个导游介绍景点,推荐到下一个景点的最佳路径等。随着科技的发展,社会的进步,人们对便捷的追求也越来越高。为了减少人力和时间。针对对…

skywalking 简单操作文档

1.1. 基础概念 1.1.1. 概述 SkyWalking是 apache基金会下面的一个开源 APM项目,为微服务架构和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM会感知应用间关系和服务间关系…

Deep Learning(wu--46)

文章目录 ContentsBeginBasic逻辑回归SGD导数计算图(反向传播)向量化广播numpy Neural Network向量化激活函数梯度下降深层表示反向传播 Contents Begin Basic 逻辑回归 SGD 导数 计算图(反向传播) 向量化 广播 numpy Neural Netw…

Elastic Search的RestFul API入门:初识mapping

本节课旨在探讨Elasticsearch中Mapping的使用。在Elasticsearch中,Mapping是定义索引中字段(Field)的数据类型和属性的过程。它为Elasticsearch提供了一种途径,以解析和处理文档中的各个字段,以便在搜索、排序和聚合等…

ElasticSearch学习笔记(狂神说)

ElasticSearch学习笔记(狂神说) 视频地址:https://www.bilibili.com/video/BV17a4y1x7zq 在学习ElasticSearch之前,先简单了解一下Lucene: Doug Cutting开发是apache软件基金会 jakarta项目组的一个子项目是一个开放…

【漏洞复现】熊海cms 存在sql注入 附poc

漏洞描述 熊海CMS 是由熊海开发的一款可广泛应用于个人博客,个人网站,企业网站的一套网站综合管理系统。 其采用前后端整合设计思路,php,Apache,mysql,前端使用Bootstrap和少许jquery前端框架开发; 网站样式设计简洁大方,整体功能点并不多,但功能正好够用;拥有一个…

jenkins流水线(pipline)实例

1、pipline 语法介绍 声明式的pipeline语法格式 1. 所有的声明都必须包含在pipeline{}中 2. 块只能有节段,指令,步骤或者赋值语句组成 3. 阶段:agent,stages,post,steps 4. 指令:environment&a…

LiveVIS视图库1400-如何切换数据库?默认使用的数据库是什么?如何切换到Mysql/MariaDB?

LiveVIS视图库1400-如何切换数据库?默认使用的数据库是什么?如何切换到Mysql/MariaDB? 1、切换成Mysql/Mariadb数据库1.1 连接数据库1.2 创建数据库实例1.3 配置.ini文件1.4 重启完成切换 1、切换成Mysql/Mariadb数据库 LiveVIS 默认使用 sqlite3 文件…

【Qt】判断QList链表内是否有重复数据

QList<int> listInt;listInt.push_back(1);listInt.push_back(1);listInt.push_back(2);listInt.push_back(3);qDebug().noquote() << listInt.toSet().toList();

嵌入式八股 | 笔试面试 | 校招秋招 | 题目精选

嵌入式八股精华版1.0所有216道题目如下&#xff1a; 欢迎关注微信公众号【赛博二哈】并加入嵌入式求职交流群。提供简历模板、学习路线、岗位整理等 欢迎加入知识星球【嵌入式求职星球】获取完整嵌入式八股。 提供简历修改、项目推荐、求职规划答疑。另有各城市、公…

vue3使用TinyMCE富文本

TinyMCE 介绍 TinyMCE 是一个功能强大的富文本编辑器&#xff0c;它允许您在网页应用程序中创建和编辑具有丰富格式的内容。官网 github项目地址 文档地址 下载tinymce文件 从网页下载最新版zip&#xff0c;也可以打开下面链接下载。 打开网页 tinymce.zip zh-Hans 将下载…

美食网站基本结构

代码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>美食网站首页</title> <link rel"stylesheet" href"https://cdn.staticfile.org/layui/2.5.6/css/layui.min.c…

有关循环依赖和三级缓存的这些问题,你都会么?(面试常问)

一、什么是循环依赖 大家平时在写业务的时候应该写过这样的代码。 其实这种类型就是循环依赖&#xff0c;就是AService 和BService两个类相互引用。 二、三级缓存可以解决的循环依赖场景 如上面所说&#xff0c;大家平时在写这种代码的时候&#xff0c;项目其实是可以起来的&am…

【Java+SQL Server】前后端连接小白教程

目录 &#x1f4cb; 流程总览 ⛳️【SQL Server】数据库操作 1. 新建数据库text 2. 新建表 3. 编辑表 ⛳️【IntelliJ IDEA】操作 1. 导入jar包 2. 运行显示错误 &#x1f4cb; 流程总览 ⛳️【SQL Server】数据库操作 打开SQL Server数据库-->sa登录-->新建数据库…

31 - MySQL调优之SQL语句:如何写出高性能SQL语句?

从今天开始&#xff0c;我将带你一起学习 MySQL 的性能调优。MySQL 数据库是互联网公司使用最为频繁的数据库之一&#xff0c;不仅仅因为它开源免费&#xff0c;MySQL 卓越的性能、稳定的服务以及活跃的社区都成就了它的核心竞争力。 我们知道&#xff0c;应用服务与数据库的交…

【开源】基于Vue和SpringBoot的个人健康管理系统

项目编号&#xff1a; S 040 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S040&#xff0c;文末获取源码。} 项目编号&#xff1a;S040&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 健康档案模块2.2 体检档案模块2.3 健…

如何处理枚举类型(下)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 上一篇我们通过编写MyB…

Day41力扣打卡

打卡记录 第 N 位数字&#xff08;找规律&#xff09; 链接 class Solution:def findNthDigit(self, n: int) -> int:count, digit, start 9, 1, 1while n > count:n - countdigit 1start * 10count start * 9 * digitnum start (n - 1) // digitreturn int(str(n…