【NLP】自然語言項目設計04

目錄

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…