{"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/clusterea-scalable-entity-alignment-with","title":"ClusterEA: Scalable Entity Alignment with Stochastic Training and Normalized Mini-batch Similarities","arxiv_id":"2205.10312","date":"2022-05-20","proceeding":null,"authors":["Yunjun Gao","Xiaoze Liu","Junyang Wu","Tianyi Li","Pengfei Wang","Lu Chen"],"abstract":"Entity alignment (EA) aims at finding equivalent entities in different knowledge graphs (KGs). Embedding-based approaches have dominated the EA task in recent years. Those methods face problems that come from the geometric properties of embedding vectors, including hubness and isolation. To solve these geometric problems, many normalization approaches have been adopted for EA. However, the increasing scale of KGs renders it hard for EA models to adopt the normalization processes, thus limiting their usage in real-world applications. To tackle this challenge, we present ClusterEA, a general framework that is capable of scaling up EA models and enhancing their results by leveraging normalization methods on mini-batches with a high entity equivalent rate. ClusterEA contains three components to align entities between large-scale KGs, including stochastic training, ClusterSampler, and SparseFusion. It first trains a large-scale Siamese GNN for EA in a stochastic fashion to produce entity embeddings. Based on the embeddings, a novel ClusterSampler strategy is proposed for sampling highly overlapped mini-batches. Finally, ClusterEA incorporates SparseFusion, which normalizes local and global similarity and then fuses all similarity matrices to obtain the final similarity matrix. Extensive experiments with real-life datasets on EA benchmarks offer insight into the proposed framework, and suggest that it is capable of outperforming the state-of-the-art scalable EA framework by up to 8 times in terms of Hits@1.","url_abs":"https://arxiv.org/abs/2205.10312v2","url_pdf":"https://arxiv.org/pdf/2205.10312v2.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":"clusterea-scalable-entity-alignment-with","repo_url":"https://github.com/joker-xii/clusterea","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"clusterea-scalable-entity-alignment-with","repo_url":"https://github.com/immortals88/demo-sea","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok"}}],"tasks":[{"task_slug":"entity-alignment","task_name":"Entity Alignment"},{"task_slug":"entity-embeddings","task_name":"Entity Embeddings"},{"task_slug":"knowledge-graphs","task_name":"Knowledge Graphs"}],"methods":[{"method_slug":"align","method_name":"ALIGN"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/entity-alignment-on-dbp1m-de-en","task":"Entity Alignment","dataset":"DBP1M DE-EN","model":"ClusterEA-D","rank_in_archive_order":2,"of":5,"metrics":{"Hit@1":"0.288"},"uses_additional_data":false},{"leaderboard":"/sota/entity-alignment-on-dbp1m-de-en","task":"Entity Alignment","dataset":"DBP1M DE-EN","model":"ClusterEA-R","rank_in_archive_order":4,"of":5,"metrics":{"Hit@1":"0.260"},"uses_additional_data":false},{"leaderboard":"/sota/entity-alignment-on-dbp1m-de-en","task":"Entity Alignment","dataset":"DBP1M DE-EN","model":"ClusterEA-G","rank_in_archive_order":5,"of":5,"metrics":{"Hit@1":"0.100"},"uses_additional_data":false},{"leaderboard":"/sota/entity-alignment-on-dbp1m-fr-en","task":"Entity Alignment","dataset":"DBP1M FR-EN","model":"ClusterEA","rank_in_archive_order":2,"of":2,"metrics":{"Hit@1":"0.281"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2205.10312","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2205.10312"}},"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/immortals88/demo-sea","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/joker-xii/clusterea","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"unverified":15},"by_repo_kind":{"official":{"samples":15,"ran":0,"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":"ec075576300fe613","entry":"func","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/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":"ec075576300fe613"}},{"code_sha256_prefix":"2ae51bac02bb57ed","entry":"get_hits","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/evaluation.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/evaluation.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":"2ae51bac02bb57ed"}},{"code_sha256_prefix":"dd1653254381aeec","entry":"get_weighted_adj","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/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":"dd1653254381aeec"}},{"code_sha256_prefix":"df6ad42257f81809","entry":"gumbel_sinkhorn","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/common/sinkhorn.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/common/sinkhorn.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":"df6ad42257f81809"}},{"code_sha256_prefix":"31c701cd07a4b969","entry":"ifunc","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/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":"31c701cd07a4b969"}},{"code_sha256_prefix":"dbc9c23a3c39a78f","entry":"load_dataset","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/dataset.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/dataset.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":"dbc9c23a3c39a78f"}},{"code_sha256_prefix":"c85936a2675a8f4f","entry":"log_sinkhorn_norm","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/common/sinkhorn.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/common/sinkhorn.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":"c85936a2675a8f4f"}},{"code_sha256_prefix":"d9853774c113d3be","entry":"my_dist_func","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/evaluation.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/evaluation.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":"d9853774c113d3be"}},{"code_sha256_prefix":"84598856fa1287c7","entry":"readobj","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/dto.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/dto.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":"84598856fa1287c7"}},{"code_sha256_prefix":"d2075fcef8467194","entry":"rearrange_ids","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/align_batch.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/align_batch.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":"d2075fcef8467194"}},{"code_sha256_prefix":"a4e09c74ff5a24ff","entry":"sinkhorn_norm","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/common/sinkhorn.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/common/sinkhorn.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":"a4e09c74ff5a24ff"}},{"code_sha256_prefix":"c7588b10b2803a0f","entry":"to_json","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/dto.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/dto.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":"c7588b10b2803a0f"}},{"code_sha256_prefix":"c2134ade863a5542","entry":"view2","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/utils_largeea.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/utils_largeea.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":"c2134ade863a5542"}},{"code_sha256_prefix":"dfa7dc642bf2a74a","entry":"view3","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/utils_largeea.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/utils_largeea.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":"dfa7dc642bf2a74a"}},{"code_sha256_prefix":"86b4c5eb684f9131","entry":"view_back","repo":"joker-xii/clusterea","repo_kind":"official","path":"src/utils_largeea.py","file_url":"https://github.com/joker-xii/clusterea/blob/HEAD/src/utils_largeea.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":"86b4c5eb684f9131"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}