• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于RNN 模型與LSTM 模型的機器作詩研究*

      2021-10-08 00:51:16武麗芬嚴學勇
      科技創(chuàng)新與應用 2021年27期
      關鍵詞:唐詩梯度交叉

      武麗芬,嚴學勇,趙 吉

      (1.晉中學院 數(shù)學系,山西 晉中 030619;2.中國聯(lián)通晉中分公司,山西 晉中 030601;3.晉中學院 信息技術與工程系,山西 晉中 030619)

      詩歌是人類文學皇冠上的明珠,讓機器自動生成詩歌,在人工智能領域極具挑戰(zhàn)性,傳統(tǒng)的詩歌生成方法主要有Word Salada(詞語沙拉)、基于模板和模式的方法、基于遺傳算法的方法、基于摘要生成的方法、基于統(tǒng)計機器翻譯的方法。這些傳統(tǒng)方法非常依賴詩詞領域專業(yè)知識,需要專家設計大量的人工規(guī)則,對生成詩詞的格律和質量進行約束,同時遷移能力很差。隨著深度學習技術的發(fā)展,詩歌生成的研究進入了一個嶄新階段,本文將唐代詩歌作為研究對象,對比了兩種遞歸神經網(wǎng)絡模型在唐詩寫作方面的效果。

      1 模型概述

      1.1 循環(huán)神經網(wǎng)絡(RNN)概述及其結構

      循環(huán)神經網(wǎng)絡(RNN)具有其特有的記憶功能,是除卷積神經網(wǎng)絡之外深度學習中使用頻率最高的一種網(wǎng)絡結構。在傳統(tǒng)神經網(wǎng)絡中,各個網(wǎng)絡層之間是全連接的,各層的各個神經元是獨立無連接的,而RNN 網(wǎng)絡則能把序列化的、與時間相關的輸入數(shù)據(jù)間的關系表達出來。類似于在一句唐詩中,某個詞的出現(xiàn)必定與前幾個甚至前幾句詩中的詞有關,完美狀態(tài)下這樣的循環(huán)神經網(wǎng)絡可以記憶任意長度的序列化信息,其結構示意圖如圖1 所示,Xt為輸入數(shù)據(jù),A 為記憶單元,X0輸入到A 后得到的中間信息,再把中間信息輸給X1,以此類推。

      圖1 RNN 結構展開示意圖

      1.2 長短期記憶網(wǎng)絡(LSTM)概述及其結構

      LSTM 本質是一種特殊的RNN,其優(yōu)勢在于不僅可以像RNN 一樣記憶先前輸入的數(shù)據(jù)特征,還可以選擇性遺忘一些對當前模型預測結果作用不大的特征信息。LSTM 是由Hochreiter &Schmidhuber 提出的,之后Alex Graves 對其進行了改進和推廣,在處理很多與時序性相關的問題上,LSTM 模型均被證明具備突出的預測能力。RNN 訓練參數(shù)是采用梯度下降法計算曲線的局部最小值,當略微越過最低點時,在梯度相反方向上會出現(xiàn)較大的梯度,這就會使得出現(xiàn)反向遠離要求的局部極小值,進入重復尋求最小值的過程[1]。隨著計算次數(shù)的增加,梯度很快減小,再次接近這個最小值需要運算很長時間,出現(xiàn)梯度消失現(xiàn)象[2],而LSTM 網(wǎng)絡很好地解決了RNN 網(wǎng)絡這一缺陷,其結構示意圖如圖2 所示。

      圖2 LSTM 示意圖

      LSTM 是具有循環(huán)神經網(wǎng)絡模塊的鏈式形式[3],在LSTM 結構中存在3 個門單元,分別是輸入門,忘記門,輸出門[1]。如當前層輸入數(shù)據(jù)xt進入和上一層輸出的中間信息ht-1組合之后通過激活函數(shù)(sigmoid)得到一個ft值,這個ft值全部在0 到1 的范圍內,ft內將會和上一層輸出的Ct-1作乘法操作組合在一起,相當于進行一個有選擇的丟棄。Ct是LSTM 網(wǎng)絡當中永久維護更新的一個參數(shù),由于每一階段需要保留和丟棄的信息不一致,故每一階段都需要得出當前階段的Ct值。上述信息組合會得到一個it,it為當前層要保留的信息,it與Ct組合將控制參數(shù)Ct進行更新得到新的Ct,記為nCt,接著對本層Ct進行最終更新,更新方法為Ct=ft*Ct-1+it*nCt。更新后需要根據(jù)輸入ht-1和xt來判斷輸出的狀態(tài)特征,輸入經過sigmoid 層得到判斷條件,然后經過tanh 層得到一個-1 到1 之間的向量,該向量與輸出門得到的判斷條件相乘得到最終該LSTM 單元的輸出。最終輸出ht=ot*tanh(Ct),其中ot=σ(W0[ht-1,xt]+b0,為當前層輸入數(shù)據(jù)xt和上一層輸出的中間數(shù)據(jù)ht-1組合后得到的尚未有選擇保留和遺忘的數(shù)據(jù)。

      2 數(shù)據(jù)采集與預處理

      2.1 數(shù)據(jù)獲取

      采用Python 網(wǎng)絡爬蟲技術在“全唐詩網(wǎng)”(https://www.gushiwen.org)提取目標數(shù)據(jù),調用re.compile()方法提前編譯提取的正則表達式,避免每次提取時重新編譯導致效率降低,利用map()方法進行映射操作,將各自對應位置的元素用“:”連接起來,map 方法返回由全部唐詩字符串構成的列表。

      2.2 數(shù)據(jù)預處理

      對爬取到的數(shù)據(jù)進行預處理,舍棄字符串中包含的“-”“*”“_”等特殊符號,并通過原詩查詢予以校正。把唐詩語料庫中出現(xiàn)的漢字組成的詞匯表導出到映射表,其鍵為漢字,值為該漢字映射的數(shù)值,由映射值構成唐詩數(shù)據(jù)。

      3 模型實現(xiàn)

      利用TensorFlow 的tf.contrib.rnn.BasicRNNCell()方法定義一個循環(huán)神經網(wǎng)絡單元,將該單元堆疊為兩層的神經網(wǎng)絡。根據(jù)輸出數(shù)據(jù)是否為空判斷初始化神經網(wǎng)絡的狀態(tài),利用tf.nn.embedding_lookup()構造輸入矩陣,得到神經網(wǎng)絡的輸出,利用tf.nn.bias_add()將偏置項加到輸出矩陣和權重矩陣的乘積上,得到網(wǎng)絡最后輸出。

      3.1 模型訓練

      采用one-hot 編碼轉化,利用tf.nn.softmax_cross_entropy_with_logits()傳入真實值和預測值(即神經網(wǎng)絡的最后輸出)計算交叉熵損失,這里得出的交叉熵損失為全部漢字的交叉熵損失,維度較高,因此利用tf.reduce_mean()將損失降維并求均值。再利用tf.train.AdamOptimizer(learning_rate).minimize(loss)進行梯度下降最小化損失。最后將損失均值,最小化損失等op 返回供后續(xù)模型調用或訓練使用。

      3.2 模型寫詩

      利用tf.nn.softmax()方法將神經網(wǎng)絡最后輸出轉化為各詞出現(xiàn)的概率以及神經網(wǎng)絡當前狀態(tài)。

      3.3 模型訓練與調用

      創(chuàng)建名為inference 的模塊,在該模塊下創(chuàng)建名為tang_poems.py 的編碼文件,封裝一個名為run_training 的方法調用數(shù)據(jù)預處理得到的唐詩向量數(shù)據(jù)、漢字映射表及詞匯表。

      在預測值漢字轉化方法中,需要傳入神經網(wǎng)絡的最終預測值以及詞匯表,根據(jù)漢字使用頻度,定義是一個長度為6030 的數(shù)組,數(shù)組元素代表對應詞匯表中各漢字出現(xiàn)的概率。由于神經網(wǎng)絡訓練完成后權重矩陣一定,意味著當輸入某個漢字時,神經網(wǎng)絡預測出的下一個漢字是固定的。也就是說多次傳入某個漢字調用模型寫詩,模型所作的詩句是一定的。這顯然與作詩初衷不符。若讓機器能夠創(chuàng)作出不同詩句,則必須在詞預測上加入一些隨機性的因素,每次預測不選擇出現(xiàn)概率最高的漢字,而是將概率映射到一個區(qū)間上,在區(qū)間上隨機采樣,輸出概率較大的漢字對應區(qū)間較大,被采樣的概率也較大,但程序也有小概率會選擇到其他字。

      在實現(xiàn)上則需要將概率表進行升級,對概率表元素重新賦值,使其第i 個元素變?yōu)樵怕时砬癷 個元素的和,生成一個服從均勻分布在[0,1)之間的隨機值,尋找該隨機值在新概率表中的位置,將該位置作為本次預測的結果,恰好實現(xiàn)隨機又不完全隨機的目的。例如原概率表為[0.1,0.2,0.18,0.25,0.21,0.06],升級后的新概率表為[0.1,0.3,0.48,0.73,0.94,1.0],生成的隨機值為0.4,那么其在新概率表中索引到的下標為2,也就是根據(jù)隨機值0.4 索引到概率區(qū)間[0,0.48]上,選取到該區(qū)間內的最后一個概率值,而這個概率值又是隨機的(原概率表中各漢字對應的概率排列并無規(guī)律可言),即本質是在[0,0.48]這個概率區(qū)間上隨機進行采樣。

      4 測試

      4.1 交叉熵損失觀察

      系統(tǒng)本質上屬于分類問題,因此采用交叉熵構造損失函數(shù)。交叉熵公式為:L=-y*logP+-(1-y)*log(1-P)。其中y 為神經網(wǎng)絡最后一層的輸出值,P 為該值經過softmax 激活后的概率值,概率值越大說明預測的事件越穩(wěn)定,即熵值越低,而-logP 函數(shù)圖像恰好擬合了熵值和概率值之間的映射關系,并且每個樣本預測值為分類號0或1,0 表示預測結果不是該漢字,1 表示預測結果是該漢字。那么當y 為0 或1 時,L 中總會有一部分為0,另一部分恰好為交叉熵值,則可以一步計算出預測結果為0或1 的樣本的交叉熵損失值。

      4.2 兩種模型對比測試

      調用RNN 模型和LSTM 模型,各隨機生成20 句唐詩,在Robo 3t 下觀察RNN 與LSTM 各自作詩水平,RNN 模型平均交叉熵損失觀察結果為6.53426236 429408;LSTM模型平均交叉熵損失觀察結果為4.26054176463658。

      4.3 LSTM 模型的寫詩水平明顯優(yōu)于RNN 模型

      (1)在交叉熵損失方面。LSTM 的平均交叉熵損失和最低交叉熵損失都顯著優(yōu)于RNN,RNN 的最低交叉熵損失均出現(xiàn)在第一代訓練批次中,且在訓練后期的損失值反而高于其平均損失,說明RNN 的損失函數(shù)在經過前幾代訓練后得到收斂。反觀LSTM 的最低損失多數(shù)出現(xiàn)在訓練后期,說明其訓練過程更加有效,隨著訓練迭代次數(shù)不斷增加能夠持續(xù)降低損失值。

      (2)在作詩水平方面。RNN 所作詩句明顯不符合作詩預期,大多為一個字或三到四個字,并未連成完整詩句。而LSTM 所作詩句不僅對仗工整,且與唐詩相似度極高。測試結果有力證明在作詩方面LSTM 模型優(yōu)于RNN模型。

      5 結束語

      通過模型測試循環(huán)神經網(wǎng)絡(RNN)與長短期記憶網(wǎng)絡(LSTM)在寫詩方面的效果比較,得出LIST 模型明顯優(yōu)于RNN 模型。可見LSTM 模型善于建立時間序列數(shù)據(jù)間的非線性關系,適用于詞句的預測。RNN 神經網(wǎng)絡的訓練過程采用BPTT 算法,隨著遞歸層數(shù)的增加,計算梯度下降時,會出現(xiàn)梯度消失和梯度爆炸問題,嚴重影響模型效果,而LSTM 則從神經單元的結構上對此進行了優(yōu)化[1],大大減小了其訓練過程中梯度消失和梯度爆炸的問題。RNN 只能夠處理短期依賴問題,而LSTM 得益于其特有的神經元內部結構使之既能夠處理短期依賴問題,又能夠處理長期依賴問題。在處理時序性信息時效果明顯優(yōu)于RNN,在自然語言處理應用方面比RNN 更高效。

      猜你喜歡
      唐詩梯度交叉
      一個改進的WYL型三項共軛梯度法
      唐詩寫柳之妙
      中華詩詞(2020年5期)2020-12-14 07:44:50
      春夜講唐詩記
      文苑(2020年7期)2020-08-12 09:36:30
      一種自適應Dai-Liao共軛梯度法
      唐詩里的日與月之爭
      文苑(2020年5期)2020-06-16 03:18:32
      “六法”巧解分式方程
      一類扭積形式的梯度近Ricci孤立子
      唐詩賞讀
      連一連
      基于Fast-ICA的Wigner-Ville分布交叉項消除方法
      計算機工程(2015年8期)2015-07-03 12:19:54
      通山县| 佛冈县| 吴桥县| 泽普县| 辽中县| 陆良县| 胶州市| 灵寿县| 罗源县| 乐亭县| 扎囊县| 益阳市| 临海市| 江孜县| 宁都县| 阳曲县| 垣曲县| 重庆市| 通海县| 岫岩| 巴南区| 新龙县| 金秀| 平谷区| 牙克石市| 彰化市| 葫芦岛市| 古丈县| 弥渡县| 瓮安县| 柘城县| 襄垣县| 开原市| 北宁市| 万荣县| 安吉县| 新沂市| 东丽区| 江华| 横山县| 本溪市|