# Semantic Parsing¶

## SemI.py - Semantic input parser¶

Copyright CUED Dialogue Systems Group 2015 - 2017

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 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 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 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?
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 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

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.

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