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).