{"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/graph-convolutional-neural-networks-for-web","title":"Graph Convolutional Neural Networks for Web-Scale Recommender Systems","arxiv_id":"1806.01973","date":"2018-06-06","proceeding":null,"authors":["Rex Ying","Ruining He","Kai-Feng Chen","Pong Eksombatchai","William L. Hamilton","Jure Leskovec"],"abstract":"Recent advancements in deep neural networks for graph-structured data have\nled to state-of-the-art performance on recommender system benchmarks. However,\nmaking these methods practical and scalable to web-scale recommendation tasks\nwith billions of items and hundreds of millions of users remains a challenge.\nHere we describe a large-scale deep recommendation engine that we developed and\ndeployed at Pinterest. We develop a data-efficient Graph Convolutional Network\n(GCN) algorithm PinSage, which combines efficient random walks and graph\nconvolutions to generate embeddings of nodes (i.e., items) that incorporate\nboth graph structure as well as node feature information. Compared to prior GCN\napproaches, we develop a novel method based on highly efficient random walks to\nstructure the convolutions and design a novel training strategy that relies on\nharder-and-harder training examples to improve robustness and convergence of\nthe model. We also develop an efficient MapReduce model inference algorithm to\ngenerate embeddings using a trained model. We deploy PinSage at Pinterest and\ntrain it on 7.5 billion examples on a graph with 3 billion nodes representing\npins and boards, and 18 billion edges. According to offline metrics, user\nstudies and A/B tests, PinSage generates higher-quality recommendations than\ncomparable deep learning and graph-based alternatives. To our knowledge, this\nis the largest application of deep graph embeddings to date and paves the way\nfor a new generation of web-scale recommender systems based on graph\nconvolutional architectures.","url_abs":"http://arxiv.org/abs/1806.01973v1","url_pdf":"http://arxiv.org/pdf/1806.01973v1.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":"graph-convolutional-neural-networks-for-web","repo_url":"https://github.com/massquantity/LibRecommender","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"tf","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"graph-convolutional-neural-networks-for-web","repo_url":"https://github.com/wei9711/d2gcn","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}},{"paper_slug":"graph-convolutional-neural-networks-for-web","repo_url":"https://github.com/yoonjong12/pinsage","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"graph-convolutional-neural-networks-for-web","repo_url":"https://github.com/breadbread1984/PinSage-tf2.0","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"tf","reach":null},{"paper_slug":"graph-convolutional-neural-networks-for-web","repo_url":"https://github.com/dmlc/dgl/tree/master/examples/pytorch/pinsage","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"recommendation-systems","task_name":"Recommendation Systems"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1806.01973","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1806.01973"}},"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/breadbread1984/PinSage-tf2.0","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/yoonjong12/pinsage","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/wei9711/d2gcn","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/dmlc/dgl/tree/master/examples/pytorch/pinsage","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/massquantity/LibRecommender","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":1,"unverified":10},"by_repo_kind":{"listed":{"samples":11,"ran":1,"repositories":3}},"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":2,"samples":[{"code_sha256_prefix":"96d53e8419ea0290","entry":"Convolve","repo":"breadbread1984/PinSage-tf2.0","repo_kind":"listed","path":"PinSage.py","file_url":"https://github.com/breadbread1984/PinSage-tf2.0/blob/HEAD/PinSage.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"96d53e8419ea0290"}},{"code_sha256_prefix":"306abff4458ab700","entry":"DGLError","repo":"dmlc/dgl","repo_kind":"listed","path":"python/dgl/sampling/pinsage.py","file_url":"https://github.com/dmlc/dgl/blob/HEAD/python/dgl/sampling/pinsage.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"306abff4458ab700"}},{"code_sha256_prefix":"892b9254565cb7c5","entry":"PinSAGESampler","repo":"dmlc/dgl","repo_kind":"listed","path":"python/dgl/sampling/pinsage.py","file_url":"https://github.com/dmlc/dgl/blob/HEAD/python/dgl/sampling/pinsage.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"892b9254565cb7c5"}},{"code_sha256_prefix":"5557298b5b513f28","entry":"PinSage","repo":"breadbread1984/PinSage-tf2.0","repo_kind":"listed","path":"PinSage.py","file_url":"https://github.com/breadbread1984/PinSage-tf2.0/blob/HEAD/PinSage.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"5557298b5b513f28"}},{"code_sha256_prefix":"8cbd0b0d003b05e9","entry":"RandomWalkNeighborSampler","repo":"dmlc/dgl","repo_kind":"listed","path":"python/dgl/sampling/pinsage.py","file_url":"https://github.com/dmlc/dgl/blob/HEAD/python/dgl/sampling/pinsage.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"8cbd0b0d003b05e9"}},{"code_sha256_prefix":"7cacf32da5bfdf02","entry":"_select_pinsage_neighbors","repo":"dmlc/dgl","repo_kind":"listed","path":"python/dgl/sampling/pinsage.py","file_url":"https://github.com/dmlc/dgl/blob/HEAD/python/dgl/sampling/pinsage.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7cacf32da5bfdf02"}},{"code_sha256_prefix":"1eefc35490de45cd","entry":"build_val_test_matrix","repo":"yoonjong12/pinsage","repo_kind":"listed","path":"data_utils.py","file_url":"https://github.com/yoonjong12/pinsage/blob/HEAD/data_utils.py","link_basis":"harvester_set","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":"1eefc35490de45cd"}},{"code_sha256_prefix":"dfc097b3bdb4acb8","entry":"check_param_num","repo":"yoonjong12/pinsage","repo_kind":"listed","path":"evaluation.py","file_url":"https://github.com/yoonjong12/pinsage/blob/HEAD/evaluation.py","link_basis":"harvester_set","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":"dfc097b3bdb4acb8"}},{"code_sha256_prefix":"896a6c529fb43b9d","entry":"get_blocks","repo":"yoonjong12/pinsage","repo_kind":"listed","path":"evaluation.py","file_url":"https://github.com/yoonjong12/pinsage/blob/HEAD/evaluation.py","link_basis":"harvester_set","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":"896a6c529fb43b9d"}},{"code_sha256_prefix":"302c59855b3fbcec","entry":"node_to_item","repo":"yoonjong12/pinsage","repo_kind":"listed","path":"evaluation.py","file_url":"https://github.com/yoonjong12/pinsage/blob/HEAD/evaluation.py","link_basis":"harvester_set","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":"302c59855b3fbcec"}},{"code_sha256_prefix":"03c3e3f5dfa7773a","entry":"random_walk","repo":"dmlc/dgl","repo_kind":"listed","path":"python/dgl/sampling/pinsage.py","file_url":"https://github.com/dmlc/dgl/blob/HEAD/python/dgl/sampling/pinsage.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"03c3e3f5dfa7773a"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}