Resumen

En este artículo, mostraré cómo aprovechar las herramientas previamente entrenadas para crear un chatbot que use inteligencia artificial y reconocimiento de voz, por lo que es una IA que habla.

El NLP o Procesamiento del lenguaje natural es el campo de la inteligencia artificial que estudia las interacciones entre las computadoras y los lenguajes humanos, en particular, cómo programar las computadoras para procesar y analizar grandes cantidades de datos del lenguaje natural. La investigación de NLP siempre se ha centrado en hacer que los chatbots sean cada vez más inteligentes.

Los chatbots son aplicaciones de software que se utilizan para realizar conversaciones vía chat de forma automáticas a través de texto o texto a voz, imitando la interacción con un agente humano. El primero de ellos fue ELIZA (1966) que usó la metodología de coincidencia de patrones y sustitución para simular una conversación textual (no podía escuchar ni hablar). Actualmente la más avanzada del mercado es Amazon ALEXA, un asistente personal inteligente que entiende la voz del usuario y le responde.

En este tutorial, mostraré cómo crear un chatbot conversacional utilizando API de reconocimiento de voz y modelos de transformadores previamente entrenados. Presentaré un código de Python útil que se puede aplicar fácilmente en otros casos similares (solo copia, pega, ejecuta) y recorreré cada línea de código con comentarios para que puedas replicar este ejemplo.
En particular, pasaré por:

  • Configurar el entorno
  • Reconocimiento de voz con las API de Google
  • Modelo de lenguaje con Transformers

Configuración

En primer lugar, necesitamos instalar las siguientes bibliotecas:

# for speech to text
pip install SpeechRecognition #(3.8.1)
# for text to speech
pip install gTTS #(2.2.3)
# for language model
pip install transformers #(4.11.3)
pip install tensorflow #(2.6.0, or pytorch)

Vamos a necesitar también otros paquetes que seguro que te son familiares:

import numpy as np

Empecemos por crear una clase vacía que iremos enriqueciendo paso a paso. Para probar el Chatbot, debemos inicializarlo y ejecutar todo el script. Llamaré a mi bot «Maya«:

# Build the AI
class ChatBot():
def __init__(self, name):
print("--- starting up", name, "---")
self.name = name
# Run the AI
if __name__ == "__main__":
ai = ChatBot(name="Maya")


Reconocimiento de voz

El reconocimiento de voz es un subcampo interdisciplinario de la NLP que desarrolla metodologías y tecnologías para permitir el reconocimiento y la traducción del lenguaje hablado a texto por parte de las computadoras. Los primeros sistemas de reconocimiento de voz (1950) podían entender números pero no palabras, IBM Shoebox (1960) fue el primero en entender y responder a pocas palabras en inglés.

Hoy en día, los sistemas más utilizados son las API de Google y una manera fácil de usarlas es a través de la biblioteca SpeechRecognition:

import speech_recognition as sr
def speech_to_text(self):
recognizer = sr.Recognizer()
with sr.Microphone() as mic:
print("listening...")
audio = recognizer.listen(mic)
try:
self.text = recognizer.recognize_google(audio)
print("me --> ", self.text)
except:
print("me --> ERROR")

Esa es la primera función NLP de nuestra clase Chatbot que realiza la tarea de conversión de voz a texto. Básicamente, brinda la capacidad de escuchar y comprender su voz al transformar la señal de audio en texto. Puedes probarlo ejecutando e intentando decir algo:

# Run the AI
if __name__ == "__main__":
ai = ChatBot(name="maya")
while True:
ai.speech_to_text()

Ahora tenemos que darle a la IA la capacidad de responder. Para decirlo de otra manera, queremos que el Chatbot entienda la entrada, produzca una salida y la hable. Agreguemos una nueva función a la clase:

def wake_up(self, text):
return True if self.name in text.lower() else False

El método wake_up se asegura de que la IA responda cuando dices su nombre. Por ejemplo, activaré mi Chatbot diciendo «Hola Maya».

Una vez que el Chatbot escuche su nombre, responderá algo, por lo tanto, debes realizar una tarea de texto a voz. Voy a usar la biblioteca de Google Text-to-Speech (gtts) para guardar un archivo mp3 en el sistema de archivos que se puede reproducir fácilmente con el sistema operativo de la biblioteca.

from gtts import gTTS
import os
@staticmethod
def text_to_speech(text):
print("ai --> ", text)
speaker = gTTS(text=text, lang="en", slow=False)
speaker.save("res.mp3")
os.system("afplay res.mp3") #macbook->afplay | windows->start
os.remove("res.mp3")

