kegra:用Keras深度学习知识图
你好。?我在過去的文章中提到我正在為企業數據集進行認知計算。?就是這樣。
本文將需要深入學習的一些理解,但您應該能夠遵循對數據科學的最小理解。
我一直致力于在GPU上深入學習的圖形中檢測模式。?Thomas Kipf?編寫了一個用?Keras對圖形節點進行分類的好庫?。?本文基于他的作品“?圖形卷積網絡的半監督分類?”。?我們來看一下。
首先,圖表是什么?
那么,我關心我工作中的知識圖。?這些圖表代表像“白宮”和“唐納德特朗普”這樣的實體作為節點,像“作品”這樣的關系是邊緣。?我們如何構建這些圖表是另一回事。?在本文中,我正在研究交易數據以訓練分類器來識別欺詐交易。?如果你更喜歡頂點和圓弧而不是節點和邊緣,那么閱讀這篇文章?。
我在這個奇怪的圖表世界中感到賓至如歸。?我在圖表上的工作可以追溯到我的碩士論文。?在那項工作中,我有興趣在有向無環圖內找到共同元素(凸子圖)。?我正在確定基于它運行的軟件添加到處理器的定制指令。?我用整數線性規劃來解決這個問題。?在大圖上,求解器可能需要數小時甚至數天。
這一系列研究的鏈接:
- 嵌入式人工神經網絡硬件/軟件代號研究
- 可調指令集擴展標識
- 用于人工神經網絡的ASIP
- 用定制指令在FPGA上進行人工神經網絡加速
- 硬件約束下改進的ISE識別
- 并行指令集擴展標識
- 針對可配置多處理器的靜態任務調度
- 為多處理器片上系統硬件/軟件協同設計工具鏈設計和實現指令集擴展標識
- SING:多處理器系統芯片設計和系統生成工具
以下是OrientDB中知識圖本體的一個例子:
來源:?OrientDB演示頁面其次,我們可以發現什么樣的模式?
我們想要標記節點。?圖中的每個實體都有一些我們想要分類的特征,而我們只有一些節點的標簽。?我們可以預測出簡單的布爾標簽,比如“人物”或“不是人物”,還有更有趣的標簽,比如節點分類到幾個類別之一。?然后我們可以做更復雜的回歸,比如根據圖表中的實體數據預測實體所帶來的風險。?這包括節點到其他節點的連接。?讓我們堅持本文中的布爾節點標簽/分類問題,以保持簡單。?我們希望通過大約4,000個銀行帳戶標記594,643筆交易,要么是可疑的,要么是不可疑。?我們希望在不到一分鐘的時間內完成?。?不是幾小時或幾天。
第三,我們如何定義kegra理解的圖形?
我們需要指定兩個文件。?第一個節點具有節點描述,第二個節點說明節點如何連接。?在kegra提供的cora示例中,有2,708個節點的描述和標簽,其中有5,429個邊(節點對),用于定義節點彼此的連接。
以下是每個文件幾行的視圖:
節點之間的鏈接 每個節點ID后面跟著特征(大多數為0),最后還有一個節點標簽(例如Neural_Networks,Case_Based)。? 這些功能大多為0,并在上面的屏幕截圖中為許多行換行。? 每個特征表示在某個單詞的文檔(節點)中的使用。? 更多信息請點擊此處kegra自述文件?。讓我們試試看
首先,你需要Keras 2,所以這樣做:
點安裝keras - 升級假設你安裝了Keras和TensorFlow,keras-gcn依賴于gcn,所以讓我們克隆并逐個安裝它們。
#install gcn git clone https://github.com/tkipf/gcn.git cd gcn / python setup.py安裝 cd .. #install keras-gcn git clone https://github.com/tkipf/keras-gcn.git cd keras-gcn / python setup.py安裝首先,讓我們使用kegra稱為cora的現成示例運行代碼。?我們在輸出中看到cora從原始數據中檢測并打印了預期的節點數和邊數。
訓練運行在cora數據集上:36%的準確性和上升。 cora數據集的測試結果:77.6%的準確性。我們現在對kegra理解輸入文件的方式做一些小改動,只是為了讓這些名字更好。?在github的當前版本中,輸入文件是描述節點之間的弧的“* .cites”,描述節點的“* .content”。?相反,我改變了kegra以讀取“* .link”和“* .node”文件。?你的數據文件夾現在應該是這樣的:
?/ kegra / keras-gcn / kegra $ ls -l data / cora / 總計7720 -rwxrwxr-x 1 ubuntu ubuntu 69928 Dec 3 02:52 cora.link(was cora.cites) -rwxrwxr-x 1 ubuntu ubuntu 7823427 Dec 3 02:52 cora.node(was cora.content) -rwxrwxr-x 1 ubuntu ubuntu 1560 Dec 3 02:52自述文件 ?/ kegra / keras-gcn / kegra $ ls -l data / customerTx / 總計7720 -rwxrwxr-x 1 ubuntu ubuntu 7823427 Dec 3 05:20 customerTx.node -rwxrwxr-x 1 ubuntu ubuntu 1560 Dec 3 05:20自述文件 -rwxrwxr-x 1 ubuntu ubuntu 69928 Dec 3 05:20 customerTx.link現在讓我們用交易數據填寫customerTx.node和customerTx.link?。?第一個文件是銀行客戶及其功能的列表。?格式是:
快速查看一些交易記錄。? 在這種情況下,有貨幣的發送者和收款人,以及已發送金額的記錄(金額欄),以及由審閱交易的人類分析員(欺詐欄)應用的標簽。? 我們可以忽略前兩列(索引和步驟欄)。 邊緣文件(?customerTx.link?)記錄雙方在每次交易中的人員。 節點文件(?customerTx.node?)將圖表中每個節點上的信息記錄為每筆交易的資金發送者。? txCount列列出了離開節點的事務(邊)的數量。? amountMean列指定平均事務大小。? “?欺詐平均值”列是此數據涵蓋期間發件人帳戶上標記的交易的平均值。? 請注意,絕大多數交易都可以,而不是FRAUD,這是一種數據集失衡?。 圖中有4112個節點。? 分析師平均有2.3%被標記為問題。我們現在可以使用kegra來分析各種分析精度的圖表。
如果系統是由完美的分析師對數據進行培訓的,那么應該完全學會如何分析圖表。?但是,如果人類分析師在20%的時間內出錯,那么kegra模型的預測能力應該同樣被限制在80%。?為了試驗這個,我給圖形標簽添加了不同數量的隨機噪聲,看看kegra會如何做,因為訓練數據的質量越來越差。
以表格和圖表形式顯示的結果如下:
交易標簽實驗的原始結果,在知識圖上使用深度學習 這與上表中的數據相同,但更易于理解圖形這里有很多東西需要消化。?首先,我們看到,隨著數據(藍色)中的噪聲增加,早期停止(x軸上的標簽)會在訓練中更早和更早地進行踢球。?這告訴我們,特征數量太少(少數列)導致訓練數據過度擬合。?其次,我們看到測試精度通常低于訓練精度。?這是預期的,因為訓練數據對于分類器而言是熟悉的,而測試數據則不是。?第三,測試精度不為零。?好!?這意味著分類器可以僅使用圖形和每個節點的特征(txCount,amountMean和fraudMean)重新生成OK / FRAUD標簽。?第四,隨著注入的噪聲(藍色)上升,分類器(橙色)的準確度下降。?這意味著結果不是隨機的。?第五,我們看到,訓練準確度(紅色)加上附加噪聲(藍色)增加了大約100%,這意味著分類器與標注數據集的分析師一樣好/壞,但不會更糟。
總之,kegra在知識圖譜分類上表現得非常好。?與他們的論文中的結果相比,這些結果可能太好了。?我將檢查交易文件中的欺詐標簽列是否太具有說明性,并將其替換為難以用來從諸如原籍國,城市,郵政編碼等更廣泛的數據集中預測的功能。
我的下一個動作是從源文件中重新生成具有更多列的交易數據集,并查看kegra是否仍然表現如此出色。?在cora數據集上沒有提前停止,所以我懷疑交易數據對kegra來說并不具有挑戰性,這是我之前提到的原因之一。?也許如果我將更多語義特征嵌入到生成的圖中......我可以做很多有趣的事情作為下一步。
特別感謝Thomas Kipf在出版前觀察這篇文章。?與我平常的高級文章相比,這是一篇非常復雜的文章,可以準備(和閱讀)。?如果你喜歡這篇關于圖表的深度學習文章,那么請讓我知道寫出更多這樣的研究內容。?我也很高興在評論中聽到您的意見。?你怎么看?
https://towardsdatascience.com/kegra-deep-learning-on-knowledge-graphs-with-keras-98e340488b93
總結
以上是生活随笔為你收集整理的kegra:用Keras深度学习知识图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 揭开知识库问答KB-QA的面纱1·简介篇
- 下一篇: 请问知识图谱有哪些研究点是可以进行深入研