首頁 > AI資訊 > 行業(yè)動態(tài) > 高級API、異構(gòu)圖:谷歌發(fā)布TF-GNN,在TensorFlow創(chuàng)建圖神經(jīng)網(wǎng)絡(luò)

高級API、異構(gòu)圖:谷歌發(fā)布TF-GNN,在TensorFlow創(chuàng)建圖神經(jīng)網(wǎng)絡(luò)

新火種    2023-11-01

機器之心報道

編輯:陳萍

高效且友好的 TensorFlow GNN 庫。

今天,TensorFlow 官方博客發(fā)布了 TensorFlow Graph Neural Networks(TensorFlow GNN)庫 ,這個庫使得用戶在使用 TensorFlow 時能夠輕松處理圖結(jié)構(gòu)數(shù)據(jù)。

此前,TensorFlow GNN 的早期版本已經(jīng)在谷歌的各種應(yīng)用中使用,包括垃圾郵件和異常檢測、流量估計、YouTube 內(nèi)容標(biāo)記等。特別是,考慮到谷歌數(shù)據(jù)種類繁多,該庫在設(shè)計時就考慮到了異構(gòu)圖。

項目地址:https://github.com/tensorflow/gnn

為何使用 GNN?

無論是在現(xiàn)實世界中,還是在我們設(shè)計的系統(tǒng)中,圖無處不在。一組對象或是不同的人以及他們之間的聯(lián)系,通常可以用圖來描述。通常情況下,機器學(xué)習(xí)中的數(shù)據(jù)是結(jié)構(gòu)化或關(guān)系型的,因此也可以用圖來描述。雖然 GNN 的基礎(chǔ)研究已經(jīng)有幾十年的歷史,但近幾年才取得一些進展,包括在交通預(yù)測、假新聞檢測、疾病傳播建模、物理模擬,以及理解為什么分子會有氣味等。

圖可以為不同類型的數(shù)據(jù)進行關(guān)系建模,包括網(wǎng)頁(左)、社交關(guān)系(中)或分子(右)。

怎樣定義圖呢?簡單來講,圖表示一組實體(節(jié)點或頂點)之間的關(guān)系(邊)。我們可以描述每個節(jié)點、邊或整個圖,從而將信息存儲在圖的每一部分中。此外,我們可以賦予圖邊緣方向性來描述信息或信息流。

GNN 可以用來回答關(guān)于這些圖的多個特征問題。GNN 可用于節(jié)點級任務(wù),對圖的節(jié)點進行分類,并預(yù)測圖中的分區(qū)和相關(guān)性,類似于圖像分類或分割。最后,我們可以在邊緣級別使用 GNN 來發(fā)現(xiàn)實體之間的連接。

TensorFlow GNN

TF-GNN(TensorFlow GNN) 提供了在 TensorFlow 中實現(xiàn) GNN 模型的構(gòu)建塊。除了建模 API 之外,該庫還為處理圖數(shù)據(jù)提供了可用工具,包括基于張量的圖數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)處理 pipeline 和一些供用戶快速入門的示例模型。

TF-GNN 工作流程組件

TF-GNN 庫的初始版本包含許多實用程序和功能,供初學(xué)者和有經(jīng)驗的用戶使用,包括:

高級 keras 風(fēng)格的 API 用于創(chuàng)建 GNN 模型,可以很容易地與其他類型的模型組合。GNN 通常與排序、深度檢索結(jié)合使用或與其他類型的模型(圖像、文本等)混合使用;

定義良好的模式用來聲明圖拓撲結(jié)構(gòu),以及驗證工具。該模式描述了其訓(xùn)練數(shù)據(jù)的大小,并用于指導(dǎo)其他工具;

GraphTensor 復(fù)合張量類型,可以用來保存圖數(shù)據(jù),也可以進行批處理,并具有可用的圖操作例程;

GraphTensor 結(jié)構(gòu)操作庫:在節(jié)點和邊緣上進行各種有效的 broadcast 和 pooling 操作,以及提供相關(guān)操作的工具;標(biāo)準(zhǔn) baked 卷積庫,機器學(xué)習(xí)工程師、研究人員可以對其輕松擴展;高級 API 可以幫助工程師快速構(gòu)建 GNN 模型而不必擔(dān)心細節(jié);

