五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

圖神經(jīng)網(wǎng)絡(luò)ERNIESage、UniMP模型,如何進一步推進圖學(xué)習(xí)的研究

2022-12-01 11:40 作者:汀丶人工智能  | 我要投稿

原項目鏈接:fork一下即可:https://aistudio.baidu.com/aistudio/projectdetail/5096910?contributionType=1

1.1 OGB概述

如何進一步推進圖學(xué)習(xí)的研究呢?從歷史上看,高質(zhì)量和大規(guī)模的數(shù)據(jù)集在推進研究中發(fā)揮了重要的作用,例如計算機視覺領(lǐng)域的IMAGENET、MS COCO,自然語言處理領(lǐng)域的GLUE BENCHMARK、SQUAD,語言處理領(lǐng)域的LIBRISPEECH、CHIME等。但是,當前在圖學(xué)習(xí)研究中常用的數(shù)據(jù)集和評估程序可能會對未來的發(fā)展產(chǎn)生負面影響。

當前基準數(shù)據(jù)集存在的問題:

與實際應(yīng)用中的圖像相比,大多數(shù)常用數(shù)據(jù)集都非常小。例如廣泛使用的Cora、Citeseer、Pubmed數(shù)據(jù)集,在節(jié)點分類任務(wù)中只用2700至20000個節(jié)點。由于在這些小型數(shù)據(jù)集上廣泛開發(fā)了模型,因此大多數(shù)模型都無法擴展到較大的范圍;其次,較小的數(shù)據(jù)集很難去嚴格地評估需要大量數(shù)據(jù)的模型,例如圖神經(jīng)網(wǎng)絡(luò)(GNNs)。 沒有統(tǒng)一且通常遵循的實驗協(xié)議。不同的研究采用自己的數(shù)據(jù)集劃分、評估指標和交叉驗證協(xié)議,因此比較各種研究報告的成績具有挑戰(zhàn)性。

另外,許多研究使用隨機分割來生成train /test sets,這對于真實世界的應(yīng)用是不現(xiàn)實的或無用的,并且通常導(dǎo)致過于樂觀的性能結(jié)果。 因此,迫切需要一套完整的現(xiàn)實世界基準測試套件,該套件將來自不同領(lǐng)域的各種大小的數(shù)據(jù)集組合在一起。數(shù)據(jù)拆分以及評估指標很重要,因此可以以一致且可重復(fù)的方式衡量進度。最后,基準測試還需要提供不同類型的任務(wù),例如節(jié)點分類,鏈接預(yù)測和圖分類。OGB就這樣應(yīng)運而生。

開放圖譜基準 (OGB) 是圖機器學(xué)習(xí)的基準數(shù)據(jù)集、數(shù)據(jù)加載器和評估器的集合。數(shù)據(jù)集涵蓋各種圖形機器學(xué)習(xí)任務(wù)和實際應(yīng)用。OGB旨在提供涵蓋重要圖機器學(xué)習(xí)任務(wù)、多樣化數(shù)據(jù)集規(guī)模和豐富領(lǐng)域的圖數(shù)據(jù)集。

論文鏈接:https://arxiv.org/abs/2005.00687 OGB官網(wǎng):https://ogb.stanford.edu/ GitHub地址:https://github.com/snap-stanford/ogb

  • Graph ML Tasks: 涵蓋了三個基本的圖機器學(xué)習(xí)任務(wù):節(jié)點屬性預(yù)測,鏈接屬性預(yù)測,圖屬性預(yù)測。

  • Diverse scale: 小型圖形數(shù)據(jù)集可以在單個 GPU 中處理,而中型和大型圖形可能需要多個 GPU 或巧妙地采樣/分區(qū)技術(shù)。分為small、medium、large三個規(guī)模,具體為small:超過10萬個節(jié)點和超過100萬條邊;medium:超過100萬個節(jié)點或超過1000萬條邊;large:大約1億個節(jié)點或10億條邊。

  • Rich domains: 圖數(shù)據(jù)集來自從科學(xué)領(lǐng)域到社會/信息網(wǎng)絡(luò)的不同領(lǐng)域,還包括異構(gòu)知識圖譜。nature:包含生物網(wǎng)絡(luò)和分子圖;society:包含學(xué)術(shù)圖和電子商務(wù)網(wǎng)絡(luò);information:包含知識圖譜等。

看一下 OGB 現(xiàn)在包含的數(shù)據(jù)集和數(shù)據(jù)集的統(tǒng)計明細:

1.2 OGB數(shù)據(jù)集簡介

1.2.1 OGB節(jié)點屬性預(yù)測

ogbn-products:亞馬遜產(chǎn)品共同購買網(wǎng)絡(luò)。

  • 節(jié)點代表在Amazon銷售的產(chǎn)品,兩個產(chǎn)品之間的邊表示產(chǎn)品是一起購買的。節(jié)點特征是通過從產(chǎn)品描述中提取詞袋特征來生成的,然后進行主成分分析將維度減小到100。

  • 預(yù)測任務(wù):在多類別分類設(shè)置中預(yù)測產(chǎn)品的類別,其中有47個頂級類別用于目標標簽。

  • 數(shù)據(jù)集劃分:使用銷售排名(受歡迎程度)將節(jié)點劃分為訓(xùn)練/驗證/測試集,根據(jù)產(chǎn)品的銷售排名對產(chǎn)品進行排序,并使用前10%作為訓(xùn)練集,然后使用前2%作為驗證集,其余用于測試集。

ogbn-proteins:蛋白質(zhì)關(guān)聯(lián)網(wǎng)絡(luò)

  • 節(jié)點代表蛋白質(zhì),邊表示蛋白質(zhì)之間不同類型的有生物學(xué)意義的聯(lián)系。所有的邊都具有8維特征,其中每個維度表示單個關(guān)聯(lián)類型的強度,值在0到1之間。這些蛋白質(zhì)來自8個物種。

  • 預(yù)測任務(wù):在一個多標簽二元分類系統(tǒng)中預(yù)測蛋白質(zhì)功能的存在,該系統(tǒng)中總共有112種標簽需要預(yù)測。通過112個任務(wù)的ROC-AUC分數(shù)的平均值來衡量性能。

  • 數(shù)據(jù)集分割:根據(jù)蛋白質(zhì)來源的物種,將蛋白質(zhì)節(jié)點分成訓(xùn)練/驗證/測試集。

實驗中為了簡單起見,使用傳入邊的平均邊緣特征作為節(jié)點特征。

ogbn-arxiv:論文引用網(wǎng)絡(luò)

  • 每個節(jié)點都是一篇Arxiv論文,每條有向邊表示一篇論文引用了另一篇論文。每篇論文都有一個128維的特征向量,它是通過對標題和摘要中單詞的嵌入進行平均得到的。

  • 預(yù)測任務(wù):預(yù)測Arxiv論文的主要類別,這是一個40類的分類問題。

  • 數(shù)據(jù)集分割:考慮一個基于論文發(fā)表日期的現(xiàn)實數(shù)據(jù)分割。建議將2017年及以前發(fā)表的論文作為訓(xùn)練集,將2018年發(fā)表的論文作為驗證集,將2019年以后發(fā)表的論文作為測試集。

實驗中為了簡單起見,將有向圖轉(zhuǎn)換為無向圖。從下面的結(jié)果可以看出,探索如何考慮邊緣方向信息以及節(jié)點時間信息(例如論文發(fā)表的年份)以提高預(yù)測性能將是富有成效的。

ogbn-papers100M:論文引用網(wǎng)絡(luò)

  • MAG(Microsoft Academic Graph)索引的1.11億篇論文的有向引文圖。此數(shù)據(jù)集的數(shù)量級比任何現(xiàn)有的節(jié)點分類數(shù)據(jù)集大。

  • 預(yù)測任務(wù):預(yù)測在Arxiv中發(fā)表的論文的子集的主題領(lǐng)域。有172個Arxiv主題領(lǐng)域,這使預(yù)測任務(wù)成為172類分類問題。

  • 數(shù)據(jù)集分割:考慮一個基于論文發(fā)表日期的現(xiàn)實數(shù)據(jù)分割。建議將2017年及以前發(fā)表的論文作為訓(xùn)練集,將2018年發(fā)表的論文作為驗證集,將2019年以后發(fā)表的論文作為測試集。

