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