예제 #1
0
 def __init__(self, field_dims, embed_dim, mlp_dims, dropouts):
     super().__init__()
     self.embedding = FeaturesEmbedding(field_dims, embed_dim)
     self.linear = LogisticRegressionModel(field_dims)
     self.fm = torch.nn.Sequential(FactorizationMachine(reduce_sum=False),
                                   torch.nn.BatchNorm1d(embed_dim),
                                   torch.nn.Dropout(dropouts[0]))
     self.mlp = MultiLayerPerceptron(embed_dim, mlp_dims, dropouts[1])
예제 #2
0
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)
예제 #3
0
 def __init__(self, field_dims, embed_dim, mlp_dims, dropouts):
     super().__init__()
     self.linear = LogisticRegressionModel(field_dims)
     self.ffm = torch.nn.Sequential(
         FieldAwareFactorizationMachine(field_dims, embed_dim),
         torch.nn.BatchNorm1d(embed_dim), torch.nn.Dropout(dropouts[0]))
     self.ffm_output_dim = len(field_dims) * (len(field_dims) -
                                              1) // 2 * embed_dim
     self.mlp = MultiLayerPerceptron(self.ffm_output_dim, mlp_dims,
                                     dropouts[1])
예제 #4
0
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)