Slide 1

Slide 1 text

Emora STDM: A Versatile Framework for Innovative Dialogue System Development James D. Finch and Jinho D. Choi

Slide 2

Slide 2 text

● Developing dialogue systems is a lot of work! ● Specifications often can’t be found in data ● Handcrafting is inevitable ● Dialogue development frameworks streamline development ○ Commercially-oriented, e.g. Google DialogFlow ○ Update rule-driven, e.g. PyOpenDial (Jang et al 2019), PyDial (Ultes et al 2017) ○ Custom languages, e.g. AIML, ChatScript 2 Introduction

Slide 3

Slide 3 text

● Python package for dialogue system development ● Simple systems developed by novices in minutes or hours ● High customizability for complex interactions ● Seamless integration of pattern matching, trained models, and custom logic ● Two fully-interoperable approaches: a. State machine (rapid development) b. Information state* (complex interactions) 3 Emora State Transition Dialogue Manager * Larsson and Traum (2000)

Slide 4

Slide 4 text

4 State Machine Based Dialogue Management How are you? Hello! Hi! I am well. How are you? a b c d So did you have a good weekend? ⬛ System transition ⬛ User transition

Slide 5

Slide 5 text

'Hello!': { 'How are you?': { 'I am well. How are you?': {...} }, 'Hi!': { 'So did you have a good weekend?': {...} } } 5 State Machine Based Dialogue Management How are you? Hello! Hi! I am well. How are you? a b c d So did you have a good weekend? ⬛ System transition ⬛ User transition

Slide 6

Slide 6 text

● Regex for natural language ● Compiles into regular expression ● Embed function calls ○ Query databases ○ Invoke neural models ○ Custom processing 6 Natural Language Expression (Natex) Syntax Example Disjunction {like, love, adore} Conjunction Sequence [when, skiing, cold] Negation - {always, usually, mostly} Capture $pet={dog, cat, fish} Function Call #NER(person, location)

Slide 7

Slide 7 text

