The supported modules currently include:
- Datasets: ml1m, yelp, Amazon-game, Epinions, Book-crossing, BeerAdvocate, dianping, food, ModCloth, ratebeer, RentTheRunway. Please checkout more details in
data/ - Victim Models: MF, LightGCN, NCF.
- Attack Models: Heuristic(random, average, segment, bandwagon); AUSH; AIA; Legup
🚀🚀🚀 We are opening for any contribution or suggestion about adding more datasets and models
Install
Install by pip:
pip install recad
Or from source:
git clone https://github.com/gusye1234/recad.git
cd recad
pip install -e "."
Quick Start
Try it from command line:
recad_runner --attack="aush" --victim="lightgcn"
Or you can write your own script:
from recad import dataset, model, workflow
dataset_name = "ml1m"
config = {
# quickly asscess the dataset with implicit feedback
"victim_data": dataset.from_config("implicit", dataset_name, need_graph=True),
# sample part of the explicit dataset as the attack data
"attack_data": dataset.from_config("explicit", dataset_name).partial_sample(
user_ratio=0.2
),
# set up models config, and later will be instantiated in workflow
"victim": model.from_config("victim", "lightgcn"),
"attacker": model.from_config("attacker", "aush"),
"rec_epoch": 20,
}
workflow_inst = workflow.from_config("no defense", **config)
# run the attacking
workflow_inst.execute()
Docs
recad is designed to help users use and debug interactively, and mainly has three modules: dataset, model, workflow
Dataset
import recad
# how many datasets we support?
print(recad.print_datasets())
# how many configs for one dataset?
recad.dataset_print_help("ml1m")
# init from a dataset with default parameters
dataset = recad.dataset.from_config("implicit", "ml1m")
# init from a dataset and modifies parameters
dataset = recad.dataset.from_config("implicit", "ml1m", test_batch_size=50, device="cuda")
Model
# how many models we support?
print(recad.print_models())
#how many configs for one model?
recad.model_print_help("lightgcn")
# lazy-init from a model with default parameters
# Not a torch.nn.Module class! Can't be used for training and inferring
victim_model = recad.model.from_config("victim", "lightgcn")
# lazy-init from a model and modifies parameters
# Not a torch.nn.Module class! Can't be used for training and inferring
victim_model = recad.model.from_config("victim", "lightgcn", latent_dim_rec=256, lightGCN_n_layers=2)
# Model's have some parameters that are related to some runtime module, e.g. dataset
# `victim_model` now is an actually torch.nn.Module
dataset = recad.dataset.from_config("implicit", "ml1m")
victim_model = recad.model.from_config("victim", "lightgcn", dataset=dataset).I()
Workflow
# how many workflows we support?
print(recad.print_workflows())
#how many configs for one workflow?
recad.workflow_print_help("no defense")
# init a workflow takes all the components we mentioned before
config = {
"victim_data": ..., # Your dataset for victim model, using dataset.from_config...
"attack_data": ..., # Your dataset for attacker model, using dataset.from_config...
"victim": ..., # Your victim model, using model.from_config...
"attacker": model.from_config(
"attacker", ARG.attack, filler_num=ARG.filler_num
), # Your attacker model, using model.from_config...
"rec_epoch": ..., # Your training epoch for victim model, Int
"attack_epoch": ..., # Your training epoch for attacker model, Int
}
workflow_inst = workflow.from_config("no defense", **config)
# Start
workflow_inst.execute
Please checkout the whole pipeline and more details for each module in recad.main🤗.
Confused about what a component is doing? Each component instance in recad will have a print_help method to return the input/output information:
dataset.print_help()
# (ml1m)Information:
# ╒════════════════════╤═══════════════════════════════════╕
# │ n_users │ 5950 │
# ╞════════════════════╪═══════════════════════════════════╡
# │ n_items │ 3702 │
# ├────────────────────┼───────────────────────────────────┤
# │ train_interactions │ 468649 │
# ├────────────────────┼───────────────────────────────────┤
# │ valid_interactions │ 49390 │
# ├────────────────────┼───────────────────────────────────┤
# │ test_interactions │ 49494 │
# ├────────────────────┼───────────────────────────────────┤
# │ train_dict │ <class 'dict'> 5950 │
# ├────────────────────┼───────────────────────────────────┤
# │ valid_dict │ <class 'dict'> 5583 │
# ├────────────────────┼───────────────────────────────────┤
# │ test_dict │ <class 'dict'> 5677 │
# ├────────────────────┼───────────────────────────────────┤
# │ graph │ torch torch.float32, (9652, 9652) │
# ╘════════════════════╧═══════════════════════════════════╛
# (ml1m)Batch data:
# ╒════════════════╤═════════════╤═══════════════╕
# │ name │ type │ shape │
# ╞════════════════╪═════════════╪═══════════════╡
# │ users │ torch.int64 │ batch[0~2048] │
# ├────────────────┼─────────────┼───────────────┤
# │ positive_items │ torch.int64 │ batch[0~2048] │
# ├────────────────┼─────────────┼───────────────┤
# │ negative_items │ torch.int64 │ batch[0~2048] │
# ╘════════════════╧═════════════╧═══════════════╛
Contribution
Install pre-commit first to make sure the commits you made is well-formatted:
pip install pre-commit
pre-commit install
Metadata
Release files for recad 0.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| recad-0.0.2.tar.gz | 37.1 kB | Without provenance | Details for recad-0.0.2.tar.gz |
Release files / recad-0.0.2.tar.gz
| Download URL | recad-0.0.2.tar.gz |
|---|---|
| Size | 37.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ecfe8d5589264578072880d47597b044020f49e651b3c07fe483b602eba9d59d
|
|
BLAKE2b-256 checksum How to use checksums |
4bd81bee5d37c555b75ad487e173c636d2d4ce2e55a2dd6bc948986439352c41
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.9.13
|
Security for recad 0.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.