def create_decoder(config, training_representation, sampling_representation):
    if config["combination"] == 'concat':
        enc_nhids = config["enc_nhids"] * 4
    else:
        enc_nhids = config["enc_nhids"] * 2

    decoder = Decoder(config['trg_vocab_size'], config['dec_embed'],
                      config['dec_nhids'], enc_nhids)
    decoder.weights_init = IsotropicGaussian(config['weight_scale'])
    decoder.biases_init = Constant(0)
    decoder.push_initialization_config()
    decoder.transition.weights_init = Orthogonal()
    decoder.initialize()

    cost, samples, search_model, punctuation_marks, mask = use_decoder_on_representations(
        decoder, training_representation, sampling_representation)

    return decoder, cost, samples, search_model, punctuation_marks, mask