예제 #1
0
def create_network(args, text_reader, feature_tables, md=None):
    """Creates and returns the neural network according to the task at hand."""
    logger = logging.getLogger("Logger")
    
    if args.task.startswith('srl') and args.task != 'srl_predicates':
        num_tags = len(text_reader.tag_dict)
        distance_tables = utils.set_distance_features(md, args.max_dist, args.target_features,
                                                      args.pred_features)
        nn = ConvolutionalNetwork.create_new(feature_tables, distance_tables[0], 
                                             distance_tables[1], args.window, 
                                             args.convolution, args.hidden, num_tags)
        padding_left = text_reader.converter.get_padding_left(False)
        padding_right = text_reader.converter.get_padding_right(False)
        if args.identify:
            logger.info("Loading initial transition scores table for argument identification")
            transitions = srl.train_srl.init_transitions_simplified(text_reader.tag_dict)
            nn.transitions = transitions
            nn.learning_rate_trans = args.learning_rate_transitions
            
        elif not args.classify:
            logger.info("Loading initial IOB transition scores table")
            transitions = srl.train_srl.init_transitions(text_reader.tag_dict, 'iob')
            nn.transitions = transitions
            nn.learning_rate_trans = args.learning_rate_transitions
    
    elif args.task == 'lm':
        nn = LanguageModel.create_new(feature_tables, args.window, args.hidden)
        padding_left = text_reader.converter.get_padding_left(tokens_as_string=True)
        padding_right = text_reader.converter.get_padding_right(tokens_as_string=True)
        
    else:
        num_tags = len(text_reader.tag_dict)
        nn = Network.create_new(feature_tables, args.window, args.hidden, num_tags)
        if args.learning_rate_transitions > 0:
            transitions = np.zeros((num_tags + 1, num_tags), np.float)
            nn.transitions = transitions
            nn.learning_rate_trans = args.learning_rate_transitions

        padding_left = text_reader.converter.get_padding_left(args.task == 'pos')
        padding_right = text_reader.converter.get_padding_right(args.task == 'pos')
    
    nn.padding_left = np.array(padding_left)
    nn.padding_right = np.array(padding_right)
    nn.learning_rate = args.learning_rate
    nn.learning_rate_features = args.learning_rate_features
    
    if args.task == 'lm':
        layer_sizes = (nn.input_size, nn.hidden_size, 1)
    elif args.convolution > 0 and args.hidden > 0:
        layer_sizes = (nn.input_size, nn.hidden_size, nn.hidden2_size, nn.output_size)
    else:
        layer_sizes = (nn.input_size, nn.hidden_size, nn.output_size)
    
    logger.info("Created new network with the following layer sizes: %s"
                % ', '.join(str(x) for x in layer_sizes))
    
    return nn
예제 #2
0
def load_network():
    """
    Loads the network from the default file and returns it.
    """
    file = open(senna_dump)
    words, type_features = load_features(file)
    word_dict = WordDictionary(None, wordlist=words, variant='senna')
    tables = [type_features]
    
    # PADDING, allcaps, hascap, initcap, nocaps
    caps, caps_features = load_features(file)
    tables.append(caps_features)

    suff, suffix_features = load_features(file)
    tables.append(suffix_features)

    hidden_weights = load_weights(file) # (hidden_size, input_size)
    hidden_bias = load_bias(file)
    output_weights = load_weights(file) # (output_size, hidden_size)
    output_bias = load_bias(file)
        
    transition0 = load_bias(file)
    transitions = load_weights(file).T
    transitions = np.vstack((transitions, transition0))

    word_window_size = 5
    input_size = hidden_weights.shape[1]
    hidden_size = hidden_weights.shape[0]
    output_size = output_bias.shape[0]
        
    nn = Network(word_window_size, input_size, hidden_size, output_size,
                 hidden_weights, hidden_bias, output_weights, output_bias)
    nn.feature_tables = tables
    nn.transitions = transitions 
    
    return nn, word_dict, suff
