Skip to main content

De Inteligencia Artificial a los Chatbots

Inteligencia Artificial (AI)

Es una subárea de la informática y de la ciencia computacional. La definición de Inteligencia Artificial se refiere a la capacidad que tienen las máquinas para entender, pensar y aprender de una manera similar a como lo hacen los seres humanos, lo que indica la posibilidad de utilizar las computadoras para simular la inteligencia humana.

La AI ha experimentado 60 años de desarrollo continuo, con grandes avances y retrocesos. En general, se inició tratando de resolver tareas que son fáciles para los seres humanos, pero difícil para las computadoras, tratar de realizar un sistema que pueda hacer cualquier cosa que un ser humano hace (quizás sin cosas puramente físicas). Esto es bastante genérico e incluye todo tipo de tareas como: planificar, moverse de un lado a otro, reconocer objetos y sonidos, hablar, traducir, realizar transacciones sociales o comerciales, trabajo creativo (hacer arte o poesía), entre otras.

Vehículos autónomos son un tema candente en la actualidad relacionado con AI. Google, Volvo, Tesla, Uber … estos son sólo algunos de las grandes compañías que están tratando de demostrar que los vehículos sin conductor son mejores, he inclusive, más seguros que los vehículos impulsados ​​por humanos.

Ya se tiene un poco claro el poder que tiene la AI, y como muchas cosas en la vida tienen sus desventajas, esta tecnología no es la excepción, hay quienes se preocupan por el futuro de la AI. Tanto así que hace unos meses hubo una discusión entre el CEO de TESLA y SpaceX, Elon Musk, y el fundador de Facebook, Mark Zuckerberg, donde Musk advierte acerca de los peligros de la inteligencia artificial, describiéndola como una amenaza potencialmente existencial para la raza humana, los seres humanos podrían estar condenados si hacemos máquinas que son más inteligentes que nosotros. Zuckerberg tiene una visión diferente, se siente optimista, mencionó que la AI podría ser una fuerza para el bien porque ayuda a conducir automóviles de una forma más segura y a diagnosticar enfermedades. Otro que no se mantiene ajeno del tema y está preocupado por el desarrollo de la AI y de la robótica, es el cofundador de Microsoft, Bill Gates, quien menciona  que como los robots están tomando trabajos humanos, el gobierno debe imponer impuestos a las empresa que los usan, como forma de disminuir temporalmente la automatización y usar ese dinero para financiar otras fuentes de empleo, en otras palabras, que los robots paguen impuestos como lo hacen los humanos.

Dejando el lado pesimista de la Inteligencia Artificial, los investigadores han seguido desarrollando, creando e investigando nuevos métodos y forma de resolver problemas o hacer tareas cotidianas del ser humano automáticamente. Se ha tenido tanto desarrollo en AI, que la misma ha sido clasificada en varias áreas y dando como resultado varias subáreas.

Machine learning (ML)

ML es un subcampo de la informática que evolucionó a partir del estudio del reconocimiento de patrones y la teoría del aprendizaje computacional en la inteligencia artificial. Es un tipo de Inteligencia Artificial que permite a los programadores escribir programas de una manera más sencilla, se centra más en el desarrollo de programas que enseñan a las computadoras a cambiar cuando se exponen a nuevos datos y crecer, su objetivo es entender y seguir los métodos, usando algoritmos para hacer esa tarea automáticamente sin ninguna ayuda humana. En 1959, Arthur Samuel definió ML como un campo de estudio que da a las computadoras la capacidad de aprender sin ser programadas explícitamente.

