孟志剛,吳云偉,姜宇杰
(長沙學(xué)院計算機工程與應(yīng)用數(shù)學(xué)學(xué)院,湖南 長沙 410022)
電力企業(yè)會計工作面臨著諸多困難和挑戰(zhàn)[1],會計模式亟待創(chuàng)新。部分企業(yè)的財務(wù)人員雖然具有相關(guān)從業(yè)資格,但因缺乏工作經(jīng)驗或?qū)嬄氊?zé)的正確認識,做出的財務(wù)報告質(zhì)量較低;同時,部分企業(yè)的會計人員甚至缺乏基本的道德與法律意識,出現(xiàn)財務(wù)造假等違規(guī)行為,這些都導(dǎo)致企業(yè)在財務(wù)人員的培養(yǎng)上付出更高的成本[2]。此外,企業(yè)財務(wù)報表編輯煩瑣、機械,繁重的壓力促使財務(wù)人員難以按時上交中期表,影響企業(yè)決策的進行,且紛繁復(fù)雜的信息常會使得財務(wù)人員撰寫財務(wù)報告時顧此失彼,出現(xiàn)對現(xiàn)金流量表述過于詳細的情況,導(dǎo)致財務(wù)報表中很多周期性和季節(jié)性的信息無法被表露出來,不能有效突出重點,造成財務(wù)報告的信息量不足[3]。
為解決以上問題,本文提出了基于深度學(xué)習(xí)的財務(wù)機器人的設(shè)想,希望通過信息化手段實現(xiàn)自動撰文,旨在協(xié)助財務(wù)人員解決以往財務(wù)報告中所出現(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ù)作為輸入,順著序列的傳播方向進行鏈?zhǔn)竭f歸的遞歸神經(jīng)網(wǎng)絡(luò)[8]。自然語言數(shù)據(jù)是典型的序列數(shù)據(jù),所以對序列數(shù)據(jù)學(xué)習(xí)有一定優(yōu)勢的RNN在NLP(Natural Language Processing)問題中得以應(yīng)用。RNN具有分布式表達、能在序列預(yù)測中明確地學(xué)習(xí)和利用背景信息、長時間范圍內(nèi)學(xué)習(xí)和執(zhí)行數(shù)據(jù)的復(fù)雜轉(zhuǎn)換能力,因此,RNN在對序列的非線性特征進行學(xué)習(xí)時具有一定優(yōu)勢[9]。常見的RNN有長短期記憶網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)和雙向循環(huán)神經(jīng)網(wǎng)絡(luò)(Bidirectional RNN,Bi-RNN)。
綜上所述,本文將撰寫報告建模為基于深度學(xué)習(xí)的文本自動生成問題模型,分別選擇深度學(xué)習(xí)算法中的LSTM算法和GRU算法進行建模并進行比較。實驗表明,在大規(guī)模語料庫的基礎(chǔ)上,模型生成的文本涵蓋的信息更加全面,與人工生成的文本意思更相近。
為提高電力企業(yè)報告質(zhì)量,減輕電力企業(yè)財務(wù)人員工作壓力,本文提出了基于深度學(xué)習(xí)的財務(wù)機器人自動撰文的模型,財務(wù)報告的撰寫目標(biāo)是構(gòu)建一個文本生成算法,此算法接收大規(guī)模語料庫句子輸入,經(jīng)計算后輸出關(guān)聯(lián)句子,并找出輸入和輸出之間的對應(yīng)關(guān)系,自動從語料庫中獲取語義和語法知識,模擬人工寫作來生成財務(wù)報告。本文分別使用了LSTM算法和GRU算法進行算法開發(fā),并對兩種算法的效能進行比較評估。
文本生成技術(shù)分為文本到文本的生成、數(shù)據(jù)到文本的生成和圖像到文本的生成三類。本文所討論的是文本到文本的生成,日常在社交媒體中見到的“機器人寫作”“人工智能寫作”“自動對話生成”“機器人寫古詩”等,都屬于文本生成的范疇。近二十年來,學(xué)界都是使用高維稀疏的特征,通過機器學(xué)習(xí)方法來訓(xùn)練模型。隨著深度學(xué)習(xí)技術(shù)的突飛猛進,稠密矩陣表征的方法使自然語言處理任務(wù)得到更好的解決,詞向量技術(shù)(vector to vector,Vec2Vec)的發(fā)展,增廣了深度學(xué)習(xí)技術(shù)在自然語言處理中的應(yīng)用。深度學(xué)習(xí)應(yīng)用在文本生成中就是將生成文本的過程看成是生成動作,而且深度學(xué)習(xí)模型需要根據(jù)相應(yīng)的環(huán)境信息來學(xué)習(xí)文本生成的知識。
基于RNN的文本生成算法是當(dāng)前研究的主流。相比一般的神經(jīng)網(wǎng)絡(luò)來說,RNN能夠更好地處理序列變化的數(shù)據(jù),比如某個單詞的意思會因為上文提到的內(nèi)容不同而有不同,RNN可以很好地解決這種問題,在此基礎(chǔ)上,有研究將RNN的隱藏層數(shù)量控制在1500 個,使得生成文本的效果得到了極大的提升。還有研究基于RNN算法自動生成小語種詩歌,但缺點是需要花費大量時間,并且生成的效果不夠好。
原則上來說,足夠大的RNN應(yīng)該足以生成任意復(fù)雜度的序列。但是,實際上,標(biāo)準(zhǔn)RNN無法長時間存儲過去輸入的信息。往往是網(wǎng)絡(luò)結(jié)構(gòu)太深,造成網(wǎng)絡(luò)權(quán)重不穩(wěn)定,從而導(dǎo)致梯度消失和梯度爆炸等問題,而LSTM就是為了解決長序列訓(xùn)練過程中梯度消失和梯度爆炸的問題而構(gòu)建出的特殊的RNN。相比于普通的RNN,LSTM能夠在更長的序列中有更好的表現(xiàn),還能更好地存儲和訪問信息,將LSTM單元作為隱層單元構(gòu)建RNN,并采用字符級語言模型縮小了解空間,極大地提升了模型的效能和文本生成的效果。
2.1.1 預(yù)處理
定義序列長度、正向序列長度,創(chuàng)建存儲提取句子的列表,存儲每個句子的下一個字符(即預(yù)測目標(biāo)),創(chuàng)建一個字典,主要以訓(xùn)練文章中的每一個字符為鍵。
2.1.2 模型構(gòu)造
本文提出的基于LSTM的文本自動生成模型是以句子作為輸入,通過LSTM網(wǎng)絡(luò)獲取特征,最后通過全連接層(Dense層)將提取的特征輸入損失層。使用交叉熵損失函數(shù)得到損失值后,用RMSProp算法進行神經(jīng)網(wǎng)絡(luò)權(quán)重的優(yōu)化。如圖1所示。
圖1 基于LSTM的文本自動生成模型
此模型由以下結(jié)構(gòu)組成:
(1)X表示三階張量,主要有句子數(shù)、序列長度和字典長度。序列長度就是句子的長度,字典長度是指語料庫中不重復(fù)的字的個數(shù)。
(2)Y表示二階張量,主要有句子數(shù)和字典長度。
(3)基礎(chǔ)模型創(chuàng)建:通過Keras來構(gòu)建模型Sequential。
(4)LSTM層:通過model.add(layers.LSTM(256, input_shape=(maxlen, len(chars))))來創(chuà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ù)個節(jié)點,以及使用softmax激活函數(shù)的神經(jīng)層。
(6)優(yōu)化器:在這里使用的是RMSProp 優(yōu)化器。 RMSProp算法計算了梯度的微分平方加權(quán)平均數(shù)。此種做法有利于消除大幅度擺動的方向,用于修正擺動幅度,減小各個維度的擺動幅度。RMSProp優(yōu)化算法框架如下:
(a)計算目標(biāo)函數(shù)關(guān)于當(dāng)前參數(shù)的梯度:
(b)根據(jù)歷史梯度計算一階動量和二階動量:
一階動量mt,二階動量Vt,Hinton建議設(shè)定超參數(shù)β1為 0.9,學(xué)習(xí)率a為10-3。
(c)計算當(dāng)前時刻的下降梯度:
a是實際的學(xué)習(xí)率(也即下降步長)是實際的下降方向,ηt是下降的梯度。
(d)根據(jù)下降梯度進行更新:
(7)損失函數(shù):在該模型中,主要使用的是categorical_crossentropy(交叉熵損失函數(shù)),交叉熵損失用來評估當(dāng)前訓(xùn)練得到的概率分布與真實分布的差異情況。交叉熵的值越小,兩個概率分布就越接近,它刻畫的是實際輸出概率與期望輸出概率的距離,公式如下:
y為期望的輸出,y※為神經(jīng)元實際輸出。
(8)模型訓(xùn)練:以X為輸入數(shù)據(jù),Y為標(biāo)簽,其中batch_size設(shè)置為512來進行為期10輪的訓(xùn)練。
2.2.1 預(yù)處理
定義序列長度、正向序列長度、反向序列長度,創(chuàng)建存儲提取句子的列表,存儲每個句子的下一共字符(即預(yù)測目標(biāo)),創(chuàng)建一共字典,主要以訓(xùn)練文章中的每一個字符為鍵。
2.2.2 模型構(gòu)造
本文提出的基于GRU的正反序列的基礎(chǔ)神經(jīng)網(wǎng)絡(luò)模型(見圖2)是以句子的正序與反序兩種序列作為數(shù)據(jù)輸入網(wǎng)絡(luò)。網(wǎng)絡(luò)模型由三縱列組成,第一縱列接收句子的正序序列,詞嵌入(Embedding)后通過GRU單元獲取特征。第二、三縱列分別接收正、反序列,都是詞嵌入后卷積、池化提取特征。最后三個縱列的輸出全部拼接后,經(jīng)過全連接層輸入損失層。
此模型由以下結(jié)構(gòu)組成:
圖2 基于GRU的正反序列的基礎(chǔ)神經(jīng)網(wǎng)絡(luò)模型
(1)NormalⅠnput為二階張量,張量內(nèi)容為(句子數(shù),正向序列長度)。訓(xùn)練時,假若語料庫內(nèi)容為“我是中國人民的好干部”,則NormalⅠnput的內(nèi)容為[“我是中”“是中國”“中國人”“國人民”],輸入層的數(shù)據(jù)通過循環(huán)遍歷往下層輸入數(shù)據(jù)。
(2) ReverseⅠnput為二階張量,張量內(nèi)容為(句子數(shù),反向序列長度)。訓(xùn)練時,假若語料庫內(nèi)容為“我是中國人民的好干部”,則ReverseⅠnput的內(nèi)容為[“的民人”“好的民”“干好的”“部干好”],此層的數(shù)據(jù)通過循環(huán)遍歷往下層輸入數(shù)據(jù)。
(3) 第一縱列:第一縱列以Embedding作為該縱列的第一層,它的輸入是一階張量,長度為正向序列長度,輸出張量為(字典長度,64,正向序列長度)。該層的輸出層為GRU層,通過layers.GRU(128,return_sequences=True)(model_1)來構(gòu)建第一縱列的輸出層,該縱列的作用是返回所有GRU單元的輸出。
(4) 第二縱列:第二縱列的第一層為Embedding層,它的輸入是一階張量,長度為反向序列長度,輸出張量為(字典長度,64,反向序列長度);通過該層轉(zhuǎn)換之后的數(shù)據(jù)再進入該層的第二層Conv1D層,該層的激活函數(shù)為relu,通過激活后的該層寬度默認為第一層Embedding的維度之后便進入該縱列的第四層Maxpool1D層(1D輸入的最大池化層),通過在這層進行數(shù)據(jù)最大池化之后便按照之前兩層進行返回。
(5) 第三縱列:第三縱列的第一層Embedding層的長度為正向序列長度,與第二縱列相對應(yīng),該層的模型與第二縱列是完全一樣的卷積、池化層,只是其長度轉(zhuǎn)換為了反向序列長度,并且輸入的數(shù)據(jù)與第一縱列相同,通過兩個一樣的層,來進行正反向一同學(xué)習(xí)詞的前后概率,進而達到文本生成的效果。
本文基于GRU的文本自動生成模型(見圖3)采取上文提出的基礎(chǔ)模型,通過交叉熵損失函數(shù)計算損失值,采用RMSProp優(yōu)化器進行神經(jīng)網(wǎng)絡(luò)權(quán)重的優(yōu)化。
圖3 基于GRU的文本自動生成模型
此模型由以下結(jié)構(gòu)組成:
(1)基于GRU的基礎(chǔ)神經(jīng)網(wǎng)絡(luò)模型創(chuàng)建:通過Keras來構(gòu)建上面的三縱列的神經(jīng)網(wǎng)絡(luò)模型進行訓(xùn)練。
(2)Y為一維張量,主要有句子數(shù)。訓(xùn)練網(wǎng)絡(luò)時,其內(nèi)容是一個個的用來檢驗預(yù)測結(jié)果的單字;訓(xùn)練時,假若語料庫內(nèi)容為“我是中國人民的好干部”,則Y的內(nèi)容為[“國”“人”“民”“的”]。
(3)優(yōu)化器:此處同樣使用RMSProp優(yōu)化器,學(xué)習(xí)率同為10-3。
(4)損失函數(shù):該模型主要使用的是數(shù)字編碼,因此使用的損失函數(shù)為sparse_categorical_crossentropy交叉熵損失函數(shù),它與categorical_crossentropy一樣都是用于衡量真實分布與訓(xùn)練分布的差值,只不過前者接收數(shù)字編碼,后者接收one-hot編碼,在此不贅述公式。
(5)模型訓(xùn)練:通過以X作為三層的輸入數(shù)據(jù),Y為標(biāo)簽,其中batch_size為128來進行為期10 輪的訓(xùn)練。
文本自動生成技術(shù)主要采用兩種深度學(xué)習(xí)方法進行實驗對比,分析結(jié)果如下。
文本自動生成訓(xùn)練數(shù)據(jù)由電力公司A提供,主要提供的數(shù)據(jù)集是日常撰寫的電力報告,根據(jù)已提供的數(shù)據(jù),進行模型訓(xùn)練,實現(xiàn)文本自動生成。
本文中,分別分析了基于LSTM和GRU的文本生成方法,在LSTM和GRU的算法中,使用相同的初始句:在較多高度重復(fù)的手工操作,耗費大量的人力和時間。手工處理存在,但可以從結(jié)果中看到,基于LSTM的模型輸出的結(jié)果可以生成一些連續(xù)的句子,但這些句子不通順,如表1所示。這可能是因為LSTM更適合運用在長結(jié)構(gòu)網(wǎng)絡(luò)中的訓(xùn)練,能保證信息不被丟失,但由于存在許多相似的句子,以及這些句子的上下文語境并不相同,模型容易越走越歪。
其中,LSTM模型輸入輸出如表1所示。
表1 LSTM模型輸入輸出
而基于GRU的正反序列算法是在LSTM基礎(chǔ)上進行改進得來,GRU花費的時間成本更低,同時對硬件計算能力的要求也更低,參數(shù)較LSTM也更少,可能正是這些原因,在實驗結(jié)果中,GRU算法結(jié)果中出現(xiàn)的非漢字也更多,句子更不通順,如表2所示。
表2 GRU正反序列模型輸入輸出
由于生成的文本是供人閱讀的,所以評價的直觀方法是人主觀來評價句子是否通順、合理,較片面。所以本文還另外采取程序化的評價方法,從多方面對算法作用的效果進行對比[10]。
(1)BLEU指標(biāo)
BLEU是由ⅠBM公司Kishore Papineni等人在2002年對機器翻譯的結(jié)果進行評價時提出的基于文本相似度的評價指標(biāo),原理是計算待評價譯文和一個或多個參考譯文間的距離。距離是文本間n元相似度的平均,n=1,2,3(更高的值似乎無關(guān)緊要)。也就是說,如果待選譯文和參考譯文的2元(連續(xù)詞對)或3元相似度較高,那么該譯文的得分就較高。BLEU指標(biāo)計算如下式:
其中,BP表示懲罰項因子,乘法右邊表示n-gram精度的幾何加權(quán)平均,N一般取值為1~5,表示n-gram的權(quán)重,取值為
式(7)中懲罰項因子BP的取值如下:
兩個算法實現(xiàn)效果的BLEU指標(biāo)對比結(jié)果如表3所示。
表3 生成100長度文本的BLEU指標(biāo)對比
結(jié)果表明,簡單的LSTM算法比采用正反序列融合訓(xùn)練的GRU算法效果更好,這里可能是因為LSTM模型一開始輸出的內(nèi)容同輸入內(nèi)容一樣,導(dǎo)致得分偏高,所以單靠自動化指標(biāo)評價并不完善。
(2)人工主觀評價
對于兩個模型分別30 次輸出的語句進行人工打分,以語句通順和上下文相關(guān)為標(biāo)準(zhǔn),進行人工評估,結(jié)果如表4所示。
表4 人工評測對比
本文通過系統(tǒng)地分析文本自動生成問題的特點,提出了財務(wù)機器人自動撰文的問題,采用深度學(xué)習(xí)算法解決文本自動生成問題。由上述結(jié)果可知,直接采用LSTM神經(jīng)元堆疊的辦法比GRU采取句子正反序列訓(xùn)練更為簡單,可以有效地處理文本連續(xù)動作集的問題。因此,深度學(xué)習(xí)算法對文本自動生成具有重要意義。
如果用小說作為語料庫來訓(xùn)練以上的神經(jīng)網(wǎng)絡(luò),生成的文本語句語義將更加連貫,語句將更加通順。而采用電力公司A的多篇報告拼湊成的文本作為語料庫,訓(xùn)練的神經(jīng)網(wǎng)絡(luò)生成的文本效果不盡如人意。這可能是因為小說文本較通俗、連貫性強,神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的任務(wù)比較簡單。而電力報告語義緊湊,用詞比較專業(yè)化,做數(shù)據(jù)工程的時候也沒有把各種序號、非語義的間隔符號除去,數(shù)據(jù)比較煩瑣。
因此,本研究可進行以下改進:
第一,清洗數(shù)據(jù),保留報告中語句通順的部分,剔除無關(guān)符號。
第二,通過一句話來生成一段文字報告難度太大,通過若干關(guān)鍵詞來組合生成句子可能生成效果更好。