Original article: How to Build a Discord AI Chatbot that Talks Like Your Favorite Character

¿Te gustaría hablar con un chatbot que hable como tu personaje favorito, ficticio o no? ¡Construyamos uno!

En caso de que hayas visto mi tutorial anterior sobre este tema, quédese conmigo, ya que esta versión presenta muchas actualizaciones.

Puedes seguir este tutorial usando el código en mi GitHub:

GitHub - RuolinZheng08/twewy-discord-chatbot: Discord AI Chatbot using DialoGPT, trained on the game transcript of The World Ends With You
Discord AI Chatbot using DialoGPT, trained on the game transcript of The World Ends With You - GitHub - RuolinZheng08/twewy-discord-chatbot: Discord AI Chatbot using DialoGPT, trained on the game t...
twewy-discord-chatbot

Si lo desea, puede sumergirse directamente en mi videotutorial en YouTube, o seguir leyendo para obtener más detalles. ?

Qué Esperar de este Tutorial

Aquí hay un ejemplo del chatbot Discord AI que habremos creado al final de este tutorial.

discord
Demostración de chat con mi bot en Discord. Dibujé el ícono del bot ?

Mi proyecto de chatbot comenzó como una broma con un amigo cuando jugábamos videojuegos.

Honestamente, estoy sorprendido por lo popular que se volvió - hubo 5900 vistas de mi tutorial anterior, además, cuando implementé mi bot en un servidor de más de 1000 usuarios, la gente lo inundó con más de 300 mensajes en una hora, colapsando efectivamente el bot. ?

Dado que mucha gente está interesada en construir sus propios bots basados en sus personajes favoritos, actualicé mi tutorial para incluir una explicación detallada sobre cómo recopilar datos de texto para cualquier personaje, ficticio o no ficticio.

¡También puedes crear un conjunto de datos personalizado que capture el discurso entre usted y sus amigos y crear un chatbot que hable como usted!

Otras actualizaciones en este tutorial abordan los cambios en los servicios de alojamiento de modelos de Hugging Face, incluidos los cambios de API que afectan la forma en que empujamos el modelo a los repositorios de modelos de Hugging Face.

Esquema de este Tutorial

La versión de video de este tutorial tiene una duración total de una hora y presenta los siguientes temas:

  1. Reúne datos de texto para su personaje utilizando uno de estos dos métodos: busque conjuntos de datos prefabricados en Kaggle o cree conjuntos de datos personalizados a partir de transcripciones sin procesar.
  2. Entrena el modelo en Google Colab, un entorno de Jupyter Notebook basado en la nube con GPU gratuitas.
  3. Implementa el modelo en Hugging Face, un servicio de hospedaje de modelos de AI.
  4. Crea un bot de Discord en Python o JavaScript, ¡usted elige! ?
  5. Configure los permisos del bot de Discord para que no envíe spam a los canales que no son bots
  6. Aloja el bot en Repl.it.
  7. Mantenga el bot funcionando indefinidamente con Uptime Robot.

Para saber más sobre cómo crear bots de Discord, también te pueden resultar útiles este post de freeCodeCamp: hay una versión en JavaScript.

Cómo Preparar los Datos

Para que nuestro chatbot aprenda a conversar, necesitamos datos de texto en forma de diálogos. Así es esencialmente cómo nuestro chatbot responderá a diferentes intercambios y contextos.

¿Está tu personaje favorito en Kaggle?

Hay muchos conjuntos de datos interesantes en Kaggle para dibujos animados populares, programas de televisión y otros medios. Por ejemplo:

Solo necesitamos dos columnas de estos conjuntos de datos: nombre del personaje y línea de diálogo.

Screen-Shot-2021-08-25-at-14.07.59
Ejemplo de conjunto de datos: transcripción de la película de Harry Potter

¿No puedes encontrar tu personaje favorito en Kaggle?

¿No puedes encontrar tu personaje favorito en Kaggle? No hay problema. Podemos crear conjuntos de datos a partir de transcripciones sin procesar. Un buen lugar para buscar transcripciones es Transcript Wiki. Por ejemplo, mira esta transcripción de 'Captain America: Civil War' Roundtable.

Screen-Shot-2021-08-25-at-14.13.57
Ejemplo: Transcripción de Peppa Pig

Usando una expresión regular como ([a-zA-Z|\s]+): (.+), podemos extraer las dos columnas de interés, el nombre del personaje y la línea de diálogo.

¡Pruébelo tu mismo en este sitio web de expresiones regulares de Python!

Screen-Shot-2021-08-25-at-14.58.35

Cómo entrenar el modelo

Debajo del capó, nuestro modelo será un transformador generativo preentrenado (Generative Pre-trained Transfomer - GPT), el modelo de lenguaje más popular en estos días.

En lugar de entrenar desde cero, cargaremos el GPT previamente entrenado de Microsoft, DialoGPT-small, y lo ajustaremos utilizando nuestro conjunto de datos.