ML es un conjunto de algoritmos que se entrenan con un conjunto de datos, para hacer predicciones o tomar acciones con el fin de optimizar algunos sistemas. Por ejemplo, los algoritmos de clasificación supervisados ​​se utilizan para clasificar a los clientes potenciales en buenas o malas perspectivas, con el fin de obtener un préstamo, sobre una base de datos históricos. Las técnicas involucradas, para una tarea dada (por ejemplo, agrupación supervisada), son variadas: Naive Bayes, SVM (Support Vector Machines), redes neuronales, árboles de decisión, regresión logística o una combinación de muchos.
ML permite que dado un problema de AI que se puede describir en términos discretos (por ejemplo, a partir de un conjunto particular de acciones, determinar cuál es el correcto), y dado un montón de información sobre el mundo, descubrir cuál es la acción "correcta", sin que el programador lo haga directamente. Normalmente, se necesita algún proceso externo para juzgar si la acción fue correcta o no. En términos matemáticos, es una función: donde tiene una entrada, y se desea que produzca la salida correcta, por lo que todo el problema es simplemente construir un modelo de esta función matemática de alguna manera automática. Para establecer una distinción con AI, si puedo escribir un programa muy inteligente que tenga un comportamiento similar al humano, puede ser Inteligencia Artificial, pero a menos que sus parámetros sean aprendidos automáticamente de los datos, no es el aprendizaje automático.

En ML se pueden encontrar una gran cantidad de algoritmos que se han venido creando a lo largo de los últimos años. Los mismos se pueden agrupar principalmente en 3 grandes áreas:

  • Aprendizaje supervisado (Supervised Learning): en esta categoría los algoritmos reciben datos de entrenamiento que contienen la "respuesta correcta" para cada caso, por ejemplo, un algoritmo de aprendizaje supervisado para la detección de fraudes de tarjetas de crédito, tomaría como entrada un conjunto de transacciones registradas, para cada transacción, los datos de entrenamiento contendrían una bandera que dice si es fraudulenta o no. A su vez, esta categoría se puede subdividir en 3: 

    • Regresión (Regression): resuelve problemas donde la respuesta a aprender es un valor continuo, por ejemplo, el algoritmo podría ser alimentado con un registro de casas vendidas con sus precios, y este aprende cómo fijar precios para las casas.
    • Clasificación (Classification): la respuesta a aprender es uno de los muchos valores posibles, por mencionar un caso, en el ejemplo de la tarjeta de crédito, el algoritmo debe aprender cómo encontrar la respuesta correcta entre 'fraude' y 'honesto'. Cuando sólo hay dos valores posibles, se puede decir que es un problema de clasificación binaria, o cuando son varios valores a predecir se la llama multi-class classification.
    • Forecasting: Este es el proceso de hacer predicciones sobre el futuro basadas en los datos pasados ​​y presentes. Es el más comúnmente utilizado para analizar tendencias. Un ejemplo común podría ser la estimación de las ventas del próximo año basadas en las ventas del año actual y años anteriores.
  • Aprendizaje no supervisado (Unsupervised Learning): los algoritmos buscan la estructura en los datos de entrenamiento, cómo encontrar qué ejemplos son similares entre sí, y agruparlos entre ellos. De igual forma, esta categoría se puede dividir en 2 subcategorías principales:
    • Segmentación (Clustering): Este tipo de problema se da donde la estructura de datos por aprender es un conjunto de grupos de características similares, por ejemplo, la segmentación del mercado tiene como objetivo agrupar a los clientes en grupos de personas con un comportamiento de compra similar.
    • Análisis de red: Estos algoritmos aprenden de la importancia de la información y del papel de los nodos en la red, por ejemplo, el algoritmo de rango de página analiza la red de páginas web y sus hipervínculos, y encuentra cuáles son las páginas más importantes. Esto se utiliza en los motores de búsqueda web como Google, otro problema de análisis de red incluye análisis de redes sociales.
  • Reinforcement learning: Analiza y optimiza el comportamiento de un agente en función al feedback del entorno. Las máquinas prueban diferentes escenarios para descubrir qué acciones producen la mayor recompensa, en lugar de que se les diga qué acciones tomar. 

Algunos de estos algoritmos más usados está el Árbol de Decisión (Decision tree), un algoritmo comúnmente utilizado en la minería de datos, el objetivo de DT es construir una estructura de árbol que predice los valores de las muestras de prueba, basadas en las muestras de entrenamiento, una estructura de árbol es una representación gráfica de muestras de entrenamiento.  También está el Naïve Bayes, es un algoritmo de ML muy popular, que funciona bien en muchos dominios, y es uno de los algoritmos más utilizados en la clasificación de sentimientos binarios, por ejemplo, se basa en la suposición de que la probabilidad de cada término en un texto es la independencia en el contexto del término y su posición en el texto.  Otro algoritmo muy usado es el Support Vector Machine (SVM), este ha sido ampliamente utilizado en la clasificación del sentimiento binario, y los estudios han demostrado que SVM es uno de los algoritmos más precisos en la clasificación del sentimiento.

