Awesome
Studying Graph Based Recommendation Systems under Adversarial Pressure
CS224W @ Stanford, Fall 2018
Overview
IMPORTANT: because SNAP.py uses Python 2.7, we use Python 2.7 in this project as well.
This repo houses code that experiments with how graph-based recommender systems react under Adversarial pressure. We use a variant of the Pixie algorithm to recommend items to users on bipartite networks. Throughout our code we use the SNAP library for common graph operations.
Directory Structure
-
gbra
: contains all our core code. Any miscellaneous scripts and documentation files live in the outer level of the repo.gbra/recommenders
: contains the recommender system black box. Recommender systems in this module can be instantiated on a graph, trained, evaluated, and asked for predictions.gbra/attackers
: contains different classes of attackers.gbra/data
: contains routines for fetching different datasets and instantiating them as graphs.gbra/feature_extraction
: contains classes and routines for extracting features from graphs.gbra/util
: contains utility functions such asEIGraph
, an abstraction for Entity-Item graphs, and some useful asserts.
-
exp_*.py
: experiment files. To maintain some order on the repo, make a new python file for each separate experiment you plan to run, then run it aspython exp_<experiment name>.py
fromgbra/
. Add all graphing code to its corresponding experiment file. -
Utility logic for each submodule lives in
gbra/util/<submodule>_utils.py
.
Quick Start
- Create a Python 2 virtual environment and activate it.
- Install SNAP from within that virtual environment
python exp_sample.py
- Profit