劉昌澍,李 響,詹瑾瑜,江 維,李博智,曹 揚(yáng),楊 瑞
(1.電子科技大學(xué) 信息與軟件工程學(xué)院,四川 成都 610054;2.中電科大數(shù)據(jù)研究院有限公司,貴州 貴陽 550022;3.提升政府治理能力大數(shù)據(jù)應(yīng)用技術(shù)國家工程實驗室,貴州 貴陽 550022)
隨著人民生活水平的提高,國內(nèi)旅游產(chǎn)業(yè)蓬勃發(fā)展。2018年國內(nèi)旅游人數(shù)55.39億人次,比上年同期增長10.8%。初步測算,全年全國旅游業(yè)對GDP的綜合貢獻(xiàn)為9.94萬億元,占GDP總量的11.04%[1]。但遺憾的是,由于利益的驅(qū)動、市場監(jiān)管不足、導(dǎo)游職業(yè)素質(zhì)較低等原因,近些年頻頻出現(xiàn)不合理低價競爭、隨意加點和強(qiáng)制消費(fèi)等導(dǎo)游違規(guī)現(xiàn)象,負(fù)面報道層出不窮,嚴(yán)重影響了導(dǎo)游的社會形象與誠信度[2]。近年來,隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,旅游業(yè)開始和互聯(lián)網(wǎng)產(chǎn)業(yè)結(jié)合,出現(xiàn)了像去哪兒、途牛、攜程等在線旅游平臺,產(chǎn)生大量如評論、推薦等文本數(shù)據(jù)。這些文本數(shù)據(jù)中包含對于導(dǎo)游違規(guī)行為的負(fù)面評論或投訴。如何更好地利用這些數(shù)據(jù)實現(xiàn)對導(dǎo)游行為的監(jiān)管,進(jìn)一步完善規(guī)范旅游市場,一直是有關(guān)部門關(guān)注的話題。旅游評論等文本信息可以利用自然語言處理相關(guān)技術(shù)進(jìn)行文本信息挖掘,并有大量范例可供參考借鑒。Kamran Kowsari等人[3]對經(jīng)典文本分類任務(wù)的流程定義,介紹了文本預(yù)處理和文本特征抽取的方法并對包括SVM、KNN、決策樹等機(jī)器學(xué)習(xí)算法進(jìn)行比較。Zhang Lei等人[4]在文本分類的基礎(chǔ)上進(jìn)一步挖掘情感分析問題,并比較了包括CNN、RNN、LSTM和HAN等基于深度學(xué)習(xí)的state of art模型。同時,文本分類或情感分析可以用來處理負(fù)面評論或投訴信息,在中文語境下也有一些實際應(yīng)用案例。例如,梁昕露等人[5]針對電信行業(yè)的客戶投訴系統(tǒng),提出了使用向量空間模型做文本特征,用SVM做分類器的分類方法,在13萬條測試數(shù)據(jù)上取得了70%以上的準(zhǔn)確率。但是該方法存在準(zhǔn)確率在分類上并不均衡的問題。余本功等人[6]使用BTM和Doc2vec模型構(gòu)建較低的SVM輸入空間并引入了集成學(xué)習(xí)的思想,提出了基于nB-SVM的投訴識別方法,一定程度上改善了由于數(shù)據(jù)不均衡引發(fā)的問題。近年來隨著深度學(xué)習(xí)領(lǐng)域的快速發(fā)展,出現(xiàn)了很多深度學(xué)習(xí)方法在中文文本分類及投訴處理的實踐。例如,鄭誠等人[7]等人提出了BLSTM_MLPCNN神經(jīng)網(wǎng)絡(luò)模型,并將字符級向量聯(lián)合詞向量作為BLSTM的輸入,在5個英文標(biāo)準(zhǔn)數(shù)據(jù)集上進(jìn)行實驗中均取得了較好的效果。萬圣賢等人[8]提出了包括MaxBiLSTM和ConvBiLSTM的雙向LSTM模型,更加高效地提取中間文本特征,該方法在公開數(shù)據(jù)集上取得了較好的效果。段立等人[9]針對95598客服投訴工單,提出了基于XGBoost的分類歸檔的方法,準(zhǔn)確率在83%~91%左右,有較好的效果。文獻(xiàn)[10]提出基于word2vec和雙向LSTM的情感分類深度模型,解決社交網(wǎng)絡(luò)文本傳統(tǒng)情感分類模型存在先驗知識依賴以及語義理解不足的問題。
該文主要研究導(dǎo)游違規(guī)行為的識別檢測問題,首先構(gòu)建了基于文本卷積神經(jīng)網(wǎng)絡(luò)(TextCNN)的旅游評論情感分析模型,采用預(yù)先訓(xùn)練的旅游話題詞向量表示整段文本,使用多種尺寸的卷積核捕捉文本序列中上下文之間的關(guān)聯(lián),通過池化、全連接等操作得到文本對應(yīng)的特征表達(dá)并判斷情感傾向,達(dá)到從旅游評論中精準(zhǔn)識別出導(dǎo)游相關(guān)的負(fù)面評論的目的。然后提出了基于輕量級梯度提升決策樹(LightGBM)的導(dǎo)游違規(guī)行為分類模型,利用提升(boosting)的方法組合決策樹,在訓(xùn)練過程中根據(jù)梯度差異給予不同樣本不同的權(quán)重,實現(xiàn)對導(dǎo)游違規(guī)行為的準(zhǔn)確分類,為旅游監(jiān)管提供參考依據(jù)。進(jìn)行了多組對比實驗評估模型性能,實驗結(jié)果表明,提出的方法可以有效從大量旅游評論中檢測出導(dǎo)游違規(guī)行為及其類別,準(zhǔn)確率達(dá)到91.57%。
基于TextCNN和LightGBM的導(dǎo)游違規(guī)行為檢測系統(tǒng)的框架如圖1所示,可以處理來自在線旅游平臺的文本信息。
圖1 導(dǎo)游違規(guī)行為檢測系統(tǒng)框架
首先對來自游客的導(dǎo)游相關(guān)評論進(jìn)行文本預(yù)處理,包括分詞以及去停用詞。然后將進(jìn)行詞嵌入,將文本轉(zhuǎn)化為向量,構(gòu)建模型的輸入。再使用TextCNN對輸入文本的特征進(jìn)行抽取與分類,根據(jù)情感傾向,從導(dǎo)游相關(guān)評論中識別出負(fù)面評論。最后使用基于Boosting方法的LightGBM分類框架,對導(dǎo)游相關(guān)的負(fù)面評論進(jìn)行違規(guī)行為檢測與分類。導(dǎo)游違規(guī)行為有以下5類:(1)強(qiáng)迫消費(fèi);(2)毆打辱罵游客;(3)擅自更改行程;(4)餐飲/住宿條件與合同不符;(5)不具備相關(guān)從業(yè)資格。
2.1.1 TextCNN建模
TextCNN[11]采用多個尺寸不同的卷積核來提取文本信息,能夠更好地捕捉到上下文之間的關(guān)聯(lián)。該文構(gòu)建的基于TextCNN的導(dǎo)游負(fù)面評論識別模型如圖2所示,主要包括嵌入層、卷積層、池化層、全連接層和輸出層[12]。
圖2 基于TextCNN的導(dǎo)游負(fù)面評論識別模型
(1)嵌入層。
嵌入層(輸入層)將一段文本轉(zhuǎn)換為一個maxlen×dim的二維矩陣,maxlen指輸入文本可包含的詞語數(shù)量最大值。該文統(tǒng)計去掉停用詞之后的游客評論文本序列的長度,共計76%長度在50以內(nèi),17.6%在50和100之間,5.8%在100之上。因此選定maxlen為100,長度不足的進(jìn)行補(bǔ)齊,長度超過的進(jìn)行截取。
設(shè)xi為某一個詞對應(yīng)的長度為dim的word2vec[13-14]詞向量,通過將文本序列中每個詞對應(yīng)的詞向量連接起來,就可以得到整個文本序列的詞向量表達(dá)矩陣:
X=x1⊕x2⊕···⊕xmaxlen
(1)
(2)卷積層。
在卷積層對上一層的輸出進(jìn)行卷積運(yùn)算,得到多個尺寸不同的特征圖(Feature Map)。卷積運(yùn)算的過程可以表達(dá)為:
(2)
其中,cj指卷積運(yùn)算得到的一個特征,b為偏置,W為卷積核矩陣,f為一個非線性函數(shù)。多個尺寸不同的卷積核在游客評論文本上形成多個跨度不同的滑動窗口,用來計算各個窗口內(nèi)的單詞之間的聯(lián)系,如圖3所示。
圖3 提取旅游評論特征的滑動窗口
經(jīng)過卷積層一個高度為h的卷積核產(chǎn)生一個特征圖(feature map)C:
C=[c1,c2,…,cmaxlen]
(3)
(3)池化層與全連接層。
在池化層,將特征圖作為輸入,進(jìn)行維數(shù)降低。該文使用1-max-pooling的方式處理特征圖,從中選取最大值。全連接層將池化結(jié)果拼接起來,從而得到了一段文本的特征。
(4)輸出層。
通過sigmoid函數(shù)得到導(dǎo)游評論中游客各種情感傾向的概率,并在輸出層輸出:
(4)
構(gòu)建深度學(xué)習(xí)模型之后,首先設(shè)定模型的損失函數(shù)為binary_crossentropy。
(5)
2.1.2 TextCNN參數(shù)設(shè)置
該文使用Keras框架搭建神經(jīng)網(wǎng)絡(luò)。設(shè)定dim為300并在嵌入層使用預(yù)先訓(xùn)練的旅游話題詞向量做權(quán)重。
在卷積層,設(shè)置了4種不同高度的卷積核(2,3,4,5),每個卷積核的寬度和詞向量的dim長度相等。每種卷積核各自設(shè)置100個filter,設(shè)定非線性函數(shù)為Relu函數(shù),將分別輸出99×1,98×1,97×1,96×1的四種特征圖。在全連接層使用dropout和l2正則化的方式抑制訓(xùn)練過程中的過擬合程度。
2.2.1 LightGBM建模
文中數(shù)據(jù)集本身存在數(shù)據(jù)不平衡的問題。采用集成學(xué)習(xí)通過集成元分類器分類結(jié)果的方式提升模型的泛化能力,進(jìn)而提升分類器的性能[15]。LightGBM[16]采用基于Boosting方法的分類框架,可以更好地適應(yīng)不平衡數(shù)據(jù)。
該文采用簡單數(shù)據(jù)增強(qiáng)EDA[17]的方式改善數(shù)據(jù)分布。具體措施包括:同義詞替換、刪除個別詞語、交換詞語在句子中順序、隨機(jī)插入新詞等。
(1)導(dǎo)游投訴文本向量化。
首先進(jìn)行中文分詞和文本預(yù)處理(去停用詞),可以將一段短文本S處理成一段長度為n詞語序列:
S=s1+s2+…+sn
(6)
令vi為si在旅游話題詞向量中對應(yīng)的詞向量,則可以計算得到短文本S的向量化表示V:
(7)
(2)計算梯度與生成決策樹。
LightGBM組合多個回歸決策樹T以得到最終的結(jié)果[18]:
(8)
其中,ft(x)指單個決策樹模型。LightGBM訓(xùn)練過程中添加決策樹時第t步的損失可以表示成如下形式:
(9)
當(dāng)損失函數(shù)L為均方函數(shù)時,采用損失函數(shù)的負(fù)梯度作為殘差r的近似值:
(10)
導(dǎo)游違規(guī)行為檢測的決策樹生成算法如算法1所示:
算法1:導(dǎo)游違規(guī)行為檢測決策樹生成算法。
輸入:模型訓(xùn)練數(shù)據(jù)D={(x1,y1),(x2,y2),…,(xn,yn)}
輸入:樹的最大深度d
1:best_spilit_point ← 0
3:t←0
5:while(t 6: best_split_point←find_best_spilit() 7: 在best_split_point根據(jù)leaf_wise策略分裂決策樹 9:t++ 10:end while 其中,首先輸入導(dǎo)游違規(guī)行為數(shù)據(jù)集和樹的最大深度;在第4行設(shè)定導(dǎo)游違規(guī)行為檢測樹的目標(biāo)函數(shù),包括對違規(guī)行為進(jìn)行預(yù)測產(chǎn)生的損失與樹的復(fù)雜度。在第6~9行計算目標(biāo)函數(shù),確定梯度下降的方向,計算最優(yōu)切分點best_split_point并按照leaf_wise策略分割導(dǎo)游違規(guī)行為檢測決策樹并完成模型的更新。 (3)減少采樣與劃分最優(yōu)節(jié)點。 LightGBM使用單邊梯度下降算法(gradient-based one side sampling,GOSS),減少計算量。GOSS使用梯度作為樣本權(quán)重,重點關(guān)注梯度較大的導(dǎo)游違規(guī)行為樣本[19]: (11) (12) 其中,n為使用樣本總數(shù),gi為損失,Al、Ar、Bl和Br為劃分在節(jié)點左右的樣本。 在減少采樣的基礎(chǔ)上計算信息增益并劃分最優(yōu)節(jié)點的算法如算法2所示: 算法2:最優(yōu)節(jié)點劃分算法find_best_split。 輸入:訓(xùn)練數(shù)據(jù)X,Y 輸入:大梯度樣本采樣率a,小梯度樣本采樣率b 1:gain_list←{} 2:sorted←降序排列(X) 3:topN←a×len(X) 4:rand(N)←b×len(X) 6:top_set←sorted[:topN] 7:rand_set←隨機(jī)選取(sorted[topN:],randN) 8:used_set←top_set+rand_set 9:forjin X.features: 10: gain←增益計算(j,used_set) 11: gain_list.append(gain) 12:end for 13:gain_max←max(gain_list) 14:ind←gain_list.index(gain_max) 15:return ind, gain_max 其中,首先輸入導(dǎo)游違規(guī)行為訓(xùn)練數(shù)據(jù)集和樣本采樣率;第1~8行先按照梯度降序排列導(dǎo)游違規(guī)行為樣本,再根據(jù)大梯度樣本采樣率a和小梯度樣本采樣率b重新組合需要遍歷的樣本,從而減少樣本數(shù)量,第9~14行計算導(dǎo)游違規(guī)行為樣本各個屬性上的信息增益,并得到最大信息增益。 2.2.2 LightGBM建模 該文使用Python3.7環(huán)境下的LightGBM API進(jìn)行模型的搭建和訓(xùn)練。模型的超參數(shù)將會影響模型預(yù)測的準(zhǔn)確率。為了取得更好的效果,在訓(xùn)練過程中不斷對超參數(shù)進(jìn)行尋優(yōu),最后得到的一組較好參數(shù)如表1所示。 表1 LightGBM主要超參數(shù) 該文設(shè)計并實現(xiàn)了基于TextCNN和LightGBM的導(dǎo)游違規(guī)行為檢測模型,能夠完成對旅游評論的負(fù)面評論識別和導(dǎo)游違規(guī)行為檢測。進(jìn)行了多組實驗評估所提出的模型和方法,并與其他主流算法和模型進(jìn)行了比較。 實驗的硬件是:CPU為Intel i7 9700K,內(nèi)存為16G RDD4,顯卡為兩塊Nvidia RTX 2080ti,運(yùn)行環(huán)境為Linux操作系統(tǒng)(Ubuntu 16.04.6)。全部實驗代碼由Python3.7編寫。神經(jīng)網(wǎng)絡(luò)由Keras框架搭建,使用TensorFlow作為框架后端。 當(dāng)前關(guān)于導(dǎo)游違規(guī)行為的識別暫無公開數(shù)據(jù)集,該文使用爬蟲構(gòu)建數(shù)據(jù)集,使用的實驗數(shù)據(jù)來源有:(1)去哪兒網(wǎng)獲取的成都、北京、上海和廣州等地的景點評論信息;(2)人民網(wǎng)315旅游投訴平臺的投訴信息。并對這些實驗文本進(jìn)行數(shù)據(jù)清洗,篩選出和導(dǎo)游相關(guān)的評論信息。 使用準(zhǔn)確率(precision)、召回率(recall)、F1-score和正確率(accuracy)等指標(biāo)評估模型性能。 3.2.1 導(dǎo)游負(fù)面評論識別模型評估與分析 選取獲取的共13 000余條評論進(jìn)行實驗,包括好評(正面)7 000余條,差評(負(fù)面)6 000余條,如表3所示。按照0.8的比例劃分訓(xùn)練集和測試集。在訓(xùn)練集中,劃分出20%的數(shù)據(jù)做驗證集。 數(shù)據(jù)集的預(yù)處理使用Keras自帶的Tokenizer轉(zhuǎn)化為序列。為了抑制過擬合程度加入dropout層(設(shè)置值為0.5)并添加l2正則化(值為0.001)。 基于TextCNN的導(dǎo)游負(fù)面評論識別模型在驗證集上的準(zhǔn)確率可以達(dá)到91.62%,損失為0.25。在測試數(shù)據(jù)中的正面評論數(shù)據(jù)和負(fù)面評論數(shù)據(jù)上準(zhǔn)確率分別為0.916 4和0.919 7,召回率分別為0.906 5和0.928 3,F(xiàn)1-score分別為0.911 4和0.923 9。 通過準(zhǔn)確率、召回率和F1-score在相同數(shù)據(jù)集上對基于TextCNN導(dǎo)游負(fù)面評論識別方法、基于CNN的導(dǎo)游負(fù)面評論識別方法、基于RNN的導(dǎo)游負(fù)面評論識別方法、基于LSTM的導(dǎo)游負(fù)面評論識別方法和基于FastText的導(dǎo)游負(fù)面評論識別方法進(jìn)行比較,如圖4所示。綜合比較5種方法,文中方法的準(zhǔn)確率(0.916 2)、召回率(0.918 2)、F1-score(0.198 1)均高于其他方法,在驗證集上的表現(xiàn)更加優(yōu)秀。 圖4 不同導(dǎo)游負(fù)面評論識別方法比較 3.2.2 導(dǎo)游違規(guī)行為檢測分類模型評估與分析 經(jīng)過簡單數(shù)據(jù)增強(qiáng)后共獲得訓(xùn)練數(shù)據(jù)9 000余條,包括對強(qiáng)迫消費(fèi)/參加自費(fèi)項目行為的投訴2 280條,對擅自變更行程行為的投訴1 910條,對餐飲/住宿條件與合同不一致行為的投訴1 570條,對不具備從業(yè)資格行為的投訴1 096條,對毆打/辱罵游客行為的投訴2 286條。按照0.8的比例劃分訓(xùn)練集和測試集,并在訓(xùn)練過程中在訓(xùn)練集中按照0.8的比例抽取數(shù)據(jù)進(jìn)行驗證。基于LightGBM的導(dǎo)游違規(guī)行為檢測分類模型訓(xùn)練過程中,該文設(shè)定迭代500次。 基于LightGBM的導(dǎo)游違規(guī)行為檢測分類模型在投訴信息的測試集上的正確率可以達(dá)到88%,表2列出了該模型在測試集上各類別上的表現(xiàn)。使用準(zhǔn)確率、召回率和F1-score在相同數(shù)據(jù)集上對基于LightGBM的導(dǎo)游違規(guī)行為檢測分類方法、基于XGBoost的導(dǎo)游違規(guī)行為檢測分類方法、基于邏輯斯特回歸的導(dǎo)游違規(guī)行為檢測分類方法和基于SVM的導(dǎo)游違規(guī)行為檢測分類方法進(jìn)行比較,如圖5所示。 表2 基于LightGBM的導(dǎo)游違規(guī)行為檢測模型各類別F1-score 圖5 不同導(dǎo)游違規(guī)行為識別方法比較 由圖5可知,文中方法的準(zhǔn)確率最高,略高于XGBoost和Logistic Regression,SVM最差。 因為該文使用的數(shù)據(jù)集本身存在不平衡的特點,在參考F1-score外同時使用ROC曲線對不同方法進(jìn)行評估,如圖6所示。一個分類器的ROC曲線越靠近左上方,分類效果越好。 圖6 不同導(dǎo)游違規(guī)行為識別方法ROC曲線 由圖6可知,LightGBM和XGBoost的AUC面積最大,略高于Logistic Regression,SVM的AUC面積最小。考慮到LightGBM算法本身由XGBoost改進(jìn)而來,在準(zhǔn)確率相當(dāng)?shù)那闆r下訓(xùn)練時間更短(LightGBM訓(xùn)練需要59.12 s,XGBoost訓(xùn)練需要307.97 s)且內(nèi)存占用更低,在文中的應(yīng)用場景下LightGBM更加優(yōu)秀。 由表2可知,由于“強(qiáng)迫消費(fèi)”和“毆打/辱罵游客”這兩類數(shù)據(jù)中,帶有強(qiáng)烈特征的描述詞匯較多,模型識別效率較高。而在其他類別中,由于特征詞匯較少,且樣本數(shù)據(jù)存在一定的數(shù)據(jù)不均衡的問題,模型容易產(chǎn)生誤判,F(xiàn)1-score會稍低。 文中方法應(yīng)用到了實際的旅游大數(shù)據(jù)系統(tǒng)中,進(jìn)行了相應(yīng)的系統(tǒng)測試。使用的實際系統(tǒng)數(shù)據(jù)中包含導(dǎo)游相關(guān)的好評以及各類差評各480條。系統(tǒng)測試數(shù)據(jù)表明,文中方法可以達(dá)到91.57%的準(zhǔn)確率(precision)、91.64%的召回率(recall)、91.17%的F1-score和91.46%的正確率(accuracy)。該系統(tǒng)對導(dǎo)游違規(guī)行為檢測識別的示例如表3所示。文中方法適合于旅游大數(shù)據(jù)場景,能準(zhǔn)確有效地識別檢測出導(dǎo)游違規(guī)行為。 表3 導(dǎo)游違規(guī)行為識別結(jié)果示例 采用文本分類解決了從旅游評論文本中識別出檢測導(dǎo)游違規(guī)行為的問題,構(gòu)建了基于TextCNN的導(dǎo)游負(fù)面評論識別模型,進(jìn)行了旅游評論的情感分析,識別出負(fù)面評論,再送入基于LightGBM的導(dǎo)游違規(guī)行為檢測分類模型,實現(xiàn)對導(dǎo)游違規(guī)行為的檢測與分類。通過和其他的主流模型的對比,該模型具備更好的性能,能夠兼顧識別檢測的準(zhǔn)確率和召回率,降低正常行為被誤判的可能性,適合于對旅游評論文本的導(dǎo)游違規(guī)行為進(jìn)行檢測。實驗表明,提出的基于TextCNN和LightGBM的導(dǎo)游違規(guī)行為檢測方法應(yīng)用在實際旅游大數(shù)據(jù)系統(tǒng)中可以得到91.57%的準(zhǔn)確率。構(gòu)建的系統(tǒng)具備較高的可擴(kuò)展性。在從旅游評論中檢測出負(fù)面評論后,對導(dǎo)游違規(guī)行為分類進(jìn)行了初步探索。下一步還可以探索其他方面的投訴信息,進(jìn)一步完善面向旅游市場的大數(shù)據(jù)智慧監(jiān)管體系。3 實驗分析
3.1 實驗設(shè)置和數(shù)據(jù)來源
3.2 模型性能評估
3.3 系統(tǒng)測試
4 結(jié)束語