ChatScript es una combinación de motor de lenguaje natural y sistema de gestión de diálogos, diseñado inicialmente para crear chatbots , pero que actualmente también se utiliza para diversas formas de procesamiento de lenguaje natural . Está escrito en C++ . El motor es un proyecto de código abierto disponible en SourceForge [ 1 ] y GitHub [ 2 ] .
ChatScript fue escrito por Bruce Wilcox y lanzado originalmente en 2011, después de que Suzette (escrita en ChatScript) ganara el Premio Loebner 2010 , engañando a uno de los cuatro jueces humanos. [ 3 ]
Características
En general, ChatScript busca crear scripts de forma extremadamente concisa, ya que la limitación en la escalabilidad de los chatbots creados manualmente reside en la cantidad y la velocidad con que se puede escribir el script.
Dado que ChatScript está diseñado para la conversación interactiva, mantiene automáticamente el estado del usuario entre las secuencias de mensajes. Una secuencia de mensajes consiste en cualquier número de frases que el usuario introduce a la vez y a las que responde el chatbot.
El elemento básico de la programación es la regla. Una regla consta de un tipo, una etiqueta (opcional), un patrón y una salida. Existen tres tipos de reglas. Los gambitos son frases que un chatbot podría usar cuando tiene el control de la conversación. Las réplicas son reglas que responden a un comentario del usuario relacionado con lo que el chatbot acaba de decir. Las respuestas son reglas que responden a entradas arbitrarias del usuario que no necesariamente están relacionadas con lo que el chatbot acaba de decir. Los patrones describen las condiciones bajo las cuales una regla puede activarse. Los patrones varían desde extremadamente simples hasta muy complejos (análogos a las expresiones regulares, pero orientados al lenguaje natural). Se suele hacer un uso intensivo de conjuntos de conceptos, que son listas de palabras que comparten un significado. ChatScript contiene unos 2000 conceptos predefinidos y los programadores pueden escribir fácilmente los suyos propios. La salida de una regla combina palabras literales que se enviarán al usuario con código de programación común al estilo C.
Las reglas se agrupan en colecciones llamadas temas. Los temas pueden contener palabras clave, lo que permite al motor buscar automáticamente reglas relevantes en función de la información proporcionada por el usuario.
Código de ejemplo
Tema: ~comida ( ~fruta fruta comida comer) t: ¿Cuál es tu comida favorita? a: (~fruta) A mí también me gusta la fruta. a: (~metal) Prefiero escuchar música heavy metal a comerla. ?: WHATMUSIC ( << qué música te gusta >>) Prefiero la música rock. s: ( Me * ~gusta * _~tipos_de_música) ^si (_0 == country) {No me gusta el country.} sino {A mí tampoco.} Las palabras que comienzan con ~ son conjuntos de conceptos. Por ejemplo, ~fruit es la lista de todas las frutas conocidas. El patrón simple (~fruit) reacciona si se menciona alguna fruta inmediatamente después de que el chatbot pregunte por la comida favorita. El patrón ligeramente más complejo para la regla etiquetada WHATMUSIC requiere todas las palabras what, music, you y cualquier palabra o frase que signifique gustar, pero pueden aparecer en cualquier orden. Los respondedores vienen en tres tipos. ?: las reglas reaccionan a las preguntas del usuario. s: las reglas reaccionan a las afirmaciones del usuario. u: las reglas reaccionan a cualquiera.
El código ChatScript admite estructuras condicionales estándar (if-else), bucles, funciones y llamadas definidas por el usuario, así como la asignación y el acceso a variables.
Datos
Algunos datos en ChatScript son transitorios, lo que significa que desaparecerán al finalizar la conversación actual. Otros datos son permanentes y se conservan indefinidamente hasta que se eliminen explícitamente. Los datos pueden ser locales a un solo usuario o compartidos entre todos los usuarios a nivel del bot.
Internamente, todos los datos se representan como texto y se convierten automáticamente a formato numérico según sea necesario.
Variables
Las variables de usuario se presentan en varios tipos. Las variables puramente locales a un tema o función son transitorias. Las variables globales pueden declararse como transitorias o permanentes. Generalmente, una variable se declara simplemente al usarla, y su tipo depende de su prefijo ($, $$, $_).
$_local = 1 es una variable transitoria local a la que se le asigna un valor de 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 pueden ser transitorios o permanentes). Las funciones pueden consultar hechos con valores específicos en algunos campos, lo que les permite funcionar como una base de datos en memoria . La recuperación de hechos es muy rápida y eficiente, ya que la cantidad de hechos disponibles en memoria está limitada principalmente por la memoria disponible del equipo que ejecuta el motor de ChatScript. Los hechos pueden representar estructuras de registros y son la forma en que ChatScript representa JSON internamente. Se pueden definir tablas de información para generar los hechos correspondientes.
tabla: ~inventores(^quién ^qué) crearhecho(^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 relaciona a las personas con sus inventos (uno por línea), y Einstein tiene una lista de las cosas que hizo.
Comunicación externa
ChatScript incorpora la biblioteca Curl y puede leer y escribir directamente datos en formato JSON en un sitio web.
Servidor
Un motor ChatScript puede ejecutarse en modo local o en modo servidor.
Etiquetado POS, análisis sintáctico y ontología
ChatScript incluye una copia de WordNet en inglés , con su ontología , y crea y amplía su propia ontología mediante declaraciones de conceptos. Dispone de un analizador y etiquetador de partes de la oración en inglés y admite la integración con TreeTagger para el etiquetado de partes de la oración en otros idiomas (se requiere una licencia comercial de TreeTagger).
Bases de datos
Además de una base de datos interna, ChatScript admite PostgreSQL , MySQL , MSSQL y MongoDB , tanto para el acceso mediante scripts como para funcionar como sistema de archivos centralizado, lo que permite escalar ChatScript horizontalmente. Un caso de uso común consiste en utilizar una base de datos centralizada para alojar los archivos de usuario y varios servidores para escalar el motor de ChatScript.
JavaScript
ChatScript también incorpora DukTape, compatibilidad con ECMAScript E5/E5.1 y algunas semánticas actualizadas desde ES2015+.
Corrección ortográfica
ChatScript incluye un corrector ortográfico automático integrado , que se puede ampliar en el script mediante simples sustituciones de palabras o cambios contextuales. Con reglas sencillas, puedes cambiar palabras legales por otras o eliminarlas. Por ejemplo, si tienes el concepto de "productos electrónicos" y no quieres que la entrada "Radio Shack" (el nombre de una tienda) se detecte como un producto electrónico, puedes cambiar la entrada a "Radio_Shack" (una sola palabra) o dejar las palabras como están, pero bloquear la detección del concepto.
Esto resulta especialmente útil cuando se combina con un código de conversión de voz a texto que no es perfecto, pero del que se está familiarizado con sus fallos comunes y que se pueden compensar en el script.
Flujo de control
El flujo de control de un chatbot se gestiona mediante el script de control. Este script es simplemente un conjunto de reglas que invoca las funciones API del motor. Por lo tanto, el control es totalmente configurable por el programador (y existen funciones que permiten inspeccionar el motor). Para un procesamiento específico, se dispone de opciones de flujo de control de preprocesamiento y postprocesamiento.
Referencias
- ↑ ChatScript , SourceForge
- ↑, GitHub
- ↑ Un chatbot galardonado dirige la conversación , New Scientist , 27 de octubre de 2010
Enlaces externos
- ChatScript en GitHub
- Software libre multiplataforma
- Software libre programado en C++
- Intérpretes de código abierto y libre
- Software libre programado en C
- Lenguajes de scripting
- Análisis del lenguaje natural
- Procesamiento del lenguaje natural
- Kits de herramientas para el procesamiento del lenguaje natural
- Aplicaciones gratuitas de inteligencia artificial
- Software que utiliza la licencia MIT.