實驗中為了簡單起見,將有向圖轉(zhuǎn)換為無向圖。從下面的結(jié)果可以看出,SGC嚴重擬合不足,表明使用更具表現(xiàn)力的GNNs可能會同時改善訓(xùn)練和測試準確性。

ogbn-mag:異構(gòu)微軟學(xué)術(shù)圖(MAG)

  • 由Microsoft Academic Graph (MAG)的一個子集組成的異構(gòu)網(wǎng)絡(luò)。它包含四種類型的實體(論文、作者、機構(gòu)和研究領(lǐng)域),以及連接兩種類型實體的四種有向關(guān)系。每一篇論文具有128維的特征。

  • 預(yù)測任務(wù):根據(jù)給定的內(nèi)容、參考文獻、作者和作者的隸屬關(guān)系來預(yù)測每篇論文的會議地點。ogbn-mag中共有349個不同的會議地點,這使得該任務(wù)成為349類分類問題。

  • 數(shù)據(jù)集分割:遵循相同的基于時間的策略。用2018年之前發(fā)表的所有論文的訓(xùn)練模型,并用2018年和2019年以后發(fā)表的論文分別驗證和測試模型。

對于GCN和GRAPHSAGE,實驗中在同構(gòu)子圖上應(yīng)用模型。從下面的結(jié)果可以看出嗎,利用圖的異構(gòu)性質(zhì)對于在這個數(shù)據(jù)集上取得良好的性能是至關(guān)重要的。

1.2.2 OGB鏈接屬性預(yù)測

ogbl-ppa:蛋白質(zhì)關(guān)聯(lián)網(wǎng)絡(luò)

  • 節(jié)點表示來自58個不同物種的蛋白質(zhì),邊表示蛋白質(zhì)之間的生物學(xué)上有意義的關(guān)聯(lián)。每個節(jié)點都包含一個58維的one-hot特征向量,該向量指示相應(yīng)蛋白質(zhì)所來自的物種。

  • 預(yù)測任務(wù):在給定訓(xùn)練邊的情況下預(yù)測新的關(guān)聯(lián)邊。評估基于模型對positive測試邊勝過negative測試邊的等級。具體來說,針對3,000,000個隨機采樣的negative邊對驗證/測試集中的每個positive邊進行排名,并計算排名在第K位或更高(Hits@K)的positive邊的比率。發(fā)現(xiàn)K=100是評估模型性能的一個很好的閾值。

  • 數(shù)據(jù)集分割:根據(jù)邊的生物學(xué)吞吐量分為訓(xùn)練/驗證/測試邊。

實驗結(jié)果如下所示,GNN訓(xùn)練效果不佳表明,僅靠GNN無法捕獲的位置信息對于適應(yīng)訓(xùn)練邊并獲得有意義的節(jié)點嵌入可能至關(guān)重要。

ogbl-collab:作者合作網(wǎng)絡(luò)

  • 每個節(jié)點代表一個作者,邊表示作者之間的合作。 所有節(jié)點都具有128維特征,這些特征是通過平均作者發(fā)表的論文的詞嵌入獲得的。所有邊都與兩種類型的元信息相關(guān)聯(lián):年份和邊緣權(quán)重,代表當年發(fā)表的合作論文的數(shù)量。

  • 預(yù)測任務(wù):根據(jù)給定的過去合作來預(yù)測未來的作者合作關(guān)系。評估指標類似于ogbl-ppa,希望該模型將真實協(xié)作的等級高于虛假協(xié)作。 具體來說,在100,000個隨機采樣的negative協(xié)作中對每個真實協(xié)作進行排名,并計算排名在K位或更高(Hits@K)的positive邊的比率。在初步實驗中,發(fā)現(xiàn)K=50是一個很好的閾值。

  • 數(shù)據(jù)集分割:根據(jù)時間拆分數(shù)據(jù),以便在協(xié)作推薦中模擬實際應(yīng)用。具體來說,將直到2017年的合作作為訓(xùn)練邊,將2018年的合作作為驗證邊,并將2019年的合作作為測試邊。

實驗結(jié)果如下圖,值得注意的是,MATRIXFACTORIZATION可以達到近乎完美的訓(xùn)練結(jié)果,但是即使應(yīng)用大量的正則化處理,也無法將良好的結(jié)果轉(zhuǎn)移到驗證和測試拆分中??傮w而言,探索將位置信息注入GNN并開發(fā)更好的正則化方法是富有成果的。

ogbl-ddi:藥品交互網(wǎng)絡(luò)

  • 節(jié)點代表FDA批準的或?qū)嶒炈幬?,邊代表藥物之間的相互作用,并且可以解釋為一種現(xiàn)象,其中將兩種藥物合用的聯(lián)合效果與預(yù)期的藥物彼此獨立起作用的效果有很大不同。

  • 預(yù)測任務(wù):在已知藥物相互作用的基礎(chǔ)上預(yù)測藥物相互作用。評估指標與ogbl-collab相似,希望該模型將真實藥物相互作用的排名高于非相互作用藥物對。具體來說,在大約100,000個隨機采樣的negative藥物相互作用中對每個真實藥物相互作用進行排名,并計算在K位或更高(Hits@K)處排名的positive邊緣的比率。在初步實驗中,發(fā)現(xiàn)K = 20是一個很好的閾值。

  • 數(shù)據(jù)集分割:開發(fā)了一種蛋白質(zhì)-靶標拆分,這意味著根據(jù)那些藥物在體內(nèi)靶向的蛋白質(zhì)來拆分藥物邊緣。

實驗結(jié)果如下所示,有趣的是,GNN模型和MATRIXFACTORIZATION方法都比NODE2 VEC獲得了明顯更高的訓(xùn)練結(jié)果。但是,只有GNN模型才能在某種程度上將這種性能傳遞給測試集,這表明關(guān)系信息對于使模型推廣到看不見的交互作用至關(guān)重要。

ogbl-citation:論文引用網(wǎng)絡(luò)

  • 從MAG提取的論文子集之間的引文網(wǎng)絡(luò),與ogbn-arxiv相似,每個節(jié)點都是具有128維WORD2VEC特征的論文,該論文總結(jié)了其標題和摘要,并且每個有向邊都表示一篇論文引用了另一篇論文。所有節(jié)點還帶有表示相應(yīng)論文發(fā)表年份的元信息。

  • 預(yù)測任務(wù):根據(jù)給定的現(xiàn)有引用來預(yù)測缺少的引用。具體來說,對于每篇原始論文,將隨機刪除其兩個參考文獻,并且希望模型將缺失的兩個參考文獻的排名高于1,000個negative參考候選集。negetive引用是從源論文未引用的所有先前論文中隨機抽取的。評估指標是Mean Reciprocal Rank(MRR),其中針對每份原始論文計算真實參考文獻在negative候選者中的互惠等級,然后取所有原始論文的平均值。

  • 數(shù)據(jù)集分割:為了模擬引文推薦中的實際應(yīng)用,會根據(jù)時間劃分邊緣(例如,用戶正在撰寫一篇新論文,并且已經(jīng)引用了幾篇現(xiàn)有論文,但希望被推薦為其他參考)。為此,使用最新論文(2019年發(fā)表)作為要推薦參考文獻的原始論文。對于每篇原始論文,從參考文獻中刪除兩篇——所得到的兩個下降邊(從原始論文指向刪除的論文)指向分別用于驗證和測試。 其余所有邊緣均用于訓(xùn)練。

從下面的實驗結(jié)果可以看出,mini-batch技術(shù)的性能要比full-batch差,這與節(jié)點分類數(shù)據(jù)集(例如ogbn-products和ogbn-mag)相反,基于小批量的模型有更強的泛化性能。與用于節(jié)點預(yù)測的技術(shù)不同,這種限制為將小批處理技術(shù)應(yīng)用于鏈接預(yù)測提出了一個獨特的挑戰(zhàn)。

ogbl-wikikg:Wikidata知識圖

  • 從Wikidata知識庫中提取的知識圖(KG)。它包含一組三元組邊緣(頭部、關(guān)系、尾部)其捕獲了世界各實體之間的不同類型的關(guān)系。檢索了Wikidata中的所有關(guān)系語句,并過濾掉稀有實體。該KG中包含了2,500,604個實體和535個關(guān)系類型。

  • 預(yù)測任務(wù):在給定訓(xùn)練邊緣的情況下預(yù)測新的三元組邊緣。評估指標遵循KG中廣泛使用的標準過濾指標。具體來說,通過用隨機采樣的1,000個negative實體(頭部為500個,尾部為500個)替換其頭部或尾部來破壞每個測試三元組邊緣,同時確保生成的三元組不會出現(xiàn)在KG中。目標是將真實的頭部(或尾部)實體排名高于negative實體,該排名由平均互惠排名(MRR)衡量。

  • 數(shù)據(jù)集分割:根據(jù)時間劃分三元組,模擬一個現(xiàn)實的KG完成方案,該方案旨在填充在某個時間戳上不存在的缺失三元組。具體來說,在三個不同的時間戳17(2015年5月,8月和11月)下載了Wikidata,并構(gòu)建了三個KG,其中僅保留最早出現(xiàn)在5月KG中的實體和關(guān)系類型。使用五月 KG中的三元組進行訓(xùn)練,并使用八月和11月KG中的三元組分別進行驗證和測試。

實驗結(jié)果如下表所示,從表的上半部分可以看到,當使用有限的嵌入維數(shù)時,COMPLEX在四個基線中表現(xiàn)最佳。從表的下半部分可以看出,隨著維數(shù)的增加,所有四個模型都能夠在訓(xùn)練、驗證和測試集上實現(xiàn)更高的MRR。這表明使用足夠大的嵌入維數(shù)在此數(shù)據(jù)集中實現(xiàn)良好性能的重要性。

ogbl-biokg:生物醫(yī)學(xué)知識圖

  • 是一個知識圖(KG),使用了大量生物醫(yī)學(xué)數(shù)據(jù)庫中的數(shù)據(jù)創(chuàng)建了該圖。它包含5種類型的實體:疾病(10,687個節(jié)點)、蛋白質(zhì)(17,499個節(jié)點)、藥物(10,533個節(jié)點)、副作用(9,969個節(jié)點)和蛋白質(zhì)功能(45,085個節(jié)點)。有51種類型的有向關(guān)系將兩種類型的實體聯(lián)系起來,包括39種藥物相互作用,8種蛋白質(zhì)相互作用等 。所有關(guān)系都被建模為有向邊,其中連接相同實體類型(例如蛋白質(zhì)-蛋白質(zhì),藥物-藥物,功能-功能)的關(guān)系始終是對稱的,即邊是雙向的。KG中的三元組來自具有各種置信度級別的來源,包括實驗讀數(shù),人工策劃的注釋以及自動提取的元數(shù)據(jù)。

  • 預(yù)測任務(wù):在給定訓(xùn)練三元組的情況下預(yù)測新的三元組。評估協(xié)議ogbl-wikikg完全相同,這里只考慮針對相同類型的實體進行排名。例如,當破壞蛋白質(zhì)類型的頭部實體時,僅考慮negative蛋白質(zhì)實體。

  • 數(shù)據(jù)集分割:對于此數(shù)據(jù)集,采用隨機分割。雖然根據(jù)時間劃分三元組是一種有吸引力的選擇,但注意到,要獲得有關(guān)何時進行三元組的個別實驗和觀察的準確信息非常困難。努力在OGB的未來版本中提供其他數(shù)據(jù)集拆分。

實驗結(jié)果如下圖所示,在這四個模型中,COMPLEX達到了最佳的測試MRR,而TRANSE與其他模型相比,性能明顯差。TRANSE的較差性能可以通過以下事實來解釋:TRANSE無法為該數(shù)據(jù)集中普遍存在的對稱關(guān)系建模,例如,蛋白質(zhì)-蛋白質(zhì)和藥物-藥物關(guān)系都是對稱的??傮w而言,進一步提高模型性能具有重大的實踐意義。 一個有前途的方向是為異構(gòu)知識圖開發(fā)一種更專門的方法,該方法中存在多個節(jié)點類型,并且整個圖遵循預(yù)定義的架構(gòu)。

1.2.3OGB圖屬性預(yù)測

ogbg-mol*:分子圖

  • ogbg-molhiv和ogbg-molpcba是兩個大小不同的分子屬性預(yù)測數(shù)據(jù)集:ogbg-molhiv (small)和ogbg-molpcba(medium)。所有分子均使用RDKIT進行預(yù)處理。每個圖表示一個分子,其中節(jié)點表示原子,而邊表示化學(xué)鍵。輸入節(jié)點特征為9維,包含原子序數(shù)和手性,以及其他附加原子特征,例如形式電荷和原子是否在環(huán)中。輸入邊特征是3維的,包含鍵類型,鍵立體化學(xué)以及指示鍵是否共軛的附加鍵特征。

  • 預(yù)測任務(wù):盡可能準確地預(yù)測目標分子特性,其中分子特性被標記為二元標記,例如分子是否抑制HIV病毒復(fù)制。對于ogbg-molhiv,使用ROC-AUC進行評估。 對于ogbg-molpcba,由于類平衡嚴重偏斜(僅1.4%的數(shù)據(jù)為positive),并且數(shù)據(jù)集包含多個分類任務(wù),因此將任務(wù)平均后的精確召回曲線(PRC)-AUC作為評估指標。

  • 數(shù)據(jù)集分割:采用支架分割程序,該程序根據(jù)分子的二維結(jié)構(gòu)框架風(fēng)格分子。支架分割試圖將結(jié)構(gòu)上不同的分子分為不同的子集,這在預(yù)期的實驗環(huán)境中提供了對模型性能的更現(xiàn)實的估計。總體而言,OGB與它們的數(shù)據(jù)加載器一起提供了有意義的數(shù)據(jù)拆分和改進的分子功能,從而使對MOLECULENET數(shù)據(jù)集的評估和比較更加容易和標準化。

實驗結(jié)果如下圖所示,可以看到具有附加功能的GIN和虛擬節(jié)點在兩個數(shù)據(jù)集中提供了最佳性能。

ogbg-ppa:蛋白質(zhì)關(guān)聯(lián)網(wǎng)絡(luò)

  • 從1,581個不同物種的蛋白質(zhì)關(guān)聯(lián)網(wǎng)絡(luò)中提取的一組無向蛋白質(zhì)關(guān)聯(lián)鄰域,涵蓋了37個廣泛的生物分類群。從每種物種中隨機選擇了100種蛋白質(zhì),并以每個選定的蛋白質(zhì)為中心構(gòu)建了2-hop蛋白質(zhì)關(guān)聯(lián)鄰域。然后,從每個鄰域中刪除中心節(jié)點,并對鄰域進行二次采樣,以確保最終的蛋白質(zhì)關(guān)聯(lián)圖足夠?。ㄉ儆?00個節(jié)點)。每個蛋白質(zhì)關(guān)聯(lián)圖中的節(jié)點表示蛋白質(zhì),邊表示蛋白質(zhì)之間的生物學(xué)上有意義的關(guān)聯(lián)。邊與7維特征相關(guān),其中每個元素取0到1之間的值,并代表特定類型的蛋白質(zhì)關(guān)聯(lián)的強度。

  • 預(yù)測任務(wù):給定一個蛋白質(zhì)關(guān)聯(lián)鄰域圖,該任務(wù)是一個37-way多分類,以預(yù)測該圖源自哪個分類組。

  • 數(shù)據(jù)集分割:與ogbn-proteins類似,采用物種分割方法,其中驗證和測試集中的鄰域圖是從在訓(xùn)練過程中未發(fā)現(xiàn)但屬于37個分類組之一的物種蛋白質(zhì)關(guān)聯(lián)網(wǎng)絡(luò)中提取的。

實驗結(jié)果如下表,類似于ogbg-mol *數(shù)據(jù)集,帶有VIRTUAL NODE的GIN提供了最佳性能。盡管如此,泛化差距仍然很大(將近30個百分點)。

