張 立 范馨月
(貴州大學數學與統計學院 貴州 貴陽 550025)
受世界毒情形勢影響,我國毒情形勢嚴峻復雜,處于毒品問題蔓延期、毒品犯罪高發期和毒品治理攻堅期。我國現有吸毒人員300.6萬名,且每年以10%的速度增長,合成毒品泛濫、新增吸毒人員上升、吸毒人員從事違法犯罪活動和肇事肇禍等問題日益突出。如何控制吸毒人數,從需求側來對毒品問題進行源頭治理,是緝毒工作不可回避的問題。目前用得最多的刑偵手段,是基于涉毒人員審問、線人提供的線索、通話記錄和涉毒人員軌跡特征等對潛在涉毒人員進行跟蹤和控制。
近年來,公安禁毒部門建立禁毒信息系統,集成了抓獲的吸毒人員基本信息、犯罪信息,以及吸毒人員手機采集信息包括短信、微信、QQ等手機App即時聊天工具等文本信息。吸毒人員聊天文本數據包含海量的長文本和短文本,具有實時、涵蓋信息量廣等特點,為公安搜集犯罪涉毒證據提供了有效的背景支撐。但毒圈有特定的“毒語”,不管是販毒人還是買毒人,都通過這個“語言體系”進行交流,以此來判斷對方是否為“同道中人”,躲避公安機關的追捕,而且這些語言非常隱晦,極大增加了公安機關的查證和追捕難度,需要禁毒部門人工仔細瀏覽吸毒人員聊天文本并緊密聯系上下文語境才能發現涉毒敏感信息。本文首次采用BERT模型對吸毒人員聊天文本進行挖掘,與貝葉斯預測模型的各評價指標值相比,BERT模型針對處理暗號多變的緝毒偵查文本而言效果顯著。由于BERT模型有較好的上下文語境的學習能力,挖掘不在管理系統中的潛在涉毒人員,對禁毒部門的情報工作提供有力的數據支撐,可有效推廣到禁毒警務工作中去,幫助相關部門快速精準地挖掘出海量復雜網絡中涉毒人員并及時追蹤調查。
自然語言處理(NLP)中詞語表示有非神經網絡學領域[1-2]和神經網絡領域[3-5]方法,通過預訓練的詞嵌入是現代NLP系統的重要方法。早期人們考慮1-of-N Encoding法,每個單詞對應一個向量,但無法捕捉語義信息。Word class法將具有相同屬性的詞化為一類,卻不能完全包含詞之間所有的關聯。Word Embedding法則利用詞之間的距離長短表示關系強弱,詞嵌入針對從頭開始學習的方法改進[6]且可推廣到了更粗的粒度:句子嵌入[7-8]或段落嵌入[9],之后的位置編碼(Position Embedding)提供其捕捉順序序列的能力。ELMo模型[10]對傳統詞嵌入研究進行了多維度概括,通過提取上下文敏感特征,很大程度上解決了傳統LSTM模型單向學習的問題。此外,Salton團隊[11]提出向量空間模型,將文本文件表示為標識符(比如索引)向量的代數模型,但是語義敏感度不佳。傳統的分類算法利用特征工程和特征選擇來從原始文本中提取特征,比如決策樹、樸素貝葉斯和詞頻-逆文本頻率(TF-IDF)等,更加注重分類器的模型自動學習挖掘和生成能力。基于深度卷積神經網絡的文本語義特征學習方法,降低對文本數據預處理的要求,避免復雜的特征工程,改善了特征抽取過程中的誤差累積問題。2018年由Google提出基于Transformer雙向編碼器表征的BERT模型[12],從語義層面挖掘文本中詞之間潛在的語義關系,跨越句子表層句法結構的束縛,直接表征文本的寓意,在英文文本分類中取得了不錯的效果。
實驗數據來源于吸毒信息采集平臺的吸毒人員聊天文本數據,包括微信、短信和QQ等即時聊天工具。每條文本記錄均有唯一對應編號BJ,可即時跟蹤對話者ID信息,時間跨度為2018年11月至2019年11月,共30萬條原始數據。從原始數據中剔除廣告信息、單個表情信息等無效數據后,隨機抽取10 000條文本數據作為實驗數據集,主要包含日常聊天、買賣毒品等信息。
做劃分時,每條文本數據均只屬于一個類別,不存在多次劃分的情況。將劃分后的數據集隨機抽取70%的數據作為訓練集,20%數據作為驗證集,10%數據作為測試集。其中:訓練集包含7 000條文本數據;驗證集包含2 000條文本數據;測試集包含1 000條文本數據。
對于漢語的自然語言處理是非常困難的,特別是在實際聊天文本中出現的方言尤為困難。吸毒信息采集平臺的吸毒人員聊天文本數據,與規范的中文書面語不同,具有方言、同音和諧音等口語問題,采用傳統的特征提取方法進行文本分類存在困難[13-14]。比如:
(1) 你今天克不克,整點嘎嘎和子子來吸。
(2) 好餓呀,我們克吃點嘎嘎。
利用實驗省份吸毒信息采集平臺的吸毒人員聊天文本數據,通過刪除空白文本數據、表情數據和廣告文本數據,得到有效無標簽數據10 000條。在10 000條文本數據中,人工標記吸毒人員ID與其他人的聊天文本涉毒標簽記為1,不涉及毒品交易文本標簽記為0。
利用貝葉斯分類模型預訓練標簽文本數據,針對確定特征屬性fj所獲取的訓練樣本,先對不同類別計算概率值p(classi),再對每個屬性特征fj計算所有劃分情況的條件概率p(fj|classi),得每個判別類別概率為:
(1)
利用傳統的詞向量模型,采用TF-IDF及貝葉斯分類可以達到一定的效果,但對于樣例(1)(2)中同樣的詞寓意卻無法準確識別,“嘎嘎”在樣例(1)中是某毒品的暗語詞,在樣例(2)中是當地方言“肉”的意思,即不同語境下相同的字或詞有多種涵義。
一般經典的語言模型是按照從左到右的順序計算下一個詞出現的概率,如式(2)所示。而BERT是基于Transformer的雙向編碼器表征,即BERT模型的基礎是Transformer[15],旨在聯合調節所有層中的上下文來預訓練深度雙向表示,給出額外的輸出層后對模型進行微調,就能為多個任務(回答問題和情感分析等)服務。
針對涉毒人員聊天文本此類特殊文本數據而言,BERT模型的雙向關注為特殊文本增添了語境的學習能力,即在處理同一個詞語時,基于這個詞同時關注該詞前后的信息,獲取上下文的語境,如圖1所示。

