尹昱東 王保建
(西安交通大學機械工程學院,陜西 西安 710049)
機床裝配信息分布分散,格式眾多,不易于數字化管理,且對工人裝配水平要求高,理清裝配零部件之間的相互關系需要長時間的人工分析。
知識圖譜可以將機床當中的零部件信息以及部件之間的關系以圖譜的形式展示,能夠更為有效獲悉零部件周圍相連的部件信息以及當前零件定位細節,又可以輔助工廠數控機床裝配,解決裝配數據分散、無規范以及裝配效率低下等機床現狀問題。
機床裝配知識圖譜構建過程中的主要難點在于:數據來源、知識抽取和知識推理。本文采用以3DXMLl 格式數據為數據基礎,使用SAX 解析器從裝配體信息流當中提取實體信息和裝配信息,并將文件內容信息分為實體屬性信息和實體關系信息,使用基于圖的結構,完成知識推理環節,實現從原先的兩種關系衍生出新的關系,豐富知識庫的內容,最后使用Neo4J 完成裝配信息的知識圖譜構建,實現以圖的形式展示裝配信息。通過該知識圖譜,操作人員無須掌握專業知識就可以很好地了解機床內部結構。此外,將分散的信息集中存儲到圖數據庫當中,有利于工廠實現數字化管理。
為了提高搜索引擎的性能,Google 公司在2012 年正式提出知識圖譜的概念[1],實現互聯網知識的有效利用,為搜索引擎實現語義化搜索與知識互聯引出新的路徑[2]。通過圖的結構,實現從數據當中提取實體、關系等信息,建立基于事務之間的關系模型。在那之后,多個知識圖譜相繼誕生,常見的通用知識圖譜有Freebase、Wikidata、DBpedia和YAGO 等[3-4]。行業知識圖譜有IMDB、MusicBrainz和ConceptNet。國內知名度高的知識圖譜有阿里巴巴與浙江大學團隊開發的面向淘寶服務平臺的知識圖譜,其中實現了基于客戶購買記錄的商品推薦系統、商品搜索引擎以及小蜜的智能問答系統。
知識圖譜的構建技術主要集中在知識抽取、知識表示、知識融合以及知識推理這4 個環節,其中知識提取主要指的是從開放數據領域當中實現自動抽取所需要的知識。知識抽取包括實體抽取、關系抽取以及屬性抽取。
知識圖譜在制造業和工業領域還處在初探階段,裝配知識圖譜屬于專業知識圖譜,具有行業壁壘高、專業性強等特點,并且由于裝配相關數據來源復雜,有結構化數據、非結構化數據和半結構化數據3 種,本文主要針對半結構數據構建裝配知識圖譜進行嘗試,研究思路如圖1 所示。

圖1 半結構數據構建知識圖譜研究思路
確定知識圖譜裝配模型的信息組成形式為“實體-關系-實體”和“實體-關系-屬性”兩種三元組,使用以上兩種三元組來表達裝配體的實體信息與裝配信息。同時將裝配元素定義為總裝配體、子裝配體和零件。
裝配數據主要以半結構化數據為主,如三維模型,其次是大量分布在裝配文檔的非結構化數據。
裝配模型的文件格式有很多,比如DWG、STL,但這些格式大文件龐大,而且有些沒有裝配信息,如STL 格式,STL 格式刪除裝配信息,保留模型信息和數據量高的幾何實體信息,但文件仍然很大,不利于裝配圖譜的構建。而3DXML 文件只保留模型實體信息和裝配信息,采用ZIP 算法對模型進一步壓縮,其具體文件組織結構如圖2 所示。通過3DXML 格式保存的三維模型具備充分的裝配信息且所需內存少。

圖2 3DXML 多文件組織結構圖
另外,可以使用XML 接口進行文件解析,裝配信息集中分布在描述產品結構樹的文件當中。因此,可以使用3DXML 作為數控機床裝配信息知識圖譜的數據來源。
在3DXML 文件中關于裝配信息主要有<Reference3D>、<Instance3D>、<IsAggregatedBy>、<IsInstanceOf>,其 中 <Reference3D>引 用 節 點 和<Instance3D> 實例節點描述零件、裝配體的實體信息,<IsAggregatedBy> 和 <IsInstanceOf> 描述裝配信息[5]。為了方便解析,本文將<IsAggregatedBy>命名為關系標簽1 號,<IsInstanceOf>命名為關系標簽2 號。
實例節點既是某一引用節點的組成部分,同時也是另一個引用標簽的實例,這兩個不同引用節點的ID 屬性值分別存儲在實例節點的關系標簽1 號子節點和關系標簽2 號子節點中[6],如圖3 所示,這個思想也是解析3DXML 文件的關鍵。

圖3 裝配文件結構圖
在這一環節,需要準備3DXML 文件,通過使用SoildWorks 三維建模軟件將事先準備好的數控機床三維裝配模型轉換成3DXML 格式,之后使用反ZIP 算法對3DXML 文件解壓,得到表示三維模型實體信息和裝配信息的一系列文件,為下一步知識抽取環節做準備。
3DXML 以XML 為基礎,可以通過解析XML文件的解析器進行解析,提取實體信息和裝配信息,本文使用了常用的SAX 解析器。SAX 解析器采用順序的方式依次訪問XML 文件當中的標簽,其中會用到3 個主要的重載函數,具體如表1 所示。解析器讀取不同XML 標簽標記時會執行相應的操作,例如訪問開始標記,會執行startElement 函數。通過重載函數,可以存儲保留在標簽內的裝配實體信息,通過characters 函數記錄建模時產生的零件特定編號,通過編號來區分不同零件,同時也是用來抽取零件裝配信息的關鍵。

表1 SAX 解析主要重載函數表
SAX 訪問描述實體信息標簽(包括引用節點和實例節點),記錄實體信息,包含零件編號、零件名、零件類型,得到實體屬性三元組,同時由于實例節點標簽內部還有兩層描述關系的標簽,因此當訪問到實例節點還需記錄描述關系信息的編號,最終得到實體關系三元組,具體的SAX 解析流程如圖4知識抽取流程圖所示。

圖4 知識抽取流程圖
通過上述操作,單一數控機床模型得到177 個實體三元組和197 個關系三元組,結果如表2 和表3所示,數據來源模型如圖5 所示。

圖5 數控車床三維模型

表2 部分關系提取結果

表3 部分實體屬性提取結果
其中,表2 記錄實體關系信息,第一列代表裝配關系起始實體,第二列為裝配關系的終止實體,第三列為兩個實體之間的關系。表3 記錄實體屬性特征信息,第一列代表每個實體特定的編號,該標號用來區分不同的實體,對應獨一的實體,既可以通過實體找到編號,也可以通過編號找到對應的實體。第二列為實體的名稱信息,第三列代表該實體的屬性信息,指明當前實體是引用實體還是實例實體。
知識推理可以從知識庫當中的關系數據推理得到新的關系,能夠豐富知識網絡。通過知識抽取環節得到的三元組信息并不能完整展示零部件、子裝配體以及總裝配體之間的關系。知識推理相關方法[7]如圖6 所示。

圖6 知識推理方法
從表3 中的實體屬性提取結果不難發現只有兩種關系不易于圖譜關系理解。因此需要進一步知識推理,依靠這兩種關系推理出包含hasPart 和被包含partOf 兩種關系。知識推理有基于邏輯的推理和基于圖的推理。基于邏輯的推理主要是根據人為規定的規則進行推理,適用于抽象概念。而基于圖的推理是使用神經網絡模型,將知識映射到向量空間,使用神經張量網絡模型進行關系推理[8]。常見的transE 模型,其核心理念是實體1 向量與關系1 向量相加得到實體2 向量,那么實體1 和實體2 之間存在關系1。也有采用圖的形式,如圖7 所示,尋找兩個實體間是否存在一條連通路徑,來推測兩者當中潛在的關系,例如(X,hasPart,Y),(Y,hasPart,Z),據此可以推理X 包含于Z[9]。

圖7 圖推理
本文采用基于圖的方式進行推理,在將上文提到的兩種三元組導入Neo4J 數據庫當中之后,采用深度優先探索策略,挖掘潛在關系,通過實例節點以及其周圍的關系1 號標簽和關系2 號標簽來推測實例節點周圍的引用節點之間的關系,最終推測出潛在的hasPart 和partOf 兩種包含與被包含關系,具體推理流程圖如圖8 裝配結構類節點關系推理所示,推理結果如圖9 所示。

圖8 裝配結構類節點關系推理
三元組是構建知識圖譜的核心,常見的知識圖譜如維基百科擁有上百億的三元組。本文采用Neo4J 圖數據庫存儲三元組數據,借用其專業平臺來構建機床裝配知識圖譜,三元組信息以csv 格式存儲,并存放于import 路徑,使用LOAD CSV 方式導入數據庫,使用Cyther 語言實現圖譜可視化。部分知識圖譜如圖10 所示。從圖10 中不難發現,圖譜通過單向邊展示了零件與裝配之間的關系,記錄尾座、主軸、相關墊圈與機床的關系,同時還記載著尾座子裝配體內部零件信息。

圖10 部分裝配圖譜展示圖
本文首先介紹了機床裝配信息的來源,比較了不同CAD 模型存儲格式,分析了選擇3DXML 作為半結構化裝配數據來源的原因,隨后使用SAX從裝配模型文件抽取實體以及裝配關系信息,通過基于圖的推理方式豐富知識網絡,推測出零件、子裝配體以及總裝配體之間的關系,最終采用Neo4J實現知識存儲,以及知識圖譜的可視化表達,完成數控機床裝配知識圖譜的構建。
機床當中的零部件信息以及部件之間的關系以圖譜的形式展示,能夠更為有效地獲悉零部件周圍相連的部件信息以及當前零件定位細節,又可以輔助工廠數控機床裝配,解決裝配數據分散、無規范以及裝配效率低下等機床現狀問題。