{"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/lamp-extracting-text-from-gradients-with","title":"LAMP: Extracting Text from Gradients with Language Model Priors","arxiv_id":"2202.08827","date":"2022-02-17","proceeding":null,"authors":["Mislav Balunović","Dimitar I. Dimitrov","Nikola Jovanović","Martin Vechev"],"abstract":"Recent work shows that sensitive user data can be reconstructed from gradient updates, breaking the key privacy promise of federated learning. While success was demonstrated primarily on image data, these methods do not directly transfer to other domains such as text. In this work, we propose LAMP, a novel attack tailored to textual data, that successfully reconstructs original text from gradients. Our attack is based on two key insights: (i) modeling prior text probability with an auxiliary language model, guiding the search towards more natural text, and (ii) alternating continuous and discrete optimization, which minimizes reconstruction loss on embeddings, while avoiding local minima by applying discrete text transformations. Our experiments demonstrate that LAMP is significantly more effective than prior work: it reconstructs 5x more bigrams and 23% longer subsequences on average. Moreover, we are the first to recover inputs from batch sizes larger than 1 for textual models. These findings indicate that gradient updates of models operating on textual data leak more information than previously thought.","url_abs":"https://arxiv.org/abs/2202.08827v2","url_pdf":"https://arxiv.org/pdf/2202.08827v2.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":"lamp-extracting-text-from-gradients-with","repo_url":"https://github.com/eth-sri/lamp","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"lamp-extracting-text-from-gradients-with","repo_url":"https://github.com/eth-sri/tableak","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"federated-learning","task_name":"Federated Learning"},{"task_slug":"language-modeling","task_name":"Language Modeling"},{"task_slug":"language-modelling","task_name":"Language Modelling"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2202.08827","atlas_url":"https://app.syntology.ai/?focus=2202.08827","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2202.08827"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/eth-sri/lamp","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/eth-sri/tableak","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":4,"unverified":1},"by_repo_kind":{"official":{"samples":5,"ran":4,"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":"25c899400211e9a1","entry":"compute_grads","repo":"eth-sri/lamp","repo_kind":"official","path":"utilities.py","file_url":"https://github.com/eth-sri/lamp/blob/HEAD/utilities.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"25c899400211e9a1"}},{"code_sha256_prefix":"b11d869cb369c875","entry":"embedding_from_weights","repo":"eth-sri/lamp","repo_kind":"official","path":"nlp_utils.py","file_url":"https://github.com/eth-sri/lamp/blob/HEAD/nlp_utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b11d869cb369c875"}},{"code_sha256_prefix":"8cd47637eebf896d","entry":"get_closest_tokens","repo":"eth-sri/lamp","repo_kind":"official","path":"utilities.py","file_url":"https://github.com/eth-sri/lamp/blob/HEAD/utilities.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"8cd47637eebf896d"}},{"code_sha256_prefix":"4e921eb22dcb5f0d","entry":"grad_dist","repo":"eth-sri/lamp","repo_kind":"official","path":"utilities.py","file_url":"https://github.com/eth-sri/lamp/blob/HEAD/utilities.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"4e921eb22dcb5f0d"}},{"code_sha256_prefix":"22e5391a01ca0abe","entry":"load_gpt2_from_dict","repo":"eth-sri/lamp","repo_kind":"official","path":"nlp_utils.py","file_url":"https://github.com/eth-sri/lamp/blob/HEAD/nlp_utils.py","link_basis":"harvester_set","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":"22e5391a01ca0abe"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}