This specification defines the syntax and semantics for Utility Models that are used to create and drive conversational experiences. Utility Models allow authors to encode preferences over states of the world, enabling task-oriented programming languages to autonomously drive agents towards settings with the highest possible utility.

Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

Introduction

This section is informative.

This specification aims to establish a paradigm that allows for the authoring of value drive content to be used in intelligent agent systems.

Scope

This section is informative.

This document is limited to specifying the syntax and semantics of designing and incorporating Utility Models into any Task-Oriented programming language. One example application of Utility Models arises in chat-bot settings where authors are able to specify preferences between interactions allowing for a more fluid and dynamic conversation.

Goals and Motivation

This section is informative.

Designing Utility Models allows authors to create intelligent self-driven agents. In a teacher-student setting, this allows agents to understand where a user is having trouble and provide assistance to help them overcome said obstacle.

Utility Model Format

This section is normative.

Utility

Utility is a sequence of Pair objects.

            typedef sequence< Pair > Utility;
            
        
            [
                Pair1,
                Pair2,
                Pair3,
                ...
            ]
        

Pair interface

            typedef sequence< Config > configSequence;

            [Exposed=Global]
            interface Pair {
                attribute configSequence configs;
            };
        

configs attribute

The configSequence data type refers to a custom typedef such that the type configSequence denotes a sequence of Config objects. The sequence type is defined in [[WebIDL-20161215]].

The configs attribute then specifies a sequence of two or more Config objects. For the sake of simplicity we assume the sequence of Config objects is ordered in descending order of utility. That is, the first Config object has the highest assigned utility, while the last Config object has the smallest assigned utility.

                [
                    Config1,
                    Config2,
                    Config3,
                    ...
                ]
          

Config typedef

            typedef Dictionary Config;
      

The Config interface specifies a Dictionary of key:value pairings denoting the environmental settings. The key of each corresponding pair will always have a String data type while the value can be any of the numeric or boolean data types defined in [[[WebIDL-20161215]]].

            {
                "numWrongAttempts": 1,
                "success": true
            }
        

Examples

This section is informative.

In a setting where a client is autonomously attempting to effectively teach a user, for example a mathematical concept, clients are able to specify the preferences of the states. In this case we've specified that a lower count of wrong attempts is preferred over a higher count, as this shows the user is at least attempting to learn.

        [
          [{"numWrongAttempts": 1, "success": true}, {"numWrongAttempts": 0, "success": false}],
          [{"numWrongAttempts": 3, "success": false}, {"numWrongAttempts": 5, "success": true}],
        ]
      

Being able to assign utility allows us to indirectly specify a desired trajectory. In the following example, animating all characters in a game setting has higher preferences than beginning the game.

        [
            [
              {
                "is_pig_visible": true,
                "start_game": true
              },
              {
                "is_pig_visible": false,
                "start_game": true
              }
            ],
            [
              {
                "is_frog_visible": true,
                "start_game": true
              },
              {
                "is_frog_visible": false,
                "start_game": true
              }
            ],
            [
              {
                "is_fox_visible": true,
                "start_game": true
              },
              {
                "is_fox_visible": false,
                "start_game": true
              }
            ]
        ]
      

When designing the utilities, the paired preferences do not have to belong to the same topic. By providing a variety of examples, the Utility Model is able to generalize to a richer interactive experience.

        [
            [
              {
                "start_game": true
              },
              {
                "start_game": false
              }
            ],
            [
              {
                "start_game": true,
                "know_name": true
              },
              {
                "start_game": false,
                "know_name": false
              }
            ],
            [
              {
                "start_game": true,
                "say_welcome": true
              },
              {
                "start_game": false,
                "say_welcome": false
              }
            ],
            [
              {
                "remark_current_event": true
              },
              {
                "remark_current_event": false
              }
            ],
            [
              {
                "remark_day_of_week": true
              },
              {
                "remark_day_of_week": false
              }
            ],
            [
              {
                "remark_day": true
              },
              {
                "remark_day": false
              }
            ],
            [
              {
                "remark_weather": true
              },
              {
                "remark_weather": false
              }
            ],
            [
              {
                "remark_last_seen": true
              },
              {
                "remark_last_seen": false
              }
            ],
            [
              {
                "user_knows_name": true
              },
              {
                "user_knows_name": false
              }
            ],
            [
              {
                "asked_name_reminder": true
              },
              {
                "asked_name_reminder": false
              }
            ],
            [
              {
                "num_interaction": 3
              },
              {
                "num_interaction": 12
              }
            ],
            [
              {
                "num_interaction": 3
              },
              {
                "num_interaction": -6
              }
            ]
          ]
      

Related Technologies

This section is informative.

Utility Models vs. Rank-SVM

In Rank-SVM the following set of feature vectors generates the following preferences. Note, in the following example the sidelined # 1A, #1B, and # 1C is simply naming convention for the purposes of demonstration.

            3 qid:1 1:1 2:1 3:0 4:0.2 5:0 # 1A
            2 qid:1 1:0 2:0 3:1 4:0.1 5:1 # 1B
            1 qid:1 1:0 2:1 3:0 4:0.4 5:0 # 1C
            1 qid:1 1:0 2:0 3:1 4:0.3 5:0 # 1D
            1 qid:2 1:0 2:0 3:1 4:0.2 5:0 # 2A
            2 qid:2 1:1 2:0 3:1 4:0.4 5:0 # 2B
            1 qid:2 1:0 2:0 3:1 4:0.1 5:0 # 2C
            1 qid:2 1:0 2:0 3:1 4:0.2 5:0 # 2D
            2 qid:3 1:0 2:0 3:1 4:0.1 5:1 # 3A
            3 qid:3 1:1 2:1 3:0 4:0.3 5:0 # 3B
            4 qid:3 1:1 2:0 3:0 4:0.4 5:1 # 3C
            1 qid:3 1:0 2:1 3:1 4:0.5 5:0 # 3D
        
            1A>1B, 1A>1C, 1A>1D, 1B>1C, 1B>1D, 2B>2A, 2B>2C, 2B>2D, 3C>3A, 3C>3B, 3C>3D, 3B>3A, 3B>3D, 3A>3D
        

