def _convertHypToTurn(self, lastact, obs): ''' Convert hypotheses to turn :param lastact: last system dialgue act :type lastact: string :param obs: current observation :type obs: list :return: dict -- turn dict ''' curturn = {'turn-index': self.turn} # Last system action slastact = [] if self.turn > 0: slastact = dact.ParseAct(lastact, user=False) slastact = BeliefTrackingUtils._transformAct( slastact, {}, Ontology.global_ontology.get_ontology(self.domainString), user=False) curturn['output'] = {'dialog-acts': slastact} # User act hyps accumulated = defaultdict(float) for (hyp, prob) in obs: hyp = dact.ParseAct(hyp) hyp = BeliefTrackingUtils._transformAct( hyp, {}, Ontology.global_ontology.get_ontology(self.domainString)) hyp = dact.inferSlotsForAct(hyp) prob = min(1.0, prob) if prob < 0: prob = math.exp(prob) accumulated = BeliefTrackingUtils._addprob(accumulated, hyp, prob) sluhyps = BeliefTrackingUtils._normaliseandsort(accumulated) curturn['input'] = {'live': {'asr-hyps': [], 'slu-hyps': sluhyps}} return curturn
def _updateMactFeat(self, last_feature, lastact): ''' Add features into self.prevstate - recording actions taken by machine :param last_feature: last system state features :type last_feature: dict :param lastact: last system dialgoue act :type lastact: string :return: None ''' features = {} if self.turn == 0: features['lastInformedVenue'] = '' features['informedVenueSinceNone'] = [] features['lastActionInformNone'] = False features['offerHappened'] = False else: last_system_act = dact.ParseAct(lastact, user=False) # lastInformedVenue current_informed_venue = BeliefTrackingUtils._getCurrentInformedVenue(last_system_act) current_informed_venue = self._list2str_bugfix(current_informed_venue) if current_informed_venue != '': features['lastInformedVenue'] = current_informed_venue elif last_feature != None and last_feature['lastInformedVenue'] != None: features['lastInformedVenue'] = last_feature['lastInformedVenue'] # informedVenueSinceNone if last_feature['informedVenueSinceNone'] == None or \ last_system_act == None or BeliefTrackingUtils._hasType(last_system_act, 'canthelp'): informedVenueSinceNone = [] else: informedVenueSinceNone = last_feature['informedVenueSinceNone'] if BeliefTrackingUtils._hasTypeSlot(last_system_act, 'offer', 'name'): venue = BeliefTrackingUtils._getTypeSlot(last_system_act, 'offer', 'name') venue = self._list2str_bugfix(venue) informedVenueSinceNone.append(venue) features['informedVenueSinceNone'] = informedVenueSinceNone # lastActionInformNone if BeliefTrackingUtils._hasType(last_system_act, 'canthelp'): features['lastActionInformNone'] = True else: features['lastActionInformNone'] = False # offerhappened if BeliefTrackingUtils._hasTypeSlot(last_system_act, 'offer', 'name'): features['offerHappened'] = True else: features['offerHappened'] = False # inform_info features['inform_info'] = [] for numAccepted in range(1,6): temp = SummaryUtils.actionSpecificInformSummary(self.prevbelief, numAccepted, self.domainString) features['inform_info'] += temp self.prevbelief['features'] = features