{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2608-04381","title":"NodeJEPA: Structure-Conditioned Latent Prediction for Node-Level Graph Self-Supervised Learning","arxiv_id":"2608.04381","date":"2026-08-05","proceeding":null,"authors":["Tinghe Zhang","Jian Xu","Jiaheng Chen","Jiaxing Li","Yucheng Xiao","Qiang Wang"],"abstract":"Self-supervised learning on graphs is largely shaped by contrastive methods that depend on carefully designed augmentations, and by generative methods that reconstruct node attributes in the input space. Both paradigms can entangle representations with low-level input statistics rather than with relational structure. Joint-embedding predictive architectures (JEPA) instead learn by predicting latent targets rather than reconstructing inputs. Recent work has explored this idea for graph-level representation learning, but how to design JEPA-style objectives for node-level tasks, and which structural signals the predictor should condition on, remains less clear. We present NodeJEPA, a joint-embedding predictive architecture for node-level graph self-supervised learning. NodeJEPA masks structure-aware k-hop ego-subgraphs and trains a context encoder to predict the latent representations of the masked nodes. These targets come from an EMA-updated target encoder with stop-gradient. A structure-conditioned predictor integrates spectral and centrality descriptors through cross-attention. Variance, covariance, and Laplacian spectral regularizers help stabilize the embedding geometry, and an optional curriculum gradually increases masking difficulty during training. Because prediction occurs in latent space, NodeJEPA does not rely on input reconstruction or hand-crafted graph augmentations. We evaluate NodeJEPA on standard node classification benchmarks under linear probing and fine-tuning protocols, and conduct ablations on masking, prediction, and regularization design choices. Our study offers a practical recipe for node-level JEPA-style latent prediction on graphs, and clarifies when structural conditioning helps representation learning. Code, configurations, and evaluation scripts are publicly available at https://github.com/OliverZ-dot/Node-Jepa.","url_abs":"https://arxiv.org/abs/2608.04381","url_pdf":"https://arxiv.org/pdf/2608.04381","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2608.04381","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2608.04381"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/OliverZ-dot/Node-Jepa","reach":null}],"summary":{"ran":6,"ran_draft_wrong":4,"ran_fixture":2,"unverified":5},"by_repo_kind":{"found_in_text":{"samples":17,"ran":12,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"57219a03c9cb5757","entry":"GNNEncoder","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"57219a03c9cb5757"}},{"code_sha256_prefix":"99c7dfa1c9127cb9","entry":"PredictiveLoss","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"99c7dfa1c9127cb9"}},{"code_sha256_prefix":"38bc69034098a9ee","entry":"SpectralRegularizationLoss","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"38bc69034098a9ee"}},{"code_sha256_prefix":"5c55b7715410bef0","entry":"StructureAwareMasking","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5c55b7715410bef0"}},{"code_sha256_prefix":"19854bd59ba09b36","entry":"StructureConditionedPredictor","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"19854bd59ba09b36"}},{"code_sha256_prefix":"0175237cb3fa48e8","entry":"VarianceCovarianceLoss","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0175237cb3fa48e8"}},{"code_sha256_prefix":"f47307da1bbcd7da","entry":"compute_betweenness_centrality","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f47307da1bbcd7da"}},{"code_sha256_prefix":"5a0a26104f4334cc","entry":"compute_clustering_coefficient","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5a0a26104f4334cc"}},{"code_sha256_prefix":"1d43014330ce4939","entry":"compute_laplacian_eigenvalues","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1d43014330ce4939"}},{"code_sha256_prefix":"f14f7534467dee76","entry":"compute_pagerank","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f14f7534467dee76"}},{"code_sha256_prefix":"46d4aa1a9c34bff8","entry":"compute_spectral_embedding","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"46d4aa1a9c34bff8"}},{"code_sha256_prefix":"0c4d799d3b3bfc99","entry":"to_scipy_sparse","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0c4d799d3b3bfc99"}},{"code_sha256_prefix":"364cb718f721b853","entry":"CurriculumMasking","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"364cb718f721b853"}},{"code_sha256_prefix":"e7ab863ffa7d71c7","entry":"GraphEncoder","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e7ab863ffa7d71c7"}},{"code_sha256_prefix":"f40252b50a3e542d","entry":"GraphJEPA","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f40252b50a3e542d"}},{"code_sha256_prefix":"30fdfee53efea3e7","entry":"_structure_cache_path","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"30fdfee53efea3e7"}},{"code_sha256_prefix":"866a221d1952f83e","entry":"compute_structure_descriptors","repo":"OliverZ-dot/Node-Jepa","repo_kind":"found_in_text","path":"graph_jepa/models/graph_jepa.py","file_url":"https://github.com/OliverZ-dot/Node-Jepa/blob/HEAD/graph_jepa/models/graph_jepa.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"866a221d1952f83e"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}