1. A computer-implemented system for determining dialog states of utterances, the system comprising: one or more processors and memory, coupled with the one or more processors, having executable instructions embodied thereon, which, when executed by the one or more processors cause the one or more processors to perform operations comprising: maintaining a history of predicted dialog states, each predicted dialog state in the history comprising a set of slot-value pairs assigned to an utterance of a plurality of utterances of a dialog session; string-matching a plurality of slot-value pairs of an ontology to a given utterance of the dialog session to identify the plurality of slot-value pairs associated with the utterance, said string-matching including, for each slot-value pair: determining a failed match between a string that represents a value of the slot-value pair and a sub-string of the given utterance; based on the determining the failed match, identifying a synonym of the value; and determining a successful match between a string that represents the synonym of the value of the slot-value pair and the sub-string of the given utterance to identify the synonym in the utterance; adding the identified plurality of slot-value pairs to a candidate dialog state of the given utterance based on the successful match for the slot-value pair, wherein the candidate dialog state comprises a candidate set of slot-value pairs assigned to the given utterance; removing at least one slot-value pair from the candidate dialog state; designating the candidate dialog state as the predicted dialog state of the given utterance in the history; and outputting a response to the given utterance to a user device of a user associated with the given utterance based on the predicted dialog state.