目录

04模型验证

代码架构核心设计说明

05运行推理

代码架构核心设计说明

项目展望


项目简介
训练一个模型,实现歌词仿写生成

任务类型:文本生成;

数据集是一份歌词语料,训练一个模型仿写歌词。

要求
1.清洗数据。歌词语料中包含韩文等非中英文符号,可对语料做预处理,仅保留中英文与标点符号;

2.训练模型、生成歌词;

3.用Gradio网页展示生成的歌词;

需要考虑的问题
1.使用语料数据集csv:lyric.csv,不用到数据库;

2.硬件使用的gpu是5g的n卡,比较有限,项目本身数据量和模型参数规模都不是特别大;

3.使用tensorflow2.9.1gpu版本的框架进行构建;

4.使用的网络架构,以及每个部分的组件网络、骨干网络等,优先在各个环节选用目前的sota模型;

5.在模型训练过程中要使用tensorboard可视化训练过程;6.对于数据的处理,先对csv进行必要的可视化,然后进行多语言歌词清洗(可参考的步骤:多语言过滤、特殊格式处理、分词策略、序列对齐、同义词替换、句式重组等);7.项目构建严格规范文件架构,做到一个脚本做一个环节(数据预处理脚本、模型构建脚本、训练、测试、推理等等);

04模型验证

对nlp领域的模型验证,我们通常会采用到BLEU,对于这个函数前面有进行简要说明

终端执行

python scripts/04_model_evaluation.py

代码架构核心设计说明

脚本运行架构

评估指标体系:困惑度 (Perplexity):衡量模型对语言的预测能力,越低表示预测越准确BLEU 分数:评估生成文本与参考文本的 n-gram 匹配度生成多样性:包括唯一生成比例和词汇多样性,避免模型生成重复内容语义连贯性:基于相邻句子词汇重叠的简单语义评估
评估流程控制:
    资源统一加载:模型、分词器、配置、测试数据多维度评估:从多个角度全面衡量模型性能结果可视化:将评估指标转化为图表便于理解报告生成:自动生成 Markdown 格式评估报告生成策略支持:温度采样 (temperature):控制生成随机性Top-k 采样:限制候选词范围,提升生成质量种子文本生成:基于不同主题生成样本
工程化设计:模块化方法:每个评估指标独立成方法,便于维护结果持久化:保存评估结果、图表和报告错误处理:各方法包含异常处理逻辑

# 歌词生成模型评估系统架构

# 1. 核心评估类:LyricModelEvaluator

class LyricModelEvaluator:

成员变量:

- model_path: 模型文件路径

- model: 加载的Keras模型

- tokenizer: 分词器

- config: 模型配置

- test_texts: 测试文本数据

# 初始化与资源加载

方法 __init__(model_path):

设置模型路径

调用load_resources()加载模型、分词器、配置和测试数据

方法 load_resources():

加载Keras模型

加载分词器(pickle)

加载配置文件(json)

加载测试数据(npy)

# 核心评估指标计算

方法 calculate_perplexity(texts, max_samples):

计算模型困惑度(perplexity)

限制样本数量以优化计算

对每个序列计算对数概率并求平均

返回困惑度值

方法 generate_sample_lyrics(seed_text, max_length, temperature, top_k):

基于种子文本生成歌词

使用模型预测下一个词

支持温度采样和Top-k采样策略

返回生成的歌词文本

方法 calculate_bleu_scores(num_samples):

计算BLEU-1/2/4分数

从测试文本中随机采样

用前半部分生成、后半部分作为参考

返回BLEU分数均值和标准差

方法 analyze_generation_diversity(num_generations, seed_texts):

分析生成多样性

使用不同种子和温度生成歌词

计算唯一生成比例和词汇多样性

返回多样性指标和所有生成样本

方法 evaluate_semantic_coherence(generations):

评估语义连贯性(简化版)

基于相邻句子的词汇重叠率

返回平均连贯性分数

# 结果展示与报告生成

方法 generate_evaluation_samples(num_samples):

生成评估用的样本歌词