ogbg-code:源代碼的抽象語法樹

  • 從大約45萬個Python方法定義中獲得的抽象語法樹(AST)的集合。方法是從GITHUB上最受歡迎的項目的總共13,587個不同的存儲庫中提取的。Python方法集合來自GITHUB Code Search-Net,它是用于基于機器學(xué)習(xí)的代碼檢索的數(shù)據(jù)集和基準的集合。

  • 預(yù)測任務(wù):給定AST表示的Python方法主體及其節(jié)點特征,任務(wù)是預(yù)測組成方法名稱的子標記——節(jié)點類型(來自97種類型的池)、節(jié)點屬性(例如變量名,詞匯量為10002),AST中的深度、預(yù)遍歷索引

  • 數(shù)據(jù)集分割:采用項目分割,其中訓(xùn)練集的AST是從GITHUB項目中獲得的,這些項目未出現(xiàn)在驗證和測試集中。這種劃分尊重實際情況,即在大量源代碼上訓(xùn)練模型,然后將其用于在單獨的代碼庫上預(yù)測方法名稱。

1.3 OGB Package

OGB Package包旨在通過自動化數(shù)據(jù)加載和評估部分,使研究人員易于訪問OGB管道。OGB與Pytorch及其關(guān)聯(lián)的圖形庫完全兼容:PyG和DGL。OGB還提供了與庫無關(guān)的數(shù)據(jù)集對象,可用于任何其他Python深度學(xué)習(xí)框架(如Tensorflow和Mxnet)。下面,將解釋數(shù)據(jù)加載和評估。為簡單起見,專注于使用PyG進行圖屬性預(yù)測的任務(wù)。有關(guān)其他任務(wù)詳見官網(wǎng)。

OGB數(shù)據(jù)加載器:OGB Package使獲取與PyG完全兼容的數(shù)據(jù)集對象變得容易僅用一行代碼即可完成操作,最終用戶只需指定數(shù)據(jù)集的名稱即可。然后,OGB Package將下載、處理、存儲并返回所請求的數(shù)據(jù)集對象。此外,可以從數(shù)據(jù)集對象中輕松獲得標準化的數(shù)據(jù)集分割。

OGB評估器:OGB還可以通過ogb.*.Evaluator類實現(xiàn)標準化和可靠的評估。如下面的代買所示,最終用戶首先指定他們要評估其模型的數(shù)據(jù)集,然后用戶可以了解需要傳遞給Evaluator對象的輸入格式。輸入格式取決于數(shù)據(jù)集,例如,對于ogbg-molpcba數(shù)據(jù)集,Evaluator對象需要輸入一個字典,其中包含ytrue(存儲真實二進制標簽的矩陣)和ypred(存儲模型輸出的分數(shù)的矩陣)。最終用戶通過指定的詞典作為輸入后,評估程序?qū)ο髮⒎祷剡m合手頭數(shù)據(jù)集的模型性能,例如ogbg-molpcba的PRC-AUC。

2.ERNIESage (鄰居聚合)

2.1模型概述

ERNIE-Sage 是 ERNIE SAmple aggreGatE 的簡稱,該模型可以同時建模文本語義與圖結(jié)構(gòu)信息,有效提升 Text Graph 的應(yīng)用效果。

論文鏈接:https://aclanthology.org/2020.textgraphs-1.11/ 論文介紹了百度 PGL 團隊設(shè)計的系統(tǒng),該系統(tǒng)在 TextGraphs 2020 共享任務(wù)中獲得第一名。 該任務(wù)的重點是為基礎(chǔ)科學(xué)問題提供解釋。 給定一個問題及其相應(yīng)的正確答案,被要求從大型知識庫中選擇可以解釋為什么該問題和回答 (QA) 的答案是正確的事實。 為了解決這個問題,PGL團隊使用預(yù)訓(xùn)練的語言模型來回憶每個問題的前 K 個相關(guān)解釋。 然后,他們采用基于預(yù)訓(xùn)練語言模型的重新排序方法對候選解釋進行排序。 為了進一步提高排名,還開發(fā)了一種由強大的預(yù)訓(xùn)練變壓器和 GNN 組成的架構(gòu),以解決多跳推理問題。

2.2 原理介紹

在很多工業(yè)應(yīng)用中,往往出現(xiàn)如下圖所示的一種特殊的圖:Text Graph。顧名思義,圖的節(jié)點屬性由文本構(gòu)成,而邊的構(gòu)建提供了結(jié)構(gòu)信息。如搜索場景下的Text Graph,節(jié)點可由搜索詞、網(wǎng)頁標題、網(wǎng)頁正文來表達,用戶反饋和超鏈信息則可構(gòu)成邊關(guān)系。

ERNIE-Sage 是 ERNIE 與 GraphSAGE 碰撞的結(jié)果,是 ERNIE SAmple aggreGatE 的簡稱,它的結(jié)構(gòu)如下圖所示,主要思想是通過 ERNIE 作為聚合函數(shù)(Aggregators),建模自身節(jié)點和鄰居節(jié)點的語義與結(jié)構(gòu)關(guān)系。ERNIE-Sage 對于文本的建模是構(gòu)建在鄰居聚合的階段,中心節(jié)點文本會與所有鄰居節(jié)點文本進行拼接;然后通過預(yù)訓(xùn)練的 ERNIE 模型進行消息匯聚,捕捉中心節(jié)點以及鄰居節(jié)點之間的相互關(guān)系;最后使用 ERNIESage 搭配獨特的鄰居互相看不見的 Attention Mask 和獨立的 Position Embedding 體系,就可以輕松構(gòu)建 TextGraph 中句子之間以及詞之間的關(guān)系。

使用 ID 特征的 GraphSAGE 只能夠建模圖的結(jié)構(gòu)信息,而單獨的ERNIE只能處理文本信息。通過 PGL 搭建的圖與文本的橋梁,ERNIESage能夠很簡單的把 GraphSAGE 以及 ERNIE 的優(yōu)點結(jié)合一起。以下面 TextGraph 的場景,ERNIESage 的效果能夠比單獨的 ERNIE 以及 GraphSAGE 模型都要好。

ERNIE-Sage 可以很輕松地在 PGL 中的消息傳遞范式中進行實現(xiàn),目前提供了4個版本的 ERNIESage 模型:

  • ERNIE-Sage v1: ERNIE 作用于text graph節(jié)點上;

  • ERNIE-Sage v2: ERNIE 作用在text graph的邊上;

  • ERNIE-Sage v3: ERNIE 作用于一階鄰居及起邊上;

  • ERNIE-Sage v4: ERNIE 作用于N階鄰居及邊上;

模型效果

TextGraph 2020 效果當時的SOTA

應(yīng)用場景

文本匹配、Query 推薦等

2.3 如何對Text Graph進行建模

上個項目講到的GraphSage只關(guān)注結(jié)構(gòu)信息,無法完成語義理解,而NLP對應(yīng)的預(yù)訓(xùn)練模型卻反之,這時候ErnieSage就能很好實現(xiàn)兩者達到圖語義理解

簡單提一下Ernie 1.0核心是知識增強,通過詞級別的Masked Language Model(MLM)任務(wù)以及持續(xù)學(xué)習(xí)思想取得優(yōu)異性能

Transformer基礎(chǔ)結(jié)構(gòu)

transformer好比全連通圖,圖節(jié)點類比token外加了自注意機制。

持續(xù)學(xué)習(xí)效果

將ERNIE作用于Graph的各大元素:

  1. ERNIESage V1 模型核心流程---ERNIE 作用于Text Graph的Node(節(jié)點) 上

  • ERNIE提取節(jié)點語義 -> GNN聚合

  • 利用ERNIE獲得節(jié)點表示

  • 聚合鄰居特征,進行消息傳遞

  • 將當前節(jié)點和聚合后的鄰居特征進行concat,更新節(jié)點特征

  1. ERNIESage V2 核心代碼---------ERNIE聚合Text Graph的Edge(邊) 上信息

  • GNN send 文本id -> ERNIE提取邊語義 -> GNN recv 聚合鄰居語義 -> ERNIE提取中心節(jié)點語義并concat

