段智華
摘 要 本文對字符級CNN深度神經(jīng)網(wǎng)絡(luò)在中國電信上海公司的自動甩單類型識別案例進(jìn)行了研究。我們使用電信自動甩單數(shù)據(jù)集,通過與傳統(tǒng)的機(jī)器學(xué)習(xí)算法比較,實(shí)驗(yàn)表明字符級CNN卷積神經(jīng)網(wǎng)絡(luò)在文本分類預(yù)測中具有競爭力的結(jié)果。
關(guān)鍵詞 電信自動甩單;CNN;BERT模型
1 背景
本論文是中國電信上海公司自動甩單類型識別內(nèi)部競賽的案例,訓(xùn)練數(shù)據(jù)集來自中國電信上海公司的甩單數(shù)據(jù),內(nèi)部競賽分為2個階段,初賽根據(jù)甩單數(shù)據(jù),預(yù)測分類是生成一張訂單還是多張訂單;復(fù)賽在預(yù)測訂單為單訂單或多訂單的基礎(chǔ)上,進(jìn)一步預(yù)測生成訂單的具體數(shù)量、行項(xiàng)目數(shù)量和業(yè)務(wù)類型。
傳統(tǒng)的機(jī)器學(xué)習(xí)文本分類算法首先提取文本的特征(Bag、TF-IDF等),然后將抽取的文本特征輸入模型進(jìn)行訓(xùn)練,常用的機(jī)器學(xué)習(xí)分類器模型包括Bag Naive Bayes、TF-IDF Naive Bayes、TF-IDF SVM、TF-IDF LGB、TF-IDF XGB、Model Ensemble等算法;深度學(xué)習(xí)算法在文本分類的應(yīng)用,包括CNN等模型;我們采用的是CNN深度學(xué)習(xí)模型,在此次內(nèi)部競賽中榮獲鼓勵獎。
2 中文字符級別的CNN卷積模型
本案例中整個CNN模型架構(gòu)包括6層,包括嵌入字向量層、CNN卷積層,最大池化層、2層全連接層及Softmax多分類層。
2.1 字向量映射層embedding(字符級別的向量編碼)
新建字向量嵌入表embedding的維度為 [字匯表大小vocab_size,字向量維度embedding_dim],對于每一個輸入的甩單特征文本[數(shù)據(jù)批次大小, 句子長度],我們讀入甩單數(shù)據(jù)文本的信息,從字向量嵌入表查找對應(yīng)索引位置的字向量,字向量映射層計算輸出的大小為:[batch_size, seq_length ,embedding_dim]。
2.2 CNN卷積層
使用一層卷積層提取甩單文本字向量特征,卷積層輸出的維度是[batch_size, seq_length - kernel_size +1, num_filters]。然后使用最大池化函數(shù)提取卷積層的最大值特征,池化以后的數(shù)據(jù)維度為[batch_size,num_filters]。
2.3 全連接層
采用2個全連接層,全連接層節(jié)點(diǎn)的個數(shù)為hidden_dim,為防止過擬合,第一個全連接層每次隨機(jī)將dropout_keep_prob的節(jié)點(diǎn)拋棄;然后將全連接的結(jié)果進(jìn)行relu激活函數(shù)的非線性變換計算,第一個全連接層輸出的維度為[batch_size, hidden_dim]。第二個全連接層輸出的維度為[batch_size, num_classes]。
2.4 Softmax分類
Softmax函數(shù)將全連接層計算處理的得分轉(zhuǎn)變?yōu)楦怕视嬎恪oftmax分類取概率最大值的索引為預(yù)測的業(yè)務(wù)分類,維度為[batch_size,],對于每一個甩單特征文本預(yù)測出業(yè)務(wù)類型,行項(xiàng)目數(shù),訂單數(shù)組合的分類。
2.5 CrossEntropyLoss交叉熵及優(yōu)化器
使用softmax_cross_entropy_with_logits交叉熵方法度量甩單文本預(yù)測值的業(yè)務(wù)分類的數(shù)據(jù)分布與目標(biāo)值y實(shí)際的業(yè)務(wù)分類數(shù)據(jù)分布的接近程度。采用AdamOptimizer優(yōu)化器,Adam是帶有動量項(xiàng)的自適應(yīng)優(yōu)化器。
3 模型比較
為了提升自動甩單類型識別案例預(yù)測分類的得分,我們使用傳統(tǒng)機(jī)器學(xué)習(xí)算法及深度學(xué)習(xí)算法分別進(jìn)行了一系列實(shí)驗(yàn),盡最大努力選擇能夠提供可比性的分類模型及預(yù)測具有競爭力的分類結(jié)果。
3.1 傳統(tǒng)機(jī)器學(xué)習(xí)方法
傳統(tǒng)的機(jī)器學(xué)習(xí)分類包括2個步驟,第一步采用詞袋模型N-gram、詞頻-逆詞頻TF-IDF等特征工程方法提取文本的特征信息;第二步使用機(jī)器學(xué)習(xí)分類器進(jìn)行分類。
詞袋模型特征-樸素貝葉斯分類器:采用CountVectorizer構(gòu)建甩單文本信息N-gram詞袋特征,選取中心詞前后N個詞的特征構(gòu)建向量。通過MultinomialNB進(jìn)行貝葉斯模型訓(xùn)練及預(yù)測。
TF-IDF特征-樸素貝葉斯分類器:詞頻TF表示一個詞語出現(xiàn)的次數(shù),逆詞頻IDF表示一個詞語的重要程度。我們使用sklearn機(jī)器學(xué)習(xí)庫的TfidfVectorizer提取文本詞頻特征,采用sklearn.naive_bayes的MultinomialNB進(jìn)行貝葉斯模型訓(xùn)練及預(yù)測。
TF-IDF特征-SVM分類器:使用sklearn的TfidfVectorizer提取TF-IDF特征,使用sklearn.svm的LinearSVC線性分類支持向量機(jī)進(jìn)行模型訓(xùn)練及測試集分類預(yù)測。
TF-IDF特征-LGB分類器:將數(shù)據(jù)提取TF-IDF特征以后序列化為pkl文件,加載pkl文件,采用微軟開源的Lightgbm.LGBMClassifier分類器進(jìn)行分類預(yù)測。
TF-IDF特征-XGB分類器: 提取數(shù)據(jù)的TF-IDF特征,序列化為pkl文件,然后加載pkl文件,采用Xgboost.XGBClassifier分類器進(jìn)行分類預(yù)測。
各算法模型集成(投票法):對于每一個機(jī)器學(xué)習(xí)的算法模型分別生成了一個訓(xùn)練集的預(yù)測結(jié)果文件,將每個分類器投票票數(shù)最多的類作為預(yù)測的類別。
3.2 深度學(xué)習(xí)算法[1]
我們體驗(yàn)了基于Pytorch版本的中文版本的基線預(yù)訓(xùn)練模型,在GPU服務(wù)器測試了訓(xùn)練,預(yù)測時取得了較不錯的得分。同時,我們深入研究了Harvard NLP實(shí)驗(yàn)室Annotated-Transformer算法源碼,Harvard NLP對BERT模型的多注意力模型進(jìn)行了注釋版本的代碼復(fù)現(xiàn),讓我們對BERT的注意力模型機(jī)制有了深入的理解。
注意力模型是一個標(biāo)準(zhǔn)編碼器-解碼器結(jié)構(gòu),每層有兩個子層:第一層是多頭自注意機(jī)制,第二層是一個簡單的、位置導(dǎo)向的、全連接的前饋網(wǎng)絡(luò)。Decoder 解碼器也由一個N=6個相同層的堆棧組成,每層由自注意力、源注意力和前饋網(wǎng)絡(luò)組成,即在每個編碼器層中的兩個子層外,解碼器還額外插入第三個子層,該子層在編碼器堆棧的輸出上執(zhí)行多頭注意力關(guān)注,解碼器與編碼器類似,使用殘差連接解碼器的每個子層,然后進(jìn)行層歸一化。
4 甩單數(shù)據(jù)集及預(yù)測結(jié)果
自動甩單類型識別案例的訓(xùn)練數(shù)據(jù)集的甩單數(shù)據(jù)-訓(xùn)練數(shù)據(jù)(153446行記錄), 訂單數(shù)據(jù)-訓(xùn)練數(shù)據(jù)(443731行記錄),測試集甩單數(shù)據(jù)(50000行記錄)。我們首先進(jìn)行了數(shù)據(jù)預(yù)處理:將甩單數(shù)據(jù)-訓(xùn)練數(shù)據(jù)與訂單數(shù)據(jù)-訓(xùn)練數(shù)據(jù)根據(jù)甩單號進(jìn)行關(guān)聯(lián),然后選擇相關(guān)的字段組成輸入數(shù)據(jù)X甩單的特征,將“業(yè)務(wù)類型|行項(xiàng)目數(shù)#訂單數(shù)”組成一個y訂單標(biāo)簽。此次競賽采用F1作為評分標(biāo)準(zhǔn),評分公式為F1=2P*R/(P+R)*10000,其中P 準(zhǔn)確率=預(yù)測成功/預(yù)測生成多個訂單;R 召回率=預(yù)測成功/實(shí)際生成多個訂單。
我們對于CNN模型采用Relu激活函數(shù),測試了配置不同的學(xué)習(xí)率情況下CNN模型的得分。實(shí)驗(yàn)表明,在學(xué)習(xí)率lr=1e-04,采用Relu激活函數(shù),CNN模型取得了一個較高的分?jǐn)?shù)8612.45。
5 案例研究及討論
輸入數(shù)據(jù)特征優(yōu)化:
如何提高模型算法的得分,從輸入數(shù)據(jù)優(yōu)化的角度,我們進(jìn)行了一些思考。借鑒BERT模型論文中數(shù)據(jù)處理MASK的思路:我們對于部分重復(fù)的詞語,將80% 的詞語直接替換為[MASK],10% 的詞語替換為新單詞,10%保留原詞。優(yōu)化效果:驗(yàn)證集準(zhǔn)確率0.5%~1%左右的提升。
同時,我們從數(shù)據(jù)模式匹配的角度考慮優(yōu)化:在單訂單、多訂單的分類預(yù)測中,從訓(xùn)練集的甩單備注與測試集的甩單備注做模式匹配,如匹配,將訓(xùn)練集的多訂單類型直接作為測試集的預(yù)測類型。然后將預(yù)測為多訂單的此部分甩單號與之前預(yù)測為多訂單的甩單號去重合并作為多訂單的甩單號。但模式匹配的優(yōu)化效果不明顯。
大規(guī)模精準(zhǔn)分類:
從算法模型的角度,借鑒計算機(jī)視覺領(lǐng)域目標(biāo)檢測的思路,先識別圖像大類,再檢測為目標(biāo)實(shí)例。如果對大規(guī)模6008個分類進(jìn)行精準(zhǔn)分類,可以考慮分成2個深度學(xué)習(xí)網(wǎng)絡(luò),一個深度學(xué)習(xí)網(wǎng)絡(luò)用于大的分類,另一個深度學(xué)習(xí)網(wǎng)絡(luò)用于進(jìn)一步的精準(zhǔn)分類。將每300個分類做一個大類,20(20=[6008/300])個模型來訓(xùn)練每個類別的300個小類別,訓(xùn)練20+1個模型保存,測試集將預(yù)測到某一個大類的記錄取出來,再訓(xùn)練到更精準(zhǔn)的小類別,從理論上可以實(shí)現(xiàn)6008個分類。從GPU服務(wù)器硬件資源的角度,可以在具備多GPU計算能力的服務(wù)器上運(yùn)行大規(guī)模分類數(shù)據(jù)。
6 結(jié)論及展望
本文對CNN字符級別模型的電信自動甩單類型識別的案例進(jìn)行了研究。我們比較了大量的傳統(tǒng)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)算法模型,使用了電信自動甩單數(shù)據(jù)集進(jìn)行了訓(xùn)練及推測。一方面,分析表明字符級CNN卷積神經(jīng)網(wǎng)絡(luò)是一種有效的方法;另一方面,我們模型的表現(xiàn)取決于許多因素,例如,超參數(shù)的調(diào)優(yōu),文本特征的優(yōu)化等。
在未來,自然語言處理NLP將成為人工智能一個重要的發(fā)展領(lǐng)域。谷歌最強(qiáng)NLP模型BERT開源,這是2018年人工智能領(lǐng)域最重要的事件,對于技術(shù)人員而言,這是整個人工智能領(lǐng)域接下來五年最重要的機(jī)遇!
7 致謝
感謝中國電信上海公司組織此次內(nèi)部競賽活動及提供自動甩單類型識別案例的數(shù)據(jù)集。
參考文獻(xiàn)
[1] 王家林.五節(jié)課內(nèi)從零起步(無需數(shù)學(xué)和Python基礎(chǔ))編碼實(shí)現(xiàn)AI人工智能框架電子書[J/OL].https://www.docin.com/p-2104188986.html.