Beruflich Dokumente
Kultur Dokumente
Seminario 1
Agentes Conversacionales
©
Estructura
Índice
© 2
Modelo de evaluación de las prácticas
© 3
Agentes Conversacionales1
Introducción
Agentes
Conversacionales
Introducción
© 4
Agentes Conversacionales
Cine e I.A.
Ava
C3PO
© 5
Agentes Conversacionales
Agentes Conversacionales Comerciales.
© 6
Práctica 1
Presentación de la práctica
Práctica 1
Definir agentes
conversacionales
© 7
Práctica 1
Objetivo
© 8
Práctica 1
Detalles de la práctica
© 9
Práctica 1
Agente para entrevistas de Trabajo
Hablame un poco de ti
Cual es tu mayor defecto
© 10
Práctica 1
Agente Plataformas de Streaming
© 11
Práctica 1
Agente Plataformas de Streaming
© 12
Práctica 1
Agente Plataformas de Streaming
© 13
Práctica 1
Agente Plataformas de Streaming
(1) Indicar los idiomas y subtítulos en los que se puede visionar una serie. Esto
incluye preguntar si la serie está en un idioma concreto.
© 14
Práctica 1
Agente Plataformas de Streaming
Por tanto, en esta parte del desarrollo será necesario definir las
estructuras de datos necesarias para almacenar la información sobre
el estado del visionado de estos dos usuarios.
© 15
Práctica 1
Agente Plataformas de Streaming
© 16
Práctica 1
Agente Plataformas de Streaming
© 17
Human: Reproduce la serie narcos
Robot: Ok, podrias decirme si eres Carlos o Marta
Human: Soy Carlos
Robot: Reproduciendo el palacio en llamas, el capítulo 4 de la primera temporada de Narcos por el minuto 30,
donde lo dejaste la ultima vez
Human: SIMUL 10
Robot: El tiempo total transcurrido es de 10 minutos. Capitulo en reproduccion va por el minuto 40
Human: Retrocede 5 minutos
Robot: Capitulo en reproduccion va por el minuto 35
Human: SIMUL 10
Robot: El tiempo total transcurrido es de 20 minutos. Capitulo en reproduccion terminado
Human: Reproduce el siguiente capitulo
Robot: Reproduciendo habra futuro, el capítulo 5 de la primera temporada de Narcos por el minuto 0
Human: pon el idioma en ingles
Robot: Puesto el audio en la pista de ingles, capitulo en reproduccion va por el minuto 0
Human: Pon los subtitulos en frances
Robot: para la serie actual no tiene subtitulos en frances, puedes elegir entre espanol e ingles
Human: Da igual, no pongas subtitulos
Robot: ok, capitulo en reproducción va por el minuto 0
Human: SIMUL 16
Robot: El tiempo total transcurrido es de 36 minutos. Capitulo en reproduccion va por el minuto 16
Human: Ha llegado Marta
Robot: El capitulo 4 de la primera temporada de Fleabag lo dejasteis sin terminar, quereis que lo reproduzca
ahora
Human: ahora no
Robot: El capitulo 9 de la primera temporada de la casa de papel lo estabais viendo los dos, lo reproduzco por
el minuto que lo dejo Carlos
Human: vale
Robot: Reproduciendo episodio 9, el capítulo 9 de la primera temporada de la casa de papel por el minuto 13
Human: SIMUL 5
Robot: El tiempo total transcurrido es de 41 minutos. Capitulo en reproduccion va por el minuto 18
Human: Cerrar reproduccion
Robot: Aplicacion cerrada
© 18
Práctica 1
Evaluación
EVALUACIÓN
© 19
Práctica 1
Evaluación
NIVEL 0: Es el mínimo que hay que entregar para que la práctica sea
considerada para su evaluación.
© 20
Práctica 1
Evaluación
© 21
Práctica 1
Evaluación
© 22
Práctica 1
Evaluación
© 23
Práctica 1
Que hay que entregar?
practica1.zip
© 24
Práctica 1
Consideraciones Finales
Consideraciones Finales
3. Los alumnos asociados con las prácticas que se detecten copiadas, ya sea durante el
proceso de detección de copia o durante la defensa de la práctica tendrán
automáticamente suspensa la asignatura y deberán presentarse a la convocatoria
extraordinaria.
4. Tiene la misma penalización el que copia como el que se deja copiar. Por eso
razón, para prevenir que sucedan estas situaciones, os aconsejamos que en ningún
caso paséis vuestro código a nadie y bajo ninguna circunstancia.
6. El alumno que entrega una práctica y no se presenta al proceso de defensa tiene una
calificación de cero en la práctica
© 25
Práctica 1
Desarrollo temporal
Desarrollo Temporal
• Semana del 21:
• Presentación de la práctica
La fecha tope para la entrega será el Domingo 24 de Marzo antes de las 23:00
horas.
© 26
El lenguajes AIML
El lenguaje AIML
© 27
El lenguajes AIML
El lenguaje AIML
Estructura
Básica de
AIML
© 28
El lenguajes AIML
Estructura Básica
</aiml>
© 29
El lenguajes AIML
El lenguaje AIML
El Interprete
“program-ab”
© 30
El lenguajes AIML
Interprete “program-ab”
1. Descargamos el 3. Accedemos a la
archivo “program- carpeta “bots”.
ab.zip” 4. Accedemos a la
2. Se descomprime en carpeta “mybot”.
una carpeta.
© 31
El lenguajes AIML
Interprete “program-ab”
© 32
El lenguajes AIML
Interprete “program-ab”
<?xml version="1.0"
encoding="UTF-8"?>
<aiml version="2.0">
5. Accedemos a la carpeta
<!-- Primera regla -->
aiml
<category>
6. Creamos un fichero que <pattern>Hola</pattern>
llamaremos <template>Hola, que
“primero.aiml”. tal?</template>
7. Como editor podemos usar </category>
el CodeBlocks en Windows
o el editor atom en linux, </aiml>
pero podría ser cualquier
otro editor de texto.
8. Copiamos en el editor el
siguiente texto
© 33
El lenguajes AIML
Interprete “program-ab”
13. Program-ab cargará todos los archivos con extensión aiml que
encuentre en la carpeta aiml. Cuando termine aparecerá “Human:”
que es donde nosotros introducimos nuestra parte del dialogo con el
bot. En esta caso pondremos “Hola!!”, y en “Robot:” nos contestara
“Hola, que tal?”.
© 35
El lenguajes AIML
Interprete “program-ab” PREPROCESAMIENTO
© 37
El lenguajes AIML
Funcionamiento del Matching
© 38
El lenguajes AIML
Ejercicio1
Human: Hola!
Robot: Hola, que tal?
Human: Yo bien, que tal tu?
Robot: Estoy genial!!! Me encanta conocer gente nueva.
Human: Genial!! Como te llamas?
Robot: Mi nombre es HALfonso
© 39
El lenguajes AIML
Ejercicio1
Human: Hola
Robot: Hola, que tal?
Human: Yo bien, que tal tu?
Robot: Estoy genial!!!
Human: Como te llamas?
Robot: Mi nombre es HALfonso
© 40
El lenguajes AIML
Ejercicio1
© 41
El lenguajes AIML
Ejercicio1
© 42
El lenguajes AIML
Ejercicio1
© 43
El lenguajes AIML
El lenguaje AIML
Wildcards
“comodines”
© 44
El lenguajes AIML
Wildcards
© 45
El lenguajes AIML
Wildcards
© 46
El lenguajes AIML
Wildcards
<pattern>Hola _</pattern>
• El comodín “#”: captura cero o más palabras de la entrada (como el ^)
<pattern>Hola #</pattern>
Hola # > Hola _ > Hola amigo > Hola ^ > Hola *
© 47
El lenguajes AIML
Wildcards
A veces se desea definir un patrón que tenga mayor prioridad que “#”
o “_”. Para esos casos está el símbolo “$”, que indica que ese patrón
tiene la mayor prioridad si la adaptación contiene esa palabra.
<pattern>$Quien * Luis</pattern>
© 48
El lenguajes AIML
Wildcards
Los comodines pueden ser capturados dentro del <template> usando <star/>.
<category>
<pattern>Mi nombre es *</pattern>
<template>Hola <star/></template>
</category>
© 49
El lenguajes AIML
Ejercicio 2
Human: Hola …
Robot: Hola, que tal?
Human: Hola
Robot: Hola de nuevo, que tal?
Human: … que tal tu?
Robot: Estoy genial!!!
Human: Fenomeno, me llamo ..1..
Robot: Que casualidad ..1.. yo tambien tengo nombre, me llamo HALberto
© 50
El lenguajes AIML
Ejercicio 2
Resolución
Ejercicio 2:
© 51
El lenguajes AIML
El lenguaje AIML
Variables
© 52
El lenguajes AIML
Variables
• Variables Locales
Como su nombre indica son variables cuyo ámbito es local a
una regla (categoría) y su valor no puede ser consultado
fuera de dicha regla.
© 53
El lenguajes AIML
Variables
<nombre variable>:<valor>
© 54
El lenguajes AIML
Variables
<nombre variable>:<valor>
© 55
El lenguajes AIML
Variables
<bot name=“x”/>
La sintaxis es donde x representa la
propiedad que se desea.
<category>
<pattern>Cual es tu edad</pattern>
<template>Tengo <bot name=“age”/>
anios</template>
</category>
primero.aiml
© 56
El lenguajes AIML
Variables
© 57
El lenguajes AIML
Variables
© 58
El lenguajes AIML
Variables
Variables Locales
© 60
El lenguajes AIML
Variables
El tag <think>
© 61
El lenguajes AIML
El lenguaje AIML
Reducción
Simbólica
<srai>
© 62
El lenguajes AIML
Reducción Simbólica
© 63
El lenguajes AIML
Reducción Simbólica
Estas expresiones las podemos dividir entre aquellas que terminan por “mi
nombre” y las que terminan con “como me llamo”. Podría construir dos
reglas nuevas con estos patrones cuyo template invoque a la regla 6.
<category>
<pattern>* mi nombre</pattern>
<template><srai>CUAL ES MI
NOMBRE</srai></template>
</category>
<category>
<pattern>^ como me llamo</pattern>
<template><srai>CUAL ES MI
NOMBRE</srai></template>
</category>
© 64
El lenguajes AIML
Reducción Simbólica
© 65
El lenguajes AIML
Ejercicio 3
© 66
El lenguajes AIML
El lenguaje AIML
Sets y Maps
© 67
El lenguajes AIML
Sets
© 68
El lenguajes AIML
Sets
<category>
<pattern> Es * un color</pattern>
<template>No, <star/> no es un color</template>
</category>
© 69
El lenguajes AIML
Sets
© 70
El lenguajes AIML
Maps
cadena1:cadena2
© 71
El lenguajes AIML
Maps
<category>
<pattern>Cual es la capital de *</pattern>
<template>
La capital de <star/> es <map name=“capital”><star/></map>.
</template>
</category>
© 72
El lenguajes AIML
Maps
© 73
El lenguajes AIML
Maps
• <set>number</set>
Números naturales
• <map name=“successor”>
Dado un número natural “n” devuelve “n+1”
• <map name=“predecessor”>
Dado un número natural “n” devuelve “n-1”
• <map name=“plural”>
Devuelve el plurar de un palabra en singular (sólo Inglés)
• <map name=“singular”>
Devuelve el singular de un palabra en plural (sólo Inglés)
© 75
El lenguajes AIML
Ejercicio 4
© 76
El lenguajes AIML
El lenguaje AIML
Contexto
© 77
El lenguajes AIML
Contexto
• El tag <that>
© 78
El lenguajes AIML
Contexto
El tag <that>
© 79
El lenguajes AIML
Contexto
El tag <that>
© 80
El lenguajes AIML
Contexto
Lo primero es definir un bloque de reglas sobre un tema, para ello se encierran las
reglas entre un <topic name=”tema”> ... </topic>.
<topic name=“cafe”>
<category> ….. </category>
……………………..
<category> ….. </category>
</topic>
© 81
El lenguajes AIML
El lenguaje AIML
Random,
Estructura
Condicional y
Ciclos
© 82
El lenguajes AIML
Random
© 83
El lenguajes AIML
Condicional
© 84
El lenguajes AIML
Condicional
© 85
El lenguajes AIML
Ciclos
<category>
<pattern>Cuenta hasta <set>number</set></pattern>
<template>
</template>
</category>
© 86
El lenguajes AIML
Ciclos
<category>
<pattern>Cuenta hasta <set>number</set></pattern>
<template>
</template> Planteo la regla y defino como patrón responder a
las consultas que son de la forma “Cuenta hasta
</category>
n” siendo n un número.
© 87
El lenguajes AIML
Ciclos
<category>
<pattern>Cuenta hasta <set>number</set></pattern>
<template>
Lo que tengo que hacer es un bucle contado. Así,
<think> declaro una variable local “contador” para ir
<set var="contador">1</set> almacenando los distintos valores hasta llegar a
<set var="salida">1</set> number.
</think>
</template> Además, declaro otra variable local “salida”, que
va a ir almacenando la secuencia de números por
</category>
los que va pasando contador. La idea es que salida
se comporte como una cadena de caracteres.
© 88
El lenguajes AIML
Ciclos
<category>
<pattern>Cuenta hasta <set>number</set></pattern>
<template>
<think>
<set var="contador">1</set>
<set var="salida">1</set>
</think>
<condition var="contador">
<li><value><star/></value><get var="salida"/></li>
<li></li>
</condition> Ahora planteo un comportamiento diferente en función de una
condición.
</template>
</category> La condición revisa el valor de la variable “contador”.
El primer caso nos dice que si el valor del comodín, que en este
caso es el número introducido en el patrón, coindice con el valor
de la variable “contador”, entonces devuelva por el terminal el
valor de la variable salida.
<category>
<pattern>Cuenta hasta <set>number</set></pattern>
<template>
<think>
<set var="contador">1</set>
<set var="salida">1</set>
</think>
<condition var="contador">
<li><value><star/></value><get var="salida"/></li>
<li>
<think>
<set var="contador">
<map name="successor"><get var="contador"/></map>
</set>
</think>
</li> El caso anterior, es la condición de salida. Así que este segundo caso correspondería al
</condition> bloque del ciclo en un lenguaje de programación convencional. En este caso, lo que
</template> tenemos que hacer es incrementar el contador. La forma que tiene AIML para hacer
esto es hacer uso del map “successor”.
</category>
Este grupo de acciones lo que hace es calcular el sucesor del valor actual de “contador”
y el resultado de ese cálculo lo vuelve a almacenar en la variable “contador.
© 90
El lenguajes AIML
Ciclos
<category>
<pattern>Cuenta hasta <set>number</set></pattern>
<template>
<think>
<set var="contador">1</set>
<set var="salida">1</set>
</think>
<condition var="contador">
<li><value><star/></value><get var="salida"/></li>
<li>
<think>
<set var="contador">
<map name="successor"><get var="contador"/></map>
</set>
<set var="salida"><get var="salida"/> <get var="contador"/></set>
</think>
</li>
</condition>
</template> Además, de incrementar “contador”, actualizo la variable “salida”, en este caso,
</category> mediante una concatenación de cadenas.
<category>
<pattern>Cuenta hasta <set>number</set></pattern>
<template>
<think>
<set var="contador">1</set>
<set var="salida">1</set>
</think>
<condition var="contador">
<li><value><star/></value><get var="salida"/></li>
<li>
<think>
<set var="contador">
<map name="successor"><get var="contador"/></map>
</set>
<set var="salida"><get var="salida"/> <get var="contador"/></set>
</think>
<loop/>
</li>
</condition>
</template> Termino el caso con el comando <loop/>, que indica que se revise el valor de la última
</category> condición examinada. En nuestro caso la única condición que hay.
© 92
El lenguajes AIML
Ciclos
© 93
El lenguajes AIML
Ejercicio 5
© 94
El lenguajes AIML
El lenguaje AIML
Aprender
© 95
El lenguajes AIML
Aprender
© 96
El lenguajes AIML
Aprender
Vamos a intentar complementar estas dos reglas con una adicional que si no
sabemos el país o su capital, la aprendamos.
© 97
El lenguajes AIML
Aprender
© 98
El lenguajes AIML
Aprender
<category>
<pattern>la capital de * es *</pattern>
<template> Proponga la estructura básica de la regla y fijo el
<template> patrón con dos comodines, el primero recoge el
</category> país y el segundo la capital de dicho país.
© 99
El lenguajes AIML
Aprender
<category>
<pattern>la capital de * es *</pattern>
<template>
<think>
<set var="cap"><srai>CUAL ES LA CAPITAL DE <star/></srai></set>
</think>
<template>
</category>
Añado en el template una invocación a la regla 12
o 13. Esto devolverá “NO LO SE” si se dispara la
regla 13.
© 100
El lenguajes AIML
Aprender
<category>
<pattern>la capital de * es *</pattern>
<template>
<think>
<set var="cap"><srai>CUAL ES LA CAPITAL DE <star/></srai></set>
</think>
<condition var="cap">
<li value="NO LO SE">
</li> Ahora propongo una condición para determinar si
</condition> el bot sabe la respuesta.
<template>
</category>
Si no lo sabe, la variable “cap” contendrá “NO LO
SE”. Así, que este es el caso en el que quiero
aprender la información proporcionada por el
usuario.
© 101
El lenguajes AIML
Aprender
<category>
<pattern>la capital de * es *</pattern>
<template>
<think>
<set var="cap"><srai>CUAL ES LA CAPITAL DE <star/></srai></set>
</think>
<condition var="cap">
<li value="NO LO SE">
<learn>
<category>
<pattern>CUAL ES LA CAPITAL DE <eval><star/></eval></pattern>
<template>
La capital de <eval><star/></eval> es <eval><star index="2"/></eval>
</template>
</category>
</learn> Pues, aquí aparece la sintaxis de <learn>.
</li> Como se puede observar, dentro del bloque learn aparece incrustada la estructura de una
</condition> regla con su category, su pattern y su template.
<template>
</category>
Así, la nueva regla que se propone es que ante la entrada de “CUAL ES LA CAPITAL DE …”,
siendo … un país concreto, la respuesta será “La capital de .1. es .2., donde .1. es un país
concreto y .2. es una ciudad concreta.
El tag <eval> lo que hace es transformar el comodín por el valor concreto con el que se ha
instanciado esa regla. Si no estuviera el <eval>, no instancia al valor concreto el comodín,
sino que deja directamente el comodín.
© 102
El lenguajes AIML
Aprender
<category>
<pattern>la capital de * es *</pattern>
<template>
<think>
<set var="cap"><srai>CUAL ES LA CAPITAL DE <star/></srai></set>
</think>
<condition var="cap">
<li value="NO LO SE">
<learn>
<category>
<pattern>CUAL ES LA CAPITAL DE <eval><star/></eval></pattern>
<template>
La capital de <eval><star/></eval> es <eval><star index="2"/></eval>
</template>
</category>
</learn>
Recordare que la capital de <star/> es <star index="2"/>.
</li>
</condition>
<template> Antes de terminar el caso, y una vez que he
</category> propuesto la nueva regla a incluir en la base de
reglas, saco un mensaje al usuario indicando que
“Recordare que la capital de …”
© 103
El lenguajes AIML
Aprender
<category>
<pattern>la capital de * es *</pattern>
<template>
<think>
<set var="cap"><srai>CUAL ES LA CAPITAL DE <star/></srai></set>
</think>
<condition var="cap">
<li value="NO LO SE">
<learn>
<category>
<pattern>CUAL ES LA CAPITAL DE <eval><star/></eval></pattern>
<template>
La capital de <eval><star/></eval> es <eval><star index="2"/></eval>
</template>
</category>
</learn>
Recordare que la capital de <star/> es <star index="2"/>.
</li>
<li>
Ya lo sabia.
</li> Por último, añado el caso en que la variable “cap”
</condition> no tenga el valor “NO LO SE”. En esta situación, le
<template> indico al usuario que “Ya lo sabia”.
</category>
© 104
El lenguajes AIML
Aprender
© 105
El lenguajes AIML
Ejercicio 6
Ejercicio 6:
a) Corrige la regla 17 para que detecte la no
coincidencia entre el nombre de la capital que
introduce el usuario con la que el bot tenía
almacenada.
© 106
El lenguajes AIML
Enlaces
El lenguaje AIML
Algunos Enlaces
• Pandorabots
© 107