為了使得大家對下面有關(guān)ERNIE模型的部分能夠有所了解,這里先貼出ERNIE的主模型框架圖。

  • 利用 ERNIE 獲取中心節(jié)點的文本特征表示

  • 特征交互:中心節(jié)點和鄰居節(jié)點一同作為 ERNIE 輸入,計算交互特征

  • 聚合鄰居特征

  • 將當前節(jié)點和聚合后的鄰居特征 concat,更新節(jié)點特征

ERNIESage Node與ERNIESage Edge對比

大部分單塔模型優(yōu)于雙塔模型因為含有特征交互信息更充分,做鏈接預(yù)測問題思路:將兩個節(jié)點進行內(nèi)積得到一個值,和閾值對比假設(shè)大于0.5則邊存在

  1. ERNIESage V3 核心過程--------ERNIE聚合節(jié)點的1 Neighbor( 一階鄰居) 信息

  • GNN send 文本id序列 -> GNN recv 拼接文本id序列 -> ERNIE同時提取中心和多個鄰居語義表達

將中心節(jié)點的文本與所有一階鄰居節(jié)點文本進行單塔拼接,再利用 ERNIE 做消息聚合;這樣就會遇到:

  1. 如何確保在輸入時鄰居不帶有順序?

  2. 如果鄰居數(shù)量過多,如何建模?

解決方案如下:針對問題一采用獨立位置編碼,鄰居節(jié)點編碼相同不受順序影響;針對問題提二:進行鄰居采樣

2.4 基于PGL算法實現(xiàn)

PGL&paddle 2.x+版本

ErnieSage可以很輕松地在基于PaddleNLP構(gòu)建基于Ernie的圖神經(jīng)網(wǎng)絡(luò),目前PaddleNLP提供了V2版本的ErnieSage模型:

ErnieSage V2: ERNIE 作用在text graph的邊上;

核心部分包含:

  • 數(shù)據(jù)集部分

  1. example_data - 簡單的輸入文件,格式為每行query \t answer,可作簡單的運行實例使用。

  • 模型文件和配置部分

  1. ernie_config.json - ERNIE模型的配置文件。

  2. vocab.txt - ERNIE模型所使用的詞表。

  3. erniebaseckpt/ - ERNIE模型參數(shù)。

  4. config/ - ERNIESage模型的配置文件

  • 代碼部分

  1. local_run.sh - 入口文件,通過該入口可完成預(yù)處理、訓(xùn)練、infer三個步驟。

  2. preprocessing文件夾 - 包含dump_graph.py,在預(yù)處理部分,首先需要進行建圖,將輸入的文件構(gòu)建成一張圖。由于所研究的是Text Graph,因此節(jié)點都是文本,將文本表示為該節(jié)點對應(yīng)的node feature(節(jié)點特征),處理文本的時候需要進行切字,再映射為對應(yīng)的token id。

  3. dataset/ - 該文件夾包含了數(shù)據(jù)ready的代碼,以便于在訓(xùn)練的時候?qū)⒂?xùn)練數(shù)據(jù)以batch的方式讀入。

  4. models/ - 包含了ERNIESage模型核心代碼。

  5. train.py - 模型訓(xùn)練入口文件。

  6. learner.py - 分布式訓(xùn)練代碼,通過train.py調(diào)用。

  7. infer.py - infer代碼,用于infer出節(jié)點對應(yīng)的embedding。

  • 評價部分

  1. build_dev.py - 用于將的驗證集修改為需要的格式。

  2. mrr.py - 計算MRR值。 部分結(jié)果展示:

[2022-11-23 14:18:01,252] [ ? ?INFO] - global step 890, epoch: 27, batch: 25, loss: 0.005078, speed: 1.70 step/s [2022-11-23 14:18:06,836] [ ? ?INFO] - global step 900, epoch: 28, batch: 3, loss: 0.004688, speed: 1.79 step/s [2022-11-23 14:18:12,588] [ ? ?INFO] - global step 910, epoch: 28, batch: 13, loss: 0.004492, speed: 1.74 step/s [2022-11-23 14:18:18,633] [ ? ?INFO] - global step 920, epoch: 28, batch: 23, loss: 0.005273, speed: 1.65 step/s [2022-11-23 14:18:24,022] [ ? ?INFO] - global step 930, epoch: 29, batch: 1, loss: 0.004687, speed: 1.86 step/s [2022-11-23 14:18:29,897] [ ? ?INFO] - global step 940, epoch: 29, batch: 11, loss: 0.004492, speed: 1.70 step/s [2022-11-23 14:18:35,727] [ ? ?INFO] - global step 950, epoch: 29, batch: 21, loss: 0.007814, speed: 1.72 step/s [2022-11-23 14:18:41,339] [ ? ?INFO] - global step 960, epoch: 29, batch: 31, loss: 0.012500, speed: 1.78 step/s INFO 2022-11-23 14:18:47,170 launch.py:402] Local processes completed. INFO 2022-11-23 14:18:47,170 launch.py:402] Local processes completed.

運行完畢后,會產(chǎn)生較多的文件,這里進行簡單的解釋。

  1. graph_workdir/ - 這個文件夾主要會存儲和圖相關(guān)的數(shù)據(jù)信息。

  2. output/ - 主要的輸出文件夾,包含了以下內(nèi)容:

  • (1)模型文件,根據(jù)config文件中的saveperstep可調(diào)整保存模型的頻率,如果設(shè)置得比較大則可能訓(xùn)練過程中不會保存模型;

  • (2)last文件夾,保存了停止訓(xùn)練時的模型參數(shù),在infer階段會使用這部分模型參數(shù);

  • (3)part-0文件,infer之后的輸入文件中所有節(jié)點的Embedding輸出。

預(yù)測結(jié)果見/output part-0,部分結(jié)果展示:

1 ? ?干部走讀之所以成為“千夫所指”,是因為這種行為增加了行政成本。 0.08133 -0.18362 0.00346 -0.01038 -0.05656 -0.05691 -0.09882 0.12029 0.05317 -0.02939 -0.14508 -0.07692 -0.02769 -0.04896 0.09963 -0.14497 -0.13574 0.02424 0.10587 -0.07323 -0.06388 0.01103 0.00944 -0.07593 -0.00731 -0.11897 0.11635 -0.05529 0.04156 0.01942 -0.07949 -0.02761 0.00033 -0.06539 0.05739 0.02487 0.03389 0.18369 0.05038 -0.02183 0.02685 0.09735 -0.13134 0.01999 -0.04034 -0.03441 0.07738 0.14992 0.06287 -0.20294 -0.05325 0.07003 0.02595 0.01826 0.12306 0.06234 -0.11179 -0.09813 0.14834 -0.16425 0.13985 0.06430 0.01662 -0.01184 0.02659 0.13431 0.05327 -0.07269 0.06539 -0.12416 -0.03247 0.12320 -0.06268 -0.06711 -0.01775 -0.02475 0.12867 0.05980 0.09311 0.11515 -0.06987 0.07372 0.09891 -0.10539 -0.03451 0.02539 -0.05701 -0.06300 0.03582 0.13427 -0.07082 -0.01588 -0.10033 0.04229 -0.02681 0.22213 0.00073 0.00075 -0.16839 0.12594 0.00807 -0.00040 -0.07686 0.08944 -0.04361 -0.13446 -0.15051 -0.08336 0.13476 -0.07999 0.00719 0.04443 -0.21426 -0.02944 0.04165 0.14448 -0.07233 -0.07226 -0.01737 -0.05904 -0.08729 0.01087 0.11581 -0.00041 -0.04341 0.01526 -0.01272 -0.15089 1 ? ?承擔(dān)縣人大常委會同市人大常委會及鄉(xiāng)鎮(zhèn)人大的工作聯(lián)系。 ?0.06494 -0.25502 -0.00777 -0.02933 -0.03097 -0.08472 -0.15055 0.03232 0.04819 -0.03571 -0.18642 0.01614 0.07226 0.04660 0.06138 -0.14811 -0.01807 -0.00931 0.11350 0.04235 -0.14285 0.08077 0.10746 -0.03673 -0.12217 -0.05147 0.15980 -0.02051 -0.08356 0.00127 0.02313 0.14206 0.02116 -0.02332 -0.02032 0.03704 0.04234 0.05832 -0.03426 -0.02491 0.07948 0.11802 0.10158 -0.06468 -0.11558 0.00161 0.02030 0.06531 -0.04109 -0.13033 -0.04947 0.10836 -0.06057 0.01797 0.00183 0.18616 -0.13693 -0.17120 0.02910 0.01781 0.24061 -0.03953 0.10843 0.05329 -0.08753 -0.09504 0.05383 -0.11522 0.05172 -0.02633 0.06554 0.18186 -0.03937 -0.09151 -0.01045 -0.01857 0.10766 0.04191 0.10127 -0.00513 -0.02739 -0.10974 0.07810 -0.17015 -0.07228 -0.05809 -0.08627 -0.02947 -0.01907 0.12695 -0.09196 0.03067 -0.09462 0.15618 -0.05241 0.17382 -0.06615 0.02156 0.07060 0.09616 -0.02560 0.01197 -0.00582 -0.06037 -0.11539 -0.11853 -0.16872 0.00075 0.13284 0.02941 -0.01361 -0.01200 -0.12901 0.06944 -0.03066 0.09824 -0.01635 0.04351 -0.08985 0.08947 0.00923 -0.02436 0.10783 0.00891 0.10256 0.01953 -0.06292 -0.04989# 接下來,計算MRR得分。 # 注意,運行此代碼的前提是,已經(jīng)將config對應(yīng)的yaml配置文件中的input_data參數(shù)修改為了:"train_data.txt" # 并且注意訓(xùn)練的模型是針對train_data.txt的,如果不符合,請重新訓(xùn)練模型。 !python mrr.py --emb_path output/part-0 # 由于僅是為了提供一個可運行的實例,計算出來的MRR值可能比較小,需要的同學(xué)可以自己更換數(shù)據(jù)集來測試更多的結(jié)果。 1021it [00:00, 19102.78it/s] 46it [00:00, 68031.73it/s] 100%|█████████████████████████████████████████| 46/46 [00:00<00:00, 2397.52it/s] MRR ?0.22548099768841945