圖1 BERT模型結構
將打好標簽的緝毒文本數據的詞embedding、位置embedding和類型embedding三個embedding的拼接作為BERT模型的輸入,在已預訓練好的BERT中文模型上進行微調,使其帶入具體涉毒語境訓練上下文關系,理解敏感詞一詞多義情況。BERT模型流程如圖2所示。

圖2 BERT模型流程
BERT模型來自Transformers模型的Encoder部分,在Transformer的Encoder中,數據首先進入“self-attention”模塊(如圖3所示),為每條輸入文本的第i(i=1,2,…,N-1,N)個字學習其權重,得到特征向量Attention(Qi,K,V):

Step1將輸入的字轉換成嵌入向量(word embedding)。
Step2借助嵌入向量(word embedding)乘上對應的權值矩陣得到Qi、Ki、Vi三個向量。


Step5為確保將每一個元素的范圍壓縮至(0,1)之間,對si做Softmax激活函數,點乘Vi,得到加權后每個輸入向量的分數Vi。
Step6將所有的Vi相加后最終輸出第i個字的特征向量Zi。

圖3 “self-attention”模塊結構
得到字的特征向量后,將Zi作為Feed Forward Neural Network模塊的輸入向量,使用線性整流激活函數進行輸出:
式中:W為學習的參數向量;b為偏差向量。
在實際應用過程中,為了模型去關注多個不同方面的信息,Transformer運用了多個“self-attention”,等價于h個不同的self-attention的集成:
MultiHead(Q,K,V)=[head1,head2,…,headh]×W0
(5)

由于Transformers模型的網絡結構沒有RNN或者LSTM,不具有捕捉順序序列的能力,為了解決這個問題,在編碼詞向量時引入位置向量(Position Embedding):
PE(pos,2i)=sin(pos/10 0002i/dmodel)
(7)
PE(pos,2i+1)=cos(pos/10 0002i/dmodel)
(8)
式中:dmodel為位置向量的長度;i表示字的維度;pos表示字的位置,字在偶數位置時,采用正弦函數進行計算,字在奇數位置時,采用余弦函數進行計算,而且根據正余弦加減定理,在k+p位置向量可以表示為位置k的特征向量的線性變化,使模型能學習到詞之間相對位置關系。
為了訓練模型深度雙向學習上下文語境的能力,需同時進行兩種訓練:遮蔽語言模型(masked language model)和下一句預測(Next Sentence Prediction)。現列舉四條較有代表性的文本細致描述:
(1) 好多警察啊,我不敢再等你哦,60一顆你看要不要,賞到東西了你不會覺得不值。
(2) 感冒了,注意多喝水,先吃顆感冒藥。
(3) 昨晚我和他談了下,他說有人說我有紅酒,我說那個,他說是你說的,那天你來我拿給你吃的,所以昨天他才叫你來找我要幾個紅酒。
(4) 來吃飯,我有個朋友帶了瓶紅酒。
主要錯誤分類存在兩種情況,一種是對“顆”字非常不敏感,直接將它判定為涉毒文本,另一種是當文本含有“紅酒”就判斷為涉毒文本。兩種較為突出的分類錯誤均是未對語境進行學習,現利用BERT訓練深度雙向表示的遮蔽語言模型來做這件事情。
有句子“整點嘎嘎和子子來吸”(如圖1所示),現在有15%的概率隨機屏蔽掉“嘎”這個字(BERT對中文是按字劃分的),其中:有80%的概率將“嘎”用[MASK]替換;10%的概率隨機用“天”替換;10%的概率為原意“嘎”。將“嘎”字對應的embedding輸入到一個多分類模型中,去預測被蓋住的單詞。迫使模型在編碼的時候不過于依賴當前的詞,而是考慮該詞上下文的情況。假設現在被覆蓋的字被“天”替換,在編碼“天”字時根據上文下文的字,應該把“天”編碼成“嘎”的語義而不是“天”的語義。
對于緝毒類別的判斷學習,BERT模型能雙向學習上下文語境關系,可較好處理一詞多義的情況。但針對毒圈特定的“毒語”(例如“整點嘎嘎和子子來吸”),BERT模型并不能自己理解“嘎嘎”“子子”是毒品敏感詞,不知道其中具體的含義,考慮在文字編碼中添加敏感詞的影響,重新學習輸出任務具體場景中字的向量表示,可通過增加任務實現:根據自建敏感詞庫,提取輸入文本中的敏感詞,將敏感詞學習融入BERT預訓練模型,建立BERT-sen預訓練模型。


