This repository is a reproducible implementation accompanying the study "Selective Multi-Source Information Fusion for Cross-City Site Recommendation" by Jia Zhuoying (贾卓颖). It extends the public OpenSiteRec repository with:
- method-level reproduction of MF, LightGCN, and OTC;
- split and random-seed sensitivity analysis;
- source-entity structural reweighting;
- brand-level dynamic source fusion and a zero-transfer fallback;
- a ranking-aware ground-cost prototype with LambdaLoss and log-space Sinkhorn;
- HKG-LightGCN experiments for strong-representation analysis.
The implementation preserves the original dataset and baseline directories. Generated checkpoints and experiment outputs are intentionally excluded from Git so that the repository contains only source code, tests, and compact figures needed to understand the reported workflow.
OpenSiteRec/
|-- Chicago/, NYC/, Singapore/, Tokyo/ # Public OpenSiteRec data
|-- baseline/ # Original public baseline code
|-- reproduction/ # Reproduction and improvement code
| |-- data.py # 5-core filtering and 7:1:2 splits
| |-- models.py, training.py # MF/LightGCN and BPR training
| |-- otc.py # GW projection and static OTC
| |-- improvements.py # Reweighting and dynamic fusion
| |-- learnable_ground_cost.py # LambdaLoss and log-Sinkhorn
| |-- hkg.py # Heterogeneous graph backbone
| |-- run*.py # Experiment entry points
| `-- RESULTS.md # Recorded results and diagnostics
|-- tests/test_reproduction.py # Deterministic and numerical tests
`-- requirements-reproduction.txt
Python 3.10 or newer is recommended. The reported experiments used Python 3.13.5, PyTorch 2.8.0 with CUDA 12.9, POT 0.9.7, and an RTX 4060 Laptop GPU. Install a PyTorch build appropriate for your CUDA runtime, then install the remaining dependencies:
python -m pip install -r requirements-reproduction.txtRun commands from the repository root. The default protocol uses seed 42 and the per-brand fixed split described in the paper.
-
Search and train MF/LightGCN, then run static OTC:
python -m reproduction.run --trials 16
-
Evaluate backbone sensitivity with fixed splits and hyperparameters:
python -m reproduction.multiseed --seeds 42 43 44
-
Run structural reweighting and dynamic fusion:
python -m reproduction.run_improvements python -m reproduction.run_improvement_multiseed --seeds 42 43 44
-
Run the ranking-aware ground-cost prototype:
python -m reproduction.run_learnable_cost
-
Build the HKG strong-representation scenario and compare OTC variants:
python -m reproduction.run_hkg_otc python -m reproduction.run_hkg_enhanced_otc
-
Regenerate compact figures:
python -m reproduction.plot_results python -m reproduction.plot_improvements
The scripts write checkpoints and JSON summaries to ignored
reproduction_outputs* and reproduction_enhancements directories. Use
--help on each entry point to inspect device, seed, split, and output-path
options.
- The 5-core filter is applied to brands using raw POI-record counts.
- Each retained brand is split into 70% train, 10% validation, and 20% test.
- Hyperparameters and OTC source weights are selected using validation data.
- Test ranking masks regions observed in the training split.
gamma = 0is included so that fusion can return to the local backbone.- HKG uses train+validation retraining, while the basic LightGCN table uses a training-set checkpoint. Cross-protocol differences must not be interpreted as strict architecture attribution.
The public OTC implementation, exact original split files, and final per-city configuration were unavailable. Results are therefore presented as method-level reproduction rather than exact numerical reproduction. See reproduction/RESULTS.md for the recorded metrics, negative results, and limitations.
python -m pytest tests/test_reproduction.py -qThe tests cover deterministic splitting, masked ranking metrics, GW projection, source-mass normalization, nonnegative dynamic weights, log-Sinkhorn marginal constraints and gradients, LambdaLoss ordering, and HKG graph construction.
OpenSiteRec data and the original baseline implementation come from HestiaSky/OpenSiteRec. Their original license is retained in LICENSE. This fork adds independent reproduction and improvement code without claiming exact reproduction of the published OTC numbers.