PGL&paddle 1.x+版本

提供多版本供大家學(xué)習(xí)復(fù)現(xiàn),含核心模型代碼講解

項目鏈接:

https://aistudio.baidu.com/aistudio/projectdetail/5097085

3.UniMP(標簽遷移)

UniMP:融合標簽傳遞和圖神經(jīng)網(wǎng)絡(luò)的統(tǒng)一模型

論文名:Masked Label Prediction:用于半監(jiān)督分類的統(tǒng)一消息傳遞模型

論文鏈接:https://arxiv.org/abs/2009.03509

圖神經(jīng)網(wǎng)絡(luò)(GNN)和標簽傳播算法(LPA)都是消息傳遞算法,在半監(jiān)督分類中取得了優(yōu)越的性能。GNN 通過神經(jīng)網(wǎng)絡(luò)執(zhí)行特征傳播來進行預(yù)測,而 LPA 使用跨圖鄰接矩陣的標簽傳播來獲得結(jié)果。然而,目前還沒有有效的方法將這兩種算法直接結(jié)合起來。為了解決這個問題,提出了一種新穎的統(tǒng)一消息傳遞模型 (UniMP),它可以在訓(xùn)練和推理時結(jié)合特征和標簽傳播。首先,UniMP采用Graph Transformer網(wǎng)絡(luò),將feature embedding和label embedding作為輸入信息進行傳播。其次,為了在自循環(huán)輸入標簽信息中不過度擬合地訓(xùn)練網(wǎng)絡(luò),UniMP 引入了一種屏蔽標簽預(yù)測策略,其中一定比例的輸入標簽信息被隨機屏蔽,然后進行預(yù)測。UniMP 在概念上統(tǒng)一了特征傳播和標簽傳播,并且在經(jīng)驗上是強大的。它在 Open Graph Benchmark (OGB) 中獲得了新的最先進的半監(jiān)督分類結(jié)果。

此外,提出UniMPlarge通過增加來擴展基本模型的寬度,并通過合并APPNPheadnum使其更深。此外,他們首先提出了一種新的基于注意力的 APPNP來進一步提高模型的性能。

APPNP:Predict then Propagate: Graph Neural Networks meet Personalized PageRank https://arxiv.org/abs/1810.05997

用于圖形半監(jiān)督分類的神經(jīng)消息傳遞算法最近取得了巨大成功。然而,為了對節(jié)點進行分類,這些方法僅考慮距離傳播幾步之遙的節(jié)點,并且這個使用的鄰域的大小很難擴展。在本文中,利用圖卷積網(wǎng)絡(luò) (GCN) 與 PageRank 之間的關(guān)系,推導(dǎo)出一種基于個性化 PageRank 的改進傳播方案。利用這種傳播過程來構(gòu)建一個簡單的模型、神經(jīng)預(yù)測的個性化傳播 (PPNP) 及其快速近似 APPNP。模型的訓(xùn)練時間與以前的模型相同或更快,其參數(shù)數(shù)量與以前的模型相同或更少。它利用一個大的、可調(diào)整的鄰域進行分類,并且可以很容易地與任何神經(jīng)網(wǎng)絡(luò)相結(jié)合。表明,在迄今為止對類 GCN 模型所做的最徹底的研究中,該模型優(yōu)于最近提出的幾種半監(jiān)督分類方法。的實施可在線獲得。

3.1背景介紹

在半監(jiān)督圖節(jié)點分類場景下,節(jié)點之間通過邊相連接,部分節(jié)點被打上標簽。任務(wù)要求模型通過監(jiān)督學(xué)習(xí)的方式,擬合被標注節(jié)點數(shù)據(jù),并對未標注的節(jié)點進行預(yù)測。如下圖所示,在一般機器學(xué)習(xí)的問題上,已標注的訓(xùn)練數(shù)據(jù)在新數(shù)據(jù)的推斷上,并不能發(fā)揮直接的作用,因為數(shù)據(jù)的輸入是獨立的。然而在圖神經(jīng)網(wǎng)絡(luò)的場景下,已有的標注數(shù)據(jù)可以從節(jié)點與節(jié)點的連接中,根據(jù)圖結(jié)構(gòu)關(guān)系推廣到新的未標注數(shù)據(jù)中。

一般應(yīng)用于半監(jiān)督節(jié)點分類的算法分為圖神經(jīng)網(wǎng)絡(luò)和標簽傳遞算法兩類,它們都是通過消息傳遞的方式(前者傳遞特征、后者傳遞標簽)進行節(jié)點標簽的學(xué)習(xí)和預(yù)測。其中經(jīng)典標簽傳遞算法如LPA,只考慮了將標簽在圖上進行傳遞,而圖神經(jīng)網(wǎng)絡(luò)算法大多也只是使用了節(jié)點特征以及圖的鏈接信息進行分類。但是單純考慮標簽傳遞或者節(jié)點特征都是不足夠的。

百度PGL團隊提出的統(tǒng)一消息傳遞模型 UniMP,將上述兩種消息統(tǒng)一到框架中,同時實現(xiàn)了節(jié)點的特征與標簽傳遞,顯著提升了模型的泛化效果。UniMP以Graph Transformer模型作為基礎(chǔ)骨架,聯(lián)合使用標簽嵌入方法,將節(jié)點特征和部分節(jié)點標簽同時輸入至模型中,從而實現(xiàn)了節(jié)點特征和標簽的同時傳遞。

簡單的加入標簽信息會帶來標簽泄漏的問題,即標簽信息即是特征又是訓(xùn)練目標。實際上,標簽大部分是有順序的,例如在引用網(wǎng)絡(luò)中,論文是按照時間先后順序出現(xiàn)的,其標簽也應(yīng)該有一定的先后順序。在無法得知訓(xùn)練集標簽順序的情況下,UniMP提出了標簽掩碼學(xué)習(xí)方法。UniMP每一次隨機將一定量的節(jié)點標簽掩碼為未知,用部分已有的標注信息、圖結(jié)構(gòu)信息以及節(jié)點特征來還原訓(xùn)練數(shù)據(jù)的標簽。最終,UniMP在OGB上取得SOTA效果,并在論文的消融實驗上,驗證了方法的有效性。