圖4 BERT-sen模型結構

GELU(x)=xP(X≤x)=xΦ(x)
(11)

圖4中,以“整點嘎嘎和子子來吸”為例,“整點嘎嘎和子子來吸”作為輸入序列,“整”“嘎”“子”“吸”作為敏感字,將輸入序列和敏感字分別放入“Multi-head Self-Attention”層學習輸出特征向量(實線輸出)和敏感向量(虛線輸出);隨后特征向量和敏感向量作為“敏感信息融合層”的輸入,利用字的位置編碼關系,將含有敏感字的特征向量融入敏感向量信息后輸出輸入序列的融合向量;為保證語境學習的時效性,將融合向量進入“Multi-head Self-Attention”層繼續學習上下文結構關系,得到輸入序列最終向量表示。
使用Python3.7作為實驗工具,將緝毒文本數據的7 000條訓練集、2 000條驗證集、1 000條測試集放入貝葉斯、BERT和BERT-sen三類模型中進行檢驗對比,如表1所示。在類別1(涉毒)測試文本中,貝葉斯模型的準確率為0.52,BERT模型的準確率為0.81(提高了0.29),BERT模型在學習類別1(涉毒)文本數據時,比貝葉斯模型更加敏感有效;而通過添加敏感詞預訓練學習后的BERT-sen模型,學習判斷類別1(涉毒)文本數據的準確率較BERT模型有效提高了0.01。BERT模型在緝毒文本分類任務上總體優于貝葉斯模型,且添加敏感詞預訓練后的模型通過更多專業詞匯學習后加深對緝毒數據的認識,有效提高了學習判別能力。

表1 緝毒文本數據實驗結果
與BERT訓練深度雙向表示的遮蔽語言模型有關,當模型有機會學習到上下文語境時,部分敏感詞對模型分類的影響將會增加,現從涉毒文本數據分類錯誤中提取部分內容進行分析。如表2所示,列舉四個樣例,樣例4內容中含有“冰毒”,但是貝葉斯模型未能成功檢測到它;樣例1-樣例3內容中雖然未含有毒品字樣,但結合整段文本分析,可以清晰地認定其為涉毒文本。

表2 涉毒文本部分錯誤分類顯示

續表2
鑒于緝毒文本數據的特殊性,當把本屬于涉毒文本的數據劃分為非涉毒數據時,意味著會遺漏重要的犯罪線索,不能及時將犯罪人員繩之以法甚至使其繼續逍遙法外,此類錯誤成本較高,對社會影響極大。考慮選取可以學習句子上下文語境和深層次語義特征的BERT模型,并有效增加敏感詞預訓練的融合,能較好地避免此類錯誤,針對表2中同類型的文本均較好完成分類工作。
由于吸毒人員聊天文本數據的敏感性和分類工作要求的精準性,需尋求能學習上下文語境的分類模型,作為緝毒文本分類工作的有力工具。本文建立了增加敏感詞預訓練的BERT-sen分類模型,實驗數據表明,BERT-sen模型能更精準地對潛在涉毒人員進行挖掘,其主要原因在于其能更好地學習敏感詞及其上下文語境。因此,針對緝毒偵查文本數據尋找證據的這項工作,BERT-sen模型可以作為一個有力的偵查工具,為相關禁毒部門管控和打擊涉毒犯罪嫌疑人提供了強有力的數據支撐。本文的研究基于禁毒部門的實際需求,可以有針對性地推廣到禁毒警務工作中去,高效地挖掘潛在涉毒人員,可以在本地吸毒人員管控工作中提供決策輔助。
然而模型深受訓練數據集的影響,數據集可以直接影響訓練文本中的具體語境情況,因此在挑選數據工作的花費較昂貴。在今后的工作中,隨著大數據產業的不斷發展,也將繼續優化文本數據分類模型在緝毒文本分析中的應用,力求更加快速、精準地鎖定犯罪者,為后續工作實施提供有效證據。