Por otro lado, a pesar de los grandes resultados que se han logrado con ML, hay quienes la critican, ya no está garantizado que los algoritmos con ML siempre funcionan para cada caso, a veces ML fallará, por lo que se necesita entender el problema, para aplicar el algoritmo de la manera correcta, adicionalmente algunos algoritmos con ML requieren un montón de datos, tales como algoritmos de aprendizaje profundo, puede ser agotador adquirir esa gran cantidad de datos, afortunadamente, hay un montón de datos para fines de formación y reconocimiento de imágenes. Afortunadamente, no todo es malo, ya que el aprendizaje de las máquinas tienen una serie de ventajas como por ejemplo: las máquinas son más rápidas que las personas, por lo que ahorra tiempo; son usados en una gran cantidad de aplicaciones, como reconocimiento de voz, reconocimiento de patrones y rostros, se utiliza para capturar ladrones o cualquier persona involucrada en una escena del crimen; Facebook y Google los usan para etiquetar a las personas en las fotos, hacer traducciones entre idiomas, se usan en la predicción de alguna enfermedad en los pacientes y hasta en la predicción del clima, entre otras; las máquinas van a mejorar eventualmente sus errores hasta alcanzar grandes precisiones y exactitudes en la toma de decisiones.

Deep Learning (DL)

Es un nivel más profundo y un subconjunto de ML, en el que una máquina utiliza cantidades masivas de datos y algoritmos altamente complejos para "aprender" y para simular la toma de decisiones como lo hace un humano. Deep Learning es la parte más profunda del cerebro de la inteligencia artificial, conduciendo hacia el Natural Language Processing (NLP), permitiendo a la máquina aprender casi de todo y mejorar sobre sí misma para la próxima vez, tal y como lo hacen los humanos. El DL es un subconjunto de un campo más general de AI llamado ML, que se basa en esta idea de aprender del ejemplo y adopta el enfoque de resolver problemas muy complejos con modelos complejos.

Una de las razones por lo que surge DL, es porque cuando se usan algoritmos tradicionales con ML para resolver problemas con una gran cantidad dimensional de datos (cuando se tiene muchas entradas y salidas), el rendimiento no es el esperado conforme se agregan más datos, ya que llega un punto en que este se mantiene constante. El comportamiento es completamente lo contrario cuando se usa DL, además de que esta es la tendencia deseada, esto se debe a que DL tiene la capacidad de aprender a centrarse en las características adecuadas por sí mismo, requiriendo poca orientación del programador. Básicamente, el aprendizaje profundo imita la forma en que funciona nuestro cerebro, es decir, que aprende de la experiencia, como saben, nuestro cerebro está formado por miles de millones de neuronas que nos permiten hacer cosas increíbles, incluso el cerebro de un niño de un año de edad puede resolver problemas complejos que son muy difíciles de resolver, incluso utilizando supercomputadores.  

El aprendizaje profundo es un tipo de aprendizaje de máquina que es muy popular en la actualidad. Se trata de un tipo particular de modelo matemático que puede ser pensado como una composición de bloques simples (composición de funciones) de cierto tipo, y donde algunos de estos bloques se pueden ajustar para predecir mejor el resultado final.

La palabra "deep" significa que la composición tiene muchos de estos bloques apilados unos encima de otros, es difícil ajustar los bloques que están lejos de la salida, ya que un pequeño cambio puede tener efectos muy indirectos en la salida. Esto se hace a través de algo llamado “Backpropagation“ dentro de un proceso más grande llamado “Gradient descent“ que le permite cambiar los parámetros de una manera que mejore su modelo.

