張永瑞,張?jiān)儡姡锶鹈簦?林
(1.山西省氣象災(zāi)害防御技術(shù)中心,山西 太原 030002;2.山西省氣象科學(xué)研究所,山西 太原 030002)
山西是中國冰雹災(zāi)害較重的省份之一,幾乎每年各地都有不同程度的冰雹災(zāi)害發(fā)生。據(jù)統(tǒng)計(jì),1949—2000 年,一年中遭受雹災(zāi)在30 個(gè)以上縣(市、區(qū)),且平均2.4 年有一年遭受嚴(yán)重雹災(zāi)[1]。冰雹具有局地性強(qiáng)、歷時(shí)短、發(fā)生區(qū)域廣等特征。許多冰雹信息受到時(shí)間、地域等諸多因素的限制而沒有記錄[2]。
微博是基于用戶關(guān)系的社交媒體平臺(tái),用戶通過PC、手機(jī)等多種移動(dòng)終端接入,以文字、圖片、視頻等多媒體形式,實(shí)現(xiàn)信息的即時(shí)分享、傳播互動(dòng)。用戶數(shù)上截至2020-03,微博月活躍用戶達(dá)5.5 億,日活躍用戶達(dá)2.4 億。是目前最受歡迎的社交媒體平臺(tái)之一,包含了大量的信息。
氣象臺(tái)站信息雖然準(zhǔn)確,但是臺(tái)站分布太少,不能反映更大范圍的情況,利用網(wǎng)絡(luò)信息的提取可以在廣闊的范圍內(nèi)獲取這方面的信息。
本文將基于新浪微博的冰雹信息,比較多種文本分類方法,研究最佳的方法,提取2010—2019 年冰雹的實(shí)況信息,并與觀測資料比較,分析其實(shí)用性。
本文采用山西109個(gè)氣象臺(tái)站2010-02—2020-12的冰雹信息以及新浪微博地址為山西省共轄的11個(gè)地級(jí)市2010-02—2019-12 以“冰雹”為關(guān)鍵詞的所有微博信息。
2.2.1 網(wǎng)絡(luò)爬蟲
目前,從新浪微博上下載用戶數(shù)據(jù)主要途徑有2 個(gè):第一種是通過新浪API 接口,但是有較大限制,需要被下載方授權(quán)許可,授權(quán)有效期為24 h。除了這些限制外,新浪API 針對(duì)一個(gè)用戶在使用一個(gè)應(yīng)用的請(qǐng)求次數(shù)上還有限制,對(duì)于測試授權(quán)來說,單個(gè)用戶每個(gè)應(yīng)用每小時(shí)只能請(qǐng)求150次,不能滿足本文研究需求。本文采用第二種途徑,通過網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛、網(wǎng)絡(luò)機(jī)器人),是一種按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本[3-5]。
2.2.2 分詞器及文本分類的特征選擇
“結(jié)巴”分詞是一個(gè)Python 中文分詞組件,可以對(duì)中文文本進(jìn)行分詞、詞性標(biāo)注、關(guān)鍵詞抽取等功能,并且支持自定義詞典。
如果把所有的分詞都作為文本特征,則經(jīng)過分詞處理后的文本類樣本的特征維度將是巨大的,同時(shí)由于分類能力很弱的分詞的使用會(huì)松動(dòng)訓(xùn)練出優(yōu)良分類器的根基,因此有必要在對(duì)分詞分類貢獻(xiàn)率分析的基礎(chǔ)上進(jìn)行分詞選擇,即特征選擇。基本思想是使用評(píng)估函數(shù)對(duì)分詞集的每個(gè)分詞進(jìn)行評(píng)估,然后按照評(píng)估得分的大小對(duì)分詞進(jìn)行排序,并選取前n個(gè)分詞作特征,形成對(duì)“文本”類樣本的描述向量。
本文使用類別信息的評(píng)估函數(shù)有文檔頻率(DF)、詞頻-逆向文檔頻率(TF-IDF)、信息增益(IG)、互信息(MI)、卡方檢驗(yàn)(CHI)、類間詞頻方差(DAC)[6]。
2.2.3 計(jì)算機(jī)學(xué)習(xí)
本文采用 Python 中的機(jī)器學(xué)習(xí)模塊Scikit-Learn 中的SVM 支持向量機(jī)、NB 樸素貝葉斯分類器、KNN K 近鄰分類器、DT 決策樹以及Google 公司2018-10-11 發(fā)布的BERT模型進(jìn)行分類器的訓(xùn)練與測試。
2.2.4 分類性能的評(píng)價(jià)指標(biāo)
本文采用分類性能評(píng)估指標(biāo)為:準(zhǔn)確率(Precision)、召回率(Recal1)和綜合考慮準(zhǔn)確率與召回率的F1 測度值(F.measure)。
模擬登錄新浪微博,關(guān)鍵詞為“冰雹”,地址分別為“太原”“大同”等山西11 個(gè)地市,時(shí)間為2010-01-01T01:00—2019-12-23T15:00,由于每一次搜索,微博只提供50 頁的數(shù)據(jù),所以為了避免遺漏,每一次搜索的時(shí)間間隔為24 h,使用requests 庫,加載網(wǎng)頁的HTML,利用正則表達(dá)式提取HTML 的每一條微博的博主姓名、發(fā)表內(nèi)容和發(fā)表時(shí)間。共爬取了33 979 條山西關(guān)于“冰雹”的微博。
隨機(jī)抽取3 696 條微博信息作為樣本,分為2 類:①博主第一視角第一時(shí)間發(fā)現(xiàn)冰雹所發(fā)表的微博;②聽聞他人說、回憶、不確定信息、新聞報(bào)道、天氣預(yù)警預(yù)報(bào)信息等。其中,第一類有2 061 條,第二類有1 635 條。分別隨機(jī)抽取樣本60%、20%、20%,為機(jī)器分類樣本集、驗(yàn)證集和測試集。
對(duì)發(fā)表內(nèi)容去重、去標(biāo)點(diǎn),利用python 中文分詞器JIEBA 分詞器分詞,遍歷所用微博內(nèi)容,識(shí)別一元詞到五元詞組,如微博“下大雨了,還夾著冰雹,玉米粒似的”,分為{下,大雨,了,還,夾著,冰雹,玉米,粒,似的,下大雨,大雨了,還夾著,夾著冰雹,玉米粒,粒似的,下大雨了,還夾著冰雹,玉米粒似的},并分別統(tǒng)計(jì)各個(gè)詞在爬取微博中的出現(xiàn)頻率。刪除掉停用詞“的”“了”等和出現(xiàn)頻率5 次及以下、帶數(shù)字、特殊符號(hào)的詞組后,共獲得49 899個(gè)詞組。用7 種評(píng)估函數(shù)對(duì)特征向量重新排序,根據(jù)分?jǐn)?shù)大小排出6 種詞組順序。
比較文檔頻率(DF)、詞頻-逆向文件頻率(TF-IDF)、信息增益(IG)、互信息(MI)、卡方檢驗(yàn)(CHI)、類間詞頻方差(DAC)在SVM 支持向量機(jī)、NB 樸素貝葉斯分類器、KNN K 近鄰分類器不同維度模型得分。其中,特征詞MI 函數(shù)分類排序在NB 分類器取得的模型分?jǐn)?shù)較高。MI函數(shù)排序在樸素貝葉斯分類器,在5206 特征維度模型分?jǐn)?shù)(Model Score)為0.81。
利用Sklearn 中決策樹的Grid Search CV 參數(shù)調(diào)優(yōu),訓(xùn)練集分成5 等份相互驗(yàn)證。比較文檔頻率(DF)、詞頻-逆向文件頻率(TF-IDF)、信息增益(IG)、互信息(MI)、卡方檢驗(yàn)(CHI)、類間詞頻方差(DAC)在DT 決策樹驗(yàn)證集模型得分。MI 函數(shù)排序在DT 分類器,在1000 特征維度模型分?jǐn)?shù)較高為0.761,其中參數(shù)為:{不純度計(jì)算方法(criterion): gini, 決策樹深度(max_depth): None,節(jié)點(diǎn)劃分最小不純度(min_impurity_decrease):0.0,葉子結(jié)點(diǎn)的最小樣本數(shù)(min_samples_leaf): 3}。
把訓(xùn)練集調(diào)入 BERT 模型, 分別調(diào)節(jié)參數(shù)train_batch_size為8和16,num_train_epochs為3、4,learn_rate為1.00E-5、2.00E-5、3.00E-5、4.00E-5。在train_batch_size為 8,num_train_epochs 為 3,learn_rate 為 2e-5 驗(yàn)證集模型準(zhǔn)確率最高為0.801。
特征詞MI 函數(shù)分類排序在NB 分類器5206 特征詞訓(xùn)練的模型、特征詞MI 函數(shù)分類排序在DT 分類器1000 特征詞訓(xùn)練的模型以及最佳驗(yàn)證集參數(shù)參數(shù):{不純度計(jì)算方法(criterion):gini,決策樹深度(max_depth):None,節(jié)點(diǎn)劃分最小不純度(min_impurity_decrease):0.0,葉子結(jié)點(diǎn)的最小樣本數(shù)(min_samples_leaf):3}的BERT 的訓(xùn)練模型在測試集測試,比較各模型的準(zhǔn)確率(Precision)、召回率(Recal1)和F1 測度值(F.measure),最終MI 函數(shù)分類排序在NB 樸素貝葉斯分類器訓(xùn)練的模型表現(xiàn)最好,準(zhǔn)確率(Precision)為0.84,召回率(Recall)為0.8,F(xiàn)1 測度值為0.83。
冰雹實(shí)況信息包括降雹的時(shí)間、地點(diǎn)及冰雹大小,由于微博的短文本居多和內(nèi)容隨意性強(qiáng)的特點(diǎn),這些要素有時(shí)會(huì)有一定的缺失。為將這三要素從降雹事件類中提取出來,本文從已標(biāo)注的微博數(shù)據(jù)中歸納出該三要素常用的表達(dá)規(guī)則,通過模板匹配法提取冰雹實(shí)況信息。時(shí)間為博主發(fā)微博時(shí)間,地區(qū)已經(jīng)確定,具體地址遍歷該地區(qū)鄉(xiāng)鎮(zhèn)街道,并提取。比如“太原”則遍歷太原市現(xiàn)轄的六區(qū)、三縣、一個(gè)市,及其縣市區(qū)內(nèi)的街道鄉(xiāng)鎮(zhèn),有相同地址名稱則提取。冰雹大小的提取主要基于2 個(gè)規(guī)則:①關(guān)于直徑的描述,為{直徑|最大直徑|空}+{多達(dá)|可達(dá)|有|達(dá)到|空}+數(shù)字+{厘米|毫米|cm|mm};②關(guān)于比喻的描述,{有|如|像|比|跟|大如|空}+比喻對(duì)象+{那么大|似的|般|般大|般大小|大|還大|一樣|一樣大小|大小|狀||小一些|空},比喻對(duì)象有[玉米]、[黃豆]、[乒乓球]、[棒球]、[西瓜]、[湯圓]、[雞蛋]、[鹽粒]、[豆粒]、[花生粒]、[彈珠]、[杏核]、[鵪鶉蛋]等30 個(gè)詞語,比如“有玉米粒那么大”“如鵪鶉蛋般大小”等。
為了提高準(zhǔn)確性,特征詞MI 函數(shù)分類排序在NB 分類器5206 特征詞訓(xùn)練的模型,在同一天符合一類數(shù)量在3 條以上記錄為該地區(qū)為降雹日。對(duì)比山西109 站2010-02—2019-12 降雹數(shù)據(jù)。機(jī)器分類精準(zhǔn)率(precision)為0.93,說明通過微博爬取的降雹事件是有參考性的,可以彌補(bǔ)一些地區(qū)降雹未被氣象臺(tái)站記錄的問題。查全率(recall)為0.87,說明微博博主并不能完全記錄下降雹事件,氣象臺(tái)站對(duì)冰雹事件記錄得更全面,在降雹事件中通過微博博主的信息是不能替代氣象臺(tái)站工作的。
本文基于新浪微博的冰雹信息,比較多種文本分類方法,發(fā)現(xiàn)互信息(MI)函數(shù)分類排序在樸素貝葉斯(NB)分類器訓(xùn)練的模型在對(duì)冰雹降雹事件識(shí)別準(zhǔn)確率較高,利用冰雹大小的規(guī)則提取出冰雹的時(shí)間、地點(diǎn)、大小,與氣象臺(tái)站觀測資料對(duì)比,通過微博提取冰雹實(shí)況信息雖然不能替代氣象臺(tái)站的工作,但是有一定參考性。