Puedes probar esas dos nuevas funciones así:

# Run the AI
if __name__ == "__main__":
ai = ChatBot(name="maya")
while True:
ai.speech_to_text()
## wake up
if ai.wake_up(ai.text) is True:
res = "Hello I am Maya the AI, what can I do for you?"
ai.text_to_speech(res)

También podemos programar el bot para que reaccione a algunos comandos específicos, como cualquier otro asistente virtual (Siri, Alexa, Cortana, …). Por ejemplo, quiero que mi IA me diga la hora cuando se lo pido y que responda amablemente cuando le doy las gracias (“ella”, sí, ya la amo). Así que voy a agregar esta función a la clase Chatbot:

import datetime
@staticmethod
def action_time():
return datetime.datetime.now().time().strftime('%H:%M')

y ejecuta el script:

# Run the AI
if __name__ == "__main__":
ai = ChatBot(name="maya")
while True:
ai.speech_to_text()
## wake up
if ai.wake_up(ai.text) is True:
res = "Hello I am Maya the AI, what can I do for you?"
## action time
elif "time" in ai.text:
res = ai.action_time()
## respond politely
elif any(i in ai.text for i in ["thank","thanks"]):
res = np.random.choice(
["you're welcome!","anytime!",
"no problem!","cool!",
"I'm here if you need me!","peace out!"])
ai.text_to_speech(res)

Hasta ahora, hemos utilizado técnicas de reconocimiento de voz para hablar con nuestro Chatbot, pero el bot sigue siendo bastante tonto, ya que no puede responder a nada que no esté predeterminado. Es hora de poner Inteligencia Artificial real dentro de nuestro Chatbot, es decir, un modelo de machine learning entrenado para NLP.

Modelo de lenguaje

Usaré un modelo de lenguaje transformador, una nueva técnica de modelado presentada por Google (2017) que reemplaza los modelos tradicionales de secuencia a secuencia (como LSTM) con mecanismos de atención. Estos modelos de lenguaje pueden realizar cualquier tarea de PNL porque comprenden dinámicamente los contextos. Los modelos más famosos son BERT de Google y GPT de OpenAI, con miles de millones de parámetros.

El paquete principal para estos modelos son los transformadores de HuggingFace. Es una herramienta popular que proporciona modelos preentrenados útiles para una variedad de tareas de NLP. En concreto, el que voy a utilizar es DialogGPT, un modelo de GPT entrenado por Microsoft sobre millones de conversaciones extraídas de Reddit.

import transformers
nlp = transformers.pipeline("conversational",
model="microsoft/DialoGPT-medium")

Probemos:

 input_text = "hello!"
nlp(transformers.Conversation(input_text))

Ten en cuenta que la versión actual de la biblioteca muestra una advertencia cuando no especifica pad_token_id (como puede ver en la imagen de arriba). Para evitar esto, simplemente puedes agregarlo como un parámetro:

nlp(transformers.Conversation(input_text), pad_token_id=50256)

Además, la canalización genera toda la conversación (como puede ver en la imagen de arriba), por lo que convertiré toda la salida en una cadena y extraeré solo la respuesta del chatbot.

chat = nlp(transformers.Conversation(ai.text), pad_token_id=50256)
res = str(chat)
res = res[res.find("bot >> ")+6:].strip()

Finalmente, estamos listos para ejecutar el Chatbot y tener una conversación divertida con nuestra IA. Aquí está el código completo:

 

¡Estupendo! El bot puede realizar algunas tareas específicas como un asistente virtual (es decir, decir la hora cuando se le pregunta) y tener conversaciones informales. Y si crees que la Inteligencia Artificial llegó para quedarse, ella está de acuerdo:


Conclusión

Este artículo ha sido un tutorial para demostrar cómo construir un chatbot conversacional que escuche y responda como un ser humano. Usé herramientas de reconocimiento de voz para realizar tareas de conversión de voz a texto y de texto a voz, y aproveché los modelos de lenguaje de Transformers previamente entrenados para darle al bot algo de inteligencia artificial. Ahora puede crear su propio Chatbot, que puede incluir más tareas de asistente virtual, como buscar cosas en Wikipedia o reproducir videos en Youtube.

¡Espero que lo hayas disfrutado! No dudes en ponerte en contacto conmigo para preguntas y comentarios o simplemente para compartir sus proyectos interesantes.

👉 Let’s Connect 👈

Un comentario en «IA Chatbot con NLP: reconocimiento de voz + transformadores»

Deja una respuesta

Tu dirección de correo electrónico no será publicada.