kegra:用Keras深度學習知識圖
你好。 我在過去的文章中提到我正在為企業資料集進行認知計算。 就是這樣。
本文將需要深入學習的一些理解,但您應該能夠遵循對資料科學的最小理解。
我一直致力於在GPU上深入學習的圖形中檢測模式。 Thomas Kipf 編寫了一個用 Keras對圖形節點進行分類的好庫 。 我們來看一下。
首先,圖表是什麼?
那麼,我關心我工作中的知識圖。 這些圖表代表像“白宮”和“唐納德特朗普”這樣的實體作為節點,像“作品”這樣的關係是邊緣。 我們如何構建這些圖表是另一回事。 在本文中,我正在研究交易資料以訓練分類器來識別欺詐交易。 如果你更喜歡頂點和圓弧而不是節點和邊緣,那麼閱讀這篇文章 。
我在這個奇怪的圖表世界中感到賓至如歸。
這一系列研究的連結:
以下是OrientDB中知識圖本體的一個例子:
其次,我們可以發現什麼樣的模式?
我們想要標記節點。 圖中的每個實體都有一些我們想要分類的特徵,而我們只有一些節點的標籤。 我們可以預測出簡單的布林標籤,比如“人物”或“不是人物”,還有更有趣的標籤,比如節點分類到幾個類別之一。 然後我們可以做更復雜的迴歸,比如根據圖表中的實體資料預測實體所帶來的風險。
第三,我們如何定義kegra理解的圖形?
我們需要指定兩個檔案。 第一個節點具有節點描述,第二個節點說明節點如何連線。 在kegra提供的cora示例中,有2,708個節點的描述和標籤,其中有5,429個邊(節點對),用於定義節點彼此的連線。
以下是每個檔案幾行的檢視:
節點之間的連結每個節點ID後面跟著特徵(大多數為0),最後還有一個節點標籤(例如Neural_Networks,Case_Based)。讓我們試試看
首先,你需要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.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