Home

Awesome

<div align="center"> <img src="https://github.com/lyyf2002/ASGEA/blob/master/IMG/logo.png" alt="Logo" width="400"> </div>

πŸ•οΈ ASGEA: Exploiting Logic Rules from Align-Subgraphs for Entity Alignment

license arxiv badge Pytorch

This paper proposes the Align-Subgraph Entity Alignment (ASGEA) framework to exploit logic rules from Align-Subgraphs. ASGEA uses anchor links as bridges to construct Align-Subgraphs and spreads along the paths across KGs, which distinguishes it from the embedding-based methods.

<div align="center"> <img src="https://github.com/lyyf2002/ASGEA/blob/master/IMG/model.jpg" width="95%" height="auto" /> </div>

πŸ”¬ Dependencies

pytorch 1.12.0
torch_geometric 2.2.0
torch_scatter 2.0.9
transformers 4.26.1

πŸš€ Train

# FBDB15K & FBYG15K
>> bash run.sh FB
# DBP15K
>> bash run_dbp.sh DBP
# Multi OpenEA
>> bash run_oea.sh OEA

πŸ“š Dataset

❗NOTE: Download from ufile (1.69G) and unzip it to make those files satisfy the following file hierarchy:

ROOT
β”œβ”€β”€ data
β”‚   └── mmkg
└── ASGEA

Code Path

<details> <summary>πŸ‘ˆ πŸ”Ž Click</summary>
ASGEA
β”œβ”€β”€ base_model.py
β”œβ”€β”€ data.py
β”œβ”€β”€ load_data.py
β”œβ”€β”€ models.py
β”œβ”€β”€ opt.py
β”œβ”€β”€ README.md
β”œβ”€β”€ run.sh
β”œβ”€β”€ run.slurm
β”œβ”€β”€ run_dbp.sh
β”œβ”€β”€ run_dbp.slurm
β”œβ”€β”€ run_oea.sh
β”œβ”€β”€ run_oea.slurm
β”œβ”€β”€ train.py
β”œβ”€β”€ utils.py
└── vis.py
</details>

Data Path