예제 #3
0
def create_network(args, text_reader, feature_tables, md):
    """Creates and returns the neural network according to the task at hand."""
    logger = logging.getLogger("Logger")
    
    is_dependency = 'dependency' in args.task
    is_convolution_srl =  args.task.startswith('srl') and args.task != 'srl_predicates'
    is_convolution = is_convolution_srl or is_dependency
    
    if is_convolution:
        # get some data structures used both by dep parsing and SRL
        distance_tables = utils.set_distance_features(args.max_dist, args.target_features,
                                                      args.pred_features)
        padding_left = text_reader.converter.get_padding_left(False)
        padding_right = text_reader.converter.get_padding_right(False)
    
        if is_dependency:
            output_size = 1 if not args.labeled else len(text_reader.tag_dict)
            nn = ConvolutionalDependencyNetwork.create_new(feature_tables, distance_tables[0], 
                                                           distance_tables[1], args.window, 
                                                           args.convolution, args.hidden, output_size)
        
        else:
            # not dependency (SRL)
            num_tags = len(text_reader.tag_dict)
            nn = ConvolutionalNetwork.create_new(feature_tables, distance_tables[0], 
                                                 distance_tables[1], args.window, 
                                                 args.convolution, args.hidden, num_tags)
            
            if args.identify:
                logger.info("Loading initial transition scores table for argument identification")
                transitions = srl.init_transitions_simplified(text_reader.tag_dict)
                nn.transitions = transitions
                
            elif not args.classify:
                logger.info("Loading initial IOB transition scores table")
                transitions = srl.init_transitions(text_reader.tag_dict, 'iob')
                nn.transitions = transitions
                
    else:
        # not convolution
        num_tags = len(text_reader.tag_dict)
        nn = Network.create_new(feature_tables, args.window, args.hidden, num_tags)
        transitions = np.zeros((num_tags + 1, num_tags), np.float)
        nn.transitions = transitions

        padding_left = text_reader.converter.get_padding_left(args.task == 'pos')
        padding_right = text_reader.converter.get_padding_right(args.task == 'pos')
    
    nn.padding_left = np.array(padding_left)
    nn.padding_right = np.array(padding_right)
    nn.learning_rate = args.learning_rate
    nn.l2_factor = args.l2
    nn.dropout = args.dropout
    nn.max_norm = args.max_norm
    
    if 'convolution' in args and args.convolution > 0 and args.hidden > 0:
        layer_sizes = (nn.input_size, nn.hidden_size, nn.hidden2_size, nn.output_size)
    else:
        layer_sizes = (nn.input_size, nn.hidden_size, nn.output_size)
    
    logger.info("Created new network with the following layer sizes: %s\n"
                % ', '.join(str(x) for x in layer_sizes))
    
    nn.network_filename = config.FILES[md.network]
    return nn
예제 #4
0
def create_network(args, text_reader, feature_tables, md=None):
    """Creates and returns the neural network according to the task at hand."""
    logger = logging.getLogger("Logger")

    if args.task.startswith('srl') and args.task != 'srl_predicates':
        num_tags = len(text_reader.tag_dict)
        distance_tables = utils.set_distance_features(args.max_dist,
                                                      args.target_features,
                                                      args.pred_features)
        nn = ConvolutionalNetwork.create_new(feature_tables,
                                             distance_tables[0],
                                             distance_tables[1], args.window,
                                             args.convolution, args.hidden,
                                             num_tags)
        padding_left = text_reader.converter.get_padding_left(False)
        padding_right = text_reader.converter.get_padding_right(False)
        if args.identify:
            logger.info(
                "Loading initial transition scores table for argument identification"
            )
            transitions = srl.train_srl.init_transitions_simplified(
                text_reader.tag_dict)
            nn.transitions = transitions
            nn.learning_rate_trans = args.learning_rate_transitions

        elif not args.classify:
            logger.info("Loading initial IOB transition scores table")
            transitions = srl.train_srl.init_transitions(
                text_reader.tag_dict, 'iob')
            nn.transitions = transitions
            nn.learning_rate_trans = args.learning_rate_transitions

    else:
        num_tags = len(text_reader.tag_dict)
        nn = Network.create_new(feature_tables, args.window, args.hidden,
                                num_tags)
        if args.learning_rate_transitions > 0:
            transitions = np.zeros((num_tags + 1, num_tags), np.float)
            nn.transitions = transitions
            nn.learning_rate_trans = args.learning_rate_transitions

        padding_left = text_reader.converter.get_padding_left(
            args.task == 'pos')
        padding_right = text_reader.converter.get_padding_right(
            args.task == 'pos')

    nn.padding_left = np.array(padding_left)
    nn.padding_right = np.array(padding_right)
    nn.learning_rate = args.learning_rate
    nn.learning_rate_features = args.learning_rate_features

    if 'convolution' in args and args.convolution > 0 and args.hidden > 0:
        layer_sizes = (nn.input_size, nn.hidden_size, nn.hidden2_size,
                       nn.output_size)
    else:
        layer_sizes = (nn.input_size, nn.hidden_size, nn.output_size)

    logger.info("Created new network with the following layer sizes: %s" %
                ', '.join(str(x) for x in layer_sizes))

    return nn
