目錄
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來實現個性化的歌詞生成!