楊連報,李平,劉藝飛
(中國鐵道科學研究院集團有限公司 電子計算技術研究所,北京 100081)
安全是鐵路運輸永恒的主題,為確保鐵路運輸安全,鐵路行業建立了覆蓋全國鐵路固定基礎設施和移動裝備的傳感器網,研發應用了行車安全綜合監控、安全檢查監督、工務安全管理、電務安全檢測、牽引供電檢測、動車組檢修運用等多個系統[1],積累了面向鐵路行車安全主題的海量業務信息,這些信息數據絕大多數為語音、文本、圖形圖像等非結構化數據。由于其他形式的信息都可通過文本描述來實現,因此當前文本是海量信息的主要載體。
鐵路事故調查報告是鐵路行車安全領域體量最大、周期最長、蘊含價值最豐富的文本文件。根據《鐵路交通事故調查處理規則》的規定[2],鐵路事故調查報告的主要內容包括:事故發生的時間、地點、區間(線名、公里、米)、線路條件、事故相關單位和人員;發生事故的列車種類、車次、機車型號、部位、牽引輛數、噸數、計長及運行速度;旅客人數,傷亡人數、性別、年齡以及救助情況,是否涉及境外人員傷亡;貨物品名、裝載情況,易燃、易爆等危險貨物情況;機車車輛脫軌輛數、線路設備損壞程度等情況;對鐵路行車的影響情況;事故原因的初步判斷,事故發生后采取的措施及事故控制情況;應當立即報告的其他情況等。
當前鐵路事故調查報告大多以Word、PDF等形式存儲,且以紙質形式存檔,受限于傳統技術壁壘,這些體量大、價值豐富的事故故障文本無法實現有效存儲和分析。傳統通過人工手段對海量原始文檔進行提取、處理和分類,不僅費時費力,而且達不到理想的效果,已經無法適應當前對海量數據進行快速深度分析的需要。因此,在鐵路大數據時代,應用大數據技術實現鐵路非結構化文本數據分布式存儲、全文檢索和分析,對科學預測鐵路事故故障發生規律具有重要意義。
文本大數據分析技術是指對無結構的文本字符串中包含的詞、語法、語義等信息進行表示、理解和抽取,挖掘和分析出其中存在的事實,把從文本中抽取的特征詞量化來表示文本信息。鐵路行車安全領域文本大數據分析總體框架見圖1。
數據集成是將不同來源、不同格式的數據在物理或邏輯上進行集成的過程,是對文本數據進行分析的第1步。可利用BRAT、Labellmg、Vatic等工具對文本、圖像、視頻等非結構化數據按指定規則進行篩選、分類、結構化標注,將非結構化的數據結構化,以便生成計算機可識別數據供計算機處理,然后使用Streamsets采集工具并通過FTP、SFTP等方式進行交換處理。

