740 likes | 875 Vues
This work by Dr. Alexandra Cristea explores the intricate relationships between adaptive hypermedia, user modeling, and granularity in educational environments. It delves into various adaptation techniques, from direct responses to user interactions to high-level adaptation strategies. The author presents a novel adaptation language aimed at enhancing courseware reusability and addresses the challenges of authoring adaptive content. By examining different instructional strategies and their applications, this research aims to optimize learning experiences tailored to individual user needs.
E N D
GenericAdaptation Languages Explicit Intelligence in Adaptive Hypermedia • Dr. Alexandra Cristea • a.i.cristea@warwick.ac.uk • http://www.dcs.warwick.ac.uk/~acristea/
Adaptation granularity • lowest level:direct adaptation techniques: • adaptive navigation support & adaptive presentation(Brusilovsky 1996), implem.: AHA!; expressed in AHAM syntax • techniques usually based on threshold computations of variable-value pairs. • medium level:goal / domain-oriented adaptation techniques: • based on a higher level language that embraces primitive low level adaptation techniques (wrapper) • new techniques: adaptation language (Calvi & Cristea 2002), • high level:adaptation strategies • wrapping layers above • goal-oriented Adaptation Assembly language Adaptation Programming language Adaptation Function calls
How to create an adaptation language? • Adaptation Language as an Intermediate Platform (between authoring environment and adaptation engine) • An interface between the adaptation engineer and the authoring system
“Authoring problem” Defining:- content alternatives & multiple paths through the content - adaptation techniques - whole user-interaction mechanism design Alleviating “Authoring problem”Improving reuse capabilities:(reuse of previously created material & other components)- reuse of static & dynamic parts of the courseware The solutionReuse of dynamics:“Exchanging not only the ingredients, but the recipes as well”Adaptation languages:-LAG - LAG-XLS (read as “LAG-excels”)
How to create an adaptation language? • We need to find out which are the: • Elements of course dynamics • For this, we need to analyse what happens in an adaptive course, and what is done dynamically:
Selection of Media Items • Visual style • Diagrams • Illustrations • Graphs • Flowcharts • Animations+ audio • Verbal style • More text • Possibly audio
Providing navigation paths Sequential style Linear step-by-step learning process Global style Global overview first, then details
Ordering information Reflective style Learn by looking at examples Active style Learn by doing things actively
Types of Adaptive Strategies • Instructional strategies - selection of media items - ordering information / different navigation paths • Instructional meta-strategies– monitoring e.g., preferences for: - certain types of information (e.g. text vs. image) - reading order (e.g. breadth-first vs. depth-first)
Classification of Actions in Adaptive Strategies (from N. Stash)
What does the LAG adaptation language do? • Turing-complete ? – no! • Captures adaptation patterns, typical for AHS, for reuse • We start with a set of desired adaptive behavior: • Inherited from direct adaptation techniques: If => Action • Conditions, Enough conditions • We add more, depending on adaptivity requirements
If, enough ifUM.knowledge > 1 then (PM.GM.Concepts.show = true) for-eachenough(GM.Concept.weight > 2GM.Concept.label== interesting,1) (PM.GM.Concept.show = true)
Select • selecting concept representation • In MOT, given by attributes, so LAG has: • DM.Concept.attribute • GM.Concept • E.g., presentation only: • PM.DM.Concept.attribute.show • PM.GM.Concept.show • PM.GM.Concepts.show
Sort • Sequencing concept representation • Content is sorted alphanumerically on the Concept’s “order” variable • Order of the current concept: • PM.GM.Concept.order • Defaults to Null
Show Content/Link • Showing content of a concept • PM.DM.Concept.attribute.show • PM.GM.Concept.show • Showing the concept in a specific area of the presentation: • PM.MENU.GM.Concept.show • PM.CONTENT.GM.Concept.show
Show Links • Displaying a link to a concept • No difference, only in the navigational areas can they be made available: • PM.TODO.GM.Concept.show • Navigational areas are displayed by default. To switch them off we need: • PM.MENU = false
setDefault • setting defaults FOR-EACH true ( PM.GM.Concept.show[label = ‘’] = true)
Hierarchical actions • Hierarchy attributes: • Parent: the parent concept of a given concept: GM.Concept.parent • Child: the child concept of a given concept: GM.Concept.child GM.Concept.parent.child GM.Concept.group
updates • updating the User Model Overlay variable: UM.GM.Concept.knowledge = 1 Free variable: UM.knowledge += 1
Actions on groups of items • for-each GM.Concept.label == mylabel ( if GM.Concept.weight > 1 then (PM.GM.Concept.show = false)) • PM.GM.Concepts.show = true
Dealing with multiple labels • Example of LIKE if (GM.Concept.label LIKE *text*) then (PM.GM.Concept.show = false)
Concepts & their contents Stressing the overlay structure of user model on top of • Conceptmaps (DM) • UM.DM.stereotype1 = beg • or Lessons (GM): • UM.GM.stereotype1 = beg • or as independent variables: • UM. stereotype1 = beg
Concepts & their contents Stressing the overlay structure of presentation model on top of • Lessons (GM): • PM.GM.Concepts.show = true • UM.GM.knowledge
Type & Order & Label of Attributes • Type of Attributes (in Lessons) usage • GM.Concept.type == title • DM.Concept.<attribute>.type == title • Order of Attributes (in Lessons) usage • PM.GM.Concept.order = 3 • Labels, weights of attributes (in Lessons) usage • GM.Concept.label == beg • GM.Concept.label LIKE *beg*
Special attributes • Event attributes: • Access: a concept is currently been accessed: UM.GM.Concept.access = true • Accessed: display count for a GM concept UM.GM.Concept.accessed > 1
Multiple Selection & Actions • Show all concepts that have not been accessed by the user • PM.GM.Concepts[UM.accessed<1].show = true • That shows all concepts in the GM where UM.GM.Concept.accessed < 1
Layout Adaptation • Menu • Progress Bars • List • Text
Default Layout Progress Bars Menu List Text
Layout Adaptation • Set the layout for an area • Layout[E].type = todo • Layout[E].title = “Todo List” • Set a HTML/Text Layout • Layout[S].type = text • Layout[S].content = “<imgsrc=logo.jpg/>”
Dimming • Example of Dimming content if (GM.Concept.label == “dimthis”) then (PM.GM.Concept.dim = true )
Overall structure of a LAG adaptation strategy // Description // Variables initialization( // what the user sees first ) implementation( // how the user interacts with the system )
Meta-strategies • strategy “[Stored Strategy Name]” “[Code to Execute]” • Meta-Strategy Exampleinitialization( strategy "qoeSetup" "initialization")implementation( strategy "qoeSetup" "implementation" strategy "qoeQOS" "implementation" strategy "qoeMM" "implementation")
LAG resources • LAG Example Strategies: http://adaptive.dcs.warwick.ac.uk/ • LAG Guide including Semantics and examples: http://adaptive.dcs.warwick.ac.uk/lagGuide.pdf • LAG Grammar: • http://adaptive.dcs.warwick.ac.uk/LAGGrammar.txt
LAG Example: Rollout This strategy slowly rolls out (and hides) the attributes of concepts based on how often a concept has been accessed. Concepts are monitored through the title attribute. Concept.beenthere keeps track of visits; Concepts have the label "showatmost" if they should disappear after a while (with weight indicating the number of visits required) and the label "showafter" if they should show up after a while (again, weight indicates the number of visits)
LAG Example: Rollout Code 1/2 • Initialization (UM.GM.Concepts.beenthere = 0PM.GM.Concepts.show = true for-each GM.Concept.label == showafter ( if GM.Concept.weight > 1 then (PM.GM.Concept.show = false ) ))
LAG Example: Rollout Code 2/2 implementation (for-eachUM.GM.Concept.access == true (UM.GM.Concept.beenthere += 1 ) for-each enough(UM.GM.Concept.beenthere >= GM.Concept.weightGM.Concept.label == showatmost ,2) (PM.GM.Concept.show = false ) for-each enough(UM.GM.Concept.beenthere >= GM.Concept.weightGM.Concept.label == showafter ,2) (PM.GM.Concept.show = true ))
LAG Example: BegIntAdv • This strategy shows the beginner concepts first (together with the concepts for all learners). • After all beginner concepts are read, the intermediate concepts are shown as well; • Finally, after all the intermediate concepts are read, the advanced concepts are shown and the course can be viewed completely
LAG Example: BegIntAdv 1/4 initialization(PM.next = truePM.ToDo = truePM.menu = true UM.GM.knowlvl = beg...
LAG Example: BegIntAdv 2/4 for-each (true) ( if ( GM.Concept.label == "beg") then (PM.GM.Concept.show = trueUM.GM.begnum += 1 ) elseif (GM.Concept.label == "int") then (PM.GM.Concept.show = falseUM.GM.intnum += 1 ) elseif (GM.Concept.label == "adv") then (PM.GM.Concept.show = false ) else (PM.GM.Concept.show = true ) ))
LAG Example: BegIntAdv 3/4 implementation ( for-each ( UM.GM.Concept.access == true ) ( if (UM.GM.Concept.accessed == 1) then ( if (GM.Concept.label == beg) then (UM.GM.begnum -= 1 ) elseif (GM.Concept.label == int) then (UM.GM.intnum -= 1 ) )) ...
LAG Example: BegIntAdv 4/4 if (UM.GM.begnum < 1 and UM.GM.knowlvl == beg) then (UM.GM.knowlvl = intPM.GM.Concepts[GM.label == UM.GM.knowlvl].show = true ) elseif (UM.GM.intnum < 1 and UM.GM.knowlvl == int) then (UM.GM.knowlvl = advPM.GM.Concepts[GM.label == UM.GM.knowlvl].show = true ))
LAG Example: instance usage initialization ( PM.GM.Concepts.show = false '\Neural Networks II\Neural Networks I\title'.show = true )
LAG Example: Parent/Child implementation ( // if you visited the parent you should be able to visit the child for-each (UM.GM.Concept.parent.access == true) then ( GM.Concept.show = true ) )
LAG Example: Positioning 1/2 initialization ( PM.CONTENT.GM.Concepts.show = true for-each (GM.Concept.label == menu) then ( PM.MENU.GM.Concept.show = true ) for-each (GM.Concept.label == todo) then ( PM.TODO.GM.Concept.show = true ) for-each (GM.Concept.label == next) then ( PM.NEXT.GM.Concept.show = true ) )