{"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/node-duplication-improves-cold-start-link","title":"Node Duplication Improves Cold-start Link Prediction","arxiv_id":"2402.09711","date":"2024-02-15","proceeding":null,"authors":["Zhichun Guo","Tong Zhao","Yozen Liu","Kaiwen Dong","William Shiao","Neil Shah","Nitesh V. Chawla"],"abstract":"Graph Neural Networks (GNNs) are prominent in graph machine learning and have shown state-of-the-art performance in Link Prediction (LP) tasks. Nonetheless, recent studies show that GNNs struggle to produce good results on low-degree nodes despite their overall strong performance. In practical applications of LP, like recommendation systems, improving performance on low-degree nodes is critical, as it amounts to tackling the cold-start problem of improving the experiences of users with few observed interactions. In this paper, we investigate improving GNNs' LP performance on low-degree nodes while preserving their performance on high-degree nodes and propose a simple yet surprisingly effective augmentation technique called NodeDup. Specifically, NodeDup duplicates low-degree nodes and creates links between nodes and their own duplicates before following the standard supervised LP training scheme. By leveraging a ''multi-view'' perspective for low-degree nodes, NodeDup shows significant LP performance improvements on low-degree nodes without compromising any performance on high-degree nodes. Additionally, as a plug-and-play augmentation module, NodeDup can be easily applied to existing GNNs with very light computational cost. Extensive experiments show that NodeDup achieves 38.49%, 13.34%, and 6.76% improvements on isolated, low-degree, and warm nodes, respectively, on average across all datasets compared to GNNs and state-of-the-art cold-start methods.","url_abs":"https://arxiv.org/abs/2402.09711v1","url_pdf":"https://arxiv.org/pdf/2402.09711v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"node-duplication-improves-cold-start-link","repo_url":"https://github.com/snap-research/nodedup","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"NOASSERTION"}}],"tasks":[{"task_slug":"link-prediction","task_name":"Link Prediction"},{"task_slug":"prediction","task_name":"Prediction"},{"task_slug":"recommendation-systems","task_name":"Recommendation Systems"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2402.09711","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2402.09711"}},"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":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/snap-research/nodedup","reach":{"status":"ok","spdx":"NOASSERTION"}}],"summary":{"ran":8,"unverified":2},"by_repo_kind":{"official":{"samples":10,"ran":8,"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":10,"samples":[{"code_sha256_prefix":"7f0113f9dff12e0c","entry":"do_edge_split","repo":"snap-research/nodedup","repo_kind":"official","path":"utils.py","file_url":"https://github.com/snap-research/nodedup/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"7f0113f9dff12e0c"}},{"code_sha256_prefix":"6aadf54cb09e3f2d","entry":"dropout_p","repo":"snap-research/nodedup","repo_kind":"official","path":"models.py","file_url":"https://github.com/snap-research/nodedup/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"6aadf54cb09e3f2d"}},{"code_sha256_prefix":"5675e363fb6a750c","entry":"fast_numba_auc","repo":"snap-research/nodedup","repo_kind":"official","path":"fastauc/fastauc/fast_auc.py","file_url":"https://github.com/snap-research/nodedup/blob/HEAD/fastauc/fastauc/fast_auc.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"5675e363fb6a750c"}},{"code_sha256_prefix":"6c62c0e78159a205","entry":"fast_numba_auc_nonw","repo":"snap-research/nodedup","repo_kind":"official","path":"fastauc/fastauc/fast_auc.py","file_url":"https://github.com/snap-research/nodedup/blob/HEAD/fastauc/fastauc/fast_auc.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"6c62c0e78159a205"}},{"code_sha256_prefix":"e88d3f007eb16ca3","entry":"node_degree_results","repo":"snap-research/nodedup","repo_kind":"official","path":"results_analysis.py","file_url":"https://github.com/snap-research/nodedup/blob/HEAD/results_analysis.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"e88d3f007eb16ca3"}},{"code_sha256_prefix":"55514ae913167ce0","entry":"result_coldwarm","repo":"snap-research/nodedup","repo_kind":"official","path":"results_analysis.py","file_url":"https://github.com/snap-research/nodedup/blob/HEAD/results_analysis.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"55514ae913167ce0"}},{"code_sha256_prefix":"c859e3e0faa40ce3","entry":"result_log","repo":"snap-research/nodedup","repo_kind":"official","path":"results_analysis.py","file_url":"https://github.com/snap-research/nodedup/blob/HEAD/results_analysis.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"c859e3e0faa40ce3"}},{"code_sha256_prefix":"0180fd1f521bfbdb","entry":"trapezoid_area","repo":"snap-research/nodedup","repo_kind":"official","path":"fastauc/fastauc/fast_auc.py","file_url":"https://github.com/snap-research/nodedup/blob/HEAD/fastauc/fastauc/fast_auc.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"0180fd1f521bfbdb"}},{"code_sha256_prefix":"11862e6f26533aa2","entry":"get_dataset","repo":"snap-research/nodedup","repo_kind":"official","path":"utils.py","file_url":"https://github.com/snap-research/nodedup/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"11862e6f26533aa2"}},{"code_sha256_prefix":"0dc82c02b356733e","entry":"sample_graph","repo":"snap-research/nodedup","repo_kind":"official","path":"utils.py","file_url":"https://github.com/snap-research/nodedup/blob/HEAD/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"0dc82c02b356733e"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}