使用不同种子和温度参数

返回生成样本列表

方法 plot_evaluation_results(results):

可视化评估结果

绘制BLEU分数、多样性等指标图表

保存并显示图表

方法 generate_evaluation_report(results):

生成Markdown格式评估报告

汇总所有评估指标和生成样本

保存报告到文件

方法 run_full_evaluation():

执行完整评估流程

计算困惑度、BLEU、多样性等指标

生成样本和可视化结果

保存结果和报告

返回评估结果字典

# 2. 程序入口

if __name__ == "__main__":

创建日志目录

初始化LyricModelEvaluator实例

调用run_full_evaluation()执行评估

打印完成信息及结果文件路径

进行验证

相关tensorboard在‘03模型构建’中有做说明,便不再赘述,进入logs目录

tensorboard --logdir="C:\Users\user\Desktop\nlp\logs\tensorboard\train"

生成验证数据

05运行推理

终端执行

python scripts/05_gradio_app.py

代码架构核心设计说明

脚本运行架构

模块化分层设计:模型层:负责加载和使用深度学习模型生成歌词处理层:包含文本预处理、后处理和参数调整逻辑界面层:使用 Gradio 构建交互式 Web 界面历史层:记录生成历史和参数,便于追溯
生成算法核心:增量生成:基于种子文本逐步预测下一个词
可调采样策略:温度参数(temperature)控制随机性(低→保守,高→创意)Top-k 采样限制候选词范围,提升生成质量停止机制:遇到 padding token 或达到最大长度时终止
用户交互优化:预设模式:提供 "保守创作" 到 "自由创作" 的预设参数组合反馈:显示生成参数和时间信息多样本生成:支持同时生成多个版本歌词结果格式化:自动添加标点和换行,提升可读性
工程化设计:资源检查:启动时验证模型和配置文件存在性异常处理:捕获加载和生成过程中的异常历史记录:保存生成参数和结果到 JSON 文件性能优化:限制生成长度和样本数量,适配资源约束

# AI歌词生成应用架构(Gradio界面版)

# 1. 核心应用类:LyricGeneratorApp

class LyricGeneratorApp:

成员变量:

- model_path: 模型文件路径

- model: 加载的Keras模型

- tokenizer: 分词器

- config: 模型配置

- seq_len: 模型输入序列长度

- generation_history: 生成历史记录

# 初始化与资源加载

方法 __init__(model_path):

设置模型路径

调用load_model_and_resources()加载模型、分词器、配置

初始化生成历史记录

方法 load_model_and_resources():

加载Keras模型文件

从pickle文件加载分词器

从json文件加载配置

提取模型输入序列长度

处理加载过程中的异常

# 文本处理模块

方法 preprocess_seed_text(seed_text):

清理输入文本(移除特殊字符)

使用jieba分词

返回分词后的tokens列表

方法 postprocess_generated_text(text):

清理重复词语

调用add_punctuation_and_breaks添加标点和换行

返回格式化后的文本

方法 add_punctuation_and_breaks(text):

按词数添加逗号/句号

按词数添加换行

返回格式化后的文本

# 歌词生成核心模块

方法 generate_lyrics(seed_text, max_length, temperature, top_k, num_samples):

预处理种子文本

对每个样本执行:

将种子文本转换为token序列

循环生成max_length步:

填充序列到模型要求的长度

使用模型预测下一个词的概率分布

应用温度参数调整概率分布

使用Top-k采样选择下一个词

停止条件:遇到padding token或达到最大长度

将生成的token序列转换为文本

返回生成的歌词列表

# 历史记录模块

方法 save_generation_history(seed_text, parameters, generated_text):

构建历史记录条目(时间戳、参数、结果)

添加到内存中的历史记录

保存到json文件

# 界面构建模块

方法 create_gradio_interface():

创建Gradio界面实例

添加标题和说明Markdown

定义输入区域:

种子文本输入框

创作模式下拉菜单

高级参数滑块(最大长度、温度、Top-k、样本数)

定义输出区域:

生成歌词文本框

