示例#1
0
def benchmark_knowledge_base_size(target,
                                  bases,
                                  min_n=1,
                                  max_n=1,
                                  step=1,
                                  reps=1):
    sigma = 0.5
    neuro_analogy = NeuralAnalogy(sigma, wm_c, max_ar, sem_dim)
    neuro_analogy.make(target, bases)

    results = []
    for i in range(min_n, max_n + 1, step):
        KB = []

        while len(KB) < i:
            b_rnd = np.random.randint(0, len(bases))
            KB.append(bases[b_rnd])

        if len(KB) > 0:
            dt = 0
            for r in range(reps):
                time1 = time.time()
                neuro_analogy.make(target, KB)
                dt += time.time() - time1
            results.append((len(KB), dt / float(reps)))

    return results
示例#2
0
bill_b1 = Atom("Bill")
apple_b1 = Atom("apple")
core_b1 = Atom("core")
loves_b1 = Predicate("loves", 2, [john_b1], [mary_b1])
has_b1 = Predicate("has", 2, [apple_b1], [core_b1])
knows1_b1 = Predicate("knows", 2, [bill_b1], [loves_b1])
knows2_b1 = Predicate("knows", 2, [john_b1], [has_b1])

#Vector encoder using Glove 50d word word embeddings
encoder = Glove50Encoder(r_slots_n, max_ar)
#encoder = VectorEncoder(r_slots_n, max_ar, sem_dim)

#encode target
#target_v is a vector represenbtation, target_ps contains the corresponding predicatres
target_v, target_ps = encoder.encode_predicates([loves_t, knows1_t, knows2_t])
#encode base
base_v, base_p = encoder.encode_predicates([loves_b1, knows1_b1, knows2_b1])

#create neuual analogical machine
neuro_analogy = NeuralAnalogy(sigma, r_slots_n, max_ar, sem_dim)
#run mapping
(max_sim, _, mapping) = neuro_analogy.make(target_v, base_v)

#Print the overal simialriyt of the target and the basae
print("Similarity: {}".format(max_sim))

#Print mappings
for i in range(r_slots_n):
    target_p = target_ps[np.argmax(mapping[:, i])]
    print("{}<->{}".format(target_p, base_p[i]))
示例#3
0
def benchmark():
     
    wm_c = 8
    sem_dim = 50
    max_ar = 2
    
    
    
         
    o1_1 = Atom("o1")
    o2_1 = Atom("o2")

    o1_2 = Atom("o1")
    o2_2 = Atom("o2")

    o1_3 = Atom("o1")
    o2_3 = Atom("o2")

    
    r1_1 = Predicate("r1111", 2, [o1_1], [o2_1])
    r2_1 = Predicate("r2222", 2, [o2_1], [o1_1])
    
    r1_2 = Predicate("r1000", 2, [o2_2], [o1_2])
    r2_2 = Predicate("r2sss", 2, [o1_2], [o2_2])

    r1_3 = Predicate("r1eeee", 2, [o2_3], [o1_3])
    r2_3 = Predicate("r2rrr", 2, [o1_3], [o2_3])

    
    target = Predicate("cause0", 2, [r1_1], [r2_1])
        
    base1 = Predicate("cause1", 2, [r1_2], [r2_2])    
    
    base2 = Predicate("cause2", 2, [r2_3], [r1_3])
        
    encoder = Glove50Encoder(wm_c, max_ar)    
    #encoder = VectorEncoder(wm_c, max_ar, sem_dim)    
    
    base_predicates = [
        [base1],
        [base2], 
    ]
    
    bases = {}
    base_ps = {}
    for i in range(len(base_predicates)):
        vec_repr, ps = encoder.encode_predicates(base_predicates[i])
        bases[i] = vec_repr
        base_ps[i] = ps
        
    target, target_ps = encoder.encode_predicates([target])
    
    #crossed = []
    sigma_i_step = 10
    for sigma_i in range(50, 51, sigma_i_step):        
        #crossed.append(0.0)
        analogy = NeuralAnalogy(sigma_i / 100.0, wm_c, max_ar, sem_dim, False)    
        for base_i in bases:
            (max_sim, _, mapping) = analogy.make(target, bases[base_i])    
            #print_v "None"
#            print([str(p) for p in target_ps])(mapping)
#            print_v(target)
#            print_v(bases[base_i])
#            print(mapping)
#            john_mapping =
            for i in range(len(base_ps[base_i])):
                base_p = base_ps[base_i][i]
                target_p = target_ps[np.argmax(mapping[:, i])]
                print("{}<->{}".format(target_p, base_p))

            
            print("sigma: {:.3}, base: {}, sim :{:.5}".format(sigma_i / 100.0, base_i, max_sim))
示例#4
0
    for t in traces["john"]:
        traces["john"][t].append((None, None))
        traces["mary"][t].append((None, None))

    base_bars[base_i] = {
        "john": {
            "corr": [],
            "cross": [],
            "rel": [],
            "none": []
        }
    }

    for sigma_i in range(0, 101, 10):

        neuro_analogy = NeuralAnalogy(sigma_i / 100.0, wm_c, max_ar, sem_dim)

        (max_sim, _, mapping) = neuro_analogy.make(target_v, bases[base_i][0])

        t = [(bases[base_i][1][i].get_arguments()[0],
              bases[base_i][1][i].get_arguments()[1])
             for i in range(len(bases[base_i][1]))
             if (type(bases[base_i][1][i]) is Predicate) and (
                 bases[base_i][1][i].get_arity() == 2)][0]
        args = [t[0][0], t[1][0]]

        for i in range(len(bases[base_i][1])):
            base_p = bases[base_i][1][i]
            target_p = target_ps[np.argmax(mapping[:, i])]
            #print("{}<->{}".format(target_p, base_p))
            if target_p <> None:
示例#5
0
if not (args.csv):
    print("{:>5}\t{}".format("N", "Time (sec)"))

for i in range(len(results)):
    if not (args.csv):
        print("{:>5}\t{:.4}".format(results[i][0], results[i][1]))
    else:
        print("{},{:.8}".format(results[i][0], results[i][1]))

exit(0)

print("---------------Analogy-----------")
print("\n")

for sigma_i in range(50, 51, sigma_i_step):
    neuro_analogy = NeuralAnalogy(sigma_i / 100.0, wm_c, max_ar, sem_dim)
    #    print("---------------Mapping-----------")
    #    for base_i in bases:
    #        (max_sim, _, mapping) = analogy.make(target_v, bases[base_i][0])
    #        for i in range(len(bases[base_i][1])):
    #            base_p = bases[base_i][1][i]
    #            target_p = target_ps[np.argmax(mapping[:, i])]
    #            print("{}<->{}".format(target_p, base_p))
    #
    #
    #        print("sigma: {:.3}, base: {}, sim :{:.5}".format(sigma_i / 100.0, base_i, max_sim))
    #        print("\n")

    time1 = time.time()
    (max_sim, best_base_no, mapping) = neuro_analogy.make(target_v, bases_v)
    time2 = time.time()