圖1 鐵路行車安全領域文本大數據分析總體框架
數據存儲方案采用HDFS分布式文件系統,以流式數據訪問模式存儲大文件。將要存儲的大文件分割后存放在既定的存儲塊中,并通過預先設定的優化處理模式對存儲的數據進行預處理,從而解決大文件儲存與計算的需求。
文本數據處理包括本體庫構建、命名實體識別、文本向量表示和中文分詞等技術,是文本分析挖掘的重要步驟。本體庫構建是指對所研究的領域建立統一的對象模型框架,之后所有的分析都基于這個框架進行;命名實體識別是指對文本中具有特定意義的實體進行識別,包括人名、地名、機構名等;文本向量表示是指通過某些方法把文本數據向量化,轉化為向量形式的標識,從而便于之后各類分析方法的計算;中文分詞是指根據相應領域的字典并利用分詞工具將連續的文本內容切分為單獨的中文詞匯的過程。
針對文本大數據分析過程中數據量大、運算復雜的特點,文本數據計算包括分布式批量計算和深度學習計算。
分布式批量計算是指將1個復雜的計算任務分配給多個計算節點進行運算,常用的分布式批量計算模型有MapReduce和Spark。MapReduce模型可用于大規模數據集的并行運算,1個MapReduce作業通常會把輸入的數據集切分為若干獨立的數據塊,由Map任務(task)以完全并行的方式處理它們。對Map的輸出進行排序,然后把結果輸入給Rreduce任務,通常作業的輸入和輸出都會被存儲在文件系統中。Spark是用于分布式內存處理的計算框架,擁有MapReduce所具有的優點,不同于MapReduce的是Job中間輸出的結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數據挖掘與機器學習。
深度學習是指采用分層的深度神經網絡進行學習的一種機器學習算法,常用的深度學習計算框架主要有TensorFlow和Caffe。由于有大量機器學習算法支持,深度學習計算可用于計算機視覺、語音識別、自然語言處理與生物信息學等領域的深度神經網絡計算,極大降低了深度學習研究和開發的難度,可以獲得極好的學習效果。
分布式全文檢索實現了對于非結構化數據的內容檢索,用以定位關注的事故及主題,包括索引建立及鐵路專業語料庫。索引建立是指將文本數據中的部分信息提取出來并結構化的過程,全文檢索就是對索引進行搜索的過程;鐵路專業語料庫是指經過加工處理的真實的大規模鐵路電子文本庫,有助于實現鐵路文本數據的全文檢索。
文本大數據分析是在文本數據處理的基礎上,采用適合的文本分析算法及模型對文本數據進行分析的過程,常見的分析方法包括分類分析、聚類分析、特征提取及關聯分析等。分類分析是指從數據集中提取1個模型,從而將數據集中的對象歸到某個已知的分類中;聚類分析是指通過特定的分類方法,將整個數據集按照對象的相似性分為不同的類別;特征提取是指按照某種特定的方法從非結構化的文本數據中提取出具有代表性的文本特征值;關聯分析是指在大量的數據中發現某些數據項之間存在關聯關系的過程。
針對文本的安全大數據分析可以應用在重點區域分析、重點故障分析、事故故障關聯分析、事故故障預警及事故故障原因分析等多個業務場景。重點區域分析可以分析出某一時間周期內,事故故障的多發地點、發生次數、發生明細,為重點防控提供方向性指導;重點故障分析可以分析出某一時間周期內的多發故障;事故故障關聯分析可找出與事故故障關聯的設備、人員、管理等安全隱患,有助于重點盯防;事故故障預警可以通過機器學習算法,在歷史數據基礎上預測未來的事故故障;事故故障原因分析可以通過深度學習算法,準確提取及推薦發生事故故障的原因,并提出相應的整改措施。
在進行文本大數據分析的過程中,數據安全性也是重點關注內容。數據安全主要包括文本數據的采集安全、存儲安全和挖掘安全。可采用關鍵字詞替代、混洗及加密等措施來保證文本數據的采集安全;文本數據的存儲安全則可通過定期備份策略保證數據因意外損壞后可及時恢復;針對文本數據的挖掘安全,采用了身份認證和訪問控制機制,保證只有授權用戶才可訪問相應文本數據。
文本數據的資產治理包括標準管理、質量管理及資產管理等內容。標準管理可以對文本數據依據的標準進行瀏覽及增刪改、獲取等操作,是使文本數據規范化的要求;質量管理可以對文本數據的規則進行配置并對文件的質量進行監控及稽核,用于提高文本數據的質量,從而提高分析結果的準確性;資產管理是針對文本數據的各項信息進行管理,使文本數據可作為企業資產的一部分進行管理。
文本大數據分析關鍵技術主要包括全文檢索技術、中文分詞技術、文本檢索模型、文本特征提取與挖掘技術等。
為實現鐵路非結構化文本大數據的分析挖掘,首先要實現非結構化文本的分布式存儲和全文檢索。分布式存儲是應用分布式文件系統,實現非結構化文本動態可擴展的存儲。EelasticSearch(ES)通過集群提供分布式全文檢索,1個ES集群可以由多個節點組成,可動態增加。ES各節點之間通過唯一的集群名字進行識別,默認的集群名字為“EelasticSearch”,集群名字可通過elasticsearch.yml文件進行配置。ES采用去中心化節點架構,即各節點平等,可任意選1個節點為主節點。ES各節點之間通過TCP協議進行集群交互,并通過Restful API接口為其他應用提供服務。
ES需建立索引(Indices),實現文檔(Document)集合的統一存儲和查詢。1個索引內可以定義1種或多種類型(Type),1種類型下可以設置多個字段(Field)以便于檢索。同時ES為了提高性能和吞吐量,對索引進行分片(Shard),默認1個索引分為5個分片(R0—R4),分布在不同的節點上,同時通過復制(Replica)分片實現高可用性,以防止節點/分片出現故障(見圖2)。

