ChatScript es una combinación de motor de lenguaje natural y sistema de administración de diálogo diseñado inicialmente para crear chatbots , pero actualmente también se usa para varias formas de procesamiento NL . Está escrito en C ++ . El motor es un proyecto de código abierto en SourceForge . [1] y GitHub . [2]
ChatScript fue escrito por Bruce Wilcox y lanzado originalmente en 2011, después de que Suzette (escrito en ChatScript) ganara el Premio Loebner 2010 , engañando a uno de los cuatro jueces humanos. [3]
Características
En general, ChatScript tiene como objetivo crear de manera extremadamente concisa, ya que la escalabilidad limitante de los chatbots creados a mano es la rapidez con la que se puede escribir el script.
Debido a que ChatScript está diseñado para conversaciones interactivas, mantiene automáticamente el estado del usuario en las voleas. Una descarga es cualquier cantidad de oraciones que el usuario ingresa a la vez y la respuesta de los chatbots.
El elemento básico de las secuencias de comandos es la regla. Una regla consta de un tipo, una etiqueta (opcional), un patrón y una salida. Hay tres tipos de reglas. Los gambitos son algo que un chatbot podría decir cuando tiene el control de la conversación. Las réplicas son reglas que responden al comentario de un usuario vinculado a lo que acaba de decir el chatbot. Los respondedores son reglas que responden a la entrada arbitraria del usuario que no está necesariamente ligada a lo que acaba de decir el chatbot. Los patrones describen las condiciones bajo las cuales se puede disparar una regla. Los patrones varían desde extremadamente simplistas hasta profundamente complejos (análogos a Regex pero destinados a NL). Por lo general, se hace un uso intensivo de conjuntos de conceptos, que son listas de palabras que comparten un significado. ChatScript contiene unos 2000 conceptos predefinidos y los scripters pueden escribir fácilmente los suyos propios. La salida de una regla entremezcla palabras literales que se enviarán al usuario junto con el código de programación común de estilo C.
Las reglas se agrupan en colecciones llamadas temas. Los temas pueden tener palabras clave, lo que permite que el motor busque automáticamente el tema en busca de reglas relevantes según la entrada del usuario.
Código de ejemplo
Tema: ~ comida (~ fruta fruta comida comer)t: ¿Cuál es tu comida favorita? a: (~ fruta) También me gusta la fruta. a: (~ metal) Prefiero escuchar música heavy metal en lugar de comerla.?: WHATMUSIC (<< qué música ~ te gusta >>) Prefiero la música rock.s: (Me * ~ me gusta * _ ~ tipos_de_música) ^ if (_0 == país) {No me gusta el país.} else {Yo también}
Las palabras que comienzan con ~ son conjuntos de conceptos. Por ejemplo, ~ fruit es la lista de todas las frutas conocidas. El patrón simple (~ fruta) reacciona si se menciona alguna fruta inmediatamente después de que el chatbot pide su comida favorita. El patrón un poco más complejo para la regla denominada WHATMUSIC requiere todas las palabras qué, música, tú y cualquier palabra o frase que signifique que te guste, pero pueden aparecer en cualquier orden. Los respondedores vienen en tres tipos. ?: las reglas reaccionan a las preguntas de los usuarios. s: las reglas reaccionan a las declaraciones del usuario. u: las reglas reaccionan a cualquiera.
El código ChatScript admite bucles if-else estándar, funciones y llamadas definidas por el usuario, y asignación y acceso de variables.
Datos
Algunos datos en ChatScript son transitorios, lo que significa que desaparecerán al final de la descarga actual. Otros datos son permanentes y duran para siempre hasta que se eliminan explícitamente. Los datos pueden ser locales para un solo usuario o compartidos entre todos los usuarios a nivel de bot.
Internamente, todos los datos se representan como texto y se convierten automáticamente a una forma numérica según sea necesario.
Variables
Las variables de usuario son de varios tipos. Las variables puramente locales a un tema o función son transitorias. Las variables globales se pueden declarar como transitorias o permanentes. Una variable generalmente se declara simplemente usándola, y su tipo depende de su prefijo ($, $$, $ _).
$ _local = 1 es una variable transitoria local a la que se le asigna un 1$$ global1.value = "hi" es una variable global transitoria que es un objeto JSON$ global2 + = 20 es una variable global permanente
Hechos
Además de las variables, ChatScript admite hechos: triples de datos, que también pueden ser transitorios o permanentes. Las funciones pueden consultar hechos que tengan valores particulares de algunos de los campos, haciéndolos actuar como una base de datos en memoria. La recuperación de datos es muy rápida y eficiente, el número de hechos en memoria disponibles se limita en gran medida a la memoria disponible de la máquina que ejecuta el motor ChatScript. Los hechos pueden representar estructuras de registros y es la forma en que ChatScript representa JSON internamente. Se pueden definir tablas de información para generar hechos apropiados.
tabla: ~ inventores (^ quién ^ qué)createfact (^ quién inventó ^ qué)DATOS:"Johannes Gutenberg" "imprenta""Albert Einstein" ["Teoría de la relatividad" fotón "Teoría de la relatividad general"]
La tabla anterior vincula a las personas con lo que inventaron (1 por línea) y Einstein obtiene una lista de las cosas que hizo.
Comunicacion externa
ChatScript incorpora la biblioteca Curl y puede leer y escribir datos directamente en JSON en un sitio web.
Servidor
Un motor de ChatScript puede ejecutarse en modo local o de servidor.
Pos-etiquetado, análisis y ontología
ChatScript viene con una copia de WordNet en inglés incrustada, incluida su ontología , y crea y extiende su propia ontología a través de declaraciones de conceptos. Tiene un analizador y un etiquetador pos en inglés y admite la integración con TreeTagger para etiquetar pos en otros idiomas (se requiere una licencia comercial de TreeTagger).
Bases de datos
Además de una base de datos de hechos interna, ChatScript es compatible con PostgreSQL y MongoDB tanto para el acceso mediante scripts, como también como un sistema de archivos central si se desea para que ChatScript se pueda escalar horizontalmente. Un caso de uso común es utilizar una base de datos centralizada para alojar los archivos del usuario y varios servidores para ejecutar el motor ChatScript.
JavaScript
ChatScript también incorpora compatibilidad con DukTape, ECMAScript E5 / E5.1, con algunas semánticas actualizadas desde ES2015 +.
Flujo de control
El flujo de control de un chatbot se gestiona mediante el script de control. Este es simplemente otro tema ordinario de reglas, que invoca funciones API del motor. Por lo tanto, el scripter puede configurar completamente el control (y existen funciones para permitir la introspección en el motor). Hay disponibles opciones de flujo de control de preprocesamiento y flujo de control de posprocesamiento para un procesamiento especial.
Referencias
- ^ ChatScript , SourceForge
- ^ [1] , GitHub
- ^ El chatbot premiado dirige la conversación , New Scientist , 27 de octubre de 2010