孟志剛,吳云偉,姜宇杰
(長(zhǎng)沙學(xué)院計(jì)算機(jī)工程與應(yīng)用數(shù)學(xué)學(xué)院,湖南 長(zhǎng)沙 410022)
電力企業(yè)會(huì)計(jì)工作面臨著諸多困難和挑戰(zhàn)[1],會(huì)計(jì)模式亟待創(chuàng)新。部分企業(yè)的財(cái)務(wù)人員雖然具有相關(guān)從業(yè)資格,但因缺乏工作經(jīng)驗(yàn)或?qū)?huì)計(jì)職責(zé)的正確認(rèn)識(shí),做出的財(cái)務(wù)報(bào)告質(zhì)量較低;同時(shí),部分企業(yè)的會(huì)計(jì)人員甚至缺乏基本的道德與法律意識(shí),出現(xiàn)財(cái)務(wù)造假等違規(guī)行為,這些都導(dǎo)致企業(yè)在財(cái)務(wù)人員的培養(yǎng)上付出更高的成本[2]。此外,企業(yè)財(cái)務(wù)報(bào)表編輯煩瑣、機(jī)械,繁重的壓力促使財(cái)務(wù)人員難以按時(shí)上交中期表,影響企業(yè)決策的進(jìn)行,且紛繁復(fù)雜的信息常會(huì)使得財(cái)務(wù)人員撰寫財(cái)務(wù)報(bào)告時(shí)顧此失彼,出現(xiàn)對(duì)現(xiàn)金流量表述過于詳細(xì)的情況,導(dǎo)致財(cái)務(wù)報(bào)表中很多周期性和季節(jié)性的信息無法被表露出來,不能有效突出重點(diǎn),造成財(cái)務(wù)報(bào)告的信息量不足[3]。
為解決以上問題,本文提出了基于深度學(xué)習(xí)的財(cái)務(wù)機(jī)器人的設(shè)想,希望通過信息化手段實(shí)現(xiàn)自動(dòng)撰文,旨在協(xié)助財(cái)務(wù)人員解決以往財(cái)務(wù)報(bào)告中所出現(xiàn)的問題,節(jié)省企業(yè)培養(yǎng)成本,減輕工作壓力,提高工作效率。
采用深度學(xué)習(xí)技術(shù)產(chǎn)生語料是業(yè)界常用方法,如循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks,RNN)是將序列數(shù)據(jù)作為輸入,順著序列的傳播方向進(jìn)行鏈?zhǔn)竭f歸的遞歸神經(jīng)網(wǎng)絡(luò)[8]。自然語言數(shù)據(jù)是典型的序列數(shù)據(jù),所以對(duì)序列數(shù)據(jù)學(xué)習(xí)有一定優(yōu)勢(shì)的RNN在NLP(Natural Language Processing)問題中得以應(yīng)用。RNN具有分布式表達(dá)、能在序列預(yù)測(cè)中明確地學(xué)習(xí)和利用背景信息、長(zhǎng)時(shí)間范圍內(nèi)學(xué)習(xí)和執(zhí)行數(shù)據(jù)的復(fù)雜轉(zhuǎn)換能力,因此,RNN在對(duì)序列的非線性特征進(jìn)行學(xué)習(xí)時(shí)具有一定優(yōu)勢(shì)[9]。常見的RNN有長(zhǎng)短期記憶網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)和雙向循環(huán)神經(jīng)網(wǎng)絡(luò)(Bidirectional RNN,Bi-RNN)。
綜上所述,本文將撰寫報(bào)告建模為基于深度學(xué)習(xí)的文本自動(dòng)生成問題模型,分別選擇深度學(xué)習(xí)算法中的LSTM算法和GRU算法進(jìn)行建模并進(jìn)行比較。實(shí)驗(yàn)表明,在大規(guī)模語料庫的基礎(chǔ)上,模型生成的文本涵蓋的信息更加全面,與人工生成的文本意思更相近。
為提高電力企業(yè)報(bào)告質(zhì)量,減輕電力企業(yè)財(cái)務(wù)人員工作壓力,本文提出了基于深度學(xué)習(xí)的財(cái)務(wù)機(jī)器人自動(dòng)撰文的模型,財(cái)務(wù)報(bào)告的撰寫目標(biāo)是構(gòu)建一個(gè)文本生成算法,此算法接收大規(guī)模語料庫句子輸入,經(jīng)計(jì)算后輸出關(guān)聯(lián)句子,并找出輸入和輸出之間的對(duì)應(yīng)關(guān)系,自動(dòng)從語料庫中獲取語義和語法知識(shí),模擬人工寫作來生成財(cái)務(wù)報(bào)告。本文分別使用了LSTM算法和GRU算法進(jìn)行算法開發(fā),并對(duì)兩種算法的效能進(jìn)行比較評(píng)估。
文本生成技術(shù)分為文本到文本的生成、數(shù)據(jù)到文本的生成和圖像到文本的生成三類。本文所討論的是文本到文本的生成,日常在社交媒體中見到的“機(jī)器人寫作”“人工智能寫作”“自動(dòng)對(duì)話生成”“機(jī)器人寫古詩”等,都屬于文本生成的范疇。近二十年來,學(xué)界都是使用高維稀疏的特征,通過機(jī)器學(xué)習(xí)方法來訓(xùn)練模型。隨著深度學(xué)習(xí)技術(shù)的突飛猛進(jìn),稠密矩陣表征的方法使自然語言處理任務(wù)得到更好的解決,詞向量技術(shù)(vector to vector,Vec2Vec)的發(fā)展,增廣了深度學(xué)習(xí)技術(shù)在自然語言處理中的應(yīng)用。深度學(xué)習(xí)應(yīng)用在文本生成中就是將生成文本的過程看成是生成動(dòng)作,而且深度學(xué)習(xí)模型需要根據(jù)相應(yīng)的環(huán)境信息來學(xué)習(xí)文本生成的知識(shí)。
基于RNN的文本生成算法是當(dāng)前研究的主流。相比一般的神經(jīng)網(wǎng)絡(luò)來說,RNN能夠更好地處理序列變化的數(shù)據(jù),比如某個(gè)單詞的意思會(huì)因?yàn)樯衔奶岬降膬?nèi)容不同而有不同,RNN可以很好地解決這種問題,在此基礎(chǔ)上,有研究將RNN的隱藏層數(shù)量控制在1500 個(gè),使得生成文本的效果得到了極大的提升。還有研究基于RNN算法自動(dòng)生成小語種詩歌,但缺點(diǎn)是需要花費(fèi)大量時(shí)間,并且生成的效果不夠好。
原則上來說,足夠大的RNN應(yīng)該足以生成任意復(fù)雜度的序列。但是,實(shí)際上,標(biāo)準(zhǔn)RNN無法長(zhǎng)時(shí)間存儲(chǔ)過去輸入的信息。往往是網(wǎng)絡(luò)結(jié)構(gòu)太深,造成網(wǎng)絡(luò)權(quán)重不穩(wěn)定,從而導(dǎo)致梯度消失和梯度爆炸等問題,而LSTM就是為了解決長(zhǎng)序列訓(xùn)練過程中梯度消失和梯度爆炸的問題而構(gòu)建出的特殊的RNN。相比于普通的RNN,LSTM能夠在更長(zhǎng)的序列中有更好的表現(xiàn),還能更好地存儲(chǔ)和訪問信息,將LSTM單元作為隱層單元構(gòu)建RNN,并采用字符級(jí)語言模型縮小了解空間,極大地提升了模型的效能和文本生成的效果。
2.1.1 預(yù)處理
定義序列長(zhǎng)度、正向序列長(zhǎng)度,創(chuàng)建存儲(chǔ)提取句子的列表,存儲(chǔ)每個(gè)句子的下一個(gè)字符(即預(yù)測(cè)目標(biāo)),創(chuàng)建一個(gè)字典,主要以訓(xùn)練文章中的每一個(gè)字符為鍵。
2.1.2 模型構(gòu)造
本文提出的基于LSTM的文本自動(dòng)生成模型是以句子作為輸入,通過LSTM網(wǎng)絡(luò)獲取特征,最后通過全連接層(Dense層)將提取的特征輸入損失層。使用交叉熵?fù)p失函數(shù)得到損失值后,用RMSProp算法進(jìn)行神經(jīng)網(wǎng)絡(luò)權(quán)重的優(yōu)化。如圖1所示。