圖2 ES集群邏輯架構
基于ES的中文文本全文檢索主要包括文本提取、中文分詞、索引建立與檢索等過程。其中中文分詞技術是實現中文文本全文檢索的基礎;索引建立是實現中文分詞后數據轉化為索引文件的過程,主要利用的技術為倒排索引;檢索過程是對要檢索內容進行中文分詞后,根據索引文件找到所檢索文檔的過程。
鐵路事故故障文本分布式全文檢索的首要和基礎工作是實現事故故障文本的分詞。中文分詞不同于英文分詞,中文詞語之間沒有空格標記進行分割[3-4]。不同的上下文環境、不同的詞語組合和不完備的語料庫造成了中文分詞的歧義。例如,“軌道電路紅光帶”“軌道區段紅光帶”“紅光帶”等描述的是同一種故障,但在文本文檔中不同人員的描述不一致,造成同一種故障由多種詞語進行描述,如果嚴格按照中文分詞就出現了3種不同的故障,給文本檢索和分析造成困難。同時鐵路行業缺乏語料庫,對于事故故障命名實體沒有統一的規范,造成事故故障文本中事故故障名稱無法識別。
中文分詞經過近30年的發展,主流的分詞技術主要有基于詞典匹配的中文分詞、基于字統計模型的中文分詞、基于字標注的中文分詞以及基于深度學習的中文分詞等方法[5-7]。在此采用Jieba分詞工具,利用通用詞典和自定義領域詞典[8],實現鐵路事故故障文本的分詞,整體結構見圖3。
事故故障文本檢索的基本過程是當用戶輸入查詢條件進行搜索時,首先對查詢條件進行中文分詞;然后計算查詢條件里關鍵詞與單詞詞典中詞語的相關度,找出相關度較高的單詞后,再根據單詞詞典找到倒排文件中對應的倒排列表;最后通過查詢倒排列表得到結果文檔,排序后展示給用戶。

圖3 融合鐵路領域詞典的中文分詞
事故故障文本檢索可描述為1個三元組模型,描述的是索引文檔、查詢及其之間的關系,表示為:F<D,Q,R>,式中:D為文檔集合;Q為查詢條件;R為文檔D和查詢Q之間的相關程度[9]。
TF-IDF是一種基于統計的常用加權方法,廣泛應用于檢索和文本分析中[10]。TF-IDF假設:如果1個詞在1個文檔中頻繁出現,而在其他文檔中出現較少或不出現,則將該詞作為該文檔的關鍵詞,將該文檔與其他文檔區分開來。
TF-IDF中TF表示詞頻,即該詞在1個文檔中出現的次數,理論上出現的次數越多則與文檔的主題越相關,但需要排除一些停用詞,如“的”“地”“了”“但”等。
詞頻TF計算公式為:

式中:ni,j為詞wi在文檔dj中出現的次數;為文檔dj中所有詞出現的次數之和。式(1)分母加1是為了避免分母為0的情況。
TF-IDF中IDF表示逆向文檔頻率,計算公式為:

式中:ki為詞wi在文檔集合D中相關的文檔個數;N為D的大小。同理,式(2)分母加1是為了避免分母為0的情況。
將詞頻與逆向文檔頻率結合起來,即用IDF來矯正TF,得到文檔dj中詞wi的權重為:

則某個文檔dj可用單詞權重構成向量:

同理,對于某次查詢qj可得:

通過計算文檔向量與查詢向量間的余弦距離或Jaccard相似度,確定查詢與文檔之間的相關程度。選擇計算余弦距離,公式為:

根據計算的余弦距離就可以對文檔進行排序,從而為用戶推選最相關的文檔。
鐵路事故故障文本全文檢索實現了對文本信息的有效存儲和檢索。結合文本挖掘的分類、預測和相關性分析等,可以挖掘鐵路事故故障發生規律,指導現場人員對重點事故故障進行防范,保障鐵路運行安全。
鐵路事故故障文本一般有固定的格式,主要包括標題、概述、調查過程、原因分析、定性定責、措施及要求等六大部分。因此,采用基于文本結構及正則表達式的文本特征提取,即通過正則表達式找到相應的段落,然后對重點段落的內容進行中文分詞和特征提取,提取時需要和事故故障詞庫、事故地點詞庫等專業詞庫進行匹配,若專業詞庫中存在則直接提取,若專業詞庫中不存在,需要根據正則表達式依據語法結構進行提取(見圖4)。

圖4 事故故障文本特征提取流程
根據提取的事故故障文本特征,可以應用文本挖掘的統計分析、相關性分析等技術,分析事故故障規律,例如多發故障、故障趨勢預測、故障關聯關系等。
鐵路事故故障追蹤報告為典型的非結構化文本數據,是鐵路安監部門對發生的事故故障進行追責調查所形成的詳細文檔,記載了事故故障發生地點、發生時間、發生原因、責任單位等重要信息。以某鐵路局集團公司2016年7—12月的事故故障追蹤報告、共計300多個文檔為樣本,進行事故故障報告全文檢索、多發事故故障詞云展示和事故故障關聯性分析。
對收集的文檔進行檢索時間對比實驗,實驗環境見表1。由實驗可知,基于ES的事故故障報告全文檢索可以大大縮短檢索時間(見圖5),檢索時間僅為10 ms左右,幾乎為實時檢索。同時,由于所用數據量較小,ES全文檢索所用時間基本不變,但隨著文本數量的增加,傳統檢索所用時間呈線性增長。說明文本數據量越大,越能體現ES全文檢索的優勢。

表1 全文檢索實驗環境

圖5 ES全文檢索與傳統檢索時間對比
此外,傳統檢索只能全文匹配,而基于TF-IDF的檢索可以檢索與關鍵詞相近的文檔,例如當檢索“軌道電路紅光帶故障”時,會檢索“紅光帶”“軌道區段紅光帶”等,同時根據檢索的排序推薦最相關的文檔。
通過對事故故障報告進行中文分詞和特征提取,找出多發事故故障,并以大數據可視化技術中的詞云進行展示(見圖6)。

圖6 多發事故故障詞云展示
由圖6可知,2016年7—12月,該鐵路局集團公司多發事故故障為機車故障和軌道電路紅光帶故障,需要進行原因分析和重點防范。
通過分析車、機、工、電、輛等專業多發的事故故障,可以發現部分專業的事故故障不僅是由于本專業內部導致,還存在與其他專業的關聯關系(見圖7)。
由圖7可知,機務專業的機車故障和車輛專業的緊急制動停車等主要與本專業有關,但軌道電路紅光帶不僅與電務專業有關,還與工務和供電專業有關。這就要求電務、工務、供電等專業在進行事故故障排查時,要聯合診斷,以便及時發現問題,確保鐵路安全。

圖7 各專業事故故障關聯關系分析
基于鐵路大數據技術,研究提出鐵路行車安全領域文本大數據分析總體框架,介紹全文檢索技術、中文分詞技術、文本檢索模型、文本特征提取與挖掘技術等文本大數據分析關鍵技術。通過在某鐵路局集團公司進行試點應用,實現了分布式存儲、近實時全文檢索、多發事故故障詞云展示和事故故障關聯關系分析,取得良好效果,研究成果可為鐵路相關業務領域的文本大數據分析提供參考。