<details> <summary>πŸ‘ˆ πŸ”Ž Click</summary>
mmkg                                                         
β”œβ”€ DBP15K                                                    
β”‚  β”œβ”€ fr_en                                                  
β”‚  β”‚  β”œβ”€ att_features100.npy                                 
β”‚  β”‚  β”œβ”€ att_features500.npy                                 
β”‚  β”‚  β”œβ”€ att_rel_features100.npy                             
β”‚  β”‚  β”œβ”€ att_rel_features500.npy                             
β”‚  β”‚  β”œβ”€ att_val_features100.npy                             
β”‚  β”‚  β”œβ”€ att_val_features500.npy                             
β”‚  β”‚  β”œβ”€ en_att_triples                                      
β”‚  β”‚  β”œβ”€ ent_ids_1                                           
β”‚  β”‚  β”œβ”€ ent_ids_2                                           
β”‚  β”‚  β”œβ”€ fr_att_triples                                      
β”‚  β”‚  β”œβ”€ ill_ent_ids                                         
β”‚  β”‚  β”œβ”€ training_attrs_1                                    
β”‚  β”‚  β”œβ”€ training_attrs_2                                    
β”‚  β”‚  β”œβ”€ triples_1                                           
β”‚  β”‚  └─ triples_2                                           
β”‚  β”œβ”€ ja_en                                                  
β”‚  β”‚  β”œβ”€ att_features100.npy                                 
β”‚  β”‚  β”œβ”€ att_features500.npy                                 
β”‚  β”‚  β”œβ”€ att_rel_features100.npy                             
β”‚  β”‚  β”œβ”€ att_rel_features500.npy                             
β”‚  β”‚  β”œβ”€ att_val_features100.npy                             
β”‚  β”‚  β”œβ”€ att_val_features500.npy                             
β”‚  β”‚  β”œβ”€ en_att_triples                                      
β”‚  β”‚  β”œβ”€ ent_ids_1                                           
β”‚  β”‚  β”œβ”€ ent_ids_2                                           
β”‚  β”‚  β”œβ”€ ill_ent_ids                                         
β”‚  β”‚  β”œβ”€ ja_att_triples                                      
β”‚  β”‚  β”œβ”€ training_attrs_1                                    
β”‚  β”‚  β”œβ”€ training_attrs_2                                    
β”‚  β”‚  β”œβ”€ triples_1                                           
β”‚  β”‚  └─ triples_2                                           
β”‚  β”œβ”€ translated_ent_name                                    
β”‚  β”‚  β”œβ”€ dbp_fr_en.json                                      
β”‚  β”‚  β”œβ”€ dbp_ja_en.json                                      
β”‚  β”‚  └─ dbp_zh_en.json                                      
β”‚  └─ zh_en                                                  
β”‚     β”œβ”€ att_features100.npy                                 
β”‚     β”œβ”€ att_features500.npy                                 
β”‚     β”œβ”€ att_rel_features100.npy                             
β”‚     β”œβ”€ att_rel_features500.npy                             
β”‚     β”œβ”€ att_val_features100.npy                             
β”‚     β”œβ”€ att_val_features500.npy                             
β”‚     β”œβ”€ en_att_triples                                      
β”‚     β”œβ”€ ent_ids_1                                           
β”‚     β”œβ”€ ent_ids_2                                           
β”‚     β”œβ”€ ill_ent_ids                                         
β”‚     β”œβ”€ rule_test.txt                                       
β”‚     β”œβ”€ rule_train.txt                                      
β”‚     β”œβ”€ training_attrs_1                                    
β”‚     β”œβ”€ training_attrs_2                                    
β”‚     β”œβ”€ triples_1                                           
β”‚     β”œβ”€ triples_2                                           
β”‚     └─ zh_att_triples                                      
β”œβ”€ FBDB15K                                                   
β”‚  └─ norm                                                   
β”‚     β”œβ”€ DB15K_NumericalTriples.txt                          
β”‚     β”œβ”€ FB15K_NumericalTriples.txt                          
β”‚     β”œβ”€ att_features.npy                                    
β”‚     β”œβ”€ att_rel_features.npy                                
β”‚     β”œβ”€ att_val_features.npy                                
β”‚     β”œβ”€ ent_ids_1                                           
β”‚     β”œβ”€ ent_ids_2                                           
β”‚     β”œβ”€ fbid2name.txt                                       
β”‚     β”œβ”€ id2relation.txt                                     
β”‚     β”œβ”€ ill_ent_ids                                         
β”‚     β”œβ”€ training_attrs_1                                    
β”‚     β”œβ”€ training_attrs_2                                    
β”‚     β”œβ”€ triples_1                                           
β”‚     └─ triples_2                                           
β”œβ”€ FBYG15K                                                   
β”‚  └─ norm                                                   
β”‚     β”œβ”€ FB15K_NumericalTriples.txt                          
β”‚     β”œβ”€ YAGO15K_NumericalTriples.txt                        
β”‚     β”œβ”€ att_features.npy                                    
β”‚     β”œβ”€ att_rel_features.npy                                
β”‚     β”œβ”€ att_val_features.npy                                
β”‚     β”œβ”€ ent_ids_1                                           
β”‚     β”œβ”€ ent_ids_2                                           
β”‚     β”œβ”€ fbid2name.txt                                       
β”‚     β”œβ”€ id2relation.txt                                     
β”‚     β”œβ”€ ill_ent_ids                                         
β”‚     β”œβ”€ training_attrs_1                                    
β”‚     β”œβ”€ training_attrs_2                                    
β”‚     β”œβ”€ triples_1                                           
β”‚     └─ triples_2                                           
β”œβ”€ MEAformer                                                 
β”œβ”€ OpenEA                                                    
β”‚  β”œβ”€ OEA_D_W_15K_V1                                         
β”‚  β”‚  β”œβ”€ att_features.npy                                    
β”‚  β”‚  β”œβ”€ att_features500.npy                                 
β”‚  β”‚  β”œβ”€ att_rel_features.npy                                
β”‚  β”‚  β”œβ”€ att_rel_features500.npy                             
β”‚  β”‚  β”œβ”€ att_val_features.npy                                
β”‚  β”‚  β”œβ”€ att_val_features500.npy                             
β”‚  β”‚  β”œβ”€ attr_triples_1                                      
β”‚  β”‚  β”œβ”€ attr_triples_2                                      
β”‚  β”‚  β”œβ”€ ent_ids_1                                           
β”‚  β”‚  β”œβ”€ ent_ids_2                                           
β”‚  β”‚  β”œβ”€ ill_ent_ids                                         
β”‚  β”‚  β”œβ”€ rel_ids                                             
β”‚  β”‚  β”œβ”€ training_attrs_1                                    
β”‚  β”‚  β”œβ”€ training_attrs_2                                    
β”‚  β”‚  β”œβ”€ triples_1                                           
β”‚  β”‚  └─ triples_2                                           
β”‚  β”œβ”€ OEA_D_W_15K_V2                                         
β”‚  β”‚  β”œβ”€ att_features.npy                                    
β”‚  β”‚  β”œβ”€ att_features500.npy                                 
β”‚  β”‚  β”œβ”€ att_rel_features.npy                                
β”‚  β”‚  β”œβ”€ att_rel_features500.npy                             
β”‚  β”‚  β”œβ”€ att_val_features.npy                                
β”‚  β”‚  β”œβ”€ att_val_features500.npy                             
β”‚  β”‚  β”œβ”€ attr_triples_1                                      
β”‚  β”‚  β”œβ”€ attr_triples_2                                      
β”‚  β”‚  β”œβ”€ ent_ids_1                                           
β”‚  β”‚  β”œβ”€ ent_ids_2                                           
β”‚  β”‚  β”œβ”€ ill_ent_ids                                         
β”‚  β”‚  β”œβ”€ rel_ids                                             
β”‚  β”‚  β”œβ”€ training_attrs_1                                    
β”‚  β”‚  β”œβ”€ training_attrs_2                                    
β”‚  β”‚  β”œβ”€ triples_1                                           
β”‚  β”‚  └─ triples_2                                           
β”‚  β”œβ”€ OEA_D_Y_15K_V1                                         
β”‚  β”‚  β”œβ”€ 721_5fold                                           
β”‚  β”‚  β”‚  β”œβ”€ 1                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  β”œβ”€ 2                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  β”œβ”€ 3                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  β”œβ”€ 4                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  └─ 5                                                
β”‚  β”‚  β”‚     β”œβ”€ test_links                                    
β”‚  β”‚  β”‚     β”œβ”€ train_links                                   
β”‚  β”‚  β”‚     └─ valid_links                                   
β”‚  β”‚  β”œβ”€ attr_triples_1                                      
β”‚  β”‚  β”œβ”€ attr_triples_2                                      
β”‚  β”‚  β”œβ”€ ent_ids_1                                           
β”‚  β”‚  β”œβ”€ ent_ids_2                                           
β”‚  β”‚  β”œβ”€ ent_links                                           
β”‚  β”‚  β”œβ”€ ill_ent_ids                                         
β”‚  β”‚  β”œβ”€ rel_ids                                             
β”‚  β”‚  β”œβ”€ rel_triples_1                                       
β”‚  β”‚  β”œβ”€ rel_triples_2                                       
β”‚  β”‚  β”œβ”€ triples_1                                           
β”‚  β”‚  └─ triples_2                                           
β”‚  β”œβ”€ OEA_D_Y_15K_V2                                         
β”‚  β”‚  β”œβ”€ 721_5fold                                           
β”‚  β”‚  β”‚  β”œβ”€ 1                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  β”œβ”€ 2                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  β”œβ”€ 3                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  β”œβ”€ 4                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  └─ 5                                                
β”‚  β”‚  β”‚     β”œβ”€ test_links                                    
β”‚  β”‚  β”‚     β”œβ”€ train_links                                   
β”‚  β”‚  β”‚     └─ valid_links                                   
β”‚  β”‚  β”œβ”€ attr_triples_1                                      
β”‚  β”‚  β”œβ”€ attr_triples_2                                      
β”‚  β”‚  β”œβ”€ ent_ids_1                                           
β”‚  β”‚  β”œβ”€ ent_ids_2                                           
β”‚  β”‚  β”œβ”€ ent_links                                           
β”‚  β”‚  β”œβ”€ ill_ent_ids                                         
β”‚  β”‚  β”œβ”€ rel_ids                                             
β”‚  β”‚  β”œβ”€ rel_triples_1                                       
β”‚  β”‚  β”œβ”€ rel_triples_2                                       
β”‚  β”‚  β”œβ”€ triples_1                                           
β”‚  β”‚  └─ triples_2                                           
β”‚  β”œβ”€ OEA_EN_DE_15K_V1                                       
β”‚  β”‚  β”œβ”€ att_features.npy                                    
β”‚  β”‚  β”œβ”€ att_features500.npy                                 
β”‚  β”‚  β”œβ”€ att_rel_features.npy                                
β”‚  β”‚  β”œβ”€ att_rel_features500.npy                             
β”‚  β”‚  β”œβ”€ att_val_features.npy                                
β”‚  β”‚  β”œβ”€ att_val_features500.npy                             
β”‚  β”‚  β”œβ”€ attr_triples_1                                      
β”‚  β”‚  β”œβ”€ attr_triples_2                                      
β”‚  β”‚  β”œβ”€ ent_ids_1                                           
β”‚  β”‚  β”œβ”€ ent_ids_2                                           
β”‚  β”‚  β”œβ”€ ill_ent_ids                                         
β”‚  β”‚  β”œβ”€ rel_ids                                             
β”‚  β”‚  β”œβ”€ training_attrs_1                                    
β”‚  β”‚  β”œβ”€ training_attrs_2                                    
β”‚  β”‚  β”œβ”€ triples_1                                           
β”‚  β”‚  └─ triples_2                                           
β”‚  β”œβ”€ OEA_EN_DE_15K_V2                                       
β”‚  β”‚  β”œβ”€ 721_5fold                                           
β”‚  β”‚  β”‚  β”œβ”€ 1                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  β”œβ”€ 2                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  β”œβ”€ 3                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  β”œβ”€ 4                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  └─ 5                                                
β”‚  β”‚  β”‚     β”œβ”€ test_links                                    
β”‚  β”‚  β”‚     β”œβ”€ train_links                                   
β”‚  β”‚  β”‚     └─ valid_links                                   
β”‚  β”‚  β”œβ”€ attr_triples_1                                      
β”‚  β”‚  β”œβ”€ attr_triples_2                                      
β”‚  β”‚  β”œβ”€ ent_ids_1                                           
β”‚  β”‚  β”œβ”€ ent_ids_2                                           
β”‚  β”‚  β”œβ”€ ent_links                                           
β”‚  β”‚  β”œβ”€ ill_ent_ids                                         
β”‚  β”‚  β”œβ”€ rel_ids                                             
β”‚  β”‚  β”œβ”€ rel_triples_1                                       
β”‚  β”‚  β”œβ”€ rel_triples_2                                       
β”‚  β”‚  β”œβ”€ triples_1                                           
β”‚  β”‚  └─ triples_2                                           
β”‚  β”œβ”€ OEA_EN_FR_15K_V1                                       
β”‚  β”‚  β”œβ”€ att_features.npy                                    
β”‚  β”‚  β”œβ”€ att_rel_features.npy                                
β”‚  β”‚  β”œβ”€ att_val_features.npy                                
β”‚  β”‚  β”œβ”€ attr_triples_1                                      
β”‚  β”‚  β”œβ”€ attr_triples_2                                      
β”‚  β”‚  β”œβ”€ ent_ids_1                                           
β”‚  β”‚  β”œβ”€ ent_ids_2                                           
β”‚  β”‚  β”œβ”€ ill_ent_ids                                         
β”‚  β”‚  β”œβ”€ rel_ids                                             
β”‚  β”‚  β”œβ”€ training_attrs_1                                    
β”‚  β”‚  β”œβ”€ training_attrs_2                                    
β”‚  β”‚  β”œβ”€ triples_1                                           
β”‚  β”‚  └─ triples_2                                           
β”‚  β”œβ”€ OEA_EN_FR_15K_V2                                       
β”‚  β”‚  β”œβ”€ 721_5fold                                           
β”‚  β”‚  β”‚  β”œβ”€ 1                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  β”œβ”€ 2                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  β”œβ”€ 3                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  β”œβ”€ 4                                                
β”‚  β”‚  β”‚  β”‚  β”œβ”€ test_links                                    
β”‚  β”‚  β”‚  β”‚  β”œβ”€ train_links                                   
β”‚  β”‚  β”‚  β”‚  └─ valid_links                                   
β”‚  β”‚  β”‚  └─ 5                                                
β”‚  β”‚  β”‚     β”œβ”€ test_links                                    
β”‚  β”‚  β”‚     β”œβ”€ train_links                                   
β”‚  β”‚  β”‚     └─ valid_links                                   
β”‚  β”‚  β”œβ”€ attr_triples_1                                      
β”‚  β”‚  β”œβ”€ attr_triples_2                                      
β”‚  β”‚  β”œβ”€ ent_ids_1                                           
β”‚  β”‚  β”œβ”€ ent_ids_2                                           
β”‚  β”‚  β”œβ”€ ent_links                                           
β”‚  β”‚  β”œβ”€ ill_ent_ids                                         
β”‚  β”‚  β”œβ”€ rel_ids                                             
β”‚  β”‚  β”œβ”€ rel_triples_1                                       
β”‚  β”‚  β”œβ”€ rel_triples_2                                       
β”‚  β”‚  β”œβ”€ triples_1                                           
β”‚  β”‚  └─ triples_2                                           
β”‚  β”œβ”€ pkl                                                    
β”‚  β”‚  β”œβ”€ OEA_D_W_15K_V1_id_img_feature_dict.pkl              
β”‚  β”‚  β”œβ”€ OEA_D_W_15K_V2_id_img_feature_dict.pkl              
β”‚  β”‚  β”œβ”€ OEA_EN_DE_15K_V1_id_img_feature_dict.pkl            
β”‚  β”‚  └─ OEA_EN_FR_15K_V1_id_img_feature_dict.pkl       
β”‚  └─ data.py                                                
β”œβ”€ dump                                                      
β”œβ”€ embedding                                                 
β”‚  β”œβ”€ dbp_fr_en_char.pkl                                     
β”‚  β”œβ”€ dbp_fr_en_name.pkl                                     
β”‚  β”œβ”€ dbp_ja_en_char.pkl                                     
β”‚  β”œβ”€ dbp_ja_en_name.pkl                                     
β”‚  β”œβ”€ dbp_zh_en_char.pkl                                     
β”‚  β”œβ”€ dbp_zh_en_name.pkl                                     
β”‚  └─ glove.6B.300d.txt                                      
└─ pkls                                                      
   β”œβ”€ FBDB15K_id_img_feature_dict.pkl                        
   β”œβ”€ FBYG15K_id_img_feature_dict.pkl                        
   β”œβ”€ dbpedia_wikidata_15k_dense_GA_id_img_feature_dict.pkl  
   β”œβ”€ dbpedia_wikidata_15k_norm_GA_id_img_feature_dict.pkl   
   β”œβ”€ fr_en_GA_id_img_feature_dict.pkl                       
   β”œβ”€ ja_en_GA_id_img_feature_dict.pkl                       
   └─ zh_en_GA_id_img_feature_dict.pkl                       
</details>

🀝 Cite:

Please condiser citing this paper if you use the code or data from our work. Thanks a lot :)

@article{DBLP:journals/corr/abs-2402-11000,
  author       = {Yangyifei Luo and
                  Zhuo Chen and
                  Lingbing Guo and
                  Qian Li and
                  Wenxuan Zeng and
                  Zhixin Cai and
                  Jianxin Li},
  title        = {{ASGEA:} Exploiting Logic Rules from Align-Subgraphs for Entity Alignment},
  journal      = {CoRR},
  volume       = {abs/2402.11000},
  year         = {2024}
}