圖1 基于LSTM的文本自動(dòng)生成模型
此模型由以下結(jié)構(gòu)組成:
(1)X表示三階張量,主要有句子數(shù)、序列長(zhǎng)度和字典長(zhǎng)度。序列長(zhǎng)度就是句子的長(zhǎng)度,字典長(zhǎng)度是指語料庫中不重復(fù)的字的個(gè)數(shù)。
(2)Y表示二階張量,主要有句子數(shù)和字典長(zhǎng)度。
(3)基礎(chǔ)模型創(chuàng)建:通過Keras來構(gòu)建模型Sequential。
(4)LSTM層:通過model.add(layers.LSTM(256, input_shape=(maxlen, len(chars))))來創(chuàng)建模型的第一層,為長(zhǎng)短期記憶網(wǎng)絡(luò)層,其中每一批輸入的尺寸為(256,maxlen,len(chars))。
(5)Dense層:通過深度學(xué)習(xí)框架Keras的代碼 model.add(layers.Dense(len(chars), activation='softmax'))來創(chuàng)建模型的第二層,主要定義為語料中所有不重復(fù)的字符的總數(shù)個(gè)節(jié)點(diǎn),以及使用softmax激活函數(shù)的神經(jīng)層。
(6)優(yōu)化器:在這里使用的是RMSProp 優(yōu)化器。 RMSProp算法計(jì)算了梯度的微分平方加權(quán)平均數(shù)。此種做法有利于消除大幅度擺動(dòng)的方向,用于修正擺動(dòng)幅度,減小各個(gè)維度的擺動(dòng)幅度。RMSProp優(yōu)化算法框架如下:
(a)計(jì)算目標(biāo)函數(shù)關(guān)于當(dāng)前參數(shù)的梯度:

(b)根據(jù)歷史梯度計(jì)算一階動(dòng)量和二階動(dòng)量:

一階動(dòng)量mt,二階動(dòng)量Vt,Hinton建議設(shè)定超參數(shù)β1為 0.9,學(xué)習(xí)率a為10-3。
(c)計(jì)算當(dāng)前時(shí)刻的下降梯度:

a是實(shí)際的學(xué)習(xí)率(也即下降步長(zhǎng))是實(shí)際的下降方向,ηt是下降的梯度。
(d)根據(jù)下降梯度進(jìn)行更新:

(7)損失函數(shù):在該模型中,主要使用的是categorical_crossentropy(交叉熵?fù)p失函數(shù)),交叉熵?fù)p失用來評(píng)估當(dāng)前訓(xùn)練得到的概率分布與真實(shí)分布的差異情況。交叉熵的值越小,兩個(gè)概率分布就越接近,它刻畫的是實(shí)際輸出概率與期望輸出概率的距離,公式如下:

y為期望的輸出,y※為神經(jīng)元實(shí)際輸出。
(8)模型訓(xùn)練:以X為輸入數(shù)據(jù),Y為標(biāo)簽,其中batch_size設(shè)置為512來進(jìn)行為期10輪的訓(xùn)練。
2.2.1 預(yù)處理
定義序列長(zhǎng)度、正向序列長(zhǎng)度、反向序列長(zhǎng)度,創(chuàng)建存儲(chǔ)提取句子的列表,存儲(chǔ)每個(gè)句子的下一共字符(即預(yù)測(cè)目標(biāo)),創(chuàng)建一共字典,主要以訓(xùn)練文章中的每一個(gè)字符為鍵。
2.2.2 模型構(gòu)造
本文提出的基于GRU的正反序列的基礎(chǔ)神經(jīng)網(wǎng)絡(luò)模型(見圖2)是以句子的正序與反序兩種序列作為數(shù)據(jù)輸入網(wǎng)絡(luò)。網(wǎng)絡(luò)模型由三縱列組成,第一縱列接收句子的正序序列,詞嵌入(Embedding)后通過GRU單元獲取特征。第二、三縱列分別接收正、反序列,都是詞嵌入后卷積、池化提取特征。最后三個(gè)縱列的輸出全部拼接后,經(jīng)過全連接層輸入損失層。
此模型由以下結(jié)構(gòu)組成:

圖2 基于GRU的正反序列的基礎(chǔ)神經(jīng)網(wǎng)絡(luò)模型
(1)NormalⅠnput為二階張量,張量?jī)?nèi)容為(句子數(shù),正向序列長(zhǎng)度)。訓(xùn)練時(shí),假若語料庫內(nèi)容為“我是中國(guó)人民的好干部”,則NormalⅠnput的內(nèi)容為[“我是中”“是中國(guó)”“中國(guó)人”“國(guó)人民”],輸入層的數(shù)據(jù)通過循環(huán)遍歷往下層輸入數(shù)據(jù)。
(2) ReverseⅠnput為二階張量,張量?jī)?nèi)容為(句子數(shù),反向序列長(zhǎng)度)。訓(xùn)練時(shí),假若語料庫內(nèi)容為“我是中國(guó)人民的好干部”,則ReverseⅠnput的內(nèi)容為[“的民人”“好的民”“干好的”“部干好”],此層的數(shù)據(jù)通過循環(huán)遍歷往下層輸入數(shù)據(jù)。
(3) 第一縱列:第一縱列以Embedding作為該縱列的第一層,它的輸入是一階張量,長(zhǎng)度為正向序列長(zhǎng)度,輸出張量為(字典長(zhǎng)度,64,正向序列長(zhǎng)度)。該層的輸出層為GRU層,通過layers.GRU(128,return_sequences=True)(model_1)來構(gòu)建第一縱列的輸出層,該縱列的作用是返回所有GRU單元的輸出。
(4) 第二縱列:第二縱列的第一層為Embedding層,它的輸入是一階張量,長(zhǎng)度為反向序列長(zhǎng)度,輸出張量為(字典長(zhǎng)度,64,反向序列長(zhǎng)度);通過該層轉(zhuǎn)換之后的數(shù)據(jù)再進(jìn)入該層的第二層Conv1D層,該層的激活函數(shù)為relu,通過激活后的該層寬度默認(rèn)為第一層Embedding的維度之后便進(jìn)入該縱列的第四層Maxpool1D層(1D輸入的最大池化層),通過在這層進(jìn)行數(shù)據(jù)最大池化之后便按照之前兩層進(jìn)行返回。
(5) 第三縱列:第三縱列的第一層Embedding層的長(zhǎng)度為正向序列長(zhǎng)度,與第二縱列相對(duì)應(yīng),該層的模型與第二縱列是完全一樣的卷積、池化層,只是其長(zhǎng)度轉(zhuǎn)換為了反向序列長(zhǎng)度,并且輸入的數(shù)據(jù)與第一縱列相同,通過兩個(gè)一樣的層,來進(jìn)行正反向一同學(xué)習(xí)詞的前后概率,進(jìn)而達(dá)到文本生成的效果。
本文基于GRU的文本自動(dòng)生成模型(見圖3)采取上文提出的基礎(chǔ)模型,通過交叉熵?fù)p失函數(shù)計(jì)算損失值,采用RMSProp優(yōu)化器進(jìn)行神經(jīng)網(wǎng)絡(luò)權(quán)重的優(yōu)化。

圖3 基于GRU的文本自動(dòng)生成模型
此模型由以下結(jié)構(gòu)組成:
(1)基于GRU的基礎(chǔ)神經(jīng)網(wǎng)絡(luò)模型創(chuàng)建:通過Keras來構(gòu)建上面的三縱列的神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練。
(2)Y為一維張量,主要有句子數(shù)。訓(xùn)練網(wǎng)絡(luò)時(shí),其內(nèi)容是一個(gè)個(gè)的用來檢驗(yàn)預(yù)測(cè)結(jié)果的單字;訓(xùn)練時(shí),假若語料庫內(nèi)容為“我是中國(guó)人民的好干部”,則Y的內(nèi)容為[“國(guó)”“人”“民”“的”]。
(3)優(yōu)化器:此處同樣使用RMSProp優(yōu)化器,學(xué)習(xí)率同為10-3。
(4)損失函數(shù):該模型主要使用的是數(shù)字編碼,因此使用的損失函數(shù)為sparse_categorical_crossentropy交叉熵?fù)p失函數(shù),它與categorical_crossentropy一樣都是用于衡量真實(shí)分布與訓(xùn)練分布的差值,只不過前者接收數(shù)字編碼,后者接收one-hot編碼,在此不贅述公式。
(5)模型訓(xùn)練:通過以X作為三層的輸入數(shù)據(jù),Y為標(biāo)簽,其中batch_size為128來進(jìn)行為期10 輪的訓(xùn)練。
文本自動(dòng)生成技術(shù)主要采用兩種深度學(xué)習(xí)方法進(jìn)行實(shí)驗(yàn)對(duì)比,分析結(jié)果如下。
文本自動(dòng)生成訓(xùn)練數(shù)據(jù)由電力公司A提供,主要提供的數(shù)據(jù)集是日常撰寫的電力報(bào)告,根據(jù)已提供的數(shù)據(jù),進(jìn)行模型訓(xùn)練,實(shí)現(xiàn)文本自動(dòng)生成。
本文中,分別分析了基于LSTM和GRU的文本生成方法,在LSTM和GRU的算法中,使用相同的初始句:在較多高度重復(fù)的手工操作,耗費(fèi)大量的人力和時(shí)間。手工處理存在,但可以從結(jié)果中看到,基于LSTM的模型輸出的結(jié)果可以生成一些連續(xù)的句子,但這些句子不通順,如表1所示。這可能是因?yàn)長(zhǎng)STM更適合運(yùn)用在長(zhǎng)結(jié)構(gòu)網(wǎng)絡(luò)中的訓(xùn)練,能保證信息不被丟失,但由于存在許多相似的句子,以及這些句子的上下文語境并不相同,模型容易越走越歪。
其中,LSTM模型輸入輸出如表1所示。

