1. 程式人生 > >kegra:用Keras深度學習知識圖

kegra:用Keras深度學習知識圖

你好。 我在過去的文章中提到我正在為企業資料集進行認知計算。 就是這樣。

本文將需要深入學習的一些理解,但您應該能夠遵循對資料科學的最小理解。

我一直致力於在GPU上深入學習的圖形中檢測模式。 Thomas Kipf 編寫了一個用 Keras對圖形節點進行分類的好庫 。  我們來看一下。

首先,圖表是什麼?

那麼,我關心我工作中的知識圖。 這些圖表代表像“白宮”和“唐納德特朗普”這樣的實體作為節點,像“作品”這樣的關係是邊緣。 我們如何構建這些圖表是另一回事。 在本文中,我正在研究交易資料以訓練分類器來識別欺詐交易。 如果你更喜歡頂點和圓弧而不是節點和邊緣,那麼閱讀這篇文章 。

我在這個奇怪的圖表世界中感到賓至如歸。

 我在圖表上的工作可以追溯到我的碩士論文。 在那項工作中,我有興趣在有向無環圖內找到共同元素(凸子圖)。 我正在確定基於它執行的軟體新增到處理器的定製指令。 我用整數線性規劃來解決這個問題。 在大圖上,求解器可能需要數小時甚至數天。

這一系列研究的連結:

以下是OrientDB中知識圖本體的一個例子:

其次,我們可以發現什麼樣的模式?

我們想要標記節點。 圖中的每個實體都有一些我們想要分類的特徵,而我們只有一些節點的標籤。 我們可以預測出簡單的布林標籤,比如“人物”或“不是人物”,還有更有趣的標籤,比如節點分類到幾個類別之一。 然後我們可以做更復雜的迴歸,比如根據圖表中的實體資料預測實體所帶來的風險。

 這包括節點到其他節點的連線。 讓我們堅持本文中的布林節點標籤/分類問題,以保持簡單。 我們希望通過大約4,000個銀行帳戶標記594,643筆交易,要麼是可疑的,要麼是不可疑。 我們希望在不到一分鐘的時間內完成 。 不是幾小時或幾天。

第三,我們如何定義kegra理解的圖形?

我們需要指定兩個檔案。 第一個節點具有節點描述,第二個節點說明節點如何連線。 在kegra提供的cora示例中,有2,708個節點的描述和標籤,其中有5,429個邊(節點對),用於定義節點彼此的連線。

以下是每個檔案幾行的檢視:

節點之間的連結每個節點ID後面跟著特徵(大多數為0),最後還有一個節點標籤(例如Neural_Networks,Case_Based)。
 這些功能大多為0,並在上面的螢幕截圖中為許多行換行。 每個特徵表示在某個單詞的文件(節點)中的使用。 

讓我們試試看

首先,你需要Keras 2,所以這樣做:

 點安裝keras  - 升級 

假設你安裝了Keras和TensorFlow,keras-gcn依賴於gcn,所以讓我們克隆並逐個安裝它們。

 我們在輸出中看到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.nodecustomerTx.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