RUCAIBox / RecBole-CDR

This is a library built upon RecBole for cross-domain recommendation algorithms
MIT License
82 stars 12 forks source link

[🐛BUG] CrossDomainSingleDataset。 #54

Closed WYH-han closed 1 year ago

WYH-han commented 1 year ago

描述这个 bug 由于field2id_token用于存储某个feature下,项目中的remap_id及其所对应的原始token。dataset.py中,CrossDomainSingleDataset的_remap_fields()中,通过该行代码实现: self.field2id_token[field_name] = list(map_dict.keys()) 但由于map_dict为ChainMap格式,通过.keys()取出其中的token时,顺序并非按照chain中dict的存储顺序。举个例子,针对user_id,顺序应该为先overlap_user再domain_specific_user,而上述代码得到的user_id顺序刚好相反。因此需要修改取出token的方式。 image

预期 修改取key方式,定义get_keys_from_chainmap_by_order()用于按正序取ChainMap的keys(即原始token):

def get_keys_from_chainmap_by_order(map_dict):
    merged_dict = dict()
    for dict_item in map_dict.maps:
        merged_dict.update(dict_item)
    return list(merged_dict.keys())

self.field2id_token[field_name] = get_keys_from_chainmap_by_order(map_dict)
Wicknight commented 1 year ago

@WYH-han 感谢您的提醒,我们已经在 #56 中修复了这个问题!