梅 鈺 唐 衛(wèi) 王慕華 王闊音
(中國氣象局公共氣象服務(wù)中心 北京 100081)
氣象服務(wù)作為普通大眾最常接觸的公共服務(wù),要求具備實(shí)時(shí)、準(zhǔn)確、精細(xì)的特點(diǎn)。現(xiàn)有的氣象產(chǎn)品一般是通過氣象數(shù)據(jù)獲取、數(shù)值模型計(jì)算得到預(yù)測結(jié)果,最后將預(yù)測結(jié)果轉(zhuǎn)換為文字(輔以圖形及表格)向公眾發(fā)布。其中,后臺(tái)的數(shù)值預(yù)測通過預(yù)測算法不間斷運(yùn)行得到預(yù)測結(jié)果,而前臺(tái)的預(yù)報(bào)文本則需要通過人工編寫校對(duì)生成。雖然人工參與可以保證預(yù)報(bào)的準(zhǔn)確性以及權(quán)威性,但人工生成效率有限,且人無法像機(jī)器一樣連續(xù)工作,從而導(dǎo)致一些預(yù)報(bào)不能實(shí)時(shí)發(fā)布,制約了氣象服務(wù)質(zhì)量的提升。目前,氣象文本自動(dòng)生成的主要應(yīng)用場景是給定數(shù)值數(shù)據(jù),直接生成氣象文本[1],即全自動(dòng)生成;主流方法是基于模板的方法,即針對(duì)不同氣象信息構(gòu)造文本模板,后續(xù)通過“填空”的方式生成預(yù)報(bào)內(nèi)容,該方法的最大問題是模板有限,只能表達(dá)固定信息,且有時(shí)信息不夠準(zhǔn)確,生成的文本內(nèi)容在靈活性和豐富性上也較差。因此,本文提出了一種半自動(dòng)生成方案,給定部分氣象文本,生成擴(kuò)展的預(yù)報(bào)文本的方法,即根據(jù)人工輸入推薦候選內(nèi)容,相當(dāng)于以人機(jī)結(jié)合的方式進(jìn)行文本生成。這樣既可以提升人工進(jìn)行文本生成效率問題,也可以保證預(yù)警信息的準(zhǔn)確性,擴(kuò)充預(yù)報(bào)思路,具有良好的實(shí)用性。
進(jìn)行氣象文本推薦,一種簡單的實(shí)現(xiàn)思路可以采用基于搜索的方法,即收集歷史氣象文本,針對(duì)每對(duì)句子(前半句和后半句),構(gòu)建從前半句到后半句的映射字典,在推薦時(shí)通過檢索前半句給出后半句集合。這種方法存在兩個(gè)問題:一是同樣輸入,對(duì)應(yīng)的候選句集合太大,來自不同地區(qū)、不同單位的文本內(nèi)容存在差異,所含的氣象數(shù)值不同;二是對(duì)于未出現(xiàn)的用戶輸入句,無法給出推薦結(jié)果。
從自然語言處理角度來看,氣象預(yù)警文本推薦可以看作是一個(gè)典型的文本生成問題(NLG)[2-4]:利用文本的上下句的語義邏輯關(guān)系進(jìn)行預(yù)測。本文所提方法分為兩步:第一步是對(duì)原始文本中的氣象要素(如時(shí)間、地點(diǎn)、溫度、風(fēng)速等級(jí))進(jìn)行實(shí)體抽取、數(shù)值替換,得到模板文本。模板文本相當(dāng)于只保留了預(yù)警內(nèi)容的描述框架。第二步基于模板文本構(gòu)建文本生成模型,用于文本推薦。其中,生成模型采用基于神經(jīng)網(wǎng)絡(luò)的Seq2Seq模型,該模型可以有效解決上述基于搜索方法的不足,既可以對(duì)候選文本進(jìn)行排序減少推薦量,也可以對(duì)用戶的新輸入進(jìn)行推薦。
為了研究氣象文本推薦,我們選取預(yù)警文本作為實(shí)驗(yàn)數(shù)據(jù),主要原因是預(yù)警文本數(shù)量大且獲取容易。預(yù)警文本是國家氣象部門針對(duì)可能帶來災(zāi)害性后果的天氣情況作出的提前告警,圖1給出了一篇完整的氣象預(yù)警文本。圖2給出了氣象預(yù)警文本推薦的應(yīng)用示例:左側(cè)是氣象預(yù)報(bào)員編寫的預(yù)警內(nèi)容,右側(cè)是系統(tǒng)推薦的下一句預(yù)警文本。對(duì)于第一個(gè)樣本,用戶輸入“受冷空氣影響”,系統(tǒng)會(huì)推薦可能性較高的下一句預(yù)警文本,這里給出了top-3的結(jié)果。其中,空格表示用戶可以輸入時(shí)間、地點(diǎn)、溫度、風(fēng)速等具體氣象要素,這些要素對(duì)于特定的預(yù)警事件,取值不同。用戶基于推薦文本進(jìn)行修改后,生成最終預(yù)警文本。預(yù)警文本推薦一方面可以減少用戶輸入,另一方面也可以對(duì)預(yù)報(bào)生成進(jìn)行提示,從而幫助提升預(yù)警文本攥寫的準(zhǔn)確性。
圖1 預(yù)警文本示例
用戶輸入系統(tǒng)推薦結(jié)果樣例1:受冷空氣影響1. 預(yù)計(jì)風(fēng)力逐漸加大至級(jí)2. 起將有雷陣雨3. 預(yù)計(jì)最低氣溫在℃左右樣例2:密切關(guān)注天氣盡量減少戶外活動(dòng)
圖2 預(yù)警文本推薦示例
文本到文本的生成是目前自然語言處理的熱門研究方向,具體可以分為文本摘要[5-7]、文本復(fù)述[8-10]等細(xì)分方向。文本生成的傳統(tǒng)方法有規(guī)則式的生成方法、抽取式的生成方法。近年來,隨著深度學(xué)習(xí)的發(fā)展,尤其是神經(jīng)機(jī)器翻譯技術(shù)的成熟,相關(guān)工作使用序列到序列的模型[11]來解決文本生成任務(wù),如詩歌生成[12-13]、對(duì)話機(jī)器人[14-16]。此外,工業(yè)界也推出實(shí)際的寫作程序,應(yīng)用于新聞寫稿[17]、氣象預(yù)報(bào)生成[18]等領(lǐng)域?,F(xiàn)有氣象文本生成工作集中在將數(shù)值轉(zhuǎn)換為文本,而我們研究的氣象預(yù)警文本推薦側(cè)重于對(duì)用戶已輸入文本進(jìn)行擴(kuò)展。
本文的主要貢獻(xiàn)如下:
(1) 首次提出了氣象文本推薦問題,構(gòu)建了研究數(shù)據(jù)集。通過對(duì)天氣網(wǎng)的預(yù)警內(nèi)容進(jìn)行數(shù)據(jù)采集,構(gòu)建了預(yù)警文本數(shù)據(jù)集。
(2) 探索了對(duì)氣象文本進(jìn)行氣象要素抽取的方法。首次定義了氣象要素抽取任務(wù),評(píng)估了CRF模型[19]在要素抽取任務(wù)上的效果。
(3) 提出使用基于神經(jīng)網(wǎng)絡(luò)的序列到序列的模型(Seq2Seq)來解決預(yù)警文本生成。實(shí)驗(yàn)表明基于Seq2Seq模型的預(yù)測效果在BLEU值上可以達(dá)到12.21,具有一定的實(shí)用性。
氣象文本推薦的目標(biāo)可以認(rèn)為是構(gòu)建一個(gè)推薦系統(tǒng),該系統(tǒng)接收用戶的句子輸入S,輸出關(guān)聯(lián)句子T。推薦系統(tǒng)處理的數(shù)據(jù)形式為句對(duì)(類似于機(jī)器翻譯中的對(duì)齊文本[11])。具體地,我們對(duì)S和T的限定如下:(1)S和T是進(jìn)行了氣象要素替換后的模板文本。之所以使用模板文本,是因?yàn)橛脩粼诰庉嬀唧w內(nèi)容時(shí)需要根據(jù)氣象預(yù)測情況填入實(shí)際的氣象數(shù)據(jù)。(2)S和T為逗號(hào)隔開的子句,且S和T要出現(xiàn)在氣象文本的同一句話中(句號(hào)隔開)。
根據(jù)第(1)條,推薦系統(tǒng)處理的文本為模板文本,即需要將文本中的氣象要素進(jìn)行替換。氣象要素是指描述氣象信息的必要內(nèi)容,比如時(shí)間、地點(diǎn)、類別等。實(shí)際上,這里的氣象要素對(duì)應(yīng)的是自然語言處理中的實(shí)體。另外,氣象文本也會(huì)涉及量的描述,如“降水量在50毫米以上”,類似“50”的數(shù)值也需要替換。具體地,文本要抽取的氣象要素以及氣象數(shù)值示例如表1所示。
表1 氣象要素、氣象數(shù)值類型示例
表2給出了原始文本經(jīng)過抽取替換得到的模板文本。其中,“密云氣象臺(tái)”是一個(gè)發(fā)布單位的實(shí)體,在模板文本中,使用實(shí)體類型“D”來替換。
表2 原始文本VS模板文本示例
根據(jù)第(2)條,句對(duì)的構(gòu)建通過抽取文本中所有相鄰的子句來完成。以圖1中的預(yù)警文本為例,基于該預(yù)警文本生成的句對(duì)如表3所示。
表3 基于圖1預(yù)警文本生成句對(duì)
為了開展文本推薦研究,需要構(gòu)建對(duì)應(yīng)的數(shù)據(jù)集。具體地,我們爬取了天氣網(wǎng)下氣象預(yù)警欄目的內(nèi)容。下載過程分為2步:(1) 通過構(gòu)建翻頁下載鏈接,即“https://www.tianqi.com/alarm-news/”+頁數(shù),下載得到預(yù)警導(dǎo)航頁面;(2) 對(duì)導(dǎo)航頁面中的鏈接進(jìn)行抽取,選擇“發(fā)布類型”的鏈接進(jìn)行二次采集,獲取預(yù)警文本。圖3給出了數(shù)據(jù)下載的示例。
圖3 預(yù)警導(dǎo)航頁面
通過對(duì)200個(gè)導(dǎo)航頁進(jìn)行輪詢下載,最終獲得了3 760條預(yù)警文本,我們稱對(duì)應(yīng)的數(shù)據(jù)集為ALERT數(shù)據(jù)集。
構(gòu)建氣象文本推薦系統(tǒng)分為兩步:一是進(jìn)行文本轉(zhuǎn)換,即將原始文本轉(zhuǎn)換為模板文本;二是基于模板文本構(gòu)建推薦模型。以預(yù)警文本推薦為例,整個(gè)處理框架如圖4所示。
圖4 氣象文本推薦研究框架
2.1.1要素抽取模型構(gòu)建
氣象要素抽取可以認(rèn)為是一個(gè)命名實(shí)體識(shí)別問題。目前主流命名實(shí)體識(shí)別方法是基于統(tǒng)計(jì)的CRF模型。因?yàn)槭墙y(tǒng)計(jì)模型,所以該模型在訓(xùn)練時(shí)需要標(biāo)注數(shù)據(jù)。由于包含氣象要素的預(yù)警文本相似度很高,所以要素抽取可能不需要太多的標(biāo)注。為此,我們從ALERT數(shù)據(jù)中抽取了1 500條進(jìn)行人工標(biāo)注,選取其中的1 200條用于模型訓(xùn)練,300條用于效果評(píng)估,對(duì)應(yīng)的數(shù)據(jù)集分別為ALERT-Train和ALERT-Test。
具體地,我們采用字符級(jí)別的標(biāo)注方法。圖5給出了標(biāo)注示例,“12-14日”為預(yù)警時(shí)效實(shí)體類型,所以相關(guān)字符的標(biāo)簽為“X”。
圖5 要素抽取的人工標(biāo)注樣例
訓(xùn)練使用目前主流的Stanford-NER工具。該工具提供了基于CRF的實(shí)體抽取模型。我們使用前面提到的ALERT-Train訓(xùn)練模型,使用ALERT-Test測試效果,得到的性能測試結(jié)果如表4所示。
表4 氣象要素抽取的測試性能
從測試結(jié)果來看,發(fā)布單位[D]、預(yù)警級(jí)別[J]、預(yù)警類別[L]、發(fā)布時(shí)間[S]的F1值都超過了0.99,說明這些要素在內(nèi)容表達(dá)上相對(duì)固定,而影響范圍[F]的準(zhǔn)確率相對(duì)較低(0.87),說明地點(diǎn)表達(dá)相對(duì)多樣。
2.1.2要素抽取替換
我們使用2.1.1節(jié)訓(xùn)練得到的要素抽取模型來處理ALERT中的所有預(yù)警文本。將抽取出的氣象要素替換為類型符號(hào),比如將“發(fā)布單位”實(shí)體替換為“D”、“影響范圍”實(shí)體替換為“F”,替換示例如表2(左側(cè))所示。值得注意的是,要素替換只會(huì)替換氣象要素實(shí)體。
2.1.3數(shù)值抽取替換
預(yù)警文本也會(huì)涉及氣象數(shù)值,這些數(shù)值對(duì)不同預(yù)警事件來講,參考性不大,也需要替換。如“降水量在50毫米以上”,需要將其中的“50”進(jìn)行替換,替換之后的句子為“降水量在C毫米以上”。
具體地,我們使用正則表達(dá)式進(jìn)行抽取,上述例子應(yīng)用的正則表達(dá)式為“(d+)毫米”。同樣地,我們使用數(shù)值類型符號(hào)進(jìn)行替換,替換的示例如表2(右側(cè))所示。
2.2.1句對(duì)抽取
輸入的預(yù)警文本往往包含多個(gè)句子(句號(hào)隔開)。根據(jù)1.1關(guān)于問題的定義,預(yù)警文本推薦任務(wù)只處理相鄰子句。所以句對(duì)生成的過程如下:(1) 按照句號(hào)分割預(yù)警文本;(2) 對(duì)(1)中每句話,按逗號(hào)分割句子;(3) 對(duì)于(2)中的句子,如果句子由括號(hào)結(jié)尾,把括號(hào)中的內(nèi)容獨(dú)立為一個(gè)新子句;(4) 對(duì)于(1)-(3)產(chǎn)生的所有子句,將返回相鄰的子句文本作為句對(duì)。句對(duì)抽取的示例如表3所示。
2.2.2推薦模型
推薦模型針對(duì)輸入句S,返回?cái)U(kuò)展句T。從輸入輸出來看,預(yù)警文本推薦可以看作是機(jī)器翻譯問題,相關(guān)的機(jī)器翻譯方法都可以拿來進(jìn)行嘗試。采用目前基于神經(jīng)網(wǎng)絡(luò)的序列到序列(Seq2Seq)翻譯模型來構(gòu)建推薦模型[20-21]。Seq2Seq模型由兩部分構(gòu)成,一是編碼階段的“Encoder”,二是解碼階段的“Decoder”。Encoder、Decoder一般使用基于RNN的神經(jīng)網(wǎng)絡(luò)。RNN網(wǎng)絡(luò)可以將變長輸入序列轉(zhuǎn)換為固定維度的向量,也可以從固定維度的向量輸出變長序列。
1) RNN網(wǎng)絡(luò)。一個(gè)RNN網(wǎng)絡(luò)[22]按照順序?qū)斎胄蛄衳={xi}進(jìn)行處理,不斷更新內(nèi)部的隱藏狀態(tài)。對(duì)每個(gè)位置的輸入xi,RNN會(huì)更新計(jì)算隱藏狀態(tài)hi。在每個(gè)位置,基于隱狀態(tài)hi,RNN可以產(chǎn)生關(guān)于輸出yi的條件概率。這里輸入到RNN單元的xi、hi是固定維度的向量,yi是詞匯表中的特定詞。具體地,RNN網(wǎng)絡(luò)包括2個(gè)重要函數(shù):狀態(tài)更新函數(shù)f(·)以及輸出函數(shù)g(·)。常見形式如下:
hi=f(hi-1,xi)=δ(Uxi+Whi-1+b)
(1)
g(yi|hi)=O(Vhi+c)
(2)
式中:δ(·)為激活函數(shù)tanh,O(·)為概率輸出函數(shù)softmax。由于原始RNN不能很好地解決長時(shí)依賴問題,神經(jīng)網(wǎng)絡(luò)研究領(lǐng)域提出了多個(gè)針對(duì)RNN的改進(jìn)版本,比如LSTM以及GRU[22]。
圖6 預(yù)警推薦算法的示意圖
從概率角度來看,Seq2Seq模型可以看作是用于估計(jì)條件概率P(T|S),S和T的長度可以不同。P(T|S)的計(jì)算如下:
式中:函數(shù)gDecoder(·)是解碼器的輸出函數(shù)(softmax函數(shù)),該函數(shù)能計(jì)算輸出詞Tj的概率。函數(shù)fEncoder(·)、fDecoder(·)是編碼器和解碼器的狀態(tài)更新函數(shù)。
Seq2Seq模型的參數(shù)學(xué)習(xí)通過最大化如下目標(biāo)函數(shù)來實(shí)現(xiàn):
式中:θ是模型參數(shù),每一組
3) Seq2Seq模型實(shí)現(xiàn)細(xì)節(jié)。Seq2Seq作為基礎(chǔ)框架,其具體編解碼過程有多種選擇,在機(jī)器翻譯領(lǐng)域也有很多變種。針對(duì)氣象預(yù)警文本的推薦,我們的實(shí)現(xiàn)方案包括:
(1) 使用GRU作為RNN的實(shí)現(xiàn)。
(2) 不使用attention機(jī)制。主要原因包括3點(diǎn):① 在預(yù)警文本推薦中,句子的長度較短,基于attention來解決解碼時(shí)長范圍依賴的需求不大;② 預(yù)警文本推薦的2句話在整體上存在邏輯表達(dá)關(guān)系,但在單個(gè)詞上的對(duì)齊關(guān)系較弱,attention作用有限;③ 引入attention也會(huì)引入額外參數(shù),增大過擬合的風(fēng)險(xiǎn)。
(3) 對(duì)輸入句子進(jìn)行反轉(zhuǎn)。主要原因是為了縮短輸入句S前面的詞到輸出句T前面詞的平均距離。在機(jī)器翻譯中,該方法可以有效提升翻譯質(zhì)量。
具體的算法流程同文獻(xiàn)[21]一致。
本文使用google-seq2seq的工具進(jìn)行實(shí)驗(yàn)。具體地,對(duì)ALERT數(shù)據(jù)集進(jìn)行句對(duì)抽取,共獲得14 593個(gè)句子對(duì)。隨機(jī)選取其中的90%作為訓(xùn)練集來學(xué)習(xí)參數(shù),10%作為測試集進(jìn)行結(jié)果驗(yàn)證。句子長度的統(tǒng)計(jì)信息如表5所示。
表5 S、T句子長度統(tǒng)計(jì)信息
選擇機(jī)器翻譯常用的BLEU和ROUGE作為評(píng)價(jià)指標(biāo),通過比對(duì)模型生成句以及標(biāo)準(zhǔn)答案句的差異,對(duì)推薦句的效果進(jìn)行評(píng)價(jià)。
句子使用Jieba進(jìn)行分詞,詞的表示(embedding)也作為參數(shù)進(jìn)行學(xué)習(xí),訓(xùn)練集中S的詞表大小為827,T的詞表大小為696;輸入句S和輸出句T使用獨(dú)立的詞表以及獨(dú)立的embedding矩陣。
關(guān)于詞的embedding學(xué)習(xí),由于涉及參數(shù)較多,我們使用從中文wiki預(yù)訓(xùn)練得到的embedding來初始化。具體地,中文wiki學(xué)習(xí)到的詞向量為300維,使用PCA將詞向量進(jìn)行降維,該向量作為embedding的初始向量。對(duì)于未出現(xiàn)在wiki中的詞,使用隨機(jī)初始化。
在參數(shù)選擇上,需要盡可能地?cái)M合訓(xùn)練集,因?yàn)闇y試集和訓(xùn)練集的數(shù)據(jù)分布差異較小。對(duì)于embedding.dim參數(shù)(PCA的輸出維度),我們嘗試了{(lán)4,8,16};對(duì)于Encoder、Decoder,我們嘗試了{(lán)num_layers:1,num_unit:8}以及{num_layers:2,num_unit:4}。最終使用的Seq2Seq模型的參數(shù)設(shè)置如表6所示。實(shí)驗(yàn)在一臺(tái)GPU上運(yùn)行,總共迭代了約15萬次。
表6 Seq2Seq模型的參數(shù)設(shè)置
最終的測試性能如表7所示。
表7 Seq2Seq模型的性能指標(biāo)
圖7-圖10給出了隨著迭代的進(jìn)行,學(xué)習(xí)到的Seq2Seq模型在測試集上的性能得分(BLEU、ROUGE-1/F、ROUGE-1/Precision、ROUGE-1/Recall),步長為10 000。從圖中可以看到,模型已經(jīng)收斂。
圖7 BLEU值
圖8 ROUGE-1/F值
圖9 ROUGE-1/Precision值
圖10 ROUGE-1/Recall值
表8給出了對(duì)于預(yù)警文本推薦,模型生成的得分最高的推薦結(jié)果與標(biāo)準(zhǔn)答案的樣例。從表中可以看到,對(duì)于編號(hào)1~3的樣本,模型生成句與原始參照句基本一致,說明Seq2Seq模型在句子生成上的優(yōu)勢。對(duì)于編號(hào)為4的樣本,模型生成句雖然與標(biāo)準(zhǔn)答案不完全一致,但所含的內(nèi)容詞也反映了答案的意思。
表8 輸入句、模型生成句與標(biāo)準(zhǔn)答案示例
一個(gè)有意思的樣本是樣本5,模型生成句為“局地有C毫米”,而標(biāo)準(zhǔn)答案是“F新增積雪深度將達(dá)到D厘米、局地達(dá)到D厘米”。顯然,模型生成句表達(dá)了降水,而標(biāo)準(zhǔn)答案表達(dá)為降雪。針對(duì)該預(yù)測錯(cuò)誤進(jìn)行分析,得到這兩句話所在的完整預(yù)警文本如表9所示,抽取的句對(duì)如表10所示。
表9 樣本5所在的完整預(yù)警文本
表10 樣本5抽取的句對(duì)
“C毫米”是從括號(hào)文本中抽取出來的單獨(dú)子句。因?yàn)閷?duì)于降水預(yù)警文本,“C毫米”也是一個(gè)常見的短語,所以根據(jù)“C毫米”,模型會(huì)輸出和降水相關(guān)的下半句。
這個(gè)現(xiàn)象說明,目前使用基本Seq2Seq模型不考慮預(yù)警文本的背景信息(即“預(yù)警類型”、“預(yù)警級(jí)別”等),僅使用當(dāng)前句子信息來預(yù)測下一個(gè)句子,會(huì)造成預(yù)測結(jié)果與實(shí)際結(jié)果的偏差。融合預(yù)警類型信息進(jìn)行推薦還需要進(jìn)一步研究。
本文對(duì)氣象文本推薦問題展開研究,在預(yù)警文本上實(shí)現(xiàn)了基于Seq2Seq模型的文本推薦系統(tǒng)。首先,進(jìn)行氣象要素抽取,將歷史預(yù)警文本轉(zhuǎn)換為模板文本;然后,從模板文本中抽取句對(duì);最后,基于句對(duì)構(gòu)建推薦模型。其中氣象要素抽取使用基于CRF的抽取方法完成。測試結(jié)果表明,氣象要素抽取對(duì)“影響范圍[F]”類型的抽取精度(F值)相對(duì)較低,其他類型的抽取范圍精度較高。預(yù)警文本推薦使用基于神經(jīng)網(wǎng)絡(luò)的Seq2Seq模型,并且針對(duì)氣象預(yù)警文本生成的特殊性,對(duì)Seq2Seq模型的組件進(jìn)行了定制。實(shí)驗(yàn)結(jié)果表明,本文方法進(jìn)行文本推薦的BLEU值上可以達(dá)到12.21,具有一定實(shí)用性。此外,我們對(duì)其中一些預(yù)測錯(cuò)誤的情況進(jìn)行了分析。未來會(huì)把預(yù)警類型和預(yù)警級(jí)別作為上下文向量,引入到預(yù)警文本推薦中。