通過:Masked Label Prediction 解決標簽泄露問題

模型結(jié)構(gòu)

論文一些數(shù)據(jù)仿真展示:【數(shù)據(jù)集情況等】

3.2原理介紹

部分作者提出質(zhì)疑也是值得探討的:

3.3 基于碼源詳細闡釋

3.3.1 為何引入MaskLabel?

簡單的加入標簽信息會帶來標簽泄漏的問題,即標簽信息即是特征又是訓(xùn)練目標??梢韵胂笾苯訉撕炞鳛榫W(wǎng)絡(luò)輸入,要求輸出也向標簽靠攏,勢必會造成“1=1”的訓(xùn)練結(jié)果,無法用于預(yù)測。

在引用網(wǎng)絡(luò)中,論文是按照時間先后順序出現(xiàn)的,其標簽也應(yīng)該有一定的先后順序。在無法得知訓(xùn)練集標簽順序的情況下,UniMP提出了MaskLabel學(xué)習(xí)方法。每一次隨機將一定量的節(jié)點標簽掩碼為未知,用部分已有的標注信息、圖結(jié)構(gòu)信息以及節(jié)點特征來還原訓(xùn)練數(shù)據(jù)的標簽。

def label_embed_input(self, feature): ? ?label = F.data(name="label", shape=[None, 1], dtype="int64") ? ?label_idx = F.data(name='label_idx', shape=[None, 1], dtype="int64") ? ?label = L.reshape(label, shape=[-1]) ? ?label_idx = L.reshape(label_idx, shape=[-1]) ? ?embed_attr = F.ParamAttr(initializer=F.initializer.NormalInitializer(loc=0.0, scale=1.0)) ? ?embed = F.embedding(input=label, size=(self.out_size, self.embed_size), param_attr=embed_attr) ? ?feature_label = L.gather(feature, label_idx, overwrite=False) ? ?feature_label = feature_label + embed ? ?feature = L.scatter(feature, label_idx, feature_label, overwrite=True) ? ?lay_norm_attr = F.ParamAttr(initializer=F.initializer.ConstantInitializer(value=1)) ? ?lay_norm_bias = F.ParamAttr(initializer=F.initializer.ConstantInitializer(value=0)) ? ?feature = L.layer_norm(feature, name='layer_norm_feature_input', param_attr=lay_norm_attr, bias_attr=lay_norm_bias) ? ?return feature

在上面的代碼中可以看到,對于已知標簽的節(jié)點,首先將其embedding成和節(jié)點特征同樣維度(這里是100維),然后就可以直接與節(jié)點特征相加,進而完成了標簽信息與特征信息的融合,一塊送入graph_transformer進行消息傳遞。

改進:這里,最核心的一句代碼是featurelabel = featurelabel + embed,它完成了標簽和特征的融合,由此可以想到控制兩者的權(quán)重,得到:

feature_label = alpha*feature_label + (1-alpha)*embed

alpha可以設(shè)定為固定值,也可以通過學(xué)習(xí)獲得。參考modelunimplarge.py中的門控殘差連接:

if gate: ? ?temp_output = L.concat([skip_feature, out_feat, out_feat - skip_feature], axis=-1) ? ?gate_f = L.sigmoid(linear(temp_output, 1, name=name + '_gate_weight', init_type='lin')) ? ?out_feat = skip_feature * gate_f + out_feat * (1 - gate_f) else: ? ?out_feat = skip_feature + out_feat

可以寫出:

temp = L.concat([feature_label,embed,feature_label-embed], axis=-1) alpha = L.sigmoid(linear(temp, 1, name='alpha_weight', init_type='lin')) feature_label = alpha*feature_label + (1-alpha)*embed

當然也可以直接經(jīng)過一層FC后再將兩者相加:

feature_label = L.fc(feature_label, size=100) + L.fc(embed, size=100)

而做這些的目的,都是為了尋找能使標簽信息和特征信息融合的更好的方式。

3.3.2 Res連接&Dense連接?

(1)殘差網(wǎng)絡(luò)(或稱深度殘差網(wǎng)絡(luò)、深度殘差學(xué)習(xí),英文ResNet)屬于一種卷積神經(jīng)網(wǎng)絡(luò)。相較于普通的卷積神經(jīng)網(wǎng)絡(luò),殘差網(wǎng)絡(luò)采用了跨層恒等連接,以減輕卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練難度。殘差網(wǎng)絡(luò)的一種基本模塊如下所示:

實現(xiàn)起來比較簡單,這里不予贅述。

(2)DenseNet原文:Densely Connected Convolutional Networks

相比ResNet,DenseNet提出了一個更激進的密集連接機制:即互相連接所有的層,具體來說就是每個層都會接受其前面所有層作為其額外的輸入。DenseNet的網(wǎng)絡(luò)結(jié)構(gòu)如下所示:

以下代碼實現(xiàn)了Dense連接:

dense=[feature] for i in range(self.num_layers - 1): ? ?ngw = pgl.sample.edge_drop(graph_wrapper, edge_dropout) ? ?res_feature = feature ? ?feature, _, cks = graph_transformer(str(i), ngw, feature, ? ?hidden_size=self.hidden_size, ? ?num_heads=self.heads, ? ? ? ?concat=True, skip_feat=True, ? ? ? ? layer_norm=True, relu=True, gate=True) ? ?if dropout > 0: ? ?feature = L.dropout(feature, dropout_prob=dropout, dropout_implementation='upscale_in_train') ? ?dense.append(feature) ? ?feature = L.fc(dense, size=self.hidden_size, name="concat_feature")

3.3.3 注意力機制?

注意力機制就是將注意力集中于局部關(guān)鍵信息的機制,可以分成兩步:第一,通過全局掃描,發(fā)現(xiàn)局部有用信息;第二,增強有用信息并抑制冗余信息。SENet是一種非常經(jīng)典的注意力機制下的深度學(xué)習(xí)方法。它可以通過一個小型的子網(wǎng)絡(luò),自動學(xué)習(xí)得到一組權(quán)重,對特征圖的各個通道進行加權(quán)。其含義在于,某些特征通道是較為重要的,而另一些特征通道是信息冗余的;那么,我們就可以通過這種方式增強有用特征通道、削弱冗余特征通道。SENet的一種基本模塊如下所示:

值得指出的是,通過這種方式,每個樣本都可以有自己獨特的一組權(quán)重,可以根據(jù)樣本自身的特點,進行獨特的特征通道加權(quán)調(diào)整。

Unimp中的注意力機制出現(xiàn)在Graph Transformer以及最后的輸出層attnappnp,attnappnp的代碼為:

def attn_appnp(gw, feature, attn, alpha=0.2, k_hop=10): ? ?"""Attention based APPNP to Make model output deeper ? ?Args: ? ? ? ?gw: Graph wrapper object (:code:`StaticGraphWrapper` or :code:`GraphWrapper`) ? ? ? ?attn: Using the attntion as transition matrix for APPNP ? ? ? ?feature: A tensor with shape (num_nodes, feature_size). ? ? ? ?k_hop: K Steps for Propagation ? ?Return: ? ? ? ?A tensor with shape (num_nodes, hidden_size) ? ?""" ? ?def send_src_copy(src_feat, dst_feat, edge_feat): ? ? ? ?feature = src_feat["h"] ? ? ? ?return feature ? ?h0 = feature ? ?attn = L.reduce_mean(attn, 1) ? ?for i in range(k_hop): ? ? ? ?msg = gw.send(send_src_copy, nfeat_list=[("h", feature)]) ? ? ? ?msg = msg * attn ? ? ? ?feature = gw.recv(msg, "sum") ? ? ? ?feature = feature * (1 - alpha) + h0 * alpha ? ?return feature

在調(diào)用函數(shù)時,其中的alpha為前面的graph_transformer學(xué)習(xí)到的參數(shù),用于更好的融合各層特征。

3.4基于PGL算法實現(xiàn)

3.4.1 基于斯坦福 OGB (1.2.1) 基準測試

實驗基于斯坦福 OGB (1.2.1) 基準測試,

