540 likes | 675 Views
Introduction to the TrindiKit. ESSLLI, Helsinki 20th Aug 2001 Staffan Larsson sl@ling.gu.se. What is TrindiKit?. a toolkit for building and experimenting with dialogue move engines and systems, based on the information state approach not a dialogue system!. This lecture.
E N D
Introduction to the TrindiKit ESSLLI, Helsinki 20th Aug 2001 Staffan Larsson sl@ling.gu.se
What is TrindiKit? a toolkit for building and experimenting with dialogue move engines and systems, based on the information state approach not a dialogue system!
This lecture • short demo • architecture & concepts • what’s in TrindiKit? • building a system
Short demo • web-based demo + simple GUI • information state view • record • dialogue • update rules • module view • active modules highlighted • asynchronous processing
control DME module1 module… modulei modulej module… modulen • Total Information State • (TIS) • Information state proper (IS) • Module Interface Variables • Resource Interface Variables resource1 resource… resourcem
Information State (IS) • an abstract data structure (record, DRS, set, stack etc.) • accessed by modules using conditions and operations • the Total Information State (TIS) includes • Information State proper (IS) • Module Interface variables • Resource Interface variables
Dialogue Move Engine (DME) • module or group of modules responsible for • updating the IS based on observed moves • selecting moves to be performed • dialogue moves are associated with IS updates using IS update rules • there are also update rules no directly associated with any move (e.g. for reasoning and planning) • update rules: rules for updating the TIS • rule name and class • preconditon list: conditions on TIS • effect list: operations on TIS • update rules are coordinated by update algorithms
Modules and resources • Modules (dialogue move engine, input, interpretation, generation, output etc.) • access the information state • no direct communication between modules • only via module interface variables in TIS • modules don’t have to know anything about other modules • increases modularity, reusability, reconfigurability • may interact with user or external processes • Resources (device interface, lexicons, domain knowledge etc.) • hooked up to the information state (TIS) • accessed by modules • defined as object of some type (e.g. ”lexicon”)
What does TrindiKit provide? • High-level formalism and interpreter for implementing dialogue systems • promotes transparency, reusability, plug-and-play, etc. • allows implementation and comparison of dialogue theories • hides low-level software engineering issues • GUI, WWW-demo • Ready-made modules and resources • speech • interfaces to databases, devices, etc. • reasoning, planning
TrindiKit contents (1) • alibrary of datatype definitions (records, DRSs, sets, stacks etc.) • user extendible • alanguage for writing information state update rules • GUI: methods and tools for visualising the information state • debugging facilities • typechecking • logs of communication modules-TIS • etc.
TrindiKit contents (2) • A language for defining update algorithms used by TrindiKit modules to coordinate update rule application • A language for defining basic control structure, to coordinate modules • A library of basic ready-made modules for input/output, interpretation, generation etc.; • A library of ready-made resources and resource interfaces, e.g. to hook up databases, domain knowledge, devices etc.
Special modules and resources included with TrindiKit • OAA interface resource • enables interaction with existing software and languages other than Prolog • Speech recognition and synthesis modules • TrindiKit shells for off-the-shelf recognisers • currently only ViaVoice, but more on the way • Possible future modules: • planning and reasoning modules • multimodal input and output
Asynchronous TrindiKit • Internal communication uses either • OAA (Open Agent Architecture) from SRI, or • AE (Agent Environment), a stripped-down version of OAA, implemented for TrindiKit • enables asynchronous dialogue management • e.g.: system can listen and interpret, plan the dialogue, and talk at the same time
Relation TrindiKit – dialogue system domain-specific system domain knowledge (resources) dialogue theory (IS, rules, moves etc) domain-independent DME software engineering (basic types, control flow) TRINDIKIT
Building a domain-independent Dialogue Move Engine • Come up with a nice theory of dialogue • Formalise the theory, i.e. decide on • Type of information state (DRS, record, set of propositions, frame, ...) • A set of dialogue moves • Information state update rules, including rules for integrating and selecting moves • DME Module algorithm(s) and basic control algorithm • any extra datatypes (e.g. for semantics: proposition, question, etc.)
Domain independence of the Dialogue Move Engine • The DME is domain independent, given a certain type of dialogue • information-seeking • instructional • negotiative • ... • Domain independence of DME is not enforced by TrindiKit, but is good practice • promotes reuse of components • forces abstraction from domain-specific details, resulting in a more general theory of dialogue
Specifying Infostate type • the Total Information State contains a number of Information State Variables • IS, the Information State ”proper” • Interface Variables • used for communication between modules • Resource Variables • used for hooking up resources to the TIS, thus making them accessible from to modules • use prespecified or new datatypes
sample infostate type declaration infostate_variable_of_type( is, IS ) :- IS = record( [ private : Private, shared : Shared ] ), Shared = record( [ com : set( proposition ), qud : stack( question ), lm : set( move ) ] ), Private = record( [ agenda: stack( action ), plan : stackset( action ), bel : set( proposition ), tmp : Shared ] ) ] ).
resulting infostate type AGENDA : stack( Action ) PLAN : stackset( Action ) PRIVATE : BEL : set( Prop ) TMP : (same type as SHARED) COM : set( Prop ) QUD : stack( Question ) SHARED : LM: set( Move )
Sample interface variable type declarations interface_variable_of_type( input, string ). interface_variable_of_type( output, string ). interface_variable_of_type( latest_speaker, speaker ). interface_variable_of_type( latest_moves, set(move) ). interface_variable_of_type( next_moves, set(move) ).
Specifying a set of moves • amounts to specifying objects of type move (a reserved type) • there may be type constraints on the arguments of moves • preconditions and effects of moves • formalised in update rules, not in the move definition itself • a move may have different effects on the IS depending e.g. on who performed it
sample move specifications % Social of_type( quit, move ). of_type( greet, move ). of_type( thank, move ) . % Q&A of_type( ask(Q), move ) <- of_type( Q, question ). of_type(inform(P), move ) <- of_type( P, proposition). of_type( answer(R), move ) <- of_type( R, proposition) or of_type( R, ellipsis ).
Writing rules • rule = conditions + operations • if the rule is applied to the IS and its conditions are true, the operations will be applied to the IS • conditions may bind variables with scope over the rule (prolog variables, with unification and backtracking)
A sample rule rule( integrateUsrAnswer, [ $/shared/lu/speaker = usr, assoc( $/shared/lu/moves, answer(R), false ), fst( $/shared/qud, Q ), $domain : relevant_answer( Q, R ), $domain : reduce(Q, R, P) ], [ set_assoc( /shared/lu/moves, answer(R),true), pop( /shared/qud ), add( /shared/com, P ) ] ).
A sample rule (old syntax) • rule( integrateUsrAnswer, [ • val#rec( shared^lu^speaker, usr ), • assoc#rec( shared^lu^moves, answer( R ), false ), • fst#rec( shared^qud, Q ), • domain :: relevant_answer( Q, R ), • domain :: reduce(Q, R, P) • ], [ • set_assoc#rec( shared^lu^moves, answer(R),true), • pop#rec( shared^qud ), • add#rec( shared^com, P ) ] ).
Writing rules • available conditions and operations depend on the infostate type • the infostate is declared to be of a certain (usually complex) type • datatype definitions provide • relations:Rel(Arg1, …, ArgN) • functions:Fun(Arg1, …, ArgN,Result) • operations: Op(ObjIn,Arg1, …, ArgN,ObjOut) • New datatypes may be added
Writing rules: locations in TIS • objects may be specified by giving a path to a locationin the infostate; • paths are specified using selectors, which are similar to functions • $Fun2($Fun1) ~ $Sel1/Sel2 • $fst($/shared/qud) ~ $/shared/qud/fst • ”$” evaluates a path and gives the object at the location specified • example: • is/shared/com is a path, pointing to a location in the TIS • $is/shared/com is the object in that location • theiscan be left out, giving$/shared/com
Writing rules: conditions (1) • conditions do not change the information state • if a condition fails, backtracking ensues • condition syntax (incomplete) • Rel(Arg1, … , ArgN), e.g. • fst($/shared/qud,Q) • Arg1:Rel(Arg2,…,ArgN), e.g. • $/shared/qud:fst(Q) • $domain:relevant_answer(Q,A) • Arg1 = Arg2 • Q = $fst($/shared/qud) • Cond1 and Cond2 • Cond1 or Cond2 • not Cond1 • forall(Cond1, Cond2) • (Argis object or prolog variable)
Writing rules: conditions (2) • quantification, binding and backtracking • if an instantiation a of a variable V in a condition C is found that makes condition C true, V is bound to a • backtracking occurs until a successful instantiation of all variables in the list of conditions has been found • example list of conditions fst($/shared/qud,Q), in($/shared/com,P), $domain:relevant_answer(P,Q) • Explicit quantification Q.P. fst($/shared/qud,Q) & in($/shared/com,P) & $domain:relevant_answer(P,Q)
Writing rules: operations • operations change the information state • if an operation fails, an error is reported • variable bindings survive from conditions to operations • operation syntax (incomplete) • Op(Path,Arg1,…,ArgN) • push(/shared/qud, Q) • Path : Op(Arg1, … ,ArgN) • /shared/qud : push(Q) • Store := Fun(Obj,Arg1,…,ArgN) • /private/tmp/qud := push($/shared/qud,Q)
Specifying update algorithms • uses rule classes • constructs include • Rule • RuleClass • if Cond then S else T • repeat R until C • repeat R • try R • R orelse S • test C • SubAlgorithm
Sample update algorithm grounding, if $latest_speaker == sys then try integrate, try database, repeat downdate_agenda, store else repeat integrate orelse accommodate orelse find_plan orelse if (empty#rec( private^agenda ) then manage_plan else downdate_agenda repeat downdate_agenda if empty($/private/agenda)) then repeat manage_plan repeat refill_agenda repeat store_nim try downdate_qud
Specifying serial control algorithms • serial constructs include • Module{:Algorithm} • if Cond then S else T • repeat R until C • repeat R • try R • R orelse S • test C • SubAlgorithm
Specifying concurrent control algorithms • Agent1 | Agent2 | … | AgentN • whereAgenti is • AgentName : { • import Module1 , • … • import Modulep , • Trigger1 => SerialAlgoritm1 , • … • Triggerm => SerialAlgoritmm } • triggers: • condition(C) (C is a subset of the full condition set) • init • new_data(Stream)
Sample control algorithm (1) repeat ( [ select, generate, output, update, test( $program_state == run ), input, interpret, update ] )
Sample control algorithm (2) input: { init => input:display_prompt, new_data(user_input) => input } | interpretation: { import interpret, condition(is_set(input)) => [ interpret, print_state ] } | dme: { import update, import select, init => [ select ], condition(not empty(latest_moves)) => [ update, if val(latest_speaker,usr) then select else [] ] } | generation: { condition(is_set(next_moves)) => generate } | output: { condition(is_set(output)) => output } )).
From DME to dialogue system Build or select from existing components: • Modules, e.g. • input • interpretation • generation • output • Still domain independent • the choice of modules determines e.g. the format of the grammar and lexicon
Domain-specific system Build or select from existing components: • Resources, e.g. • domain (device/database) interface • dialog-related domain knowledge, e.g. plan libraries etc. • grammars, lexicons
Building resources • Resource • the resource itself; exports a set of predicates • Resource interface • defines the resource as a datatype T, i.e. in terms of relations, functions and operations • Resource interface variable • a TIS variable whose value is an object of the type T • By changing the value of the variable, resources can be switched dynamically • change laguage • change domain
sample resource variable type declarations (incl. resource interface) resource_type( lexiconT ). resource_variable_of_type( lexicon, lexiconT ). of_type( lexicon_travel_english, lexiconT ). of_type( lexicon_autoroute_english, lexiconT ). of_type( lexicon_travel_svenska, lexiconT ). of_type( lexicon_cellphone_svenska, lexiconT ). resource_condition(lexiconT,input_form(Phrase,Move),Lexicon) :- Lexicon : input_form( Phrase, Move ). resource_condition(lexiconT,output_form(Phrase,Move),Lexicon):- Lexicon : output_form( Phrase, Move ).
TrindiKit Features • Explicit information state datastructure makes systems more transparent • Update rules provide an intuitive way of formalising theories in a way which can be used by a system • Domain knowledge encoded in resources; • the rest of the system is domain independent • resources can be switched dynamically • Modular architecture promotes reuse
Features, cont’d • Allows both serial and asynchronous systems • Interfaces to OAA • Generic WWW interface • Runs on UNIX, Windows, Linux • Needs SICStus Prolog • Version 2 .0 is available, next version coming soon (SIRIDUS) • www.ling.gu.se/projects/trindi/trindikit • Larsson & Traum: NLE Special Issue on Best Practice in Dialogue Systems Design, 2000
Systems developed using TrindiKit • GoDiS – information state based on Questions Under Discussion (Larsson et al 2000) • MIDAS – DRS information state, first-order reasoning (Bos & Gabsdil, 2000) • EDIS – information state based on PTT (Matheson et al 2000) • SRI Autoroute – information state based on Conversational Game Theory (Lewin 2000); robust interpretation (Milward 2000)
Post-TRINDI applications • SIRIDUS project (EU 2000-) • command and negotiative dialogues • Spanish, Swedish • GoDiS, SRI system • D’Homme (EU 2001) • Dialogues in the Home Environment • GoDiS, SRI system • Instruction Based Learning for mobile robots (U Edinburgh) • MIDAS • Tutoring Electricity (U Edinburgh) • EDIS, Beetle
???selectors • selects an object (Obj) embedded in another object (Arg) • selector(Sel,Arg,Obj,ArgWithHole,Hole). • e.g. selector(fst,stack([E|S]),E,stack([H|S]),H). • Every selector corresponds to a function function(Sel,[Arg],Object).
Datatype definitions • relations • relations between objects; true or false • format: relation(Rel,Args). • Example • definition: relation(fst,[stack([E|S]),E]). • condition: fst($/shared/qud,Q)