吳雨芯,蔡 婷,張大斌
(1. 廣東白云學(xué)院大數(shù)據(jù)與計算機學(xué)院,廣州510450; 2. 中山大學(xué)數(shù)據(jù)科學(xué)與計算機學(xué)院,廣州510006;3. 重慶郵電大學(xué)移通學(xué)院大數(shù)據(jù)與軟件學(xué)院,重慶401520)
(?通信作者電子郵箱ct_dolphin@163.com)
隨著區(qū)塊鏈技術(shù)的不斷發(fā)展與應(yīng)用,部署在區(qū)塊鏈平臺上的智能合約數(shù)量已呈指數(shù)型增長[1]。自智能合約白皮書正式發(fā)布之后,標(biāo)志著未來幾年時間內(nèi)智能合約將在數(shù)字身份、資產(chǎn)記錄、金融貿(mào)易、抵押貸款、數(shù)據(jù)共享、物聯(lián)網(wǎng)供應(yīng)鏈等領(lǐng)域得到廣泛應(yīng)用。目前Ethereum 平臺上已有超過200種智能合約應(yīng)用,平均每月發(fā)布的智能合約數(shù)量接近10 萬個[2]。對區(qū)塊鏈用戶而言,如何在海量的智能合約應(yīng)用中快速準(zhǔn)確地選擇合適的應(yīng)用服務(wù),是目前亟待解決的重要問題。因此,設(shè)計有效的分類模型對智能合約實現(xiàn)自動分類是很有必要的。
智能合約自動分類可以為區(qū)塊鏈用戶提供應(yīng)用服務(wù)的智能推薦,避免了人工篩選海量智能合約的巨大時間成本,還能夠?qū)χ悄芎霞s源代碼進(jìn)行有效的組織和管理,有利于智能合約的分門別類與安全漏洞檢測[3]。智能合約分類本質(zhì)上是合約源代碼文本分類,以下展示了一個Ethereum 平臺上的智能合約源代碼。