예제 #5
0
def create_network(args, text_reader, feature_tables, md):
    """Creates and returns the neural network according to the task at hand."""
    logger = logging.getLogger("Logger")

    is_dependency = 'dependency' in args.task
    is_convolution_srl = args.task.startswith(
        'srl') and args.task != 'srl_predicates'
    is_convolution = is_convolution_srl or is_dependency

    if is_convolution:
        # get some data structures used both by dep parsing and SRL
        distance_tables = utils.set_distance_features(args.max_dist,
                                                      args.target_features,
                                                      args.pred_features)
        padding_left = text_reader.converter.get_padding_left(False)
        padding_right = text_reader.converter.get_padding_right(False)

        if is_dependency:
            output_size = 1 if not args.labeled else len(text_reader.tag_dict)
            nn = ConvolutionalDependencyNetwork.create_new(
                feature_tables, distance_tables[0], distance_tables[1],
                args.window, args.convolution, args.hidden, output_size)

        else:
            # not dependency (SRL)
            num_tags = len(text_reader.tag_dict)
            nn = ConvolutionalNetwork.create_new(feature_tables,
                                                 distance_tables[0],
                                                 distance_tables[1],
                                                 args.window, args.convolution,
                                                 args.hidden, num_tags)

            if args.identify:
                logger.info(
                    "Loading initial transition scores table for argument identification"
                )
                transitions = srl.init_transitions_simplified(
                    text_reader.tag_dict)
                nn.transitions = transitions

            elif not args.classify:
                logger.info("Loading initial IOB transition scores table")
                transitions = srl.init_transitions(text_reader.tag_dict, 'iob')
                nn.transitions = transitions

    else:
        # not convolution
        num_tags = len(text_reader.tag_dict)
        nn = Network.create_new(feature_tables, args.window, args.hidden,
                                num_tags)
        transitions = np.zeros((num_tags + 1, num_tags), np.float)
        nn.transitions = transitions

        padding_left = text_reader.converter.get_padding_left(
            args.task == 'pos')
        padding_right = text_reader.converter.get_padding_right(
            args.task == 'pos')

    nn.padding_left = np.array(padding_left)
    nn.padding_right = np.array(padding_right)
    nn.learning_rate = args.learning_rate
    nn.l2_factor = args.l2
    nn.dropout = args.dropout
    nn.max_norm = args.max_norm

    if 'convolution' in args and args.convolution > 0 and args.hidden > 0:
        layer_sizes = (nn.input_size, nn.hidden_size, nn.hidden2_size,
                       nn.output_size)
    else:
        layer_sizes = (nn.input_size, nn.hidden_size, nn.output_size)

    logger.info("Created new network with the following layer sizes: %s\n" %
                ', '.join(str(x) for x in layer_sizes))

    nn.network_filename = config.FILES[md.network]
    return nn