• 
    

    
    

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

      基于Seq2Seq 模型的自定義古詩生成*

      2020-06-11 01:03:22王樂為張應(yīng)龍
      計算機與生活 2020年6期
      關(guān)鍵詞:五言七言關(guān)鍵字

      王樂為,余 鷹,張應(yīng)龍

      華東交通大學(xué) 軟件學(xué)院,南昌330013

      1 引言

      在文本生成領(lǐng)域,古詩生成一直是專家學(xué)者們關(guān)注與研究的熱點內(nèi)容之一,其中常用的模型包括:基于給定規(guī)則的生成模型[1-2]、基于文本生成算法的生成模型[3-4]、自動摘要模型[5]和基于統(tǒng)計的機器翻譯模型[6-7]等。近年來,伴隨著深度學(xué)習(xí)技術(shù)的發(fā)展,基于循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN),如長短時記憶網(wǎng)絡(luò)(long short-term memory,LSTM)、門控循環(huán)單元(gated recurrent unit,GRU)等[8],也被廣泛應(yīng)用于古詩生成,并取得了一定的效果。

      在進行古詩生成時,人們往往希望能得到一段與某種意境相符的詩句,為此會提前輸入幾個表達意境的關(guān)鍵字或詞,對古詩的生成進行控制指導(dǎo)。當(dāng)采用經(jīng)典RNN 模型生成詩句時,首先預(yù)先給定一個關(guān)鍵字,然后系統(tǒng)會生成以該關(guān)鍵字為起始的詩句,隨機性較大,詩句所蘊含的意境一般很難達到要求。例如,要生成一句能表達在船中把酒言歡意境的詩句,若采用經(jīng)典RNN 模型,則只能分別給定“船”或“酒”作為起始字來生成詩句,很難將二者同時融合在一句詩中,從而達不到一種既有“船”又有“酒”的意境效果。這是因為,經(jīng)典RNN 模型雖然在訓(xùn)練階段采用了N-N模式,即輸入N個文字,輸出N個文字,但在預(yù)測階段則采用了1-N模式,即輸入1 個關(guān)鍵字,生成N個文字。由于只能控制起始字符,使得生成的詩句隨機性較大,最終的生成效果無法控制。

      經(jīng)典RNN 模型要求輸入和輸出序列等長,但現(xiàn)實中大部分問題序列是不等長的,序列到序列模型(sequence to sequence,Seq2Seq)對此進行了改進。Seq2Seq 模型又稱Encoder-Decoder 模型,它突破了輸入與輸出序列必須等長的限制,在Encoder 端輸入N個文字,在經(jīng)編碼后傳給Decoder 端,再解碼成M個文字。文獻[9-10]基于Seq2Seq 模型,實現(xiàn)了基于多個文字的古詩生成,但其缺點在于僅對第一句詩的輸出產(chǎn)生影響,無法將輸入的關(guān)鍵字信息體現(xiàn)在整首古詩中。Attention 機制將Encoder 端傳給Decoder端的編碼進行了針對性加權(quán)合成,在不同時刻賦予Decoder端不同的Encoder編碼,即它能夠在不同的時刻考慮不同的輸入信息,然后根據(jù)每個輸入文字生成包含該文字的詩句。加入Attention 機制[11]的Seq2Seq模型結(jié)構(gòu)在機器翻譯上已取得非常好的效果,在機器翻譯任務(wù)上,輸入端的每個詞在輸出端往往都有其對應(yīng)的翻譯詞。

      因此,本文基于Seq2Seq 模型構(gòu)建古詩生成模型,將關(guān)鍵字作為源語言,包含關(guān)鍵字的古詩句作為目標(biāo)語言,并引入Attention 機制對其進行訓(xùn)練,克服了文獻[8-10]所提算法的缺點,使得最終生成的古詩每一句內(nèi)容可控。在預(yù)測階段,如果從描述性信息中提取的關(guān)鍵字不足,則通過word2vec[12]方法,尋找相似的關(guān)鍵字對輸入信息進行補充。此外,針對已有的古詩生成模型在生成五言或七言古詩時隨意性較大的問題,通過加入格式控制符,結(jié)合Attention 機制,有效地控制了古詩的體裁。

      2 相關(guān)工作

      2.1 Seq2Seq 模型

      Seq2Seq 模型又稱作Encoder-Decoder 模型[13],設(shè)有一組輸入序列集合XN和輸出序列集合YN,N表示樣本總數(shù),第i個樣本的輸入和輸出序列分別為xi1,xi2,…,xis和yi1,yi2,…,yip。s和p分別代表第i個樣本的輸入和輸出序列的字符個數(shù)。該模型可以計算出在某輸入序列樣本xi發(fā)生的情況下,輸出序列樣本yi發(fā)生的概率,其中vi表示第i個樣本的輸入序列xi1,xi2,…,xis經(jīng)Encoder 端得到的隱含狀態(tài)向量。

      Decoder 端在t時刻第i個樣本的概率分布為P(yit|vi,yi1,yi2,…,yi(t-1))=f(hi(t-1),yi(t-1),vi),其與Decoder端上一時刻的隱含狀態(tài)hi(t-1)以及輸出yi(t-1)還有Encoder 端的狀態(tài)向量vi相關(guān),其中f(?)是Decoder端中的LSTM 的輸出。因此Seq2Seq 模型需使輸入訓(xùn)練樣本的輸入序列能得到對應(yīng)輸出序列的概率之和最 大,對 應(yīng) 的對數(shù)似然條件概率函數(shù)為,使之最大化,θ是待確定的模型參數(shù)。

      2.2 Attention 機制

      最基本的Seq2Seq 模型包含一個Encoder 和一個Decoder,通常的做法是將一個輸入的句子編碼成一個固定大小的狀態(tài)信息,然后作為Decoder 的初始狀態(tài),但這個狀態(tài)對于Decoder 中所有時刻都相同。隨著序列的不斷增長,Decoder 端的解碼過程將表現(xiàn)越來越差。

      加入Attention 機制后,Encoder 端可賦予輸入序列不同時刻的隱層特征不同的權(quán)重,在Decoder 端解碼的不同時刻,都會接受來自Encoder 端經(jīng)不同加權(quán)組合的信息,從而達到在不同解碼階段有著不同的輸入信息。

      假設(shè)x1,x2,…,xs為輸入序列,在Encoder 端的隱層向量為h1,h2,…,hs,另外zo為Decoder 端的初始狀態(tài)向量,計算每個隱層向量與zo的相似度a1,a2,…,as,使用softmax函數(shù)將其轉(zhuǎn)化成,傳入給Decoder 端作為輸入,根據(jù)zo和c0計算得到Decoder 端新的隱狀態(tài)向量z1,再計算Encoder 端的隱層向量與z1相似度,再得到c1,如此循環(huán),直到解碼過程全部結(jié)束。

      3 基于Seq2Seq 模型的古詩生成模型

      使用引入Attention 機制的Seq2Seq 模型進行古詩生成時,將整個過程劃分為訓(xùn)練和預(yù)測兩個階段。在訓(xùn)練階段,首先創(chuàng)建訓(xùn)練數(shù)據(jù)集,每條訓(xùn)練數(shù)據(jù)的Encoder 輸入部分包含四個關(guān)鍵字及一個格式控制符。格式控制符主要用來控制古詩的體裁,例如五言或七言。Decoder 輸出部分則為每句都包含對應(yīng)關(guān)鍵字的一首古詩。在預(yù)測階段,用戶輸入一段描述性文字,系統(tǒng)從中提取出關(guān)鍵字并傳給模型的Encoder 端,若Encoder 端的輸入不足四個關(guān)鍵字,則通過word2vec方法進行關(guān)鍵字補全。

      3.1 模型結(jié)構(gòu)

      圖1 給出了t時刻古詩生成模型的結(jié)構(gòu)圖,Encoder 端和Decoder 端均使用LSTM 模型,Encoder數(shù)據(jù)集中存放了關(guān)鍵字。在訓(xùn)練時,輸入5 個關(guān)鍵字符,用x1、x2、x3、x4、x5表示,其中x5是格式控制符,在“A”和“B”間選擇,“A”表示生成五言古詩,“B”表示生成七言古詩。h1、h2、h3、h4、h5表示在不同時刻輸入信息在Encoder 端中經(jīng)LSTM 處理輸出的對應(yīng)隱狀態(tài)。

      Fig.1 Model structure圖1 模型結(jié)構(gòu)

      首先計算在t時刻輸入Decoder 端的隱藏層狀態(tài)st-1對Encoder 每一個隱含層狀態(tài)hi的權(quán)重wt(i),如式(1)所示。

      其中,score表示st-1和hi的相似度,使用余弦相似度進行度量,如式(2)所示。

      接著利用權(quán)重wt(i)計算Encoder 端所有隱藏層狀態(tài)hi加權(quán)之和ct,即在t時刻整個Encoder 端最終輸出的狀態(tài)向量,計算方法如式(3)所示。

      在訓(xùn)練階段,需將ct和Decoder 隱藏層的t時刻狀態(tài)st-1以及t-1 時刻的真實標(biāo)簽lt-1作為t時刻Decoder 的輸入,經(jīng)LSTM 處理得到y(tǒng)t。在預(yù)測階段,則將lt-1換成t-1 時刻的實際輸出yt-1,yt的計算如式(4)所示。

      為了減少計算量,在訓(xùn)練階段,采用Sampled Softmax 作為輸出層,對應(yīng)的全連接層矩陣為,在預(yù)測階段使用普通的Softmax 作為輸出層,全連接層矩陣用Wout表示。其中f(?) 是Decoder 端中的LSTM,Wout是Decoder 端中連接LSTM 輸出的全連接層,另外st-1和ct每次都需要更新,其中ct隨著st-1的更新而更新,st的更新方法如式(5)所示。

      3.2 關(guān)鍵字補全

      為了生成一首古詩,需要先輸入一段表達需求的描述性語言,然后從這段描述性語言中提取出關(guān)鍵字作為輸入信息。當(dāng)提取的關(guān)鍵字數(shù)量不足時,需對關(guān)鍵字進行補充,但是所補充的關(guān)鍵字應(yīng)與已提取的關(guān)鍵字具有較高的相關(guān)度。因此,首先采用word2vec 方法獲取Encoder 詞庫中每個關(guān)鍵字的詞向量kwm,然后利用余弦相似度度量詞庫中的關(guān)鍵字kwm與已提取關(guān)鍵字kwn之間的相似度sim(m,n)=。

      為了簡化計算,在使用word2vec 方法時,每首古詩僅保留關(guān)鍵字部分,并將其作為word2vec方法的上下文,而不是將整首詩作為上下文。同時,將word2vec中的窗口大小設(shè)置為7,詞向量維度設(shè)置為200,選取skip-gram 模型進行處理,具體過程如圖2 所示。

      此外,在進行關(guān)鍵字補充時,如果在描述內(nèi)容中僅提取出一個關(guān)鍵字,則選取與該關(guān)鍵字相關(guān)度最高的三個作為補充;如果提取出兩個關(guān)鍵字,則隨機從與每個關(guān)鍵字相關(guān)度最高的前三個中分別選取一個作為另外兩個關(guān)鍵字;如果提取三個關(guān)鍵字,則分別計算與每個關(guān)鍵字相似度最高的前三個,取其交集作為第四個關(guān)鍵字,如果交集為空,則隨機選取三個關(guān)鍵字中的一個,再隨機選取與其相似度最高的前三個中的一個作為第四個關(guān)鍵字,具體過程如圖3所示,其中括號里的值表示相似度大小。

      Fig.2 Use word2vec to turn keywords into vectors圖2 使用word2vec將關(guān)鍵字轉(zhuǎn)化為向量

      Fig.3 Keyword completion operation圖3 關(guān)鍵字補全操作

      4 實驗與分析

      4.1 數(shù)據(jù)集構(gòu)建

      為了完成實驗,人工收集整理了四萬多首唐詩,用于構(gòu)建實驗數(shù)據(jù)集。首先將原唐詩中的八句詩轉(zhuǎn)換成兩首四句詩,并統(tǒng)計所有字的字頻,取出頻率最高的前200 個字作為Encoder 的詞庫,然后遍歷每首唐詩中存在于該詞庫中的字,用排列組合的方式分別對關(guān)鍵字進行匹配,先對前兩句和后兩句進行部分排列組合,再進行整體排列組合,所有關(guān)鍵字的組合作為Encoder數(shù)據(jù)集部分,對應(yīng)詩句則作為Decoder數(shù)據(jù)集部分。此外,如果是五言詩,則在Encoder 數(shù)據(jù)集中的每一個關(guān)鍵字組合后加上格式控制符“A”,如果是七言詩,則加上“B”。經(jīng)過處理,最終得到27萬對信息,將其中的23 萬對作為訓(xùn)練集,另外4 萬對作為測試集。數(shù)據(jù)集的構(gòu)建過程如圖4 所示,具體數(shù)據(jù)集樣本展示如圖5 所示。

      4.2 模型參數(shù)

      本文Encoder 和Decoder 都使用了LSTM 模型,隱層數(shù)量都為三層,每層神經(jīng)元個數(shù)為256 個。每個字的Embedding Size 大小為256,為了使模型更快地收斂,在訓(xùn)練階段,Decoder 端每個時刻的輸入沒有采用上個時刻的輸出,而是使用真實樣本作為輸入,且使用了Sampled SoftMax[14],采樣個數(shù)為512。batch size 設(shè)置為64,優(yōu)化過程選擇隨機梯度下降算法,初始學(xué)習(xí)率(learning rate)設(shè)置為0.5,學(xué)習(xí)率衰減(learning rate decay)設(shè)置為0.9。

      Fig.4 Data set construction process圖4 數(shù)據(jù)集構(gòu)建過程

      4.3 評價指標(biāo)

      由于古詩的評價涉及到多個方面,就目前而言還沒有具體的古詩生成評價指標(biāo),雖然有不少學(xué)者借助機器翻譯中的BLEU(bilingual evaluation understudy)評價指標(biāo)[15],但并不能真實反映古詩的生成效果,其主要問題在于古詩中的韻律、意義等方面無法用具體的指標(biāo)表達,但古詩的流暢度是可以通過語言模型的方法進行一定的評價,故本文首先選擇了困惑度指標(biāo)Perplexity,該指標(biāo)表示在逐字生成語句時,每個字生成的可選擇性大小。該指標(biāo)越小,說明在每個字生成時的可選擇性越少越具體,最終的句子出現(xiàn)的概率越大,句子質(zhì)量也越高,模型生成效果越好,Perplexity 的計算如式(6)所示。

      Fig.5 Data set samples display圖5 數(shù)據(jù)集樣本展示

      此外,由于僅使用Perplexity 評價指標(biāo)并不能充分體現(xiàn)出所生成詩句的好壞,因此額外選擇了主觀的人工評價指標(biāo),即選取了30 位碩士學(xué)歷以上的文學(xué)專業(yè)的學(xué)者從流暢度、韻律、意義三方面對本文的方法和一些基準(zhǔn)方法進行了打分和比較。

      4.4 實驗分析

      Fig.6 Perplexity values圖6 Perplexity 指標(biāo)

      本文每間隔300 步在訓(xùn)練集和測試集上分別使用困惑度指標(biāo)Perplexity 對五言古詩和七言古詩進行評價,如圖6 所示。實驗結(jié)果表明在訓(xùn)練集上,不論五言還是七言古詩困惑度都會隨著訓(xùn)練步數(shù)的增加而降低,模型具有較好的收斂效果。而在測試集上,當(dāng)訓(xùn)練到20 000 步左右時,五言和七言古詩的困惑度指標(biāo)都開始上升,模型出現(xiàn)了過擬合現(xiàn)象。另外一點是,相比七言古詩而言,五言古詩有著更低的Perplexity值。

      分別選取五言和七言Perplexity最低時的模型用來生成古詩,采用人工評價的方法,本文對比了三種基準(zhǔn)方法:SMT(statistical machine translation models)、RNNPG(recurrent neural networks for poetry generation)、ANMT(attention-based neural machine translation)。其中SMT 模型使用了統(tǒng)計機器翻譯的方法,RNNPG模型整合了CNN(convolutional neural network)、句子級別的RNN、字符級別的RNN,ANMT 使用了基于神經(jīng)網(wǎng)絡(luò)的機器翻譯模型,結(jié)果如表1 所示。

      相比基準(zhǔn)模型,本文模型在流暢度、韻律、意義上都取得較好效果,其中五言詩的效果在三方面都取得一定提升,而七言詩在流暢度及韻律上較ANMT模型略顯不足,但在意義上不論五言還是七言詩的生成效果都得到提升,這源于本文使用了基于注意力機制的編碼方法,在不同時刻生成詩句時考慮到不同的關(guān)鍵字信息,從而生成更有意義的詩句。本文的模型較SMT 和RNNPG 都顯得有很大提升,這在一定程度上也說明了Seq2Seq 模型相比于傳統(tǒng)的基于語言模型的生成方法有著更好的效果。

      為了展示本文模型的生成效果,表2 分別給出了一首五言和七言古詩的示例展示。在五言詩的生成中,先從描述內(nèi)容中提取出“月”“風(fēng)”“葉”“孤”這四個關(guān)鍵字,最后生成的詩句中也都體現(xiàn)了這四個關(guān)鍵字的信息,且整體上表現(xiàn)出了“一個人寂寞和孤獨”的意境效果。在七言詩的生成中,同樣也從描述中提取出了“夜”“酒”“雨”“愁”四個關(guān)鍵字,最后所生成的詩句不僅體現(xiàn)出關(guān)鍵字信息,還創(chuàng)造出一種“在船上送別友人,充滿了離愁之情”的畫面效果。

      Table 1 Manual evaluation表1 人工評價結(jié)果

      Table 2 Poetry generation examples表2 古詩生成示例

      5 結(jié)束語

      本文基于Seq2Seq 模型構(gòu)建了古詩生成模型,將編碼、解碼和Attention 機制運用到了古詩生成上。設(shè)計和構(gòu)建了相應(yīng)的古詩生成數(shù)據(jù)集,并加入了關(guān)鍵字控制符的概念,在關(guān)鍵字不足時,可進行關(guān)鍵字補全,與傳統(tǒng)的古詩生成任務(wù)相比,顯得更加靈活可控,能夠生成與大致意境相符的詩句。在接下來的工作中,將加入生成對抗和強化學(xué)習(xí)的思想,讓古詩的生成更加豐富,更加符合人們的審美。

      猜你喜歡
      五言七言關(guān)鍵字
      清 錢泳 隸書七言聯(lián)
      中國書法(2023年8期)2023-09-23 19:20:26
      履職盡責(zé)求實效 真抓實干勇作為——十個關(guān)鍵字,盤點江蘇統(tǒng)戰(zhàn)的2021
      華人時刊(2022年1期)2022-04-26 13:39:28
      有志無書五言聯(lián)
      行草書鐘鼎風(fēng)流七言聯(lián)
      中國書畫(2020年10期)2020-03-09 06:25:00
      成功避開“關(guān)鍵字”
      論賈雨村《口占五言一律》的詩語敘事
      王維的七言山水詩論略
      朝罷詩成七言聯(lián)
      中華書畫家(2017年1期)2017-02-10 08:04:21
      基于用戶反饋的關(guān)系數(shù)據(jù)庫關(guān)鍵字查詢系統(tǒng)
      誘導(dǎo)性虛假下載鏈接不完全評測
      许昌市| 工布江达县| 温州市| 阜宁县| 关岭| 汉阴县| 石林| 壶关县| 田东县| 政和县| 彭水| 庆云县| 扎兰屯市| 开远市| 云浮市| 阜平县| 五台县| 肃宁县| 资源县| 阿荣旗| 乌恰县| 隆尧县| 磐安县| 台南县| 萝北县| 成都市| 万荣县| 白水县| 阳春市| 禄丰县| 四会市| 锦屏县| 同德县| 新河县| 靖西县| 本溪市| 金华市| 南平市| 张家界市| 上栗县| 芷江|