該合約代碼使用Solidity 編程語言實現(xiàn),在滿足預(yù)設(shè)條件時,它會在相互不信任的區(qū)塊鏈參與者之間強制執(zhí)行。要將智能合約自動分類到對應(yīng)的預(yù)定義類別中,主要面臨以下幾個問題:
1)智能合約源代碼不同于普通文本,傳統(tǒng)的文本特征表示會忽略源代碼中的語法規(guī)律和上下文行為信息;
2)由于智能合約源代碼中的關(guān)鍵詞可能出現(xiàn)在文本中的任意位置,如何捕獲對分類結(jié)果有重要意義的單詞順序、句法和語義規(guī)律是一個不小的挑戰(zhàn);
3)區(qū)塊鏈平臺中的每個智能合約都對應(yīng)一個賬戶,合約賬戶信息包含了相關(guān)的合約地址、余額、代碼、相關(guān)交易、數(shù)據(jù)存儲等信息,在建立分類模型時只對合約源代碼進(jìn)行特征提取將丟失關(guān)于智能合約的部分重要信息,影響模型的分類效果。
鑒于以上問題,本文提出一種基于層級注意力機制與雙向長短期記憶(Bidirectional Long Short-Term Memory,Bi-LSTM)神經(jīng)網(wǎng)絡(luò)的智能合約自動分類模型HANN-SCA(Hierarchical Attention Neural Network with Source Code and Account)。在學(xué)習(xí)詞特征表示時,從合約源代碼和賬戶信息兩個角度出發(fā),利用雙向長短期記憶網(wǎng)絡(luò)最大限度地捕獲上下文信息和非連續(xù)詞之間的關(guān)聯(lián),更好地學(xué)習(xí)雙向的語義依賴;在詞層面和句層面同時引入注意力機制,區(qū)別不同單詞和句子的注意力權(quán)重以構(gòu)建智能合約文檔級特征表示。
智能合約自動分類可以建模為一個文本分類問題,目前對于智能合約自動分類問題的研究相對較少,其中,黃步添等[4]首次結(jié)合智能合約源代碼與交易信息,基于詞嵌入模型提取文本特征,利用長短期記憶(Long Short-Term Memory,LSTM)網(wǎng)絡(luò)生成全局向量表示,將向量輸入到前饋神經(jīng)網(wǎng)絡(luò)中,由Softmax 層輸出分類結(jié)果。LSTM 可以很好地捕獲較長距離的依賴關(guān)系,通過訓(xùn)練可以選擇性地記憶或遺忘部分不重要信息;但它不能捕獲從后到前的語義信息,這將對分類的準(zhǔn)確度產(chǎn)生較大影響。根據(jù)句子輸入形式的不同,分布式句子表示模型主要分為基于詞序列和樹結(jié)構(gòu)兩種類型:基于詞序列的模型考慮連續(xù)詞之間的關(guān)系,從單詞序列構(gòu)造句子表示[5];基于樹結(jié)構(gòu)的模型將每個單詞標(biāo)記為語法解析樹中的一個節(jié)點,并以遞歸的方式從葉子到根學(xué)習(xí)句子表示[6]。因為深度學(xué)習(xí)中神經(jīng)網(wǎng)絡(luò)模型在自然語言處理任務(wù)中的優(yōu)異表現(xiàn),基于神經(jīng)網(wǎng)絡(luò)模型學(xué)習(xí)分布式句子表示成為文本分類任務(wù)中的一種主流實現(xiàn)方法。
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)由于具備捕獲空間和時間的局部相關(guān)性以及通過匯聚提取更高層次關(guān)聯(lián)的能力,使得CNN 可以從連續(xù)的上下文窗口中對句子進(jìn)行建模。Kim[7]在預(yù)先訓(xùn)練的詞向量基礎(chǔ)上,利用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行句子級分類。該模型基于超參調(diào)節(jié)和靜態(tài)向量作為雙通道輸入,在卷積層使用多個具有不同窗口大小的過濾器進(jìn)行特征提取,池化層將不同長度的句子表示成定長的向量表示。Dos 等[8]提出一種深度卷積神經(jīng)網(wǎng)絡(luò)CharSCNN,聯(lián)合使用字符級、詞級和句子級表示對短文本進(jìn)行情感分析。Zhang 等[9-10]將文本作為一種字符級的原始信號,直接使用簡單的卷積和池化操作處理不同長度的文本分類;但他們提出的卷積神經(jīng)網(wǎng)絡(luò)模型深度較大,需要大量的訓(xùn)練數(shù)據(jù)集。Johnson 等[11]比較了較淺的單詞級卷積神經(jīng)網(wǎng)絡(luò)與較深的字符級卷積神經(jīng)網(wǎng)絡(luò)在文本分類中的性能。Wang 等[12]使用大型分類知識庫將文本表示為一組向量,并將字符級特性合并到卷積網(wǎng)絡(luò)模型中,以捕獲細(xì)粒度的子單詞信息。
循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)在學(xué)習(xí)有序數(shù)據(jù)中的語義關(guān)系時具有天然優(yōu)勢,但RNN 遇到長句或文檔分類時,句子中位置靠后的單詞對句子中靠前單詞的感知能力逐漸下降。雖然LSTM 網(wǎng)絡(luò)[13-14]改進(jìn)了這一問題,但它對于較長單詞序列的記憶能力仍然比較有限。Zhou 等[15]結(jié)合RNN 和CNN 的優(yōu)點,利用CNN 提取較高層次的短語特征表示,并將其輸入到LSTM 中得到句子向量表示。Tang 等[16]利用門控遞歸神經(jīng)網(wǎng)絡(luò)自適應(yīng)地將句子語義及其關(guān)系編碼到文檔表示中。針對LSTM 無法從后向前學(xué)習(xí)語義信息的問題,Zhou 等[17]提出一種雙向長短期記憶網(wǎng)絡(luò)(Bi-LSTM),利用二維卷積和二維池化操作進(jìn)行特征采樣和文本表示。
針對句子編碼成固定長度向量后會成為模型整體性能提升的瓶頸問題,Bahdanau 等[18]首次在利用雙向循環(huán)神經(jīng)網(wǎng)絡(luò)(Bidirectional Recurrent Neural Network,Bi-RNN)獲取語義特征過程中加入了注意力機制,提高了對長句子的翻譯效率和準(zhǔn)確度。緊接著,Zhao 等[19]提出一種基于注意力機制的卷積神經(jīng)網(wǎng)絡(luò)ATT-CNN,在沒有任何外部特征的情況下,利用注意機制自動捕獲長句子上下文信息和非連續(xù)詞之間的關(guān)聯(lián),從而提高句子分類性能。Yang 等[20]提出一種基于層級注意力機制的文檔分類網(wǎng)絡(luò),使用詞層面和句層面兩級的注意力機制,在構(gòu)造文件表示時區(qū)別不同單詞和句子的注意力權(quán)重。針對RNN 及其衍生網(wǎng)絡(luò)模型中前后隱藏狀態(tài)存在依賴性,無法實現(xiàn)并行計算的問題,Vaswani等[21]提出一種完全依賴于注意力機制的網(wǎng)絡(luò)模型Transformer,結(jié)合自注意力和點積注意力機制計算不同位置權(quán)重。在多語言文檔分類任務(wù)中,Pappas 等[22]利用多任務(wù)學(xué)習(xí)和對齊的語義空間作為輸入,使用跨語言的共享編碼器和共享注意力機制,提出了一種單一多語言模型。Du 等[23]結(jié)合注意力機制,利用Bi-LSTM 捕獲句子中的關(guān)鍵單詞。
不同于上述工作,本文針對智能合約自動分類問題,利用Bi-LSTM 神經(jīng)網(wǎng)絡(luò)從源代碼和賬戶信息兩個角度對智能合約建模,在層級注意力機制的作用下結(jié)合代碼特征與賬戶特征,作為神經(jīng)網(wǎng)絡(luò)的輸入實現(xiàn)分類任務(wù)。基于不同區(qū)塊鏈平臺上智能合約數(shù)據(jù)集的實驗驗證了所提模型的有效性。
本文模型HANN-SCA 的整體框架如圖1 所示。模型網(wǎng)絡(luò)結(jié)構(gòu)主要由詞嵌入層、Bi-LSTM 層、句表示層、文檔表示層、連接層和Softmax 層組成。為了最大限度地提取智能合約的特征信息,提高神經(jīng)網(wǎng)絡(luò)分類性能,本文同時從智能合約源代碼和賬戶信息兩個角度建模:源代碼角度關(guān)注智能合約中代碼語義特征,賬戶信息角度關(guān)注智能合約賬戶特征;并且,在特征學(xué)習(xí)過程中分別在詞層面和句層面引入注意力機制,重點捕獲對智能合約有重要意義的單詞或句子。最后,連接代碼特征和賬戶特征生成智能合約文檔級特征表示,通過Softmax層完成分類任務(wù)。