表1 LSTM模型輸入輸出
而基于GRU的正反序列算法是在LSTM基礎(chǔ)上進(jìn)行改進(jìn)得來,GRU花費(fèi)的時(shí)間成本更低,同時(shí)對(duì)硬件計(jì)算能力的要求也更低,參數(shù)較LSTM也更少,可能正是這些原因,在實(shí)驗(yàn)結(jié)果中,GRU算法結(jié)果中出現(xiàn)的非漢字也更多,句子更不通順,如表2所示。

表2 GRU正反序列模型輸入輸出
由于生成的文本是供人閱讀的,所以評(píng)價(jià)的直觀方法是人主觀來評(píng)價(jià)句子是否通順、合理,較片面。所以本文還另外采取程序化的評(píng)價(jià)方法,從多方面對(duì)算法作用的效果進(jìn)行對(duì)比[10]。
(1)BLEU指標(biāo)
BLEU是由ⅠBM公司Kishore Papineni等人在2002年對(duì)機(jī)器翻譯的結(jié)果進(jìn)行評(píng)價(jià)時(shí)提出的基于文本相似度的評(píng)價(jià)指標(biāo),原理是計(jì)算待評(píng)價(jià)譯文和一個(gè)或多個(gè)參考譯文間的距離。距離是文本間n元相似度的平均,n=1,2,3(更高的值似乎無關(guān)緊要)。也就是說,如果待選譯文和參考譯文的2元(連續(xù)詞對(duì))或3元相似度較高,那么該譯文的得分就較高。BLEU指標(biāo)計(jì)算如下式:

其中,BP表示懲罰項(xiàng)因子,乘法右邊表示n-gram精度的幾何加權(quán)平均,N一般取值為1~5,表示n-gram的權(quán)重,取值為
式(7)中懲罰項(xiàng)因子BP的取值如下:

兩個(gè)算法實(shí)現(xiàn)效果的BLEU指標(biāo)對(duì)比結(jié)果如表3所示。

表3 生成100長(zhǎng)度文本的BLEU指標(biāo)對(duì)比
結(jié)果表明,簡(jiǎn)單的LSTM算法比采用正反序列融合訓(xùn)練的GRU算法效果更好,這里可能是因?yàn)長(zhǎng)STM模型一開始輸出的內(nèi)容同輸入內(nèi)容一樣,導(dǎo)致得分偏高,所以單靠自動(dòng)化指標(biāo)評(píng)價(jià)并不完善。
(2)人工主觀評(píng)價(jià)
對(duì)于兩個(gè)模型分別30 次輸出的語句進(jìn)行人工打分,以語句通順和上下文相關(guān)為標(biāo)準(zhǔn),進(jìn)行人工評(píng)估,結(jié)果如表4所示。

表4 人工評(píng)測(cè)對(duì)比
本文通過系統(tǒng)地分析文本自動(dòng)生成問題的特點(diǎn),提出了財(cái)務(wù)機(jī)器人自動(dòng)撰文的問題,采用深度學(xué)習(xí)算法解決文本自動(dòng)生成問題。由上述結(jié)果可知,直接采用LSTM神經(jīng)元堆疊的辦法比GRU采取句子正反序列訓(xùn)練更為簡(jiǎn)單,可以有效地處理文本連續(xù)動(dòng)作集的問題。因此,深度學(xué)習(xí)算法對(duì)文本自動(dòng)生成具有重要意義。
如果用小說作為語料庫來訓(xùn)練以上的神經(jīng)網(wǎng)絡(luò),生成的文本語句語義將更加連貫,語句將更加通順。而采用電力公司A的多篇報(bào)告拼湊成的文本作為語料庫,訓(xùn)練的神經(jīng)網(wǎng)絡(luò)生成的文本效果不盡如人意。這可能是因?yàn)樾≌f文本較通俗、連貫性強(qiáng),神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的任務(wù)比較簡(jiǎn)單。而電力報(bào)告語義緊湊,用詞比較專業(yè)化,做數(shù)據(jù)工程的時(shí)候也沒有把各種序號(hào)、非語義的間隔符號(hào)除去,數(shù)據(jù)比較煩瑣。
因此,本研究可進(jìn)行以下改進(jìn):
第一,清洗數(shù)據(jù),保留報(bào)告中語句通順的部分,剔除無關(guān)符號(hào)。
第二,通過一句話來生成一段文字報(bào)告難度太大,通過若干關(guān)鍵詞來組合生成句子可能生成效果更好。