class DialogBackendLocal(DialogBackend): def __init__(self): super().__init__() self.model_mrc = BidafQA() self.model_cmr = ConversingByReading() self.model_open = DialoGPT() self.kb = KnowledgeBase() model_mmi = DialoGPT(path_model='models/DialoGPT/small_reverse.pkl') self.ranker = Ranker(self.model_open, model_mmi) self.local = True def predict(self, context, max_n=-1): context, query = self.history2inp(context) print('backend running, context = %s' % context) # get results from different models results = self.model_open.predict(context) passages = [] url_snippet = [] for line in open('args/kb_sites.txt', encoding='utf-8'): cust = line.strip('\n') kb_args = {'domain': 'cust', 'cust': cust, 'must_include': []} url_snippet.append(self.kb.predict(query, args=kb_args)[0]) passage = ' ... '.join([snippet for _, snippet in url_snippet]) passages.append((passage, query)) for passage, kb_query in passages: results += self.model_mrc.predict(kb_query, passage) results += self.model_cmr.predict(kb_query, passage) # rank hyps from different models hyps = [hyp for _, _, hyp in results] scored = self.ranker.predict(context, hyps) ret = [] for i, d in enumerate(scored): d['way'], _, d['hyp'] = results[i] ret.append((d['score'], d)) ranked = [d for _, d in sorted(ret, reverse=True)] if max_n > 0: ranked = ranked[:min(len(ranked), max_n)] return ranked, url_snippet
class DialogBackendLocal(DialogBackend): def __init__(self): super().__init__() self.model_lm = LanguageModel() self.model_ct = ContentTransfer() self.kb = KnowledgeBase() self.ranker = Ranker(self.model_lm) self.local = True def predict(self, context, max_n=1): print('backend running, context = %s' % context) query = self.get_query(context) # get results from different models results = self.model_lm.predict(context) passages = [] url_snippet = [] for line in open('args/kb_sites.txt', encoding='utf-8'): cust = line.strip('\n') kb_args = {'domain': 'cust', 'cust': cust, 'must_include': []} url_snippet.append(self.kb.predict(query, args=kb_args)[0]) passage = ' ... '.join([snippet for _, snippet in url_snippet]) passages.append((passage, query)) for passage, kb_query in passages: results += self.model_ct.predict(kb_query, passage) # rank hyps from different models hyps = [hyp for _, _, hyp in results] scored = self.ranker.predict(context, hyps) ret = [] for i, d in enumerate(scored): d['way'], _, d['hyp'] = results[i] ret.append((d['score'], d)) ranked = [d for _, d in sorted(ret, reverse=True)] if max_n > 0: ranked = ranked[:min(len(ranked), max_n)] return ranked, url_snippet