gusye1234 / recad

A unified framework for recommender system attacking
GNU General Public License v3.0
22 stars 4 forks source link

数据加载问题 #6

Open jsxie9 opened 3 weeks ago

jsxie9 commented 3 weeks ago

感谢提供这么好的代码库,有几个疑问 1.提供的示例运行代码 dataset_name = "ml1m" config = { "victim_data": dataset.from_config("implicit", dataset_name, need_graph=True), "attack_data": dataset.from_config("explicit", dataset_name).partial_sample( user_ratio=0.2 ), }

这里的victim_data使用隐式(implicit)加载方式,而攻击数据attack_data用的显式(explicit),两者是不一致的,如何理解?

  1. https://github.com/gusye1234/recad/blob/main/recad/dataset/implicit.py line206 生成的self.UserItemNet对应的是test.csv中的图,而不是train.csv,是否有误?
jsxie9 commented 3 weeks ago

1.将Step 1中的测试数据改为了训练数据 2.修改了aush.py中的重构损失计算

g_loss_rec = mse_loss(
                fake_profiles * selects_mask * ZR_mask,
                # selects_mask * input_template * ZR_mask, #之前的代码,一直为0
                selects_mask * real_profiles * ZR_mask, #修改过的
            )

3.使用如下readme提供的如下配置运行代码

from recad import dataset, model, workflow

dataset_name = "ml1m"
config = {
    "victim_data": dataset.from_config("implicit", dataset_name, need_graph=True),
    "attack_data": dataset.from_config("explicit", dataset_name).partial_sample(
        user_ratio=0.2
    ),
    "victim": model.from_config("victim", "lightgcn"),
    "attacker": model.from_config("attacker", "aush"),
    "rec_epoch": 20,
}
workflow_inst = workflow.from_config("no defense", **config)
workflow_inst.execute()

得到的结果和论文相差很大,如图

image

但是,如果不进行1和2步骤的修改,攻击是无效的