圖1 HANN-SCA模型網(wǎng)絡(luò)框架Fig. 1 Network structure of HANN-SCA model

LSTM網(wǎng)絡(luò)可以處理任意長度的單詞序列,以遞歸的方式將一個轉(zhuǎn)換函數(shù)f 應(yīng)用到內(nèi)部隱藏狀態(tài)向量ht。隱藏狀態(tài)ht在t 時刻與當(dāng)前輸入向量et以及前一隱藏狀態(tài)ht-1之間的關(guān)系如式(2)所示:

Bi-LSTM網(wǎng)絡(luò)層中包含多個LSTM單元,如圖2所示。
每個LSTM 單元中包含一個記憶單元ct和三個門控制器,分別是輸入門it,輸出門ot和遺忘門ft。對給定的輸入向量et、上一單元的隱藏狀態(tài)ht-1、上一單元的記憶狀態(tài)ct-1,當(dāng)前單元的隱藏狀態(tài)輸出ht可計算如下:

圖2 LSTM單元結(jié)構(gòu)Fig. 2 LSTM cell structure

其中:需要學(xué)習(xí)的參數(shù)包括權(quán)重矩陣W、U、V 和偏置向量bt、

在智能合約源代碼和賬戶信息中,句子里不同單詞對合約分類的結(jié)果貢獻(xiàn)度是不一樣的。例如,在一個娛樂類智能合約中,取名為“Player”的函數(shù)或變量相比其他單詞,對該合約所屬類別的預(yù)測能起到更加重要的作用。因此,本文在智能合約特征學(xué)習(xí)過程中從源代碼和賬戶信息兩個角度出發(fā),分別在詞層面和句層面引入注意力機制,進(jìn)而提取對智能合約分類有重要意義的特征單詞和句子。
2.3.1 代碼注意力

