杜 航 牟 莉
(西安工程大學(xué)計(jì)算機(jī)科學(xué)學(xué)院 西安 710600)
隨著我國(guó)社會(huì)的不斷發(fā)展,稅法的地位與日俱增,稅務(wù)機(jī)關(guān)作為國(guó)家職能部門之一,普及稅收法律法規(guī)及相關(guān)政策更是任重道遠(yuǎn)。因此,如何幫助納稅人快速便捷地了解稅務(wù)知識(shí),對(duì)稅務(wù)機(jī)關(guān)來說尤為重要[1]。早在2010年,國(guó)家稅務(wù)總局就開通了全國(guó)統(tǒng)一的12366 納稅服務(wù)熱線,由稅務(wù)工作人員電話解答納稅咨詢問題,并逐步開始建立稅收業(yè)務(wù)知識(shí)庫(kù)[2]。隨后國(guó)家稅務(wù)總局加快了發(fā)展稅務(wù)信息化的腳步,于2017 年上線了12366 納稅服務(wù)平臺(tái),稅收業(yè)務(wù)知識(shí)庫(kù)收錄的稅收政策及答復(fù)口徑從最初的幾百條已逐步擴(kuò)展到了幾萬(wàn)條。以往,納稅人主要通過現(xiàn)場(chǎng)咨詢或電話咨詢解決與納稅相關(guān)的問題,后來也出現(xiàn)了網(wǎng)絡(luò)留言等更加簡(jiǎn)單便捷的咨詢方式。但隨著目前納稅人咨詢數(shù)量的快速增長(zhǎng)及稅務(wù)咨詢問題的復(fù)雜度逐漸加深,過去傳統(tǒng)的口頭咨詢出現(xiàn)了解答不正確,人力成本偏高等問題,而正確度較高的網(wǎng)絡(luò)咨詢卻又無(wú)法保障回應(yīng)的及時(shí)性[3~5]。因此,僅依賴于傳統(tǒng)的稅務(wù)咨詢方法,很難完全解決納稅人的咨詢需求,導(dǎo)致稅務(wù)機(jī)關(guān)面臨的咨詢壓力較大。
目前網(wǎng)絡(luò)稅務(wù)咨詢方式大多為在線留言,納稅人提出的問題不能夠立即得到回答。當(dāng)然也有一些平臺(tái)提供了半智能的在線問答服務(wù),但從工作人員的角度出發(fā),此類系統(tǒng)服務(wù)反而造成了新的問題[6~7]。這是由于此類平臺(tái)是在納稅人提出詢問后,由工作人員手動(dòng)選擇相應(yīng)的問題再進(jìn)行回答,往往會(huì)導(dǎo)致答案比較模糊,反饋的質(zhì)量也不高。此外,這些系統(tǒng)進(jìn)行數(shù)據(jù)更新和采集時(shí)操作較為復(fù)雜,使得維護(hù)成本也相對(duì)較高。
因此,稅務(wù)問答系統(tǒng)的目標(biāo)就是對(duì)納稅人提出的稅務(wù)問題做出有針對(duì)性的簡(jiǎn)潔易懂的回答。通過稅務(wù)問答系統(tǒng)受理大部分的咨詢業(yè)務(wù),使稅務(wù)服務(wù)和稅收業(yè)務(wù)得以改變、創(chuàng)新和提升。
現(xiàn)有問答系統(tǒng)的基本思路是通過數(shù)據(jù)模塊化分類以及問題關(guān)鍵詞提取,來實(shí)現(xiàn)對(duì)問題的準(zhǔn)確檢索[8~9]。因此,問答系統(tǒng)的性能高低與其基本算法、性能以及對(duì)數(shù)據(jù)的處理程度有著密切的關(guān)系。數(shù)據(jù)處理效果取決于對(duì)數(shù)據(jù)本身預(yù)處理和關(guān)鍵字提取的設(shè)計(jì)[10~11]。由于中文自身帶有特定的情感,以及語(yǔ)氣、語(yǔ)義、語(yǔ)境的復(fù)雜性,因此對(duì)于數(shù)據(jù)關(guān)鍵詞的處理是整個(gè)問答系統(tǒng)性能的關(guān)鍵點(diǎn)之一。其中許多限定領(lǐng)域的問答算法使用了單詞向量(Word2Vec)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)相結(jié)合的方式進(jìn)行構(gòu)建,該方法可以對(duì)多個(gè)數(shù)據(jù)集的處理,并且具有一定的可靠性和有效性?;谝陨显O(shè)想,本文將Word2Vec 和CNN模型添加到現(xiàn)有的稅務(wù)咨詢問答系統(tǒng)的初始框架中,繼而對(duì)稅務(wù)咨詢問答系統(tǒng)中的各類型指標(biāo)進(jìn)行改進(jìn)。
由于使用Word2Vec構(gòu)建詞向量是基于詞語(yǔ)進(jìn)行的,因此需要對(duì)輸入的語(yǔ)料數(shù)據(jù)在清洗后進(jìn)行詞匯分割,目前進(jìn)行中文詞匯分割的算法有很多,例如Jieba 分詞、正向最大匹配法、逆向最大匹配法等。通過各類分詞方法的嘗試,本文最終選擇采取Jieba 分詞的方法對(duì)詞匯進(jìn)行分割,分詞的主要原理是將一個(gè)句子進(jìn)行劃分,使其變成一個(gè)個(gè)組成句子的詞語(yǔ)[12]。先對(duì)各個(gè)詞語(yǔ)進(jìn)行編號(hào)并形成路徑,然后對(duì)所有路徑進(jìn)行可能性計(jì)算,最后找出最大可能性的路徑作為分詞結(jié)果,如式(1)所示:
W為句子的劃分,所產(chǎn)生的分詞為w1,w2,…,wn。最大可能性計(jì)算方法如式(2)所示:
Word2Vec是Google在2013年發(fā)布的基于神經(jīng)網(wǎng)絡(luò)的詞向量生成工具。它從包含高質(zhì)量的分布式詞向量的大量文檔中進(jìn)行學(xué)習(xí),涵蓋了大量的詞語(yǔ)含義和詞匯信息[13]。Word2Vec 的核心結(jié)構(gòu)是簡(jiǎn)化的神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型,主要分為兩個(gè)模型:ContinuousBag-of-Words(CBoW)和 ContinuousSkipgram(Skip-gram)[14]。在此選擇CBoW 模型,如圖1所示。
圖1 CBoW模型示意圖
優(yōu)化CBoW模型目標(biāo)如式(3)所示:
其中,wt是當(dāng)前詞,p(w|Context(w))是核心概率條件函數(shù),Word2Vec輸入可以作為可優(yōu)化參數(shù),更好地為相似性任務(wù)的疑問句提供服務(wù)。
上一節(jié)提到以詞向量作為輸入層,并對(duì)句子中的含義進(jìn)行建模,接下來要進(jìn)行語(yǔ)義識(shí)別和特征提?。?],這就需要通過卷積神經(jīng)網(wǎng)絡(luò)來具體實(shí)現(xiàn),最后才可以引入最大池化層(Max-Pooling)。合并各種結(jié)果后將卷積窗口下提取的特征引入Softmax,以實(shí)現(xiàn)問題類別的多分類算法。CNN(卷積神經(jīng)網(wǎng)絡(luò))分為三層結(jié)構(gòu):擁有局部特征提取功能的是卷積層;擁有降低數(shù)據(jù)維度功能的是池化層(即降維操作);擁有結(jié)果輸出功能并類似于傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的部分的是全連接層[15]。
1)卷積層特征提取
如圖2 所示,對(duì)長(zhǎng)度為n 個(gè)單詞的句子進(jìn)行劃分段落,再將長(zhǎng)度為k 的單詞向量連接起來以形成n*k 的特征矩陣,然后使用不同長(zhǎng)度的卷積窗口對(duì)其執(zhí)行卷積運(yùn)算,從而獲得各種n-gram功能。
圖2 卷積層特征提取示意圖
2)池化層合并
在池化層,可以將多個(gè)卷積層的結(jié)果進(jìn)行合并。通過Max_Pooling 的處理,能夠?qū)⒍鄠€(gè)卷積層得到的特征進(jìn)行合并進(jìn)行降維操作以形成最終的特征。Max_Pooling有兩個(gè)優(yōu)點(diǎn)。
首先,本操作可以保證位置與旋轉(zhuǎn)不變形。使用Max_Pooling 時(shí)不必考慮強(qiáng)特征的位置,即無(wú)論強(qiáng)特征出現(xiàn)在哪個(gè)位置,Max_Pooling 都能將其提取出來。
其次,Max_Pooling 能減少模型參數(shù)數(shù)量,有利于減少模型過擬合問題。經(jīng)過操作后往往把數(shù)組轉(zhuǎn)換為單一數(shù)值,這樣能減少后續(xù)全連接層的神經(jīng)元個(gè)數(shù)。
3)輸出層多分類
Softmax 多重分類器作為模型的最后一層,計(jì)算過程如式(4)所示:
交叉嫡作為問答模型的目標(biāo)函數(shù),如式(5)所示:
卷積神經(jīng)網(wǎng)絡(luò)問答模型的第個(gè)神經(jīng)元的輸出如式(6)所示:
在同一時(shí)刻使用Softmax 和交叉熵,進(jìn)行誤差的反向傳播,得到的結(jié)果如式(7)所示:
卷積神經(jīng)網(wǎng)絡(luò)模型復(fù)雜度(即卷積神經(jīng)網(wǎng)絡(luò)隱含層的層數(shù)和神經(jīng)元的個(gè)數(shù))取決于問題的復(fù)雜度:若模型復(fù)雜度過低,當(dāng)遇到復(fù)雜函數(shù)時(shí)很難找到其規(guī)律,擬合的效果會(huì)變差,也就達(dá)不到理想的擬合精度;若模型復(fù)雜度過高,計(jì)算量就會(huì)隨之增加,計(jì)算所需要的時(shí)間也會(huì)延長(zhǎng),整個(gè)模型的訓(xùn)練速度就會(huì)變慢,甚至?xí)霈F(xiàn)過擬合現(xiàn)象。在實(shí)際應(yīng)用中,模型復(fù)雜度一般都是依靠使用者的經(jīng)驗(yàn)或者實(shí)驗(yàn)進(jìn)行調(diào)節(jié)的,這種調(diào)節(jié)方式主要依靠的是使用者的主觀判斷,往往并不能獲取正確的樣本,導(dǎo)致模型訓(xùn)練存在誤差。訓(xùn)練誤差和訓(xùn)練模型復(fù)雜度之間的相關(guān)性如圖3所示。
圖3 訓(xùn)練誤差和模型復(fù)雜度相關(guān)性示意圖
可見,當(dāng)模型復(fù)雜度達(dá)到一定程度時(shí),隨著模型復(fù)雜度的增加,雖然訓(xùn)練誤差仍在繼續(xù)降低,但實(shí)際的測(cè)試誤差卻不斷上升。即在訓(xùn)練集進(jìn)行測(cè)試的時(shí)候,性能表現(xiàn)很好,但當(dāng)在測(cè)試集進(jìn)行測(cè)試時(shí),性能表現(xiàn)較差,這種現(xiàn)象被稱為過擬合。導(dǎo)致過擬合現(xiàn)象的主要原因就是訓(xùn)練模型的復(fù)雜度較高,最直觀的辦法就是降低訓(xùn)練模型復(fù)雜度,但這也會(huì)導(dǎo)致擬合精度下降。
正則化為解決上述問題提供了思路,通過正則化可以制約訓(xùn)練模型最終的復(fù)雜度,降低過擬合現(xiàn)象出現(xiàn)的概率,從而提升了神經(jīng)網(wǎng)絡(luò)面對(duì)新事物的能力,使得神經(jīng)網(wǎng)絡(luò)能夠更好地適應(yīng)各種模型。正則化是通過引入矩陣范數(shù)來計(jì)算損失函數(shù),由此來對(duì)模型的復(fù)雜程度做出懲罰。正則化一般是模型復(fù)雜的單調(diào)遞增函數(shù),如式(8)所示:
L1 范數(shù)正則化是指所有特征系數(shù)的絕對(duì)值求和,見式(9):
L2 范數(shù)正則化是指所有特征系數(shù)的平方和再求平方根,見式(10):
L1范數(shù)和L2范數(shù)都是通過求和來限制參數(shù)的大小,但所起到的效果卻大不相同:L1 范數(shù)每次更新時(shí)會(huì)加上一個(gè)常數(shù),往往會(huì)導(dǎo)致特征系數(shù)為0,這樣該特征便不能影響訓(xùn)練結(jié)果,使得特征稀疏化,所以比較合適用來進(jìn)行特征選擇;而L2 范數(shù)會(huì)對(duì)特性系數(shù)進(jìn)行比例縮放,只會(huì)使特征系數(shù)越來越小但不會(huì)為0,可以有效防止模型過擬合。
本文主要是對(duì)L2 范數(shù)正則化進(jìn)行應(yīng)用,L2 范數(shù)正則化可以起到簡(jiǎn)化模型的作用,能夠?qū)㈥P(guān)鍵權(quán)值的影響控制在較小的范圍內(nèi),從而在一定的程度上降低過擬合的風(fēng)險(xiǎn)。
ReLU(Rectified Linear Unit),即修正線性單元。ReLU的原理是篩選出模型中的不必要特征并將其刪除,用于降低計(jì)算量、解決梯度消失問題和緩解過擬合問題。為提高本文模型的計(jì)算效率,降低計(jì)算成本,通過ReLU 算法對(duì)模型進(jìn)行進(jìn)一步優(yōu)化,提高模型的精準(zhǔn)度。ReLU 激活函數(shù)的表現(xiàn)形式如圖4所示。
圖4 ReLU激活函數(shù)示意圖
ReLU激活函數(shù)的計(jì)算方法如式(11)所示:
可以看出ReLU 函數(shù)是一個(gè)分段線性函數(shù),負(fù)數(shù)值為0,正數(shù)值為其本身。而這種單邊抑制會(huì)使得神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元具有稀疏激活性,可以有效解決當(dāng)神經(jīng)網(wǎng)絡(luò)模型增加N 層之后出現(xiàn)的過擬合問題。從函數(shù)圖中可以看出,ReLU函數(shù)具有“轉(zhuǎn)折點(diǎn)”,而ReLU的非線性恰恰就是通過這個(gè)“轉(zhuǎn)折點(diǎn)”所表現(xiàn)的,由于ReLU的非負(fù)區(qū)間的梯度是常數(shù),所以ReLU 不會(huì)出現(xiàn)梯度消失的問題,從而使整個(gè)模型的收斂處在一個(gè)穩(wěn)定的狀態(tài)。
在系統(tǒng)設(shè)計(jì)開始考慮到系統(tǒng)的穩(wěn)定性,因此系統(tǒng)整體架構(gòu)采用的微服務(wù)開發(fā),由于SpringBoot 具有很強(qiáng)的可擴(kuò)展性以及能夠?qū)崿F(xiàn)自動(dòng)裝配,因此對(duì)于每個(gè)服務(wù)個(gè)體使用SpringBoot框架進(jìn)行開發(fā)。而對(duì)于微服務(wù)間的注冊(cè)以及調(diào)用熔斷等需求,使用阿里巴巴旗下的SpringCloudAlibaba 進(jìn)行開發(fā),安全框架選用SpringSecurity,從而使服務(wù)間的調(diào)用更加穩(wěn)定。數(shù)據(jù)緩存工具選用Redis 數(shù)據(jù)結(jié)構(gòu)服務(wù)器,將事先頁(yè)面需要的數(shù)據(jù)存在Redis 數(shù)據(jù)庫(kù)中,等頁(yè)面有需要就從Redis 查看有沒有所需的數(shù)據(jù),如果沒有就查詢MySQL 數(shù)據(jù)庫(kù),同時(shí)將查詢出來的數(shù)據(jù)存入Redis 數(shù)據(jù)庫(kù)中一份,這樣一旦有下一次訪問,就可以直接從Redis數(shù)據(jù)庫(kù)中取出。由于Redis數(shù)據(jù)庫(kù)是基于內(nèi)存的,且內(nèi)部機(jī)制是IO 多路復(fù)用機(jī)制,效率極高,響應(yīng)速度也自然極高,這樣可以在一定程度上改善用戶的體驗(yàn)感。
4.2.1 數(shù)據(jù)導(dǎo)入模塊
EasyExcel 是JAVA 用于操作Excel 表格的工具庫(kù),可以對(duì)各個(gè)類型的Excel文件進(jìn)行讀寫操作,通過繼承AnalysisEventListener 監(jiān)聽器,去讀取Excel文件每一行數(shù)據(jù),并轉(zhuǎn)換成SQL 語(yǔ)言,轉(zhuǎn)存至MySQL數(shù)據(jù)庫(kù)中。系統(tǒng)管理員僅需提前在Excel表格中進(jìn)行問答數(shù)據(jù)集的編輯工作,之后將該Excel文件保存再本地,然后上傳至系統(tǒng)即可實(shí)現(xiàn)批量數(shù)據(jù)導(dǎo)入的功能,提高了系統(tǒng)管理員的工作效率。Excel文件導(dǎo)入的界面如圖5所示。
圖5 Excel文件導(dǎo)入界面示意圖
4.2.2 問答搜索模塊
問答搜索模塊的流程是:用戶首先輸入搜索內(nèi)容,前端讀取內(nèi)容后,傳至服務(wù)器,之后對(duì)讀取到的內(nèi)容進(jìn)行分詞,構(gòu)建詞向量然后借助神經(jīng)網(wǎng)絡(luò)進(jìn)行語(yǔ)義匹配,最后將匹配的結(jié)果傳輸?shù)角岸?,展示在用戶面前。問答搜索模塊的前端界面如圖6所示。
圖6 問答搜索界面示意圖
無(wú)論是納稅人還是稅務(wù)工作者,在面對(duì)涉稅問題時(shí)都需要掌握諸多繁雜的稅收法律法規(guī)以及相關(guān)的政策。因此,研究和開發(fā)稅務(wù)咨詢智能問答系統(tǒng)具有重要的應(yīng)用價(jià)值。本文通過對(duì)研究目前現(xiàn)有的智能問答關(guān)鍵技術(shù),成功構(gòu)建了基于詞向量和卷積神經(jīng)網(wǎng)絡(luò)的稅務(wù)問答系統(tǒng)。從算法實(shí)現(xiàn)的角度看,通過使用Jieba 分詞和Word2Vec 詞向量完成了語(yǔ)料預(yù)處理工作,并在卷積神經(jīng)網(wǎng)絡(luò)(CNN)的訓(xùn)練過程中加入了正則化和ReLU 算法等優(yōu)化方法,提升了模型訓(xùn)練的效果。從系統(tǒng)實(shí)現(xiàn)的角度看,采用了目前流行的微服務(wù)框架,對(duì)系統(tǒng)各個(gè)模塊分別設(shè)計(jì),并最終完成了系統(tǒng)的整合。本系統(tǒng)成本較為低廉且便于維護(hù),對(duì)稅務(wù)機(jī)關(guān)來說減輕了工作壓力,降低了咨詢成本。對(duì)納稅人來說能夠方便快捷地獲取稅務(wù)知識(shí),提升了納稅人對(duì)稅務(wù)咨詢服務(wù)的滿意度。