def get_model(name, dataset): """ Hyperparameters are empirically determined, not opitmized. """ field_dims = dataset.field_dims print('field_dims={}, {}'.format(type(field_dims), field_dims.tolist())) #1/0 if name == 'lr': return LogisticRegressionModel(field_dims) elif name == 'fm': return FactorizationMachineModel(field_dims, embed_dim=16) elif name == 'hofm': return HighOrderFactorizationMachineModel(field_dims, order=3, embed_dim=16) elif name == 'ffm': return FieldAwareFactorizationMachineModel(field_dims, embed_dim=4) elif name == 'fnn': return FactorizationSupportedNeuralNetworkModel(field_dims, embed_dim=16, mlp_dims=(16, 16), dropout=0.2) elif name == 'wd': return WideAndDeepModel(field_dims, embed_dim=16, mlp_dims=(16, 16), dropout=0.2) elif name == 'ipnn': #return ProductNeuralNetworkModel(field_dims, embed_dim=16, mlp_dims=(16,), method='inner', dropout=0.2) #return ProductNeuralNetworkModel(field_dims, embed_dim=64, mlp_dims=(16,16), method='inner', dropout=0.2) return ProductNeuralNetworkModel(field_dims, embed_dim=64, mlp_dims=(128,64,128,128,128,), method='inner', dropout=0.2) elif name == 'opnn': return ProductNeuralNetworkModel(field_dims, embed_dim=16, mlp_dims=(16,), method='outer', dropout=0.2) elif name == 'dcn': return DeepCrossNetworkModel(field_dims, embed_dim=16, num_layers=3, mlp_dims=(16, 16), dropout=0.2) elif name == 'nfm': return NeuralFactorizationMachineModel(field_dims, embed_dim=64, mlp_dims=(64,), dropouts=(0.2, 0.2)) elif name == 'ncf': # only supports MovieLens dataset because for other datasets user/item colums are indistinguishable assert isinstance(dataset, MovieLens20MDataset) or isinstance(dataset, MovieLens1MDataset) return NeuralCollaborativeFiltering(field_dims, embed_dim=16, mlp_dims=(16, 16), dropout=0.2, user_field_idx=dataset.user_field_idx, item_field_idx=dataset.item_field_idx) elif name == 'fnfm': return FieldAwareNeuralFactorizationMachineModel(field_dims, embed_dim=64, mlp_dims=(64,32,), dropouts=(0.2, 0.2)) elif name == 'dfm': #return DeepFactorizationMachineModel(field_dims, embed_dim=16, mlp_dims=(16, 16), dropout=0.2) #return DeepFactorizationMachineModel(field_dims, embed_dim=64, mlp_dims=(256, 256, 256, 256, 256,256), dropout=0.2) #return DeepFactorizationMachineModel(field_dims, embed_dim=128, mlp_dims=(400, 400, 400, 400), dropout=0.2) return DeepFactorizationMachineModel(field_dims, embed_dim=64, mlp_dims=(128, 128, 128), dropout=0.2) elif name == 'xdfm': return ExtremeDeepFactorizationMachineModel( field_dims, embed_dim=16, cross_layer_sizes=(16, 16), split_half=False, mlp_dims=(16, 16), dropout=0.2) elif name == 'afm': return AttentionalFactorizationMachineModel(field_dims, embed_dim=16, attn_size=16, dropouts=(0.2, 0.2)) elif name == 'afi': return AutomaticFeatureInteractionModel( field_dims, embed_dim=16, atten_embed_dim=64, num_heads=2, num_layers=3, mlp_dims=(400, 400), dropouts=(0, 0, 0)) elif name == 'afn': print("Model:AFN") return AdaptiveFactorizationNetwork( field_dims, embed_dim=64, LNN_dim=1500, mlp_dims=(400, 400, 400), dropouts=(0, 0, 0)) else: raise ValueError('unknown model name: ' + name)
def get_model(name, field_dims): """ Hyperparameters are empirically determined, not opitmized. """ if name == 'lr': return LogisticRegressionModel(field_dims) elif name == 'fm': return FactorizationMachineModel(field_dims, embed_dim=16) elif name == 'ffm': return FieldAwareFactorizationMachineModel(field_dims, embed_dim=4) elif name == 'fnn': return FactorizationSupportedNeuralNetworkModel(field_dims, embed_dim=16, mlp_dims=(16, 16), dropout=0.2) elif name == 'wd': return WideAndDeepModel(field_dims, embed_dim=16, mlp_dims=(16, 16), dropout=0.2) elif name == 'ipnn': return ProductNeuralNetworkModel(field_dims, embed_dim=16, mlp_dims=(16, ), method='inner', dropout=0.2) elif name == 'opnn': return ProductNeuralNetworkModel(field_dims, embed_dim=16, mlp_dims=(16, ), method='outer', dropout=0.2) elif name == 'dcn': return DeepCrossNetworkModel(field_dims, embed_dim=16, num_layers=3, mlp_dims=(16, 16), dropout=0.2) elif name == 'nfm': return NeuralFactorizationMachineModel(field_dims, embed_dim=64, mlp_dims=(64, ), dropouts=(0.2, 0.2)) elif name == 'fnfm': return FieldAwareNeuralFactorizationMachineModel(field_dims, embed_dim=4, mlp_dims=(64, ), dropouts=(0.2, 0.2)) elif name == 'dfm': return DeepFactorizationMachineModel(field_dims, embed_dim=16, mlp_dims=(16, 16), dropout=0.2) elif name == 'xdfm': return ExtremeDeepFactorizationMachineModel(field_dims, embed_dim=16, cross_layer_sizes=(16, 16), split_half=False, mlp_dims=(16, 16), dropout=0.2) elif name == 'afm': return AttentionalFactorizationMachineModel(field_dims, embed_dim=16, attn_size=16, dropouts=(0.2, 0.2)) elif name == 'afi': return AutomaticFeatureInteractionModel(field_dims, embed_dim=32, num_heads=4, num_layers=2, mlp_dims=(16, 16), dropouts=(0.2, 0.2)) else: raise ValueError('unknown model name: ' + name)