2.3.2 賬戶注意力



在得到智能合約全局特征表示后,將d 作為最終輸入到Softmax 分類器的分類特征。首先將d 反饋到線性層中,從而將其投影到目標(biāo)分類Q中。投影過程如式(19)~(21)所示:其中:Wl為權(quán)值矩陣;bl為偏置;M 為目標(biāo)分類標(biāo)簽數(shù);示d在分類標(biāo)簽Q 中的最大概率值。為了訓(xùn)練分類模型中的參數(shù),本文選擇交叉熵函數(shù)作為損失函數(shù)。損失函數(shù)如式(22)所示:

其中:pi(?)表示預(yù)測概率分布;qi()表示指標(biāo)函數(shù);N 為訓(xùn)練數(shù)據(jù)集中的句子數(shù);M 為目標(biāo)分類標(biāo)簽數(shù);λ 為引入的L2正則化參數(shù);θ表示Bi-LSTM 網(wǎng)絡(luò)層和線性層的一組訓(xùn)練參數(shù)。本文選擇ADADELTA[25]隨機梯度下降更新規(guī)則來學(xué)習(xí)模型的參數(shù)。同時,為了避免過擬合問題,使用Dropout[26]隨機丟棄LSTM 單元的部分輸入,通過最小化損失函數(shù)來優(yōu)化訓(xùn)練模型。
本文分別從3 個不同的區(qū)塊鏈平臺收集了總共35 101 個經(jīng)過驗證的智能合約,并利用網(wǎng)站提供的API 獲取相關(guān)智能合約賬戶信息。數(shù)據(jù)集統(tǒng)計信息如表1所示。

表1 數(shù)據(jù)集統(tǒng)計信息Tab. 1 Dataset statistical information
根據(jù)文獻(xiàn)[4]對智能合約的分類,本文將智能合約應(yīng)用分為娛樂(音樂、視頻、游戲和社交),工具,信息管理,金融(保險、融資、投資和貨幣等),彩票,物聯(lián)網(wǎng),其他共7個類別。為了驗證HANN-SCA 的有效性,本文首先使用Dataset-E 數(shù)據(jù)集對模型進(jìn)行訓(xùn)練和測試,通過人工標(biāo)記得到Dataset-E 數(shù)據(jù)集中智能合約各類別統(tǒng)計信息,如表2 所示。同時,為了體現(xiàn)HANN-SCA 模型在準(zhǔn)確度和穩(wěn)定性上的優(yōu)勢,本文將HANNSCA與已有的7種模型在上述3個數(shù)據(jù)集上進(jìn)行對比實驗。

表2 Dataset-E數(shù)據(jù)集中的智能合約類別統(tǒng)計Tab. 2 Smart contract category statistics in Dataset-E
與分類問題中常用的指標(biāo)類似,本文使用正確率(Precision)、召回率(Recall)和F 值(F-score)三個度量指標(biāo)來評價模型的性能。指標(biāo)計算如下:

其中:out_tp 表示測試數(shù)據(jù)集中預(yù)測分類為陽性、實際也為陽性的智能合約個數(shù);out_fp 表示預(yù)測為陽性、實際為陰性的個數(shù);out_fn表示預(yù)測為陰性、實際為陽性的個數(shù)。
實驗選取Dataset-E 數(shù)據(jù)集的80%作為模型訓(xùn)練集,20%作為測試集。表3顯示了7種智能合約類別的分類結(jié)果。
從表3 可以看出,整體93.1%的分類準(zhǔn)確率驗證了HANN-SCA 模型的有效性。其中,物聯(lián)網(wǎng)和其他類別的智能合約相比金融、彩票、工具類等分類效果較差。這是因為:一方面,在Dataset-E 數(shù)據(jù)集中物聯(lián)網(wǎng)和其他類別的智能合約數(shù)量偏少,分類標(biāo)簽數(shù)量不均衡;并且其他類別包含的隱含種類較多,有可能導(dǎo)致模型無法很好地學(xué)習(xí)到分類邊界。另一方面,金融類、彩票類、工具類的智能合約特征相對比較突出,更容易被模型所學(xué)習(xí)。
接下來,將模型HANN-SCA 與以下7 種基準(zhǔn)模型在表1所示3個數(shù)據(jù)集上進(jìn)行對比實驗。
1)W2V-SVM(Word to Vector-Support Vector Machine):使用Word2Vec方法對詞向量進(jìn)行訓(xùn)練,采用支持非線性分類的高斯核支持向量機作為分類器,結(jié)合One vs All策略進(jìn)行多類分類。
2)CNN[7]:借助詞向量將句子編碼成二維矩陣,使用多個不同窗口大小的卷積過濾器提取特征,并將不同長度的句子表示成固定長度的向量表示。
3)C-LSTM(Convolutional-Long Short-Term Memory)[15]:一種CNN+LSTM 的方法。使用CNN 提取高層次特征表示,利用LSTM 學(xué)習(xí)長期依賴關(guān)系,生成句子向量表示。C-LSTM 模型既能捕獲短語的局部特征,又能捕獲句子的全局語義和時態(tài)語義。
4)W2V-LSTM(Word to Vector-Long Short-Term Memory)[4]:先將智能合約源代碼通過Word2Vec方法映射為詞向量表示,再將詞向量順序輸入LSTM 網(wǎng)絡(luò)得到全局代碼向量。同時,結(jié)合智能合約關(guān)聯(lián)交易信息,通過一個前饋神經(jīng)網(wǎng)絡(luò)以及Softmax輸出分類標(biāo)簽概率。
5)ATT-CNN(Attention-Convolutional Neural Network)[19]:該模型將句子中的每個單詞替換為它的向量表示,并創(chuàng)建句子矩陣。結(jié)合注意力機制,通過卷積和最大池化操作將句子向量映射到隱層特征空間表示,利用全連接層輸出標(biāo)簽概率分布。
6)AT-LSTM(Attention-Long Short-Term Memory)[14]:通過LSTM 模型對句子進(jìn)行建模,將LSTM 隱藏層與方面詞向量相結(jié)合,在注意力機制的作用下以加權(quán)和的方式生成句子最終表示。
7)ATT-BiLSTM(Attention-Bidirectional Long Short-Term Memory)[23]:結(jié) 合 注 意 力 機 制,使 用 雙 向LSTM 學(xué) 習(xí) 文 本特征。

表3 Dataset-E數(shù)據(jù)集的分類結(jié)果Tab. 3 Classification results on Dataset-E
基于Dataset-E、Dataset-N 和Dataset-EO 數(shù)據(jù)集,表4 給出了不同模型的實驗結(jié)果。