Mi repositorio de GitHub para este tutorial contiene el archivo de notebook llamado model_train_upload_workflow.ipynb para que puedas comenzar. Todo lo que necesitas hacer es lo siguiente:

  1. Sube el archivo a Google Colab
  2. Seleccione GPU como tiempo de ejecución, lo que acelerará el entrenamiento de nuestro modelo.
  3. Cambie el conjunto de datos y el carácter de destino en fragmentos de código como:
data = pd.read_csv('MI-CONJUNTO-DE-DATOS.csv')
NOMBRE_DEL_PERSONAJE = 'MI-PERSONAJE'

Revisar la sección de entrenamiento del cuaderno debería tomar menos de media hora. Tengo alrededor de 700 líneas y el entrenamiento toma menos de diez minutos. El modelo se almacenará en una carpeta llamada output-small.

¿Quieres un modelo aún más inteligente y elocuente? Siéntase libre de entrenar un modelo más grande como DialoGPT-medium o incluso DialoGPT-large. El tamaño del modelo aquí se refiere al número de parámetros en el modelo. Más parámetros permitirán que el modelo capte más complejidad del conjunto de datos.

También puedes aumentar la cantidad de épocas de entrenamiento buscando num_train_epochs en el cuaderno. Esta es la cantidad de veces que el modelo recorrerá el conjunto de datos de entrenamiento. El modelo generalmente se volverá más inteligente cuando tenga más exposición al conjunto de datos.

Sin embargo, tenga cuidado de no sobre ajustar el modelo: si el modelo se entrena para demasiadas épocas, puede memorizar el conjunto de datos y recitar renglones del conjunto de datos cuando tratamos de conversar con él. Esto no es ideal, ya que queremos que la conversación sea más orgánica.

Cómo alojar el modelo

Alojaremos el modelo en Hugging Face, que proporciona una API gratis para que podamos consultar el modelo.

Regístrese en Hugging Face y crea un nuevo repositorio de modelos haciendo clic en Nuevo modelo. Obtenga su token de API yendo a Editar perfil > Tokens de API. Necesitaremos este token cuando construyamos el bot Discord.

Sigue junto con esta sección en mi video para cargar el modelo. Además, recuerda etiquetarlo como conversacional en su Tarjeta Modelo (equivalente a su README.md):

---
tags:
- conversational // conversacional
---

# Mi Modelo Impresionante

Sabrá que todo funciona bien si puede conversar con la modelo en el navegador.

huggingface3

Cómo Construir el Bot de Discord

Vaya a la página del desarrollador de Discord, cree una aplicación y añádale un bot. Dado que nuestro chatbot solo responderá a los mensajes de los usuarios, basta con marcar Permisos de Texto > Enviar Mensajes en la Configuración de permisos del bot. Copie el token de API del bot para usarlo más tarde.

Regístrese en Repl.it y crea un nuevo Repl, Python o Node.js para JavaScript, con el que estés trabajando.

Almacenemos nuestros tokens API para Hugging Face y Discord como variables de entorno, llamados HUGGINGFACE_TOKEN y DISCORD_TOKEN respectivamente. Esto ayuda a mantenerlos en secreto.

repl

Copie mi secuencia de comandos de Python para un bot de Python y mi secuencia de comandos de JS para un bot de JS. Tenga en cuenta que para el bot JS, debido a una incompatibilidad de versión con Node y NPM de Repl.it, necesitaremos especificar explícitamente una versión inferior del API de Discord en package.json.

"dependencies": {
    "discord.js": "^12.5.3",
}

¡Con eso, nuestro bot está listo para funcionar! Inicie la secuencia de comandos Repl presionando Run, agregue el bot a un servidor, escribe algo en el canal y disfrute de la respuesta ingeniosa del bot.

discord-1

Cómo Mantener el Bot en Línea

Un problema con nuestro bot es que se detiene tan pronto como detenemos la ejecución de Repl (equivalentemente, si cerramos la ventana del navegador Repl.it).

Para evitar esto y mantener nuestro bot funcionando indefinidamente, configuraremos un servidor web para que contenga el script del bot y usaremos un servicio como Uptime Robot para fijar nuestro servidor cada cinco minutos para que nuestro servidor permanezca vivo.

Screen-Shot-2021-08-25-at-15.29.06

En mi videotutorial, copié el código del servidor de esta publicación de freeCodeCamp (versión de JavaScript). Luego, configuré el monitor en Uptime Robot. Ahora mi bot continúa respondiendo a mis mensajes, incluso si cierro el navegador (o apago mi computadora por completo).

¡Felicitaciones por llegar al final de este tutorial! ¡Espero que hayas disfrutado creando el bot y divirtiéndote chateando con tu personaje favorito! ?

¿Interesado en el modelo que entrené? Échale un vistazo en Hugging Face:

r3dhummingbird/DialoGPT-medium-joshua · Hugging Face
We’re on a journey to advance and democratize artificial intelligence through open source and open science.
icon

¡Gracias por leer!