吳德平,華 鋼
1(中國礦業(yè)大學(xué) 信息與控制工程學(xué)院,徐州 221008)
2(江蘇安全技術(shù)職業(yè)學(xué)院 網(wǎng)絡(luò)與信息安全學(xué)院,徐州 221011)
安全生產(chǎn)事關(guān)生命財(cái)產(chǎn)安全.通過對(duì)安全生產(chǎn)事故劃分,對(duì)安全生產(chǎn)事故發(fā)生的行業(yè)、時(shí)間、地域、原因、教訓(xùn)等多個(gè)維度展開大數(shù)據(jù)分析,采用語義分析技術(shù),從客觀的數(shù)據(jù)中挖掘安全生產(chǎn)事故的特點(diǎn)與規(guī)律,為安全生產(chǎn)的應(yīng)急管理提供科學(xué)決策具有重要技術(shù)意義和參考價(jià)值.本文旨在通過NLP 技術(shù)實(shí)現(xiàn)安全生產(chǎn)事故大數(shù)據(jù)分析.圖1是安全生產(chǎn)事故分類的實(shí)現(xiàn)流程,通過該流程實(shí)現(xiàn)安全生產(chǎn)事故的分類.準(zhǔn)備大量的安全生產(chǎn)案例作為語料,jieba分詞工具實(shí)現(xiàn)語料分詞,將分詞后的單元輸入Word2Vec模型獲得詞向量,通過K-means 聚類對(duì)詞向量實(shí)現(xiàn)聚類實(shí)現(xiàn)安全生產(chǎn)事故的分類[1].
圖1 安全生產(chǎn)事故分類實(shí)現(xiàn)流程
文本表示是把字詞處理成向量或矩陣,以便計(jì)算機(jī)能進(jìn)行處理.文本表示是自然語言處理的開始環(huán)節(jié).目前常用的文本表示模型有:詞袋模型、主題模型和詞嵌入模型等.詞袋模型主要有One-Hot (獨(dú)熱編碼)、n-gram、TF-IDF.本例采用One-Hot 編碼.
One-Hot 編碼,又稱一位有效編碼,其方法是使用N位狀態(tài)寄存器來對(duì)N個(gè)狀態(tài)進(jìn)行編碼,每個(gè)狀態(tài)都有它獨(dú)立的寄存器位,并且在任意時(shí)候,其中只有一位有效.本質(zhì)上是用一個(gè)只含一個(gè)1,其他都是0 的向量來唯一表示詞語.表1中安全生產(chǎn)事故性質(zhì)分類為例(僅考慮死亡人數(shù)),死亡人數(shù)1-9 的一種One-Hot 編碼如表1.
表1 One-Hot 編碼示意
分詞是實(shí)現(xiàn)中文文本詞性標(biāo)注、關(guān)鍵詞抽取等功能.jieba 分詞包是Python 中很好的分詞組件,通過加載大量安全生產(chǎn)案例的文本文件,先基于詞典分詞,然后進(jìn)行詞性標(biāo)注和發(fā)現(xiàn)新詞,同時(shí)進(jìn)行關(guān)鍵詞提取完成分詞.同時(shí)可使用jieba.suggest_freq(‘事故’,True)調(diào)節(jié)單個(gè)詞語的詞頻,使“事故”能被分出來,提高分詞效果[2-5].
Word2Vec 是Google 推出的用于獲取詞向量的工具包.Word2Vec 作為神經(jīng)概率語言模型,采用兩種模型(CBOW 和Skip-gram) 與兩種方法(Hierarchical Softmax 和Negative Sampling)的組合.CBOW 是根據(jù)某個(gè)詞前面的N個(gè)詞或前后N個(gè)詞計(jì)算某個(gè)詞概率的模型,其模型如圖2.Skip-gram 是根據(jù)某個(gè)詞計(jì)算它前后出現(xiàn)某幾個(gè)詞的各個(gè)概率.
圖2 CBOW 模型
CBOW 模型一般采用3 層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),分為輸入層,隱藏層(嵌入層)和輸出層(Softmax 層).CBOW模型輸入上下文詞的One-Hot 編碼,然后連接一個(gè)全連接層,再連接若干個(gè)層,最后接Softmax 分類器,再通過梯度優(yōu)化和反向傳播讓模型逼近最小誤差就可以得到詞向量.由于神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練中生成的詞匯往往數(shù)萬以上,這大大降低了神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度,本例選用CBOW+負(fù)采樣提高訓(xùn)練速度,該組合具有運(yùn)算快的特點(diǎn).任何采樣算法應(yīng)該保證頻次越高的樣本越容易被采樣出來.負(fù)采樣的本質(zhì)就是每次讓一個(gè)訓(xùn)練樣本更新神經(jīng)網(wǎng)絡(luò)的部分權(quán)重.CBOW 模型中詞向量的數(shù)量大,神經(jīng)網(wǎng)絡(luò)則有龐大的權(quán)重?cái)?shù),不同于原本每個(gè)訓(xùn)練樣本更新所有的權(quán)重,負(fù)采樣每次讓一個(gè)訓(xùn)練樣本僅僅更新一部分的權(quán)重,其他權(quán)重全部固定,這樣即可以減少計(jì)算量,同時(shí)在一定程度上增加隨機(jī)性,降低了損失值.具體代碼中l(wèi)oss 函數(shù)定義如下:
loss=tf.reduce_mean(tf.nn.nce_loss(weights=nce_we ights,biases=nce_biases,labels=train_labels,inputs=embed,num_sampled=num_sampled,num_classes=words_size)).
train_inputs 是中心詞,train_label 是該中心詞在滑動(dòng)窗口內(nèi)的上下文詞.train_inputs 中會(huì)有連續(xù)n-1(n為滑動(dòng)窗口大小)個(gè)元素是相同的.即同一中心詞.embddings 是要學(xué)習(xí)的詞向量的存儲(chǔ)矩陣[6-13].
Gensim 是一款開源的第3 方Python 工具包,用于無監(jiān)督地學(xué)習(xí)到文本隱層的主題向量表達(dá).主要用于主題建模和文檔相似性處理,在獲取單詞的詞向量等任務(wù)中非常有用.Gensim 中集成有CBOW+負(fù)采樣算法,Word2Vec 相關(guān)的API 都在包gensim.models.Word2Vec 中.本例中設(shè)置的主要參數(shù)如表2.
表2 Gensim 模型主要參數(shù)設(shè)定
實(shí)驗(yàn)基于Tensorflow 和Python3.7,取樣1000 個(gè)安全生產(chǎn)案例,對(duì)100 個(gè)詞向量可視化結(jié)果如圖3.不難看出這些詞向量以安全生產(chǎn)為主題.主題擬合較好,如發(fā)生、事故、經(jīng)過、事故、原因等;同義詞檢測如年月日時(shí)語義相似度很高,數(shù)字的一致性檢查很好.
圖3 安全生產(chǎn)案例詞向量可視化
K-means 算法是一種迭代型無監(jiān)督學(xué)習(xí)聚類算法,采用距離作為相似性指標(biāo),從而發(fā)現(xiàn)給定數(shù)據(jù)集中的K個(gè)類,且每個(gè)類的中心是根據(jù)類中所有值的均值得到,每個(gè)類用聚類中心來描K-means 算法是一個(gè)重復(fù)移動(dòng)類中心點(diǎn)的過程,把類的中心點(diǎn),移動(dòng)到其包含成員的平均位置,然后重新劃分其內(nèi)部成員.K是算法計(jì)算出的超參數(shù),表示類的數(shù)量;K-means 可以自動(dòng)分配樣本到不同的類,但是不能決定究竟要分幾個(gè)類,K必須是一個(gè)比訓(xùn)練集樣本數(shù)小的正整數(shù).對(duì)于詞向量集D={X1,X2,···,Xm},K-means 算法針對(duì)聚類的分類C={C1,C2,···,Ck}最小化平方誤差為
其中,μi是第K個(gè)聚類的均值向量.每個(gè)類的畸變程度等于該類重心與其內(nèi)部成員位置距離的平方和.若類內(nèi)部的成員彼此間越緊湊則類的畸變程度越小,反之,若類內(nèi)部的成員彼此間越分散則類的畸變程度越大.求解成本函數(shù)最小化的參數(shù)就是一個(gè)重復(fù)配置每個(gè)類包含的觀測值,并不斷移動(dòng)類重心的過程.其算法如圖4.
由于安全生產(chǎn)事故分類,如重大事故指死亡10 人以上,30 人以下或重傷50 以上,100 以下;或直接經(jīng)濟(jì)損失5000 萬以上,1 億元以下.分類中死亡、重傷人數(shù),特別是財(cái)產(chǎn)損失數(shù)值范圍很大,特征空間會(huì)變得非常稀疏.為了解決這個(gè)問題,可通過線性回歸模型,利用半監(jiān)督學(xué)習(xí),即用已有的詞向量確定傷害與死亡、重傷較少人數(shù)(取30 人以下)的關(guān)聯(lián)度X1i、X2i和作為標(biāo)簽,令相應(yīng)的權(quán)重值分別為W1i、W2i,把經(jīng)濟(jì)損失與傷害人數(shù)關(guān)聯(lián)度Bi視為偏移量,線性回歸的預(yù)測函數(shù)為:
利用已有的樣本訓(xùn)練式(2)可確定相應(yīng)的學(xué)習(xí)參數(shù),如表3.如對(duì)于特大事故,利用學(xué)習(xí)好的參數(shù)W1i、W2i,再利用預(yù)測函數(shù)(2)和大量樣本確定X1n、X1n和Bn[14-16].
圖4 K-means 聚類算法流程圖
表3 事故性質(zhì)與關(guān)聯(lián)參數(shù)
對(duì)4 類安全事故,聚類簇?cái)?shù)K=4,算法開始均值向量取值如下:
將μ1、μ2、μ3、μ4作為初始化聚類中心,然后按照?qǐng)D4中算法計(jì)算,得到最終分類.
取1000 個(gè)安全生產(chǎn)事故為樣本,把樣本的詞向量作為聚類的輸入,按照上述實(shí)驗(yàn),圖示化結(jié)果如圖5.圖中,綠色為特大事故,藍(lán)色為重大事故,黃色為較大事故,紅色為一般事故。通過得到的詞向量和上述聚類算法,較好的實(shí)現(xiàn)安全生產(chǎn)事故分類.在樣本數(shù)萬時(shí),分類正確率達(dá)93%以上.同時(shí)該模型對(duì)安全生產(chǎn)事故開展多個(gè)維度數(shù)據(jù)分析也有很好的借鑒意義.
圖5 安全生產(chǎn)事故分類圖