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