Ahora, tomemos un ejemplo para entenderlo, supongamos que queremos hacer un sistema que pueda reconocer caras de diferentes personas en una imagen (como lo hace Facebook). Si resolvemos esto como un típico problema de ML, definiremos características faciales como ojos, nariz, oídos, etc. y luego, el sistema identificará qué características son más importantes para cada persona por sí misma. Sin embargo, con DL se va un paso más allá, ya que este descubre automáticamente las características que son importantes para la clasificación debido a redes neuronales profundas, mientras que con ML tuvimos que definir manualmente estas características.

En el primer bloque, fija los patrones de contraste local, después en el siguiente bloque es capaz de usar esos patrones de contraste local para fijarse en cosas que se asemejan a ojos, narices y bocas, y por último, en el bloque o capa final es capaz de aplicar las características faciales a las plantillas de una cara, para dar los respectivos resultados.

Algoritmos de reconocimiento facial

En lo últimos años el avance en las tecnologías y con el aumento en las capacidades de los hardwares, como CPUs, GPUs y TPUs (Tensor Processing Unit), han permitido el surgimiento de nuevos algoritmos usando Deep Learning, aumentando sus rendimientos y tiempos de respuesta en el procesamiento de los datos, sobre todo con imágenes y videos, que contienen mucha información cuando se tiene que realizar algún reconocimiento en tiempo real.

En la actualidad existe una gran cantidad de algoritmos que usan machine learning para hacer diversos reconocimientos de patrones en las imágenes. Una de las características interesantes de determinar en las imágenes, es el género de la persona; aunque esto no es una tarea fácil, existen algoritmos y aplicaciones que realizan esta labor con una gran confianza.

Gupta, S. (2015) realizó un estudio de algunos algoritmos en esta área. El mismo describe el proceso general que se debe seguir para determinar el género de la persona en una imagen. Este consiste en convertir la imagen a una escala gris y eliminar las intensidades de luz o algún efecto indeseado que se capturó cuando se tomo la foto; detectar la posición de algunas características de la cara, como los ojos, nariz y boca; usar algoritmos como Triangulación de Delaunay y calcular las distancias Euclidianas entre algunas partes de la cara y por último está, utilizar algún algoritmo de ML para clasificar la cara dentro de la imagen como masculina o femenina, comparando los resultados de la distancias Euclidianas con otras imágenes en las bases de datos.

Dentro de los algoritmos para determinar el género que usó Gupta, S. (2015) estan los que se pueden encontrar en WEKA (colección de algoritmos de aprendizaje automático para tareas de minería de datos).  El algoritmo que tuvo un mayor porcentaje de exactitud, alrededor de 93.8%,  son los árboles funcionales y con un valor bastante considerable que otros algoritmos, como el Naive Bayes.

Natural Language Processing (NLP)

Esto es otra área de AI y tiene que ver con el lenguaje (generalmente escrito). Es el componente que une la brecha entre la conversación humana y la comprensión programada por un ordenador. NLP permite a la computadora interpretar el vasto y complicado lenguaje humano, entender lo que se dice, procesarlo, reflejar lo que se requiere de él y efectivamente "hablar", al igual que los humanos.

A través del proceso, la máquina tiene que entender toda la jerga que se está utilizando y desarrollar o adaptarse con la capacidad de responder, no como una computadora, sino más bien como una computadora humana. Deshpande, A. (2017) menciona que NLP tiene que ver con la creación de sistemas que procesan o "entienden" el lenguaje para realizar ciertas tareas, como responder preguntas, analizar el sentimiento en una frase, hacer traducciones entre diferentes idiomas, entre otras.

Deshpande, A. (2017)  también hacer una comparación bastante interesante, en como se hacía el NLP en su forma tradicional y como se hace ahora usando DL. Ya que por ejemplo, antes NLP implicaba mucho dominio de la propia lingüística, los términos comprensibles tales como fonemas y morfemas eran bastante estándares pues hay clases lingüísticas enteras dedicadas a su estudio, para analizar una palabra esta se debe descomponer en sus prefijos, sufijos  y analizar la raíz de la misma. Sin embargo, con DL, este proceso es completamente diferente, ya que usa diversas técnicas.

