def display_meaning(word): meaning = get_meaning(word) window['output'].print("WORD: " + word) if meaning: window['output'].print("MEANING: ", meaning + ".") else: display_error("Word is not found in corpus.")
def get_sentence_posteriors(sentence, iterations=1, extra_meaning=None): meaning_probs = {} # parse sentence with charniak and apply surgeries print 'parsing ...' modparse = get_modparse(sentence) t = ParentedTree.parse(modparse) print '\n%s\n' % t.pprint() num_ancestors = count_lmk_phrases(t) - 1 for _ in xrange(iterations): (lmk, _, _), (rel, _, _) = get_meaning(num_ancestors=num_ancestors) meaning = m2s(lmk,rel) if meaning not in meaning_probs: ps = get_tree_probs(t, lmk, rel)[0] # print "Tree probs: ", zip(ps,rls) meaning_probs[meaning] = np.prod(ps) print '.' if extra_meaning: meaning = m2s(*extra_meaning) if meaning not in meaning_probs: ps = get_tree_probs(t, lmk, rel)[0] # print "Tree prob: ", zip(ps,rls) meaning_probs[meaning] = np.prod(ps) print '.' summ = sum(meaning_probs.values()) for key in meaning_probs: meaning_probs[key] /= summ return meaning_probs.items()
def display_meaning(word): meaning=get_meaning(word) window["output"].print("WORD:",word) if meaning: window["output"].print("MEANING:",meaning) else: display_error("word in not found in corpus")
def display_meaning(word): meaning = get_meaning(word) window['output'].print("Word: " + word) if meaning: window['output'].print("Meaning: ", meaning) else: display_error("Meaning Not Found")
def generate_sentence(loc, consistent, scene=None, speaker=None): utils.scene = utils.ModelScene(scene, speaker) (lmk, lmk_prob, lmk_ent), (rel, rel_prob, rel_ent) = get_meaning(loc=loc) meaning1 = m2s(lmk, rel) logger(meaning1) while True: rel_exp_chain, rele_prob_chain, rele_ent_chain, rel_terminals, rel_landmarks = get_expansion( 'RELATION', rel=rel) lmk_exp_chain, lmke_prob_chain, lmke_ent_chain, lmk_terminals, lmk_landmarks = get_expansion( 'LANDMARK-PHRASE', lmk=lmk) rel_words, relw_prob, relw_ent, rel_a = get_words( rel_terminals, landmarks=rel_landmarks, rel=rel) lmk_words, lmkw_prob, lmkw_ent, lmk_a = get_words( lmk_terminals, landmarks=lmk_landmarks, prevword=(rel_words[-1] if rel_words else None)) sentence = ' '.join(rel_words + lmk_words) logger('rel_exp_chain: %s' % rel_exp_chain) logger('lmk_exp_chain: %s' % lmk_exp_chain) meaning = Meaning( (lmk, lmk_prob, lmk_ent, rel, rel_prob, rel_ent, rel_exp_chain, rele_prob_chain, rele_ent_chain, rel_terminals, rel_landmarks, lmk_exp_chain, lmke_prob_chain, lmke_ent_chain, lmk_terminals, lmk_landmarks, rel_words, relw_prob, relw_ent, lmk_words, lmkw_prob, lmkw_ent)) meaning.rel_a = rel_a meaning.lmk_a = lmk_a if consistent: # get the most likely meaning for the generated sentence try: posteriors = get_sentence_posteriors(sentence, iterations=10, extra_meaning=(lmk, rel)) except: print 'try again ...' continue meaning2 = max(posteriors, key=itemgetter(1))[0] # is the original meaning the best one? if meaning1 != meaning2: print print 'sentence:', sentence print 'original:', meaning1 print 'interpreted:', meaning2 print 'try again ...' print continue for m, p in sorted(posteriors, key=itemgetter(1)): print m, p return meaning, sentence
def generate_sentence(loc, consistent, scene=None, speaker=None, usebest=False, golden=False, meaning=None, printing=True): utils.scene = utils.ModelScene(scene, speaker) if meaning is None: (lmk, lmk_prob, lmk_ent), (rel, rel_prob, rel_ent) = get_meaning(loc=loc, usebest=usebest) else: lmk, rel = meaning lmk_prob = lmk_ent = rel_prob = rel_ent = None meaning1 = m2s(lmk, rel) logger( meaning1 ) while True: rel_exp_chain, rele_prob_chain, rele_ent_chain, rel_terminals, rel_landmarks = get_expansion('RELATION', rel=rel, usebest=usebest, golden=golden, printing=printing) lmk_exp_chain, lmke_prob_chain, lmke_ent_chain, lmk_terminals, lmk_landmarks = get_expansion('LANDMARK-PHRASE', lmk=lmk, usebest=usebest, golden=golden, printing=printing) rel_words, relw_prob, relw_ent, rel_a = get_words(rel_terminals, landmarks=rel_landmarks, rel=rel, usebest=usebest, golden=golden, printing=printing) lmk_words, lmkw_prob, lmkw_ent, lmk_a = get_words(lmk_terminals, landmarks=lmk_landmarks, prevword=(rel_words[-1] if rel_words else None), usebest=usebest, golden=golden, printing=printing) sentence = ' '.join(rel_words + lmk_words) if printing: logger( 'rel_exp_chain: %s' % rel_exp_chain ) if printing: logger( 'lmk_exp_chain: %s' % lmk_exp_chain ) meaning = Meaning((lmk, lmk_prob, lmk_ent, rel, rel_prob, rel_ent, rel_exp_chain, rele_prob_chain, rele_ent_chain, rel_terminals, rel_landmarks, lmk_exp_chain, lmke_prob_chain, lmke_ent_chain, lmk_terminals, lmk_landmarks, rel_words, relw_prob, relw_ent, lmk_words, lmkw_prob, lmkw_ent)) meaning.rel_a = rel_a meaning.lmk_a = lmk_a if consistent: # get the most likely meaning for the generated sentence try: posteriors = get_sentence_posteriors(sentence, iterations=10, extra_meaning=(lmk,rel)) except: print 'try again ...' continue meaning2 = max(posteriors, key=itemgetter(1))[0] # is the original meaning the best one? if meaning1 != meaning2: print print 'sentence:', sentence print 'original:', meaning1 print 'interpreted:', meaning2 print 'try again ...' print continue for m,p in sorted(posteriors, key=itemgetter(1)): print m, p return meaning, sentence
def generate_sentence(loc, consistent): while True: lmk, rel = get_meaning(loc=loc) print m2s(lmk, rel) rel_exp, rel_prob, rel_ent = get_expansion('RELATION', rel=rel) lmk_exp, lmk_prob, lmk_ent = get_expansion('LANDMARK-PHRASE', lmk=lmk) rel_words, relw_prob, relw_ent = get_words(rel_exp, 'RELATION', rel=rel) lmk_words, lmkw_prob, lmkw_ent = get_words(lmk_exp, 'LANDMARK-PHRASE', lmk=lmk) sentence = ' '.join(rel_words + lmk_words) if consistent: meaning1 = m2s(lmk,rel) # get the most likely meaning for the generated sentence posteriors = get_sentence_posteriors(sentence) meaning2 = max(posteriors, key=itemgetter(1))[0] # is this what we are trying to say? if meaning1 != meaning2: continue return sentence
def get_sentence_posteriors(sentence, iterations=1): probs = [] meanings = [] # parse sentence with charniak and apply surgeries print 'parsing ...' modparse = get_modparse(sentence) t = ParentedTree.parse(modparse) print '\n%s\n' % t.pprint() num_ancestors = count_lmk_phrases(t) - 1 for _ in xrange(iterations): meaning = get_meaning(num_ancestors=num_ancestors) lmk, rel = meaning probs.append(get_tree_prob(t, *meaning)) meanings.append(m2s(lmk,rel)) print '.' probs = np.array(probs) / sum(probs) return uniquify_distribution(meanings, probs)
def accept_new_words( location, sentence, update_func='geometric', update_scale=10, num_meanings=10, printing=True ): for _ in range(num_meanings): print '.', sys.stdout.flush() (lmk, lmk_prob, lmk_ent), (rel, rel_prob, rel_ent) = get_meaning(loc=location) old_meaning_prob, old_meaning_entropy, lrpc, tps = get_sentence_meaning_likelihood( sentence, lmk, rel, printing ) update = 10 * update_scale # reward new words with old meaning for lhs,rhs,parent,lmk,rel in lrpc: # print 'Incrementing production - lhs: %s, rhs: %s, parent: %s' % (lhs,rhs,parent) update_expansion_counts( update, lhs, rhs, parent, rel=rel, lmk_class=(lmk.object_class if lmk else None), lmk_ori_rels=get_lmk_ori_rels_str(lmk), lmk_color=(lmk.color if lmk else None) ) for lhs,rhs,lmk,rel in tps: # print 'Incrementing word - pos: %s, word: %s, lmk_class: %s' % (lhs, rhs, (lmk.object_class if lmk else None) ) update_word_counts( update, lhs, rhs, lmk_class=(lmk.object_class if lmk else None), rel=rel, lmk_ori_rels=get_lmk_ori_rels_str(lmk), lmk_color=(lmk.color if lmk else None) ) print
# unpack row xloc, yloc, sentence, parse, modparse = row # convert variables to the right types xloc = float(xloc) yloc = float(yloc) loc = (xloc, yloc) parse = ParentedTree.parse(parse) modparse = ParentedTree.parse(modparse) # how many ancestors should the sampled landmark have? num_ancestors = count_lmk_phrases(modparse) - 1 # sample `args.iterations` times for each sentence for _ in xrange(args.iterations): lmk, rel = get_meaning(loc, num_ancestors) if args.verbose: print "utterance:", repr(sentence) print "location: %s" % repr(loc) print "landmark: %s (%s)" % (lmk, lmk_id(lmk)) print "relation: %s" % rel_type(rel) print "parse:" print parse.pprint() print "modparse:" print modparse.pprint() print "-" * 70 location = Location(x=xloc, y=yloc) save_tree(modparse, location, rel, lmk) Bigram.make_bigrams(location.words)
xloc = float(xloc) yloc = float(yloc) loc = (xloc, yloc) parse = ParentedTree.parse(parse) modparse = ParentedTree.parse(modparse) # how many ancestors should the sampled landmark have? num_ancestors = count_lmk_phrases(modparse) - 1 if num_ancestors == -1: print 'Failed to parse %d [%s] [%s] [%s]' % (i, sentence, parse, modparse) continue # sample `args.iterations` times for each sentence for _ in xrange(args.iterations): lmk, rel = get_meaning(loc, num_ancestors) lmk, _, _ = lmk rel, _, _ = rel assert(not isinstance(lmk, tuple)) assert(not isinstance(rel, tuple)) if args.verbose: print 'utterance:', repr(sentence) print 'location: %s' % repr(loc) print 'landmark: %s (%s)' % (lmk, lmk_id(lmk)) print 'relation: %s' % rel_type(rel) print 'parse:' print parse.pprint() print 'modparse:' print modparse.pprint()