模型可以從圖訓(xùn)練數(shù)據(jù)編碼,以及用于將此數(shù)據(jù)解析為數(shù)據(jù)結(jié)構(gòu)的庫中提取各種特征。

示例

下面示例使用 TF-GNN Keras API 構(gòu)建了一個模型,該模型可以根據(jù)觀看內(nèi)容和喜歡的類型向用戶推薦電影。

完成這項任務(wù)使用 ConvGNNBuilder 方法來指定邊的類型和節(jié)點配置,即對邊使用 WeightedSumConvolution(定義如下):

import tensorflow as tf

import tensorflow_gnn as tfgnn

# Model hyper-parameters:

h_dims = {'user': 256, 'movie': 64, 'genre': 128}

# Model builder initialization:

gnn = tfgnn.keras.ConvGNNBuilder(

lambda edge_set_name: WeightedSumConvolution(),

lambda node_set_name: tfgnn.keras.layers.NextStateFromConcat(

tf.keras.layers.Dense(h_dims[node_set_name]))

)

# Two rounds of message passing to target node sets:

model = tf.keras.models.Sequential([

gnn.Convolve({'genre'}), # sends messages from movie to genre

gnn.Convolve({'user'}), # sends messages from movie and genre to users

tfgnn.keras.layers.Readout(node_set_name="user"),

tf.keras.layers.Dense(1)

])

有時我們希望 GNN 性能更強大,例如,在上個示例中,我們可能希望模型在給出推薦電影時可以同時給出權(quán)重。下面代碼片段中定義了一個更高級的 GNN,它帶有自定義圖卷積,以及帶有權(quán)重邊。下面代碼定義了 WeightedSumConvolution 類可以將邊值池化為所有邊的權(quán)重總和:

class WeightedSumConvolution(tf.keras.layers.Layer):

"""Weighted sum of source nodes states."""

def call(self, graph: tfgnn.GraphTensor,

edge_set_name: tfgnn.EdgeSetName) -> tfgnn.Field:

messages = tfgnn.broadcast_node_to_edges(

graph,

edge_set_name,

tfgnn.SOURCE,

feature_name=tfgnn.DEFAULT_STATE_NAME)

weights = graph.edge_sets[edge_set_name]['weight']

weighted_messages = tf.expand_dims(weights, -1) * messages

pooled_messages = tfgnn.pool_edges_to_node(

graph,

edge_set_name,

tfgnn.TARGET,

reduce_type='sum',

feature_value=weighted_messages)

return pooled_messages

請注意,即使卷積是在只考慮源節(jié)點和目標(biāo)節(jié)點的情況下編寫的,TF-GNN 仍可確保它適用并可以無縫處理異構(gòu)圖(具有各種類型的節(jié)點和邊)。

安裝

這是目前安裝 tensorflow_gnn 的唯一方法。強烈建議使用虛擬環(huán)境。

Clone tensorflow_gnn:

$> git clone https://github.com/tensorflow/gnn.git tensorflow_gnn

安裝 TensorFlow:

$> pip install tensorflow

安裝 Bazel:Bazel 需要構(gòu)建包的源代碼。安裝步驟請參考:https://docs.bazel.build/versions/main/install.html

安裝 GraphViz:這個包使用 GraphViz 作為可視化工具,安裝因操作系統(tǒng)而異,例如 Ubuntu:

$> sudo apt-get install graphviz graphviz-dev

安裝 tensorflow_gnn:

$> cd tensorflow_gnn && python3 -m pip install .

參考鏈接:

https://blog.tensorflow.org/2021/11/introducing-tensorflow-gnn.html

相關(guān)推薦
免責(zé)聲明
本文所包含的觀點僅代表作者個人看法,不代表新火種的觀點。在新火種上獲取的所有信息均不應(yīng)被視為投資建議。新火種對本文可能提及或鏈接的任何項目不表示認可。 交易和投資涉及高風(fēng)險,讀者在采取與本文內(nèi)容相關(guān)的任何行動之前,請務(wù)必進行充分的盡職調(diào)查。最終的決策應(yīng)該基于您自己的獨立判斷。新火種不對因依賴本文觀點而產(chǎn)生的任何金錢損失負任何責(zé)任。

熱門文章