Skip to content

when "create_inverse_triples" is set to false for ConvE, the evaluation becomes extremely slow. #1482

@g-yit

Description

@g-yit

Describe the bug

In PyKEEN, when "create_inverse_triples" is set to false for ConvE, the evaluation becomes extremely slow.
image

How to reproduce

def replicate_conve():
    import pykeen.datasets
    import pykeen.models
    import pykeen.training
    import pykeen.optimizers
    import pykeen.evaluation
    from pykeen.losses import BCEAfterSigmoidLoss

    # Load the FB15K dataset
    dataset = pykeen.datasets.FB15k(create_inverse_triples=False)
    # Set up the loss function
    loss = BCEAfterSigmoidLoss(reduction='mean')
    # Initialize the ConvE model with the specified parameters
    model = pykeen.models.ConvE(
        embedding_dim=200,
        # input_channels=1,
        output_channels=32,
        embedding_height=10,
        embedding_width=20,
        kernel_height=3,
        kernel_width=3,
        input_dropout=0.2,
        feature_map_dropout=0.2,
        output_dropout=0.3,
        apply_batch_normalization=True,
        entity_initializer='xavier_normal',
        relation_initializer='xavier_normal',
        triples_factory=dataset.training,
        loss=loss
    ).to("cuda")

    # Set up the optimizer
    optimizer = pykeen.optimizers.Adam(
        params=model.get_grad_params(),
        lr=0.001
    )
    # Configure the training loop
    training_loop = pykeen.training.LCWATrainingLoop(
        model=model,
        triples_factory=dataset.training,
        optimizer=optimizer,
    )
    eval_callback = ZTrainingCallback(evaluation_triples=dataset.validation.mapped_triples,
                                      full_test_evaluation_triples=dataset.testing.mapped_triples,
                                      additional_filter_triples=dataset.training.mapped_triples)

    # Train the model
    training_loop.train(
        triples_factory=dataset.training,
        num_epochs=3,
        batch_size=128,
        label_smoothing=0.1,
        use_tqdm_batch=False,
        callbacks=[eval_callback],
    )

    # Evaluate the model
    evaluator = pykeen.evaluation.RankBasedEvaluator(filtered=True)
    results = evaluator.evaluate(
        model=model,
        mapped_triples=dataset.testing.mapped_triples,
        additional_filter_triples=[
            dataset.training.mapped_triples,
            dataset.validation.mapped_triples
        ]
    )

    # Output the results
    print(results.to_dict())

Environment

1.11.1-dev

Additional information

No response

Issue Template Checks

  • This is not a feature request (use a different issue template if it is)
  • This is not a question (use the discussions forum instead)
  • I've read the text explaining why including environment information is important and understand if I omit this information that my issue will be dismissed

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions