胡學聰
(上海中建東孚投資發(fā)展有限公司上海公司,上海 150000)
國內(nèi)建筑開發(fā)公司通過引入明源等系統(tǒng),采用運維工單的方式記錄住宅交付及使用過程中業(yè)主的投訴及建議。傳統(tǒng)維保工單長度在200字符以內(nèi),屬于典型的非規(guī)范性口語化的文本。同時由于投訴的原因無法事先確定,系統(tǒng)往往通過記錄投訴位置來將信息進行分類,由專業(yè)客服人員對具體投訴事項進行分析,并派發(fā)至維保人員。該人工方式耗時較多,并依賴于客服人員的專業(yè)素養(yǎng)。在建筑集中交付前后,維保問題大量上報時,時效性較低,拉長客戶的等待時間,容易造成輿情和群訴現(xiàn)象。
自然語言處理(natural language processing,NLP)[1]是計算機科學領(lǐng)域與人工智能領(lǐng)域中的一個重要方向。通過對自然語言的處理,使得計算機可以理解它,并將其可量化為各類具體數(shù)據(jù)。文獻[2]梳理了NLP技術(shù)建筑方面的運用情況,發(fā)現(xiàn)在施工安全和合同管理方面研究較多,運維管理階段研究較少。文獻[3]通過引入圖像分類領(lǐng)域的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)模型完成建筑質(zhì)量問題的分類,但CNN屬于有監(jiān)督學習,需要利用大量已知分類數(shù)據(jù)訓練模型,同時CNN的卷積和池化操作會丟失詞匯順序和位置信息。文獻[4]通過Word2vec算法模型提取建筑維保文本詞向量特征,利用分類支持向量機(Support Vector Classification,SVC)完成文本分類,但該方法分類精度對模型參數(shù)敏感,同時需要對數(shù)據(jù)復雜的預(yù)處理。
為解決上訴問題,通過詞頻-逆文檔頻率[5](Term Frequency-Inverse Document Frequency,TF-IDF)和具有噪聲的基于密度的聚類方法[6](Density-Based Spatial Clustering of Applications with Noise,DBSCAN)搭建文本粗分類器,根據(jù)破壞原因?qū)S保文本進行分類,解決原始數(shù)據(jù)無標簽的問題。將粗分類好的文本作為訓練集微調(diào)預(yù)訓練語言表征模型[7](Bidirectional Encoder Representation from Transformers,BERT),利用微調(diào)后的BERT模型作為細分類器,完成剩余維保文本分類。
TF-IDF是一種常用于文本處理的統(tǒng)計方法,由詞頻(Term Frequency,TF)和逆文檔頻率(Inverse Document Frequency,IDF)兩部分的得分構(gòu)成,TF通過計算特定關(guān)鍵詞在文本中出現(xiàn)的頻率。其定義為
式中,nij表示關(guān)鍵詞W在某個文件中出現(xiàn)的次數(shù);∑knkj表示文件中所有此條數(shù)目的總和。
IDF計算包含某關(guān)鍵詞W的文檔總數(shù),如果包含詞條t的文檔越少,IDF越大,則說明詞條具有很好的類別區(qū)分能力。其定義為
式中,|D|表示預(yù)料庫中文檔總數(shù);|{j:t1∈dj}|+1表示包含關(guān)鍵詞W的文件數(shù)目加1。
TF-IDF值即為兩者得分相乘
TFIDF=TFij*IDFi
詞袋模型(Bag of Words,BoW)是一種將文本向量化的方式,基本思想是將預(yù)料庫中所有詞去重后裝在袋子中,對應(yīng)的文本可以轉(zhuǎn)化為對應(yīng)詞在詞袋中位置的向量表示。
DBSCAN不同于傳統(tǒng)的K-均值聚類(K-means)等算法,無需預(yù)先指定簇數(shù)K,對任意形狀的類可以達到較好的聚類效果,僅需預(yù)先給定E鄰域閾值(eps)和核心對象最小數(shù)量(min Pts)。若有大于min Pts個數(shù)量的樣本點與某一樣本點的距離小于eps時,稱該樣本點為核心點(Core)。若某一樣本點不滿足成為核心點條件,但距離內(nèi)至少有一個核心點,則稱該樣本點為邊界點(Border)。若都不滿足則稱該樣本點為噪聲點(Noise),如圖1所示,eps和min Pts兩個參數(shù)共同決定了聚類的簇數(shù),當取值較小時簇數(shù)較多,每個類別中樣本點數(shù)量少;當取值較大時簇數(shù)較少,每個類別中樣本點的數(shù)量多。
圖1 DBSCAN算法圖解
BERT是由Google在2018年論文提出的預(yù)訓練語言表征模型。該模型以大量無標注的文本作為訓練材料,通過完形填空(Masked Language Model)和下個句子預(yù)測(Next Sentence Prediction)兩個任務(wù)預(yù)訓練模型,讓BERT模型可以學習到詞元(Token)之間的相關(guān)關(guān)系,最終在11項自然語言處理任務(wù)中創(chuàng)造了最佳的記錄。
BERT模型的架構(gòu)是由多個Transformer模型[8]的編碼器(Encoder)堆疊而成,通過針對特定的問題添加輸出層微調(diào)(Finetune)。在BERT模型的輸入中,通過詞元嵌入張量(Token Em bedding)、語句分塊張量(Segment Em bedding)、位置編碼張量(Position Em bedding)3部分將文本編碼向量化。
為充分利用數(shù)據(jù)資源,本文提出了一種基于TF-IDF、DBSCAN和BERT的文本分類挖掘方案,通過TF-IDF和DBSCAN構(gòu)成的粗分類器將短文本聚類劃分,利用特征明顯的聚類結(jié)果作為樣本微調(diào)BERT模型,并利用微調(diào)好的BERT模型處理在粗分類階段無法聚類的短文本,該方法的具體流程如圖2所示。
圖2 基于DBSCAN和BERT的文本分類流程圖
以某公司上海地區(qū)項目為例對本文方法進行驗證。通過分析該項目維保數(shù)據(jù)可知,截止目前報修問題共有6 203條,共涉及100處構(gòu)件。為方便對比,將各構(gòu)件按報修頻率從大到小排序并編號為1至100,所有構(gòu)件的累計報修頻次占比結(jié)果如圖3所示,前20處構(gòu)件報修問題累計占比77.35%。
圖3 各位置報修頻次占比
以報修頻次最多的1號構(gòu)件“戶內(nèi)門”為例,該類別下共有報修文本720條。
TF-IDF文本粗分類為:通過Python的中文第三方分詞庫jiaba,將短文本劃分為獨立的詞元,并去除無意義的停用詞如:“一個、一直、誒、啊、¥、@”等(停用詞庫采用了哈工大停用詞表[9])。計算每個詞的逆文檔頻率,通過one-hot編碼將段文本轉(zhuǎn)化為固定長度的數(shù)值向量。
通過對720條戶內(nèi)門報修文本分詞,可以得到由418個有效的詞元構(gòu)成的詞元表(Word-List)和每個有效詞元的TF-IDF值。例如,原維保文本“門套線拼縫不齊;南次臥門破損,劃痕”,通過jieba分詞可劃分為“門套/拼縫/不齊/南次/臥門/破損/劃痕”,每個有效詞元在詞元表中的位置及TF-IDF值如表1所示。
表1 案例維保文本TF-IDF結(jié)果
通過BoW模型將每條維保文本都轉(zhuǎn)化為固定長度的向量,便于后續(xù)聚類計算,向量長度為詞元表內(nèi)詞元的數(shù)量。例如原維保文本“門套線拼縫不齊;南次臥門破損,劃痕”被向量化成長度418的向量,除詞元表對應(yīng)序號位置的數(shù)為對應(yīng)的TF-IDF值,其余位置均為0。
通過DBSCAN算法對向量化的報修短文本聚類,因BoW模型在向量化文本數(shù)據(jù)時僅考慮詞元出現(xiàn)的頻率,無法考慮詞元含義之間的相關(guān)關(guān)系,因此本文建議設(shè)定較小的eps值和min Pts值,再人為判定聚類結(jié)果間各簇的含義,將相同含義的簇人工合并到相同類別。
在兼顧聚類效果和人工判別效率的基礎(chǔ)上,本文推薦設(shè)定eps值為0.95,min Pts值為5,根據(jù)計算可將文本粗略分為12類報修原因(11類有效分類,1類噪音文本),具體聚類結(jié)果如表2所示。
表2 維保文本粗聚類結(jié)果
可見在原720條維保文本中,label為0、1、2、3、5、6、7、8、9、10的317條文本聚類較好,有明顯的損壞含義。label為-1、4的403條文本聚類效果較差。根據(jù)損壞含義重新組織文本,劃分為6類不同的損壞類型并用作訓練數(shù)據(jù),1類待分類數(shù)據(jù),如表3所示。
表3 按損壞類別分類重劃分維保文本
將6類不同的損壞類型數(shù)據(jù)根據(jù)類別比例隨機抽樣,將80%的文本當作訓練集,20%的文本當作測試集。通過pytorch搭建模型,預(yù)訓練BERT模型采用哈工大訊飛聯(lián)合實驗室推出的“BERT-wwm”[10],因本項任務(wù)接近句對匹配,學習率(Learning Rate,LR)設(shè)置為模型推薦的最優(yōu)學習率2×10-5,考慮到計算機性能限制每批次訓練數(shù)量(Batch_size)設(shè)置為64。
隨機抽取一條待分類的數(shù)據(jù):劃傷、掉漆;門吸松動,門不平整,外墻滴水槽不通,清理打膠收口,窗戶開起其打膠。可以看出,該投訴文本同時包含多項標簽,因此是一個多標簽分類的任務(wù)。將BERT輸出的結(jié)果通過全連接方式連接到由6個二元分類神經(jīng)元構(gòu)成的線型輸出層,選擇sigmoid函數(shù),損失函數(shù)選擇二元交叉熵損失函數(shù)。通過觀察訓練集數(shù)據(jù)分布可知,數(shù)據(jù)的類別不平衡(class imbalance),常用的方法有[11]:①對數(shù)據(jù)量較多的類別進行欠采樣;②對較少的類別進行過采樣;③閾值調(diào)整。前兩種方案會對數(shù)據(jù)的分布產(chǎn)生影響,因此本文采用第三種方式,通過繪制ROC曲線,計算最優(yōu)閾值(Threshold)[12]。模型評價指標選擇loss評價訓練集中預(yù)測值與實際值的偏離程度,準確率計算測試集中預(yù)測正確的標簽數(shù)目,最終結(jié)果如圖4所示,可以看到BERT的分類結(jié)果收斂程度較好。將每個神經(jīng)網(wǎng)絡(luò)輸出分類視為二分類,分別繪制ROC曲線,計算對應(yīng)的AUC值和最優(yōu)閾值th-optimal,計算結(jié)果如圖5所示,調(diào)整后各標簽閾值如表4所示。
表4 調(diào)整后各標簽閾值
(a)損失值 (b)準確率
(a) label-0 (b)label-1 (c) label-2
將微調(diào)好的BERT模型和調(diào)整后閾值作為多標簽分類器,劃分待分類的403條數(shù)據(jù),分類具體結(jié)果如表5所示。
表5 每類標簽內(nèi)文本數(shù)量
入戶門類別下原始無標簽文本720條,通過粗分類器后有效分類317條,有效分類率44.03%,通過細分類器后累計有效分類文本603條,累計有效分類率83.75%。
雖然本文提到的方案可以有效完成文本分類、特征提取,但依然存在部分局限:
(1)初始的分類劃分依賴于DBSCAN算法的聚類,該分類器通過關(guān)鍵詞和詞頻分類文本,建議選擇較小的eps和min Pts值,通過人工合并同類關(guān)鍵詞,讓BERT模型可有效學習到不同敏感詞之間的相關(guān)關(guān)系;
(2)通過TF-IDF方案粗聚類效果僅考慮了關(guān)鍵詞的重要性,建議通過大量的無標簽行業(yè)內(nèi)維保語料,進行BERT的無監(jiān)督預(yù)訓練,根據(jù)相關(guān)研究文本[13]的表層信息如句子長度、詞元等在Encoder的淺層進行輸出,詞元順序、語法等在Encoder的中間層進行輸出,時態(tài)、動名詞、主語等信息在Encoder頂層進行輸出,推薦采用預(yù)訓練BERT模型的第4、第6、第9層Encoder的輸出文本作為特征進行文本聚類。