Una de las técnicas usadas, es tratar de representar las palabras en vectores numéricos y almacenarlos de una forma eficiente. Por ejemplo, Word2Vec, la idea básica detrás de esta técnica, es que trata de almacenar tanta información como pueda en este vector de palabras, manteniendo la dimensionalidad a una escala manejable (25 a 1000 dimensiones), esta técnica opera sobre la idea de que quiere  predecir las palabras circundantes de cada palabra.

Agentes cognitivos y chatbots

Los agentes cognitivos pueden definirse como entidades de software semiautónomos que ayudan a los individuos a lidiar con las complejidades cuando trabajan en un entorno de información distribuido, también se definen como programas de software que realizan un conjunto de tareas en nombre de un usuario u otro programa con cierto grado de independencia, adicionalmente se puede decir que los agentes de software son programas informáticos que se ejecutan en segundo plano y realizan tareas de forma autónoma. Un agente debe ser capaz de ocupar un entorno con otros agentes y procesos, y ser capaz de comunicarse y colaborar con ellos.

Los agentes pueden tener diversas características, dentro de ellas están: reactividad (capacidad de detectar y actuar selectivamente), autonomía, comportamiento colaborativo (puede trabajar en colaboración con otro agente para lograr un objetivo mutuo), capacidad de comunicación, capacidad inferencial (puede realizar en la especificación abstracta de la tarea usando conocimiento previo de metas generales y de métodos elegidos para alcanzar flexibilidad) , continuidad temporal, personalidad (la capacidad de exhibir los atributos de un personaje creíble como la emoción), adaptabilidad (ser capaz de aprender y progresar con la experiencia) y movilidad.

(Gracias a Ncubo por permitirme hacer este proyecto)
(Gracias a Ncubo por permitirme hacer este proyecto)
Un chatbot es un programas con inteligencia artificial que imitan el comportamiento de un humano y cuya finalidad es conversar con los clientes para dar respuesta a sus dudas y hacerle sugerencias, ofreciendo así una atención personalizada; son programas informáticos que se comunican con sus usuarios mediante el uso del lenguaje natural. Los chatbots o agentes de conversación artificialmente inteligentes pueden utilizarse para automatizar la interacción entre una empresa y un cliente.

Los chatbots han existido durante años con cierto grado de inteligencia, la primera aparición fue en los años 60. Estos primeros usaron la correspondencia simple de palabras clave para generar una respuesta, desde entonces ha ocurrido muchas apariciones y muchos chatbots han sido desarrollados utilizando diferentes técnicas como la correspondencia de patrones, extracción de palabras clave, NLP, ML y DL.

Los chatbots tienen el potencial de transformar significativamente la forma en que interactuamos y comunicamos digitalmente, el objetivo final de los chatbots es reemplazar las interfaces más comunes que usamos en computadoras y dispositivos conectados, los mismos proporcionan la ventaja de utilizar lenguaje natural para comunicarse con empresas y servicios a través de una interfaz familiar.

Los chatbots ahora están cambiando a la interfaz de mensajería móvil, la aplicación de mensajería móvil de chatbots con fines comerciales se le llama "comercio conversacional". Estos bots puede responder con mensajes, recomendaciones, actualizaciones, enlaces o botones y los clientes pueden comprar productos, todo en la misma interfaz del mensajero. Los pagos futuros a través de las aplicaciones de chat permitirán que el chat se convierta en un canal de compras único, que no requiere dejar la interfaz para completar un pedido, lo que permite una experiencia de compra sencilla. El pedido, la facturación y la entrega pueden ser manejados en la aplicación de mensajería, un robot puede eventualmente convertirse en un asistente personal capaz de proporcionar una gama de servicios.

Los chatbots tiene muchos campos en los que son posibles crear aplicaciones y especialmente chatbots orientados a tareas tienen una utilidad clara en aplicaciones reales, ya que están construidos para ayudar a los usuarios a lograr algún objetivo específico, como hacer una reserva de restaurante, pedir una pizza, reservar un vuelo, entre otras. El uso de bots en lugar de asistentes humanos podría reducir el tiempo y el esfuerzo necesarios para obtener ayuda con la tarea específica. Un chatbot puede reconocer la intención del comprador y refinar las ofertas basadas en las opciones y preferencias del comprador, facilitando la venta, la orden y el proceso de entrega.