生成信息文本框

绑定事件:

创作模式改变时更新参数滑块

点击生成按钮时调用generate_and_display

添加示例输入

添加页脚说明

返回界面实例

方法 generate_and_display(seed_text, max_length, temperature, top_k, num_samples):

验证和调整参数

调用generate_lyrics生成歌词

格式化输出结果

保存生成历史

返回生成结果和参数信息

# 应用启动模块

方法 launch_app(share, debug, server_port):

检查模型是否加载

创建Gradio界面

启动界面服务

# 2. 程序入口

def main():

检查必要文件是否存在(模型、分词器、配置)

若文件缺失,提示用户先运行数据预处理和模型训练脚本

否则:

创建LyricGeneratorApp实例

启动应用(设置端口、共享选项等)

处理键盘中断和异常

# 3. 交互流程概览

用户输入种子文本 → 预处理 → 模型生成歌词 → 后处理格式化 → 显示结果 → 保存历史记录

运行应用网站

注意,要在浏览器输入:http://localhost:7860

演示效果(图片、视频)

项目展望

现阶段,项目的架构流程已经跑通,接下来重点要做的是模型调优,以及优化前段展示等工作,希望基于本项目,可以带动大家学习人工智能NLP领域的兴趣和积极性,一起完善、共建这个项目,开发一个app来实现个性化的歌词生成!

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

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

相关文章

数据结构1 ——数据结构的基本概念+一点点算法

数据结构算法程序设计 什么是数据结构 数据(data):符号集合,处理对象。 数据元素(data element),由数据项(data item) 组成。 关键字(key)识别…

每日八股文7.1

每日八股-7.1 网络1.能说说 TCP 报文头部都包含哪些关键字段吗?2.TCP 是如何确保数据传输的可靠性的?你能详细谈谈吗?3.你能解释一下 TCP 滑动窗口是如何设计的?它主要解决了什么问题?4.TCP 协议的拥塞控制是如何实现的…

高性能 List 转 Map 解决方案(10,000 元素)

文章目录 前言一、问题背景:为什么List转Map如此重要?二、基础方法对比:Stream vs For循环三、性能优化关键点四、面试回答技巧 前言 遇到一个有意思的面试题,如标题所说,当10,000条数据的List需要转Map,如…

今日行情明日机会——20250701

