


摘? 要:文本生成技術在近年開始深受研究者的青睞,其中就包括了古詩和歌詞的自動生成。文章設計了一個基于深度學習的歌詞與古詩自動生成系統。生成過程主要包括了數據預處理、歌詞和古詩生成模型搭建、歌詞和古詩生成模型訓練、使用訓練好的模型生成歌詞和古詩。通過測試,該歌詞和古詩生成系統比傳統的機器寫作系統效果更好,語義更準確。
關鍵詞:自動生成;深度學習;訓練模型
中圖分類號:TP391.41 ? ? ?文獻標識碼:A 文章編號:2096-4706(2021)01-0025-03
Design of Automatic Generation System of Lyrics and Ancient Poems
Based on Deep Learning
PENG Tao
(Jiangxi Youth Vocational College,Nanchang? 330045,China)
Abstract:Text generation technology has been deeply loved by researchers in recent years,including the automatic generation of ancient poems and lyrics. This paper designs an automatic generation system of lyrics and ancient poems based on deep learning. The generation process mainly includes data preprocessing,lyrics and ancient poems generation model building,lyrics and ancient poems generation model training,using the trained model to generate lyrics and ancient poems. Through the test,the lyrics and ancient poems generation system has better effect and more accurate semantics than the traditional machine writing system.
Keywords:automatic generation;deep learning;training model
0? 引? 言
古詩作為中國古代文學藝術的結晶,是中華民族文化藝術寶庫中非常重要的部分。那些歷久彌新的古詩展示了古代文人墨客的多彩生活,更包含了中國國民精神的全部符碼。歌詞作為音樂的核心,美妙的音樂必然少不了高品質的歌詞,所以歌詞和古詩自動生成技術的研究是非常有意義的。筆者在教授計算機課程過程中,發現班上一些學生對歌詞和古詩也很感興趣,在業余時間,就帶領這些學生利用所學的深度學習知識設計開發了歌詞和古詩自動生成系統,該系統已經進入測試階段,目前能夠較好地完成歌詞和古詩自動生成。該系統的開發,不但將所學知識應用于實踐,讓學生體會到所學知識的用武之地,還陶冶學生了情操,積極響應國家提出的課程思政教育,積極推進素質教育。
1? 系統功能概述
基于深度學習的歌詞和古詩自動生成系統是通過神經網絡對數據集進行學習和語義分析后訓練出模型,再利用模型和GUI圖形界面為用戶提供古詩和歌詞生成服務的系統。對于歌詞生成來說,用戶需要先輸入10個字作為歌詞的前奏,系統會根據前10個字預測下一個字,以此類推,當然系統會自動分析一句歌詞什么時候結束,用戶可以根據自己的喜好生成大量的歌詞文本,再加以修飾,效果就會非常好。對于古詩生成來說,可以利用關鍵字生成古詩或者藏頭詩,用戶可以自己輸入關鍵字,非常的方便,生成的古詩格式是保證正確的。系統流程圖如圖1所示。
本系統的核心功能:
(1)生成歌詞:通過用戶輸入的歌詞前奏,利用系統的模型生成歌詞文本。
(2)生成古詩:通過用戶輸入關鍵字,利用模型生成意境相似的古詩。
(3)生成藏頭詩:通過用戶輸入4個關鍵字,利用模型生成藏頭詩。
基于深度學習的歌詞和古詩自動生成系統由多個模塊構成,總體可以分為服務于LSTM神經網絡的數據預處理模塊、LSTM神經網絡模塊和GUI服務模塊。數據預處理模塊主要是對3.4萬首中文歌詞和10.6萬首傳統古詩進行預處理,轉換成One-Hot編碼,神經網絡才能進行矩陣計算、學習。LSTM神經網絡模塊是最核心的模塊,該模塊是歌詞和古詩生成最關鍵的部分,訓練參數的選擇十分重要,需要通過不斷進行對比、調參,記錄損失值和準確率來最終確定模型參數,通過用戶交互界面,方便用戶使用該系統。
在LSTM神經網絡模塊中分為訓練模塊和生成模塊,首先必須有足夠的數據用于訓練模塊,該模塊是最重要的模塊,訓練之后要保存模型,用于重構模型以生成歌詞和古詩。可以說訓練模塊的獨立的,最終只有生成模塊會有數據交互,同時與GUI界面關聯起來。本系統的神經網絡結構使用的是RNN循環神經網絡以及LSTM長短期記憶模型用于訓練。深度學習框架使用TensorFlow和Keras,激活函數使用softmax,損失函數使用交叉熵損失函數和sequence_loss函數,優化器使用Adam。
本文使用中華詩詞庫和3.4萬首中文歌兩個數據集進行訓練和效果測試,建立兩個文本生成模型并進行訓練,學習得到較優的文本生成模型。能夠實現端到端隨機生成一首古詩或給出關鍵字的藏頭詩以及具有語義的歌詞。
數據預處理模塊是準備工作,在深度學習領域當中,準備數據是非常煩瑣的工作,本系統研究的中文歌詞沒有開源的數據集可供使用,需要爬蟲獲取,古詩數據集是開源的中華詩詞庫,JSON格式。數據操作流程為:
(1)去除指定無用的符號。
(2)文本只保留漢字。
(3)將文本轉為向量并輸入算法中。
最后則是GUI服務模塊,使用Tkinter實現,是Python自帶的標準圖形庫,設計人機交互界面,便于用戶進行相關操作。
系統整體結構圖如圖2所示。
2? 系統核心功能
2.1? 數據預處理
數據預處理主要包括了爬取歌詞、收集古詩、文本篩選、文本向量化和功能性處理。爬蟲主要運用于歌詞的獲取,本系統采用Python的爬蟲框架Pyspider爬取了非常多歌詞,但是不能直接用于訓練,要先手動刪除不需要的標點符號,留下中文歌詞,對于有些用網絡詞語改編的歌詞也不作為訓練集。古詩使用開源的中華詩詞庫。數據中可能存在部分符號的問題,例如中英文符號混用、每行存在多個冒號、數據中存在其他符號等問題,因此需要對數據進行清洗。通過文本篩選得到了比較干凈的歌詞和古詩文本,但是這樣的文本對于神經網絡來說是不能直接訓練的。需要對歌詞和詩句進行分詞,為了最后生成的歌詞和古詩的長度的整齊性及便利性,需要先按單個字符進行拆分,對所有文本分詞處理之后應對單個字符進行向量化,每個不同的字符對應唯一的向量,便于之后計算出值后轉換為對應的詞。最后,需要統計詞頻,刪除掉出現次數較低的詞。本文歌詞數據集采用的是中文歌詞,所有歌詞存放在一個txt文檔中,每一行存儲一首歌詞;古詩數據集數據采用的是全唐詩,一共包含105 336首唐詩,數據格式為詩歌內容,存放在JSON文檔中。
2.2? 歌詞和古詩生成模型
建立歌詞和古詩生成模型,需要三個步驟:搭建、訓練和保存。
2.2.1? 搭建模型
核心結構是兩層LSTM神經網絡,需要注意的是每次都定義一個新的BasicCell,而不是定義一個BasicCell之后多次調用。LSTM神經網絡在處理序列數據方面非常有效,雖然RNN與CNN都能進行序列建模,但本質上有不同。在搭建模型過程中還使用了Embedding層,稱為嵌入層,相當于一個網絡層,在模型第一層中使用,其目的是將有索引的標簽映射到高密度低維向量,達到降維的作用,可以防止One-Hot向量維度過大導致的運算速度過慢的問題,該層通常用于文本數據建模。使用LSTM神經網絡模型還有一個必不可少的全連接層(Dense層),它能夠根據特征的組合進行分類,大大減少特征位置對分類帶來的影響。
2.2.2? 訓練模型
創建session會話進行訓練,由于訓練集比較大,所以歌詞生成模型訓練30個周期,古詩生成模型訓練100個周期。輸入每一輪的損失值,通過每輪訓練后損失值的變化判斷LSTM神經網絡模型性能是否發生欠擬合,再比較LSTM神經網絡模型在訓練集和測試集的正確率判斷LSTM神經網絡模型是否發生過擬合。若發生欠擬合則應該增加LSTM神經網絡模型的深度或者增加訓練的時間,若發生過擬合則應該采取正則化的方法或者Dropout抑制過擬合。
2.2.3? 保存模型
歌詞生成模型保存為H5文件,古詩生成模型保存為DATA-00000-OF-00001文件。Keras框架使用model.save()方法保存模型,TensorFlow框架使用tf.train.Saver類來保存模型。
2.3? 生成歌詞和古詩
2.3.1? 歌詞生成
生成歌詞需要用戶先輸入10個字,定義“抽樣函數”,作用是從模型中得出當前文本的下一個字符的概率分布,將分布重新調整,根據重新加權的分布隨機抽樣下一個字符,在當前文本的末尾添加新字符。定義生成歌詞函數,通過調用“抽樣函數”和model.predict()方法,用前10個字預測下一個字,直到for循環結束。
生成歌詞的核心代碼為:
def create_music(gen):
for i in range(300):
x_p = np.zeros((1, maxL))
for t, char in enum(sent):
x_p[0, t] = chartoid[char]
forecast= model.predict(x_p, verbose=0)[0]
nextIndex = sample(forecast, diversity)
nextChar = idtochar[nextIndex]
gen += nextChar
return gen[1:]
2.3.2? 古詩生成
生成古詩分為用戶輸入關鍵字生成古詩和輸入4個字藏頭詩,每次預測其實是根據一個序列預測一個新的詞,需要詞的多樣化,因此可以按預測結果的概率分布進行抽樣。藏頭詩就是固定每句詩的第一個字,按照藏頭來預測該行的詞。
生成古詩的核心代碼為:
def create_poetry():
st= sess.run(ini_s)
while :
x = np.zeros((b_size, 1))
x[:, 0] = char2id[c]
p, st = sess.run([probs, last_s], feed_dict={X: x, init_s: st})
p = np.squeeze(p)
pos = int(np.sorted(np.sum(p), np.random.rand() * np.sum(p)))
c = id2char[pos]
return gen[1:36]
系統主界面如圖3所示。
古詩生成界面如圖4所示。
歌詞生成界面如圖5所示。
3? 結? 論
本文在闡述完開發基于深度學習的歌詞和古詩自動生成系統的背景和意義,完成系統設計后,使用Python語言對系統進行實現,主要使用了RNN以及LSTM神經網絡模型進行歌詞和古詩的自動生成。生成過程設置兩個階段,每個階段包括一個RNN檢測模型,使用中華詩詞庫數據集訓練得到生成古詩的模型,使用中文歌詞數據集訓練得到生成歌詞的模型,通過訓練好的RNN進行古詩和歌詞的生成,得到具有語義的古詩和歌詞。
參考文獻:
[1] 池云仙,趙書良,羅燕,等.基于詞頻統計規律的文本數據預處理方法 [J].計算機科學,2017,44(10):276-282+288.
[2] 肖燁晗.基于自然語言生成技術的人工智能應用 [J].科技傳播,2019,11(7):155-156.
[3] 馬然.基于深度學習的自然場景文本識別系統的設計與實現 [D].長春:吉林大學,2015.
[4] 段軍紅,李曉宇,慕德俊.一種非完全標注的文本分類訓練方法 [J].微處理機,2019,40(1):20-24.
[5] 張克君,史泰猛,李偉男,等.基于統計語言模型改進的Word2Vec優化策略研究 [J].中文信息學報,2019,33(7):11-19.
作者簡介:彭濤(1974—),女,漢族,江西龍南人,講師,碩士,主要研究方向:計算機應用。