[i {like, love} $X=#POS(verb)] 7 Natex Compilation (Function Definition)

Slide 8

Slide 8 text

[i {like, love} $X=#POS(verb)] “I can swim, but I like running more” 8 Natex Compilation (Function Definition)

Slide 9

Slide 9 text

[i {like, love} $X=#POS(verb)] “I can swim, but I like running more” class PartOfSpeech(Macro): def run(input, vars, args): return {token for token in input if part_of_speech(token) in args} {can, swim, like, running} 9 Natex Compilation (Function Definition)

Slide 10

Slide 10 text

[i {like, love} $X=#POS(verb)] “I can swim, but I like running more” class PartOfSpeech(Macro): def run(input, vars, args): return {token for token in input if part_of_speech(token) in args} {can, swim, like, running} [i {like,love} $X={can,swim,like,running}] 10 Natex Compilation (Function Definition)

Slide 11

Slide 11 text

Personally, I {like, love} $genre={action, horror} movies. 11 Natex for Natural Language Generation

Slide 12

Slide 12 text

Personally, I {like, love} $genre={action, horror} movies. “Personally, I like action movies.” ($genre=”action”) “Personally, I love horror movies.” ($genre=”horror”) 12 Natex for Natural Language Generation

Slide 13

Slide 13 text

13 State Machine Based Dialogue Management U 2 :[I, $ENT=#ONT (entertainment)] S 1 :Have you seen any movies lately? U 3 :[$MOVIE=#MDB()] S 3 :Sorry, I didn’t catch that. Have you seen any good movies? U 1 :ERROR S 2 :I’ve been watching a lot of $GENRE={action, horror, drama} movies {lately, recently} U 6 :#SENTIMENT(positive) [$GENRE] U 5 :ERROR U 4 :[{have, did} you {seen, watch} $MOVIE=#MDB()] S 5 :$MOVIE is one of my favorites! S 4 :What’s your favorite $ENT? S 6 :What is your favorite movie? a c b e f d g h S 7 :Why do you like $GENRE? ⬛ System transition ⬛ User transition

Slide 14

Slide 14 text

● State machine-based dialogue is rigid ● Update rules flexibly modify dialogue state and response ● Update rule table is a list of conditional if...then… rules ● Precondition is a Natex matching against the user input ● Postcondition is a Natex using NLG compiler ● All rules are applied before state machine transitions 14 Update Rules

Slide 15

Slide 15 text

15 Update Rules Example User: “My wife loves that movie” Precondition Postcondition #IF($is_adult) “Do you have kids?” (2.0) [{movie, movies}] #GOTO(state_x) [my {husband, wife}] #SET($married=True) #IF(married=True) #SET($is_adult=True) #REWRITE( dont -> do not) None

Slide 16

Slide 16 text

16 Update Rules Example User: “My wife loves that movie” Precondition Postcondition #IF($is_adult) “Do you have kids?” (2.0) [{movie, movies}] #GOTO(state_x) [my {husband, wife}] #SET($married=True) #IF(married=True) #SET($is_adult=True) #REWRITE( dont -> do not) None

Slide 17

Slide 17 text

17 Update Rules Example User: “My wife loves that movie” Precondition Postcondition #IF($is_adult) “Do you have kids?” (2.0) [{movie, movies}] #GOTO(state_x) [my {husband, wife}] #SET($married=True) #IF(married=True) #SET($is_adult=True) #REWRITE( dont -> do not) None

Slide 18

Slide 18 text

18 Update Rules Example User: “My wife loves that movie” Precondition Postcondition #IF($is_adult) “Do you have kids?” (2.0) [{movie, movies}] #GOTO(state_x) [my {husband, wife}] #SET($married=True) #IF(married=True) #SET($is_adult=True) #REWRITE( dont -> do not) None

Slide 19

Slide 19 text

19 Update Rules Example User: “My wife loves that movie” System: “Do you have kids?” Precondition Postcondition #IF($is_adult) “Do you have kids?” (2.0) [{movie, movies}] #GOTO(state_x) [my {husband, wife}] #SET($married=True) #IF(married=True) #SET($is_adult=True) #REWRITE( dont -> do not) None

Slide 20

Slide 20 text

20 Summary Precondition Postcondition [{hi, hello, hey}] “Hi. So, have you seen any good movies?” (2.0) [$movie =#MDB(movie)] $focus=$movie #IF(movie!=None) “Was $movie good?” (0.9)

Slide 21

Slide 21 text

https://github.com/emora-chat/emora_stdm References Y. Jang, J. Lee, J. Park, K. Lee, P. Lison, and K. Kim. 2019. PyOpenDial: A Python-based Domain-Independent Toolkit for Developing Spoken Dialogue Systems with Probabilistic Rules. In Proceedings of EMNLP System Demonstrations. S. Larsson and D. R. Traum. 2000. Information state and dialogue management in the TRINDI dialogue move engine toolkit. NLE, 6(3 & 4):323-340. S. Ultes, Rojas B., Lina M., P. Su, D. Vandyke, D. Kim, I. Casanueva, P. Budzianowski, N. Mrksic, T. Wen, M. Gasic, and S. Young. 2017. Pydial: A multi-domain statistical dialogue system toolkit. In Proceedings of ACL System Demonstrations. 21 Thank You!

Slide 22

Slide 22 text

[i {like, love} $activity=#POS(verb)] “I can swim, but I like running more” 22 Natex Compilation

Slide 23

Slide 23 text

[i {like, love} $activity=#POS(verb)] “I can swim, but I like running more” [i {like, love} $activity=#POS(verb)] [i (like|love) $activity=#POS(verb)] 23 Natex Compilation

Slide 24

Slide 24 text

[i {like, love} $activity=#POS(verb)] “I can swim, but I like running more” [i {like, love} $activity=#POS(verb)] [i (like|love) $activity=#POS(verb)] [i (like|love) $activity=(can|swim|like|running)] 24 Natex Compilation

Slide 25

Slide 25 text

[i {like, love} $activity=#POS(verb)] “I can swim, but I like running more” [i {like, love} $activity=#POS(verb)] [i (like|love) $activity=#POS(verb)] [i (like|love) $activity=(can|swim|like|running)] [i (like|love) (?P(can|swim|like|running))] 25 Natex Compilation

Slide 26

Slide 26 text

[i {like, love} $activity=#POS(verb)] “I can swim, but I like running more” [i {like, love} $activity=#POS(verb)] [i (like|love) $activity=#POS(verb)] [i (like|love) $activity=(can|swim|like|running)] [i (like|love) (?P(can|swim|like|running))] .*?i.*?(like|love).*?(?P(can|swim|like|running)).*? 26 Natex Compilation

Slide 27

Slide 27 text

[i {like, love} $activity=#POS(verb)] “I can swim, but I like running more” [i {like, love} $activity=#POS(verb)] [i (like|love) $activity=#POS(verb)] [i (like|love) $activity=(can|swim|like|running)] [i (like|love) (?P(can|swim|like|running))] .*?i.*?(like|love).*?(?P(can|swim|like|running)).*? Match with $activity set to “running”! 27 Natex Compilation

Slide 28

Slide 28 text

Personally, I {like, love} $genre={action, horror} movies. 28 Natex for Natural Language Generation

Slide 29

Slide 29 text

Personally, I {like, love} $genre={action, horror} movies. Personally, I like $genre={action, horror} movies. 29 Natex for Natural Language Generation

Slide 30

Slide 30 text

Personally, I {like, love} $genre={action, horror} movies. Personally, I like $genre={action, horror} movies. Personally, I like $genre=action movies. 30 Natex for Natural Language Generation

Slide 31

Slide 31 text

Personally, I {like, love} $genre={action, horror} movies. Personally, I like $genre={action, horror} movies. Personally, I like $genre=action movies. Personally, I like action movies. ($genre=”action”) 31 Natex for Natural Language Generation