The same set of feature preferences can be specified using the Utility Model syntax and semantics defined within this document in a more readable format.

            [
                [
                    {
                        "1A_feature_1": 1,
                        "1A_feature_2": 2,
                        "1A_feature_3": 0,
                        "1A_feature_4": 0.2
                        "1A_feature_5": 0
                    },
                    {
                        "1B_feature_1": 0,
                        "1B_feature_2": 0,
                        "1B_feature_3": 1,
                        "1B_feature_4": 0.1
                        "1B_feature_5": 1
                    }
                ],
                [
                    {
                        "1A_feature_1": 1,
                        "1A_feature_2": 2,
                        "1A_feature_3": 0,
                        "1A_feature_4": 0.2
                        "1A_feature_5": 0
                    },
                    {
                        "1C_feature_1": 0,
                        "1C_feature_2": 1,
                        "1C_feature_3": 0,
                        "1C_feature_4": 0.4
                        "1C_feature_5": 0
                    }
                ],
                [
                    {
                        "1A_feature_1": 1,
                        "1A_feature_2": 2,
                        "1A_feature_3": 0,
                        "1A_feature_4": 0.2
                        "1A_feature_5": 0
                    },
                    {
                        "1D_feature_1": 0,
                        "1D_feature_2": 0,
                        "1D_feature_3": 1,
                        "1D_feature_4": 0.3
                        "1D_feature_5": 0
                    }
                ],
                [
                    {
                        "2B_feature_1": 0,
                        "2B_feature_2": 0,
                        "2B_feature_3": 1,
                        "2B_feature_4": 0.2
                        "2B_feature_5": 0
                    },
                    {
                        "2A_feature_1": 1,
                        "2A_feature_2": 0,
                        "2A_feature_3": 1,
                        "2A_feature_4": 0.4
                        "2A_feature_5": 0
                    }
                ],
                [
                    {
                        "2B_feature_1": 0,
                        "2B_feature_2": 0,
                        "2B_feature_3": 1,
                        "2B_feature_4": 0.2
                        "2B_feature_5": 0
                    },
                    {
                        "2C_feature_1": 0,
                        "2C_feature_2": 0,
                        "2C_feature_3": 1,
                        "2C_feature_4": 0.1
                        "2C_feature_5": 0
                    }
                ],
                [
                    {
                        "2B_feature_1": 0,
                        "2B_feature_2": 0,
                        "2B_feature_3": 1,
                        "2B_feature_4": 0.2
                        "2B_feature_5": 0
                    },
                    {
                        "2D_feature_1": 0,
                        "2D_feature_2": 0,
                        "2D_feature_3": 1,
                        "2D_feature_4": 0.2
                        "2D_feature_5": 0
                    }
                ],
                [
                    {
                        "3C_feature_1": 1,
                        "3C_feature_2": 0,
                        "3C_feature_3": 0,
                        "3C_feature_4": 0.4
                        "3C_feature_5": 1
                    },
                    {
                        "3A_feature_1": 0,
                        "3A_feature_2": 0,
                        "3A_feature_3": 1,
                        "3A_feature_4": 0.1
                        "3A_feature_5": 1
                    }
                ],
                [
                    {
                        "3C_feature_1": 1,
                        "3C_feature_2": 0,
                        "3C_feature_3": 0,
                        "3C_feature_4": 0.4
                        "3C_feature_5": 1
                    },
                    {
                        "3B_feature_1": 1,
                        "3B_feature_2": 1,
                        "3B_feature_3": 0,
                        "3B_feature_4": 0.3
                        "3B_feature_5": 0
                    }
                ],
                [
                    {
                        "3C_feature_1": 1,
                        "3C_feature_2": 0,
                        "3C_feature_3": 0,
                        "3C_feature_4": 0.4
                        "3C_feature_5": 1
                    },
                    {
                        "3D_feature_1": 0,
                        "3D_feature_2": 1,
                        "3D_feature_3": 1,
                        "3D_feature_4": 0.5
                        "3D_feature_5": 0
                    }
                ],
                [
                    {
                        "3B_feature_1": 1,
                        "3B_feature_2": 1,
                        "3B_feature_3": 0,
                        "3B_feature_4": 0.3
                        "3B_feature_5": 0
                    },
                    {
                        "3A_feature_1": 0,
                        "3A_feature_2": 0,
                        "3A_feature_3": 1,
                        "3A_feature_4": 0.1
                        "3A_feature_5": 1
                    }
                ],
                [
                    {
                        "3B_feature_1": 1,
                        "3B_feature_2": 1,
                        "3B_feature_3": 0,
                        "3B_feature_4": 0.3
                        "3B_feature_5": 0
                    },
                    {
                        "3D_feature_1": 0,
                        "3D_feature_2": 1,
                        "3D_feature_3": 1,
                        "3D_feature_4": 0.5
                        "3D_feature_5": 0
                    }
                ],
                [
                    {
                        "3A_feature_1": 0,
                        "3A_feature_2": 0,
                        "3A_feature_3": 1,
                        "3A_feature_4": 0.1
                        "3A_feature_5": 1
                    },
                    {
                        "3D_feature_1": 0,
                        "3D_feature_2": 1,
                        "3D_feature_3": 1,
                        "3D_feature_4": 0.5
                        "3D_feature_5": 0
                    }
                ]
            ]