上证指数缩量收阳线,形成日线上涨中继,个股上涨和下跌总体持平。 深证指数量能持续放大,即将回补缺口位,短线注意周三或周四的调整。 2025年7月1日涨停股主要行业方向分析 1. 芯片(17家涨停,国产替代&…

P1312 [NOIP 2011 提高组] Mayan 游戏

题目描述 Mayan puzzle 是最近流行起来的一个游戏。游戏界面是一个 7 7 7 行 5 \times5 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上。游戏通关是指在规定的步数内消除所有…

Spring Boot 2 多模块项目中配置文件的加载顺序

Spring Boot 2 多模块项目中配置文件的加载顺序 在 Spring Boot 2 多模块项目中,配置文件的加载遵循特定的顺序规则。了解这些规则对于正确管理多模块应用的配置至关重要。 一、默认配置文件加载顺序 Spring Boot 会按照以下顺序加载 application.properties 或 …

边界的艺术:支持向量机与统计学习时代的王者

当扬勒丘恩的卷积神经网络LeNet在90年代初于手写数字识别领域绽放光芒,却因计算与数据的桎梏未能点燃更广泛的燎原之火时,人工智能,特别是其子领域机器学习,正步入一个理论深化与方法论多元化的关键时期。经历了符号主义通用智能探…

js filter()

listType(queryParams.value).then(response > {filterTable.value response.rows.slice(1); // 只显示前3条数据;filterTable.value filterTable.value.filter(item > {return wnSensorsList.value.some(sensorsgroup > {return sensorsgroup.sensorType item.cod…

Python 库 包 nltk (Natural Language Toolkit)

文章目录 🧰 一、nltk 的主要功能✅ 文本处理功能✅ 内置语料库(Corpora) 📦 二、安装与使用1. 安装 nltk2. 下载语料库(第一次使用时需要下载) 🔍 三、常用功能示例示例 1:分词示例…

设计模式之房产中介——代理模式

手撕设计模式之房产中介——代理模式 1.业务需求 ​ 大家好,我是菠菜啊,好久不见,今天给大家带来的是——代理模式。老规矩,在介绍这期内容前,我们先来看看这样的需求:我们有一套房产需要出售&#xff0c…

Unity进阶课程【六】Android、ios、Pad 终端设备打包局域网IP调试、USB调试、性能检测、控制台打印日志等、C#

Unity打包 Android、ios、Pad 终端设备局域网IP调试、USB调试 今天咱们继续进阶课程,定期更新,有想学习的不懂的地方也可以告诉我。 提示:内容纯个人编写,欢迎评论点赞,来指正我。 文章目录 Unity打包 Android、ios、P…

c++中的mutex同步机制与多线程同步实现

C 中的 std::mutex 与多线程同步 在多线程编程中,互斥锁(Mutex) 是一种同步机制,用于保护共享资源(如变量、数据结构)免受数据竞争(Data Race)的影响。C 标准库中的 std::mutex 提供…

网络安全2023—新安全新发展

关于绿盟科技 绿盟科技集团股份有限公司(以下简称绿盟科技),成立于 2000 年 4 月,总部位于北京。公司于 2014 年 1 月 29 日在深圳证券交易所创业板上市,证券代码:300369。绿盟科技在国内设有 50余个分支机构,为政府、金融、运营商、能源、交通、科教文卫等行业用户与各…

WebSocket扫盲

WebSocket 是一种网络通信协议,它允许在单个 TCP 连接上进行全双工、双向的实时通信。它是为了解决传统 HTTP 协议在实时交互应用中的局限性而设计的。 核心概念和特点 解决 HTTP 的痛点: 单向性: HTTP 是请求-响应模式。客户端发起请求&…

Springboot整合高德地图

1.登录高德开放平台 高德开放平台 | 高德地图API 2.获取密钥key 1.点击控制台 2.创建新应用 3.添加key 4.创建key 5.获取key 3.java整合 1.高德配置类 package com.thk.controller.map;import org.springframework.beans.factory.annotation.Value; import org.springfram…

【SQL知识】PDO 和 MySQLi 的区别

目录 简介 主要区别 预处理语句示例比较 PDO 示例 MySQLi 示例 选择建议 简介 PDO (PHP Data Objects) 和 MySQLi (MySQL Improved) 都是 PHP 中用于数据库操作的扩展,都支持预处理语句,但有一些重要区别: 主要区别 数据库支持 PDO&am…

python打卡 DAY 45 Tensorboard使用介绍

目录 一、TensorBoard 发展历史与原理 1. 演进历程 2. 核心架构原理 二、TensorBoard 核心功能操作 1. 基础配置方法 2. 常用功能速查表 三、CIFAR10 实战演示 1. MLP 模型监控配置 2. CNN 特征可视化 四、TensorBoard 高级功能 1. 超参数调优 2. 3D点云可视化 五、…

Swift 中 Result 类型全解析:从基础到进阶

在现代 iOS 开发中,Swift 的 Result 类型是处理同步与异步错误的一大利器。相比传统的 throws / do-catch 语法,它更清晰、结构化,也更易于组合式编程。 本文将带你从 Result 的基础定义出发,逐步深入其在实际项目中的多种应用&am…

Github 2025-06-28 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2025-06-28统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Rust实现的非官方Bitwarden兼容服务器 创建周期:2317 天开发语言:Rust协议类型:GNU Affero General Public License v3.0Star数量…

python 写一个判断文本中是否有手机号的函数,并提取出文本中的手机号

我们需要判断文本中是否有手机号,并提取出手机号。 中国大陆的手机号规则: 1. 通常为11位数字。 2. 目前手机号段分配如下: - 移动号段:134(0-8)、135、136、137、138、139、147、148、150、151、152、157、158、159、172、178、1…