表4 HANN-SCA與不同模型實驗結(jié)果對比Tab. 4 Experimental results comparison of HANN-SCA with different models
實驗結(jié)果表明,HANN-SCA 模型在3 個數(shù)據(jù)集上均取得了不錯的分類效果,其中在Dataset-E 數(shù)據(jù)集上的分類效果最佳,達(dá)到93.1%的正確率,比ATT-BiLSTM 模型和文獻(xiàn)[2]提出的W2V-LSTM模型提高了2.1個百分點和4.2個百分點,顯示出較好的性能??傮w來看,各模型在Dataset-N 數(shù)據(jù)集上的分類效果不如其他兩種數(shù)據(jù)集效果好,原因在于Dataset-N 數(shù)據(jù)集中訓(xùn)練數(shù)據(jù)偏少,NEO 區(qū)塊鏈平臺中智能合約的賬戶信息描述相對Ethereum 和EOS 平臺來說不夠詳細(xì),從而直接影響到各模型對智能合約所屬類別的預(yù)測。從表4 還可以看出,利用CNN 進(jìn)行智能合約分類的效果略差于LSTM,這進(jìn)一步驗證了LSTM 在具有上下文長期依賴關(guān)系的文本分類任務(wù)中的優(yōu)勢。
在沒有加入注意力機制的情況下,CNN 和LSTM 模型在Dataset-E 數(shù)據(jù)集上分別達(dá)到83.4%和87.8%的正確率,而加入注意力機制的ATT-CNN 和AT-LSTM 模型正確率達(dá)到了88.6%和89.6%,分別提高了5.2 個百分點和1.8 個百分點。這是因為在神經(jīng)網(wǎng)絡(luò)模型中加入注意力機制后,模型在學(xué)習(xí)智能合約代碼特征和賬戶信息時會重點關(guān)注合約的關(guān)鍵特征,從而有效提高模型的分類正確率。
本文模型在3 個數(shù)據(jù)集上的分類效果均優(yōu)于ATTBiLSTM 模型,正確率分別提高了2.1 個百分點、2.3 個百分點和1.6 個百分點。這是由于HANN-SCA 模型從單詞和句子層面分別建模,使用兩層注意力機制對單詞特征和句子特征進(jìn)行向量轉(zhuǎn)換。圖3 展示了Dataset-E 數(shù)據(jù)集中一個娛樂類(游戲)智能合約注意力可視化,其中顏色越深代表注意力權(quán)重越大。
另外,本文對比了HANN-SCA 與各模型在不同數(shù)據(jù)集上的穩(wěn)定性與運行時間效率。從圖4 可知,HANN-SCA 模型在訓(xùn)練樣本達(dá)到50%左右時基本達(dá)到了穩(wěn)定;而其他幾種模型幾乎需要在訓(xùn)練樣本達(dá)到70%以上才能趨于穩(wěn)定,說明了HANN-SCA模型在穩(wěn)定性上的優(yōu)勢。這是因為本文所提模型在對智能合約進(jìn)行分類時,使用了兩層注意力機制獲取智能合約源代碼特征和賬戶信息特征,考慮了更全面的上下文語義關(guān)系依賴。
圖5 給出了HANN-SCA 與各模型訓(xùn)練時間和測試時間對比,訓(xùn)練與測試過程均在Intel Core i7-8550U CPU 上完成,將數(shù)據(jù)集的80%作為訓(xùn)練集,20%作為測試集。從圖5(a)可以看出,W2V-SVM 訓(xùn)練時間相比其他模型較短,原因是基于Word2Vec方法的SVM可以直接對詞向量進(jìn)行訓(xùn)練,支持非線性分類的高斯核能快速地完成分類。隨著CNN 中卷積層或LSTM 中隱藏層數(shù)量的增加,神經(jīng)網(wǎng)絡(luò)訓(xùn)練時間會相應(yīng)增加,但注意力機制的引入會加快模型的收斂。
由圖5(b)可知,引入了注意力機制的模型在訓(xùn)練完成后,測試時間會更短。原因在于注意力機制能更快速地提取文本中的關(guān)鍵特征,加速合約分類。從圖5(b)還可以看出,HANN-SCA 相比AT-LSTM 和ATT-BiLSTM 模型在數(shù)據(jù)集上的測試時間更短,這是因為Softmax 分類器在訓(xùn)練和測試過程中降低了分類計算復(fù)雜度,從而有效地縮短了分類時間。

圖3 源代碼單詞級注意力可視化Fig.3 Word-level attention visualization of source code

圖4 HANN-SCA與不同模型穩(wěn)定性對比Fig.4 Stability comparison of HANN-SCA with different models

圖5 不同模型運行時間對比Fig.5 Comparison of running time of different model
針對智能合約自動分類任務(wù),本文提出的HANN-SCA 模型結(jié)合層級注意力機制,利用Bi-LSTM 神經(jīng)網(wǎng)絡(luò)從源代碼和賬戶信息兩個角度分別學(xué)習(xí)智能合約的特征表示,更全面地捕獲智能合約中雙向的上下文語義依賴。最后,整合兩個特征表示作為智能合約的最終表示,用于智能合約分類?;贒ataset-E、Dataset-N 和Dataset-EO 數(shù)據(jù)集的實驗結(jié)果表明,本文所提模型分類性能超過了傳統(tǒng)的SVM 模型和神經(jīng)網(wǎng)絡(luò)基準(zhǔn)模型,且具有更好的穩(wěn)定性。在未來的工作中,將進(jìn)一步擴展智能合約數(shù)據(jù)集,使用層次化的分類標(biāo)簽結(jié)構(gòu),處理更復(fù)雜、更完整的分類標(biāo)簽信息。