En este proceso de integración de los chatbots, es cierto que desplazarán mano de obra en algunas áreas, pero serán las más rutinarias, repetitivas y las que menos valor aportan en los procesos de trabajo. Con la integración de estos nuevos asistentes, la empresa reduce ampliamente el esfuerzo humano, lo que permite a las personas centrarse en aquellas tareas en las que puede aportar mayor valor a su trabajo. Los nuevos asistentes personales mejorarán la experiencia de usuario, haciéndola más personal,  permitiendo dinamizar y optimizar las conversaciones con los clientes.

En la actualidad existen varias plataformas para crear chatbots, dentro de ellas están las más populares son LUIS de Microsoft, Dialogflow de Google y Watson de IBM. Todas ellas tienen y usan conceptos muy similares en la creación de un chatbot, ya que por ejemplo, todas usan lo que llaman intenciones y entidades, los cuales son usados para determinar lo que el usuario quiere expresar. Los mismos difieren en algunas características distintivas, una de ellas es la forma en cómo responden al usuario o para desambiguar, ya que por ejemplo Watson usan un árbol de decisión, mientras que Dialogflow no, las respuestas al cliente se dan de acuerdo a las variables de contexto que tenga y permita en la entrada de cada intención.
(Gracias a Ncubo por permitirme hacer este proyecto)
La implantación de esta tecnología está aumentando considerablemente y ya no es solo cuestión de unas pocas grandes empresas como Amazon, Apple o Google. Hoy en día, cualquier negocio puede crear un chatbot y esto es una tendencia que ha ido en ascenso y que empezará a consolidarse definitivamente en 2018. Las empresas no tendrán más opción que integrar la automatización inteligente para mantenerse al día.

Popular posts from this blog

ISTQB - Foundation Level Agile Tester Recap

ISTQB - Foundation Level Agile Tester Recap This is a summary that will help you to approve the Agile Tester certification test. 1 - Agile Software Development 1.1 - The fundamentals of Agile Software Development  The Agile Manifesto has 4 values : - Individuals and interactions over processes and tools (people-centered) - Working software over big documentations (time to market advantage) - Customer collaboration over contract negotiation (customer requirements) - Responding to change over following plan (change is more important)   The Agile Manifesto has 12 principles : - Satisfy the customer with continuous delivery - Changing requirements - Deliver software frequently (few weeks or months) - Business people and developer must work together - Build projects around motivated individuals - Face to face conversation - Working software is the primary measure of progress - The team should maintain a constant pace indefinitely - Technical excellence and good design - Simplic

RasPI Assistant: Google Assistant + Dialogflow + Raspberry Pi

Would you like to control the TV using your voice without spend a lot of money? ... Amazing right?. So, in this post, I will teach you how to do that and more. Some of my dreams always have been control things without touch them, for example: the television, due to tired to raise the hand to change the channel. So ... let's create a device that can do this action automatically. What things will we need? First, I should understand the problem and be aware about it. For example: if we want to control a TV that is not smart, how will we do that? ... a possibility is to send infrared signals (IR) to transmit the events that the person's desire. Also, if I want that the device can hear me, I may need a microphone. Additionally, it should have a speaker to talk with the people. Further, I will need a database to save all the information, APIs that can help me with the smart logic and cheap electronic components like a Raspberry Pi , resistors, leds, wires an

How to create a simple Chatbot?

Developing an amazing Chatbot ... What is a Chatbot? First to understand how it works, you need to know how it was originated and some algorithms  like  the Natural Language Processing (NLP). It is another AI area, but it is around the language (usually written), it is the component that bridges the gap between human conversation and understanding programmed by a computer. NLP allows the computer to interpret the vast and complicated human language, understand it, process it, and effectively "speak", just like humans. Through the process, the machine has to understand all the jargon that is being using and developing or adapting with the ability to respond, as a human computer. NLP has to do with the creation of systems that process or "understand" the language to perform certain tasks, such as answering questions, analyzing the sentiment in a sentence, making translations between different languages, and another. In the past, the NLP involved a lot