To_do list:

  • UniMP_large in Arxiv

  • UniMP_large in Products

  • UniMP_large in Proteins

  • UniMP_xxlarge

  • 這里給出giyhub官網(wǎng)代碼鏈接:https://github.com/PaddlePaddle/PGL/tree/main/ogb_examples/nodeproppred/unimp

  • 因為在安裝環(huán)境中需要安裝torch,在aistudio上嘗試多次仍無法運行,下面給出代碼流程和官網(wǎng)結(jié)果。感興趣同學(xué)私下本地運行吧。比較吃算力!

超參數(shù)介紹:

Arxiv_dataset(Full Batch): ? ? ? ? ?Products_dataset(NeighborSampler): ? ? ? ? ?Proteins_dataset(Random Partition): --num_layers ? ? ? ?3 ? ? ? ? ? ? ? --num_layers ? ? ? ? ? ? ? ?3 ? ? ? ? ? ? ? --num_layers ? ? ? ? ? ? ? ?7 ? ? ? ? ? ? ? ? ? --hidden_size ? ? ? 128 ? ? ? ? ? ? --hidden_size ? ? ? ? ? ? ? 128 ? ? ? ? ? ? --hidden_size ? ? ? ? ? ? ? 64 ? ? ? ? ? ? ? --num_heads ? ? ? ? 2 ? ? ? ? ? ? ? --num_heads ? ? ? ? ? ? ? ? 4 ? ? ? ? ? ? ? --num_heads ? ? ? ? ? ? ? ? 4 --dropout ? ? ? ? ? 0.3 ? ? ? ? ? ? --dropout ? ? ? ? ? ? ? ? ? 0.3 ? ? ? ? ? ? --dropout ? ? ? ? ? ? ? ? ? 0.1 --lr ? ? ? ? ? ? ? ?0.001 ? ? ? ? ? --lr ? ? ? ? ? ? ? ? ? ? ? ?0.001 ? ? ? ? ? --lr ? ? ? ? ? ? ? ? ? ? ? ?0.001 --use_label_e ? ? ? True ? ? ? ? ? ?--use_label_e ? ? ? ? ? ? ? True ? ? ? ? ? ?--use_label_e ? ? ? ? ? ? ? True --label_rate ? ? ? ?0.625 ? ? ? ? ? --label_rate ? ? ? ? ? ? ? ?0.625 ? ? ? ? ? --label_rate ? ? ? ? ? ? ? ?0.5 --weight_decay. ? ? 0.0005

結(jié)果展示:

OGB的仿真性能:

| Model | Test Accuracy | Valid Accuracy| Parameters |Hardware| | -------- | -------- | -------- |-------- |-------- | |Arxivbaseline |0.7225 ± 0.0015 |0.7367 ± 0.0012 |468,369|Tesla V100 (32GB)| |ArxivUniMP |0.7311 ± 0.0021 |0.7450 ± 0.0005 |473,489|Tesla V100 (32GB)| |ArxivUniMPlarge| 0.7379 ± 0.0014 |0.7475 ± 0.0008 |1,162,515 |Tesla V100 (32GB)| |Productsbaseline| 0.8023 ± 0.0026 |0.9286 ± 0.0017 |1,470,905 |Tesla V100 (32GB)| |ProductsUniMP |0.8256 ± 0.0031 |0.9308 ± 0.0017 |1,475,605| Tesla V100 (32GB)| |Proteinsbaseline| 0.8611 ± 0.0017| 0.9128 ± 0.0007| 1,879,664 |Tesla V100 (32GB)| |ProteinsUniMP|0.8642 ± 0.0008 |0.9175 ± 0.0007 |1,909,104| Tesla V100 (32GB)|

改進 OGBN 蛋白質(zhì)的更多技巧

評估中的隨機分區(qū)大小,隨機分區(qū)在訓(xùn)練過程中表現(xiàn)得像DropEdge,發(fā)現(xiàn)的模型可以從這種策略中受益。,但在評估中,發(fā)現(xiàn)較小的分區(qū)大小可以提高分數(shù)。

# To compare python train.py --place 0 --use_label_e --log_file eval_partition_5 --eval_partition 5 python train.py --place 0 --use_label_e --log_file eval_partition_3 --eval_partition 3

使用 Self-Attention 聚合 Neighbor Feature OGBN-Proteins 中 UniMP 和其他類似 DeeperGCN 的原始代碼使用平均邊緣特征作為初始節(jié)點特征。采用這些模塊作為可學(xué)習(xí)的聚合器。為每個節(jié)點采樣大約 64 個邊,并使用變換器 [3 * (Self-Attention + Residual + ReLU + LayerNorm) + Mean Pooling] 作為聚合器來獲取初始化節(jié)點特征。簡單地稱它為CrossEdgeFeat。你可以在crossedgefeat.py 最初的 ogbn-proteins 工具獲得了大約0.9175的驗證分數(shù)和0.864的測試分數(shù)。并且通過CrossEdgeFeat,可以促進快速收斂并獲得更高的分數(shù)。

# To compare python train.py --place 0 --use_label_e --log_file with_cross_edge_feat ?--cross_edge_feat 3 python train.py --place 0 --use_label_e --log_file without_cross_edge_feat ?--cross_edge_feat 0

訓(xùn)練曲線(驗證 AUC)如下:

3.4.2 圖學(xué)習(xí)之基于PGL-UniMP算法的論文引用網(wǎng)絡(luò)節(jié)點分類任務(wù)[系列九]

內(nèi)容過多引到下一篇項目

項目鏈接:https://aistudio.baidu.com/aistudio/projectdetail/5116458?contributionType=1

fork一下即可

4.OGB最新榜單部分展示

這里就展示了節(jié)點預(yù)測的,更多的可以自行去官網(wǎng)查看獲得最新模型

5.總結(jié)

通過以上兩個版本的模型代碼簡單的講解,可以知道他們的不同點,其實主要就是在消息傳遞機制的部分有所不同。ERNIESageV1版本只作用在text graph的節(jié)點上,在傳遞消息(Send階段)時只考慮了鄰居本身的文本信息;而ERNIESageV2版本則作用在了邊上,在Send階段同時考慮了當前節(jié)點和其鄰居節(jié)點的文本信息,達到更好的交互效果。

為了實現(xiàn)可擴展的,健壯的和可重現(xiàn)的圖學(xué)習(xí)研究,提出了Open Graph Benchmark (OGB)——具有規(guī)模大、領(lǐng)域廣、任務(wù)類別多樣化的現(xiàn)實圖數(shù)據(jù)集。在特定于應(yīng)用程序的使用案例的驅(qū)動下,對給定的數(shù)據(jù)集采用了實際的數(shù)據(jù)分割方法。通過廣泛的基準實驗,強調(diào)OGB數(shù)據(jù)集對于圖學(xué)習(xí)模型在現(xiàn)實的數(shù)據(jù)分割方案下處理大規(guī)模圖并進行準確的預(yù)測提出了重大挑戰(zhàn)??偠灾?,OGB為未來的研究提供了豐富的機會,以推動圖學(xué)習(xí)的前沿。

OGB還在不斷的擴展中,相信之后會有更多數(shù)據(jù)集,也將產(chǎn)生更多優(yōu)秀的模型,推動圖學(xué)習(xí)的研究,了解和掌握相關(guān)內(nèi)容還是很有必要的。

原項目鏈接:fork一下即可:https://aistudio.baidu.com/aistudio/projectdetail/5096910?contributionType=1



圖神經(jīng)網(wǎng)絡(luò)ERNIESage、UniMP模型,如何進一步推進圖學(xué)習(xí)的研究的評論 (共 條)

分享到微博請遵守國家法律
文水县| 东港市| 邓州市| 子长县| 蒙自县| 赤水市| 邵东县| 南投市| 镇坪县| 铜山县| 互助| 井陉县| 永靖县| 新丰县| 和龙市| 宿松县| 安仁县| 陈巴尔虎旗| 东方市| 台州市| 葫芦岛市| 云南省| 永嘉县| 常山县| 广饶县| 柘荣县| 乌海市| 托克逊县| 清丰县| 汉中市| 建昌县| 天门市| 班玛县| 东至县| 娱乐| 牡丹江市| 木里| 鄂温| 定南县| 阿合奇县| 高淳县|