Semantic Parsing

SemI.py - Semantic input parser

Copyright CUED Dialogue Systems Group 2015 - 2017

See also

CUED Imports/Dependencies:

import ontology.OntologyUtils
import semi.SemIContextUtils
import utils.Settings
import utils.ContextLogger


class semi.SemI.SemI

Interface class SemI, it defines the method decode that all the SemI classes must implement

decode(ASR_obs, sys_act=None, turn=None)

The main interface method for semantic decoding. It takes the ASR input and returns a list of semantic interpretations.

This method must be implemented by a sub-class.

Parameters:
  • ASR_obs – the ASR observation list
  • ASR_obs – list
  • sys_act – the last system action, optional
  • sys_act – str
  • turn – the current turn number, optional
  • turn – int
Returns:

list of semantic interpretations of the input

class semi.SemI.SemIManager

The Semantic Input Manager contains a dictionary with all the SemI objects currently running, the key of the dictionary is the domain tag

_ensure_booted(domainTag)

Boots up the semi ability for the specified domain if required

Parameters:domainTag (str) – domain description
Returns:None
_load_domains_semi(dstring)

Get from the config file the SemI choice of method for this domain and load it. If you want to add a new semantic input parser you must add a line in this method calling explicitly the new SemI class, that must inherit from SemI

Parameters:dstring (str) – the name of the domain
Returns:the class with the SemI implementation
clean_possible_texthub_switch(userActText)

NB: only for texthub.py

This removes switch(“Domain”) - as you may enter in texthub if using the switch topic tracker You can add domain information after e.g.: switch(“CamRestaurants”)i want a cheap restaurant

Parameters:userActText – list of user act hypothesis?
Returns:
decode(ASR_obs, sys_act, domainTag, turn=None)

The main method for semantic decoding. It takes the ASR input and returns a list of semantic interpretations. To decode, the task is delegated to the respective domain semantic decoder

Parameters:
  • ASR_obs (list) – ASR hypotheses
  • sys_act (str) – is the system action prior to collecting users response in obs.
  • domainTag (str) – is the domain we want to parse the obs in
  • turn (int) – the turn id, this parameter is optional
Returns:

None

simulate_add_context_to_user_act(sys_act, user_acts, domainTag)

NB: only for Simulate.py

While for simulation no semantic decoding is needed, context information needs to be added in some instances. This is done with this method.

Parameters:
  • sys_act (str) – the last system act
  • user_acts (list) – user act hypotheses
  • domainTag (str) – the domain of the dialogue

RuleSemIMethods.py - Semantic input parsers based on rules

Copyright CUED Dialogue Systems Group 2015 - 2017

See also

CUED Imports/Dependencies:

import utils.ContextLogger
import semi.RegexSemI_generic.RegexSemI_generic

Collection of Semantic Parsers that are rule based.


class semi.RuleSemIMethods.PassthroughSemI

Does nothing - simply pass observation directly through (on assumption that observation was a semantic act input by a texthub user) – hence is domain independent and doesn’t need a manager

class semi.RuleSemIMethods.RegexSemI(domainTag)

A semantic parser based on regular expressions. One parser for each domain is necessary. To implement a new regex parser, derive from semi.RegexSemI.RegexSemI and create your own module called “RegexSemI_<yourdomainname>” containing the class “RegexSemI_<yourdomainname>”.

RegexSemI.py - Regular expressions SemI parser base class

Note

This implementation is based on the following assumptions:

  • obs can be a ASR n-best list - potential sentence inputs each with a probability (Currently - no probabilities - will have to slightly amend code to deal with these.)
  • will only output text semantic acts (plus probs maybe) – wont be instances of DiaAct for example

Warning

Remember that this is the base class for all of the regex parsers. Making changes here could possibly fix a parser in your domain, but (at worst!) break/weaken parsers in all other domains! i.e. – 1st, 2nd and 3rd approaches should be to tweak the derived class for the domain of interest. You can redefine anything in the derived class.

See also

CUED Imports/Dependencies:

import utils.Settings
import semi.SemI.SemI
import semi.SemIContextUtils
import ontology.Ontology

class semi.RegexSemI.RegexSemI

Is a base class for each domains Regular Expressions based semantic parser. Primary focus is on users intent. The derived semantic parsers of each domain can deal with the constraints (slots,values).