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