顧偉強 秦 天 劉傾源 文小清
(1.西華大學 電氣與電子信息學院,四川 成都 610039;2.西華大學 理學院,四川 成都 610039)
本次建模目標是利用互聯(lián)網(wǎng)公開來源的群眾問政留言記錄及相關部門對部分群眾留言的答復意見的文本數(shù)據(jù),使用Jieba 中文分詞工具對文本進行分詞、Gensim 和CNN中文文本分類的方法以及Reddit 的話題排名算法,達到以下3 個目標:
(1)利用中文文本分詞和文本分類的方法對留言進行分類,建立關于留言內容的一級標簽分類模型,并使用F-Score 對分類方法進行評價。
(2)根據(jù)附件將某一時段內反映特定地點或特定人群問題的留言進行歸類,定義合理的熱度評價指標,給出評價結果,并按給定的格式制作出排名前5 的熱點問題表和相應熱點問題對應的留言信息的熱點問題明細表,有助于及時發(fā)現(xiàn)熱點問題,相關部門進行有針對性地處理,提升服務效率。
(3)對于附件中相關部門對留言的答復意見,從答復的相關性、完整性、可解釋性等多個角度對答復意見的質量做分析并給出一個評價。
總體流程主要包括如下步驟:
步驟一:數(shù)據(jù)預處理。給出的文本數(shù)據(jù)中,出現(xiàn)了一些特殊字符,需要在原始的數(shù)據(jù)上進行數(shù)據(jù)清洗處理,去掉重復的信息,再將處理好的信息去除不必要的停用詞并進行中文分詞。
步驟二:數(shù)據(jù)分析。分詞完后,對CNN 模型要將詞映射成索引表示,從預訓練的詞向量模型中讀取出詞向量,作為初始化值輸入到模型中,并將數(shù)據(jù)集分割成訓練集和測試集;將gensim 模型分詞轉換為語料庫,并將語料庫計算出Tfidf 值。對信息的好壞做相關性、評價等操作并選擇特征詞,因子分析完成主成分分析。
步驟三:建立模型。面對不同的問題和附件,對處理好的數(shù)據(jù)用CNN 和gensim 兩種不同的模型進行分類,分別得到一級標簽的分類和熱點問題分類,然后計算熱點問題的熱度排序;建立SVM 模型對處理好的信息給出評價。
3.1.1 數(shù)據(jù)預處理
在數(shù)據(jù)中,出現(xiàn)了一些特殊字符的文本數(shù)據(jù)。例如讀取文本內容時,留言詳情前面會有 等轉義字符,考慮到執(zhí)行分類和運行程序時產(chǎn)生異常錯誤,需要用正則表達式對附件內容的特殊字符進行數(shù)據(jù)清洗。還有一些重復的數(shù)據(jù),也需要去除。讀取通用停用詞表,使那些無明確的意義的語氣助詞、連接詞、副詞和常見詞“不是,一個”等詞不拆分和去除的操作,避免對有效信息造成干擾,還能讓所優(yōu)化的關鍵詞更集中、更突出并且節(jié)省存儲空間和提高了效率。然后采用Python 的中文分詞包 Jieba 進行分詞。Jieba 采用了基于前綴詞典實現(xiàn)的高效詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環(huán)圖(DAG),同時采用了動態(tài)規(guī)劃查找最大概率路徑,找出基于詞頻的最大切分組合,對于未登錄詞,采用了基于漢字成詞能力的HMM模型,使得能更好的實現(xiàn)中文分詞效果。
3.1.2 CNN 模型
(1)CNN 結構。基于TensorFlow 在中文數(shù)據(jù)集上的實現(xiàn),使用了字符級CNN 對中文文本進行分類[7],且CNN 的優(yōu)勢為:網(wǎng)絡結構簡單、使參數(shù)數(shù)目少、計算量少、訓練速度快。圖形識別的CNN 模型[8]:首先是輸入層,計算機輸入若干個矩陣;接著是卷積層(Convolution Layer),卷積層的激活函數(shù)使用的是ReLU;在卷積層后面是池化層(Pooling layer),CNN 在網(wǎng)絡結構上沒有任何變化(甚至更加簡單了),CNN 其實只有一層卷積,一層Max-pooling,最后將輸出外接Softmax 來n 分類,達到信息分類的作用。
(2)卷積。首先,我們去學習卷積層的模型原理,我們需要了解什么是卷積(Convolution),以及CNN 中的卷積是什么樣子的。學習數(shù)學時都有學過卷積的知識,微積分中卷積的表達式為:
在CNN 中,雖然我們也是說卷積,但是我們的卷積公式和嚴格意義數(shù)學中的定義稍有不同,比如對于二維的卷積,定義為:
后面講的CNN 的卷積都是指的上面的最后一個式子。其中,我們叫W 為我們的卷積核,而X 則為我們的輸入。如果X 是一個二維輸入的矩陣,而W 也是一個二維的矩陣。但是如果X 是多維張量,那么W 也是一個多維的張量。
(3)卷積層和池化層。要完成信息的分類,主要是卷積層和池化層,只要把卷積層和池化層的原理理解了,那么搞清楚CNN 就容易很多了。
CNN 中的卷積,假如是對圖像卷積,參考卷積公式5,其實就是對輸入的圖像的不同局部的矩陣和卷積核矩陣各個位置的元素相乘,然后相加得到。舉個例子,圖若輸入是一個二維的3x4 的矩陣,而卷積核是一個2x2 的矩陣。這里我們假設卷積是一次移動一個像素來卷積的,那么首先我們對輸入的左上角2x2 局部和卷積核卷積,即各個位置的元素相乘再相加,得到的輸出矩陣S 的S00 的元素,值為。接著我們將輸入的局部向右平移一個像素,現(xiàn)在是(b,c,f,g)四個元素構成的矩陣和卷積核來卷積,這樣我們得到了輸出矩陣S 的S01的元素,同樣的方法,我們可以得到輸出矩陣S 的S02,S10,S11,S12的元素。
相比卷積層的復雜,池化層則要簡單的多,所謂的池化,就是對輸入張量的各個子矩陣進行壓縮。假如是2x2 的池化,那么就將子矩陣的每2x2 個元素變成一個元素,如果是3x3的池化,那么就將子矩陣的每3x3 個元素變成一個元素,這樣輸入矩陣的維度就變小了。要想將輸入子矩陣的每n×n個元素變成一個元素,那么需要一個池化標準。常見的池化標準有2 個,MAX 或者是Average。即取對應區(qū)域的最大值或者平均值作為池化后的元素值,降低了過擬合的風險,使參數(shù)減少,進一步加速計算。
3.1.3 留言內容的一級標簽分類
用CNN 模型對附件2 的留言內容進行一級標簽分類,步驟如下:
(1)通過Embedding 方式將文本中的留言內容的每個詞映射成一個64 維的詞向量,并將所有的詞向量拼接起來構成一個二維矩陣,作為最初的輸入。
(2)通過卷積操作,將輸入的600*64 的矩陣映射成一個 596*1 的矩陣,這個映射過程和特征抽取的結果很像,最后提取出256 個特征。
(3)用Max-pooling 方法在保持主要特征的情況下,降低了參數(shù)的數(shù)目,從多個值中取一個最大值。
(4)將 Max-pooling 的結果拼接起來,送入到Softmax當中,得到各個類概率。
(5)根據(jù)預測標簽以及實際標簽來計算損失函數(shù),通過每一輪訓練數(shù)據(jù),最后計算出每個類別的準確率、召回率和F1 值、混淆矩陣的值。
3.2.1 模型和算法介紹
(1)Gensim 模型。Gensim 是一個用于從文檔中自動提取語義主題的Python 庫,足夠智能。Gensim 可以處理原生,非結構化的數(shù)值化文本(純文本)。Gensim 里面的算法,比如潛在語義分析LSA、LDA、隨機投影,通過在語料庫的訓練下檢驗詞的統(tǒng)計共生模式來發(fā)現(xiàn)文檔的語義結構。這些算法是非監(jiān)督的,也就是說你只需要一個語料庫的文檔集。當?shù)玫竭@些統(tǒng)計模式后,任何文本都能夠用語義表示來簡潔的表達,并得到一個局部的相似度與其他文本區(qū)分開來。
在Gensim 模型中運用了詞袋Doc2bow 和LsiModel 模型算法,以下是對兩種算法的簡單理解:
1)詞袋模型:詞袋模型首先會進行分詞,然后通過統(tǒng)計每個詞在文本中出現(xiàn)的次數(shù),得到文本基于詞的特征,若將各個文本的詞與對應的詞頻放在一起,就是將文本完成向量化。即把一篇文本想象成一個個詞構成的,所有詞放入一個袋子里,沒有先后順序、沒有語義。
2)LsiModel:LSI 是從文本潛在的主題來進行分析,是概率主題模型的一種,LSI 通過奇異值分解的方法計算出文本中各個主題的概率分布。假設有5 個主題,那么通過LSI模型,文本向量就可以降到5 維,每個分量表示對應主題的權重。
3)TF-IDF:表示一個詞在這個文檔中的重要程度。如果詞W 在一篇文檔D 中出現(xiàn)的頻率高,并且在其他文檔中很少出現(xiàn),則認為版詞W 具有很好的區(qū)分權能力,適合用來把文章D 和其他文章區(qū)分開來。
圖4:熱點問題排名算法流程圖
(2)Reddit 的話題排名算法[9]。Reddit 是全球化最知名的 Digg 類社區(qū),Reddit 是一個社會化新聞類網(wǎng)站,Reddit內的用戶能對各個帖子以投票的方式進行贊成或反對,發(fā)布時間和票數(shù)將作為一種評價關系來決定帖子的排名。第二問的熱點指數(shù)就是通Reddit 的話題排名算法基于時間和點贊反對數(shù)完成的。
采用 Reddit 的話題排名算法對問題進話題熱度排序,其算法描述如下:
Reddi 話題評價函數(shù)f(ts,y,z)數(shù)學表達式:
其中ts表示差值時間,ts=A-B(公式3.2.2)。
給出文檔發(fā)表的時間與2015年12 月 8 日07:46:43 這個Reddit 網(wǎng)站成立上線時刻之間經(jīng)過的時間,并用ts表示差值時間的秒數(shù)。并且X 是一個表示點贊數(shù)U 和反對數(shù)D 之間的差值:X=U-D(公式3.2.3)。
在公式中,y1,1,0且y是對x的符號函數(shù)值y=sign(x),即:
z 是一個限制最大優(yōu)化值的限制值,在x 的絕對值與1之間:
其公式的具體意義可以看作為以下兩點: 1)新話題比舊話題更受關注,因此發(fā)布時間對排名影響大。2)話題得分隨時間衰減,且新話題評價得分更高一些。
在Reddit 的話題熱度排序中使用了對數(shù)階來限制投票反差的增長,這讓算法更關注于人們的評價是否呈現(xiàn)兩極分化,而不是考慮具體差得是不是太多,讓權重的評價更加歸一化。
3.2.2 問題2 解決過程
問題2 流程詳解如下:
(1)對附件3 中的數(shù)據(jù)進行數(shù)據(jù)預處理,如第一問的3.1.1一樣,對一些含有特殊字符的、有重復的數(shù)據(jù)進行數(shù)據(jù)清洗,再去除停用詞后完成Jieba 中文分詞。
(2)然后就是建模完成第二問的兩張表格:
①針對熱點問題明細表,開始使用留言主題進行分詞,但分類效果一般,后改進為對留言詳情分詞。分完詞后通過詞袋模型的Doc2bow 稀疏向量,形成語料庫,接著運用LsiModel 模型算法,將語料庫計算出Tfidf 值。然后獲取詞典Token2id 的特征數(shù),計算稀疏矩陣相似度,建立一個索引并讀取Excel 行數(shù)據(jù),通過Jieba 進行分詞處理通過Doc2bow 計算稀疏向量,求得相似度。取相似度大于0.5 的歸為一類,完成熱點問題的歸類。然后計算進行熱點問題排序,將排好序的數(shù)據(jù)按照“問題ID”,“留言編號”等一一寫入Excel 文件中,從而完成了第二張表格“熱點問題明細表”。
②針對熱點問題表,對留言主題進行Jieba 分詞,提取特征詞,將地點/人群和熱點問題描述的信息逐一寫入表格中。通過相似度對熱點問題歸類后,運用Reddit 的話題排名算法,統(tǒng)計出對歸類的問題的點贊數(shù)和反對數(shù),再結合3.2.1 所介紹的Reddit 排名算法,計算出每類熱點問題的熱度指數(shù),用Unix 時間戳計算熱點問題的時間范圍時,t 的單位為秒。熱度指數(shù)計算完后就可以對熱點問題進行排序,最后將問題ID,熱度指數(shù)和時間范圍等寫入熱點問題表”。
3.3.1 評價方法介紹
通過已有的研究成果和參考文獻的基礎上,認為評論可以提取回答的社會性情感、準確性、完整性、相關性等方面的指標對回答進行評價。通過這些指標,挖掘出對回答評價關聯(lián)程度最大的特征,并建立基于挖掘出的特征的自動化評價模型。
通過已有資料,初步篩選答案文本和實效性作為挖掘特征,采用因子分析法對各個挖掘出答復間隔、問答相關性、回答長度、主題關鍵詞頻為主要分析因子,并對挖掘出的特征進行主成分分析與關聯(lián)性分析。各特征向量通過數(shù)據(jù)降維后,并通過SVM 進行模型訓練,得到評價模型。
3.3.2 信息評價過程
(1)數(shù)據(jù)預處理。通過對附件4 數(shù)據(jù)的研究分析,可以找到答復間隔、問答相關性、回答長度、主題關鍵詞頻、文本情感為主要的研究特征。并通過已有的模型對特征進行量化。下表給出各個特征的量化過程。
表1:特征量化表
(2)模型構建:①皮爾遜相關性檢驗。需要從已有的特征矩陣進行關聯(lián)性分析,分析選取的特征是否耦合,采用皮爾遜相關系數(shù)檢驗法。對各個特征進行相關性計算,得到特征相關性熱力圖。并從相關系統(tǒng)計算中可以看出各個成分之間耦合度,是否可以采用上述特征向量構建評價模型;②因子分析[10]。確定好研究的特征之后,還需要挖掘各個特征對結果的具體影響,采用因子分析法可以對已有的特征挖掘出影響最大的因子,然后對數(shù)據(jù)進行可視化后得到熱力圖。然后通過因子方差可以看出文本特征因子對整體方差貢獻率,相關性因子、時效因子次之。從整體因子分析的結果來看,判斷所選取的特征能否作為構建評價自動化回答評價模型的指標;③數(shù)據(jù)可視化。采用常規(guī)的高維數(shù)據(jù)可視化方法T-SNE 可以將降維高維數(shù)據(jù),并進行可視化,從而容易觀察出數(shù)據(jù)的分布規(guī)律。對評論特征矩陣進行降維可視化;④SVM 學習模型構建。通過降維操作聚合得到的訓練標簽,參與有監(jiān)督的模型訓練,得到自動化評價模型。可以將回答分為滿意回答1 與一般回答0。
在建立CNN 模型之后,對驗證集上的數(shù)據(jù)進行訓練,結果是在驗證集上的最佳效果為87.14%。
對測試集中的數(shù)據(jù)進行測試,在測試集上的準確率達到了86.43%,與驗證集所訓練出的準確率相差不多。對于衛(wèi)生計生類、環(huán)境保護類等類別的Precision,Recall 和F1-score 都超過了0.9,準確率還是很高的,然而像商貿(mào)旅游類、城鄉(xiāng)建設類僅僅超過0.7,效果較為一般。從混淆矩陣也可以看出分類效果,商貿(mào)旅游和城鄉(xiāng)建設分類一般,其余類比較好[11]。
對于文本未能很好的關于留言內容的一級標簽分類,認為有可能的原因是:
(1)數(shù)據(jù)預處理時可能未處理的好。
(2)超參數(shù)未調節(jié)到最好。
(3)影藏網(wǎng)絡層數(shù)較多。
(4)文本數(shù)據(jù)量少,未能更好地訓練數(shù)據(jù)。
問題2 是讓我們根據(jù)附件 3 將某一時段內反映特定地點或特定人群問題的留言進行歸類,定義合理的熱度評價指標,最后按照格式保存到“熱點問題表”和“熱點問題留言明細表”的Excel 的文件里。
按照格式用Reddit 排名算法通過問題出現(xiàn)次數(shù)和總點贊反對數(shù)對熱點問題計算出了一個熱度指數(shù),排序后并對排名前5 的提取到表中,反映交通和基層建設,商戶相關問題等5 個熱點問題在一眾問題中排名前五,并且從時間范圍可以看出,群眾對社區(qū)產(chǎn)生的問題反映時間的跨度很大,如排名第一的熱點問題,從2019/01/18 至2020/01/02,將近一年的時間仍然還存在問題,這可能代表著中途有來解決過問題,但沒處理完善導致熱點問題尚且存在。
通過建立熱點問題表,讓相關部門利用表格清楚的了解在某一段時間內群眾所遇到的問題和麻煩,能盡快的處理好這件事,為人民群眾做好服務,給予百姓便利和更好的生活環(huán)境和氛圍。
對于熱點問題表出現(xiàn)的問題做以下的詳解:
(1)地點/人群一列,并未出現(xiàn)人群信息,有可能存在運用Jieba 對主題分詞時,主題并不存在人群信息。
(2)問題描述可能并未像題目給出的表格中將事件描述的很具體。
(3)對于問題ID 一列,由于一開始歸類是將群眾留言數(shù)量的多少來排的序,再進行Reddit 加權后,就可能不是第一了。
熱點問題的留言明細:在數(shù)據(jù)預處理時,刪除特殊字符再存入表格讀取后,留言詳情看起來更為方便和清楚。通過留言明細表可以清楚的知道許多人反映了某一段時間社區(qū)產(chǎn)生的同一個問題,群眾反映的留言詳情很充分的表達了問題所在以及問題帶來的影響,這些問題在很長一段時間困擾和影響著他們。例如有些留言詳情以及發(fā)送時間都相同,猜測是一個人有兩個賬號的情況,都向上級表述的最近一段時間所受到的影響,用兩個賬號來反饋事實,像此類情況希望能讓上級和相關部門注意到并及時派人解決。
對于歸類熱點問題有一些不足之處,一個問題被歸類到另一個問題中去,產(chǎn)生這種問題的可能有:
(1)分詞后選擇特征詞時沒有選到關鍵的詞語,導致未能有效地歸類。
(2)選擇的模型可能歸類效果并不是很好。
(3)數(shù)據(jù)預處理時未刪除相似的且不重要的詞,導致兩個問題之間相似度較高從而歸類錯誤。
4.3 問題 3 結果分析
(1)皮爾遜相關性檢驗結果。通過相關系統(tǒng)計算中可以看出各個成分之間耦合度不高,可以采用上述特征向量構建評價模型。
(2)因子分析結果。通過因子分析計算庫,得到數(shù)據(jù)的負荷矩陣。且在得到的三個主成分因子中,基于文本特征的主題關鍵詞頻、回答長度、情感得分的文本特征因子占比較大,另外兩個因子主要為問答相關因子和時效性因子。通過計算因子的方差信息,可以更具體得看出各個因子對結果的貢獻率。因子方差可以看出文本特征因子對整體方差貢獻率較大,相關性因子、時效因子次之。從整體因子分析的結果來看,所選取的特征能夠作為構建評價自動化回答評價模型的指標。
(3)數(shù)據(jù)可視化結果。從可視化結果來看,數(shù)據(jù)分布比較集中,并且明顯呈現(xiàn)出兩邊聚合的特點。分別對左右兩側數(shù)據(jù)進行抽取驗證。在左側聚合分布部分數(shù)據(jù)集分析如下:從兩側數(shù)據(jù)集分布來看,位于左邊的回答相較于右側較差。根據(jù)聚合的情況為不同文本特征向量添加訓練標簽,以訓練學習模型。
上面三個步驟和結果皆是為了通過對回答文本特征的抓取,抓取到有效的文本特征,答復間隔、問答相關性、回答長度、主題關鍵詞頻、文本情感得分。通過相關性檢測和因子分析法確定了所研究的特征能夠較好的解釋回答的完整性、相關性、可解釋性。通過對附件4 所給數(shù)據(jù)得到的文本特征數(shù)據(jù)進行降維可視化,可以明顯看出滿意回答和一般回答呈現(xiàn)兩個集群。通過對SVM 機器學習方法學習兩個集群的特征作為自動化評價是否為滿意回答的模型,較好的基于答復意見給出了一套合適的評價方案。
對于集群數(shù)據(jù)的分類模型選擇仍有不足之處,由于兩個集群仍有邊界模糊的回答,產(chǎn)生問題主要有:
(1)對特征進行量化的過程仍然存在不精準的情況,數(shù)據(jù)預處理不夠充分。
(2)可能仍有部分特征不能更好地解釋回答的相關性、可解釋性、完整性。
(3)訓練模型對部分數(shù)據(jù)分類情況不佳,可能是高維數(shù)據(jù)在映射到二維下丟失了部分信息導致。
由于大數(shù)據(jù)、云計算、人工智能等技術的發(fā)展,利用自然語言處理和文本挖掘的方法來整理微信、微博、市長信箱等網(wǎng)絡問政平臺所產(chǎn)生的互聯(lián)網(wǎng)公開來源的群眾問政留言,給以往主要依靠人工來進行留言劃分和熱點整理的相關部門極大的便利,對提升政府的管理水平和施政效率具有極大的推動作用。
對問題一建立了一級標簽分類模型能較好地對留言分類,且有較高的準確率,減少工作量和差錯率的同時。提高了效率;對問題二建立歸類和熱度指數(shù)排序模型,將留言進行歸類,定義合理的熱度指標,最后按給定格式保存兩張表格;對于問題三建立模型從答復的相關性、完整性、可解釋性等角度對答復意見給出一套較好地評價方案,保證了答復信息的質量。
對一個問題長期反復地投訴和留言,耗費了群眾太多的時間和精力,并且也占用了平臺過多的時間和資源,讓工作人員的工作量增加了好幾倍,對此我提出一個建議:可采取此市民監(jiān)督機制。評價欄應分幾個內容組成:市民投訴原因、職能部門已完成的處理結果、沒完成的原因、預期完成時限,市民對處理結果是否滿意,不滿意的原因是什么,同一類同一事件投訴設置同一編號可追溯,累計追溯投訴達三次,由各行業(yè)各部門組成的監(jiān)督管理委員會對此處理單進行審定,如果確實是職能部門原因導致沒有處理完成的將計入績效,也可視情況利用媒體進行監(jiān)督。
政府服務是一個綜合性的事務,需要不斷轉變作風,創(chuàng)新工作理念,改進工作模式,進一步研究和完善熱線管理辦法及考核機制來提高辦件的處理效率和成效,以科學有效的方式推動該地區(qū)公共服務水平的提高,讓人民生活水平不斷得到提升,并堅持為人民服務的根本宗旨,真正做到為人民造福。