Si bien puede ser algo básico, quise investigar y profundizar un poco en el concepto como para que me quedara bien en claro, así lo estaré haciendo con otros conceptos clave.
En el contexto de inteligencia artificial, un algoritmo es una secuencia de pasos o instrucciones diseñadas para resolver un problema o realizar una tarea específica. Los algoritmos en IA se desarrollan con el fin de procesar información, aprender de los datos y tomar decisiones de manera automática, simulando así algunos procesos de pensamiento humano. Estos algoritmos permiten a las máquinas realizar tareas complejas, desde el reconocimiento de patrones en imágenes hasta la comprensión y generación de texto.
Algunos ejemplos de algoritmos relacionados con IA y desarrollo de software:
Redes Neuronales Artificiales (ANNs): Utilizadas actualmente por ejemplo para reconocer imágenes y traducir textos automáticamente. Este tipo de algoritmos imita la estructura del cerebro humano para procesar grandes volúmenes de datos y extraer patrones.
Algoritmos de Aprendizaje Profundo (Deep Learning): Subcategoría del aprendizaje automático que trabaja con grandes redes neuronales para tareas como el procesamiento de imágenes y el reconocimiento de voz.
Árboles de Decisión: Utilizados en modelos predictivos y clasificación de datos. Se utilizan para tomar decisiones basadas en una serie de criterios, comúnmente usados en análisis de datos y sistemas de recomendación.
Algoritmos de Procesamiento del Lenguaje Natural (NLP): Son la base de chatbots y asistentes virtuales. Estos algoritmos comprenden y generan lenguaje humano.
Algunos ejemplos de algoritmos históricos no relacionados con IA:
- Algoritmo de Euclides (300 a.C.): Se utiliza para encontrar el máximo común divisor de dos números. Es un ejemplo clásico de cómo resolver problemas matemáticos de manera sistemática.
- Ábaco chino (500 a.C.): Un conjunto de pasos para realizar operaciones aritméticas, precursor de los sistemas de cálculo actuales.
- Algoritmo de ordenamiento de nombres en papiros egipcios: Los escribas egipcios usaban procedimientos específicos para clasificar nombres y fechas, similar a los algoritmos de ordenación en programación moderna.
- Método de Arquímedes para calcular áreas y volúmenes (287-212 a.C.): Aunque era un método matemático manual, es una serie de pasos secuenciales que resolvían problemas de cálculo.
- Encriptación de mensajes en la máquina Enigma (Siglo XX): Utilizada durante la Segunda Guerra Mundial, seguía un procedimiento determinado para encriptar y desencriptar mensajes, un proceso algorítmico antes del uso de computadoras.
El ejemplo de las ANNs me hizo buscar y averiguar un poco más de info para poder entender su relación con el concepto de algoritmos y logré llegar a la siguiente conclusión.
Las Redes Neuronales Artificiales (ANNs) son consideradas un tipo de algoritmo. Aunque son modelos más complejos que los algoritmos tradicionales, en esencia siguen una serie de pasos e instrucciones para procesar datos y tomar decisiones. Están compuestas por capas de «neuronas» o nodos que procesan la información de forma secuencial y ajustan sus «pesos» internos en cada capa para mejorar en una tarea específica, como el reconocimiento de patrones. Su funcionamiento básico se puede descomponer en pasos sistemáticos (similares a un algoritmo), como recibir una entrada, realizar operaciones matemáticas, y generar una salida, que luego se retroalimenta para mejorar los resultados mediante técnicas de aprendizaje.
En resumen, aunque se ven más complejas y pueden adaptarse con el tiempo (aprendiendo de los datos), las redes neuronales siguen un conjunto de instrucciones repetibles y lógicas que son, de hecho, características de un algoritmo.
De la misma manera, seguí con el ejemplo de los Algoritmos de Aprendizaje Profundo (Deep Learning)
Los Algoritmos de Aprendizaje Profundo (Deep Learning) son una subcategoría de los algoritmos de aprendizaje automático, pero su característica distintiva es el uso de redes neuronales profundas. Estas redes tienen muchas capas interconectadas, de ahí el término “profundo”, lo que les permite captar patrones complejos en los datos. Aunque se consideran más sofisticados que otros tipos de algoritmos, siguen siendo una secuencia estructurada de pasos para resolver problemas específicos.
Para entender por qué los algoritmos de aprendizaje profundo son considerados algoritmos, analicemos el flujo de trabajo típico que siguen:
- Entrada de Datos: El algoritmo recibe datos en su entrada, como imágenes, texto o audio. Esta información pasa a través de la red neuronal en capas.
- Procesamiento en Capas: Cada capa de la red transforma la información de forma progresiva, extrayendo características desde las más simples (como bordes en una imagen) hasta patrones complejos (como rostros completos). Este proceso de extracción es sistemático y sigue pasos definidos.
- Ajuste de Pesos y Sesgos: Durante el aprendizaje, el algoritmo ajusta sus parámetros (pesos y sesgos) en cada capa. Esta retroalimentación es calculada y aplicada en cada iteración siguiendo reglas matemáticas específicas.
- Función de Costo: Para cada predicción que hace el modelo, se calcula un error mediante una función de costo, que cuantifica cuán lejos estuvo el resultado de la red respecto al valor esperado.
- Retropropagación: Mediante un procedimiento llamado retropropagación, el algoritmo ajusta los pesos en función del error calculado. Esto sigue una serie de pasos precisos que mejoran la precisión del modelo a través de cada iteración.
- Salida de Resultados: Finalmente, el modelo produce una salida (como la identificación de una persona en una imagen), que puede ser mejorada a lo largo del tiempo mediante el ajuste de sus pesos internos.
Este conjunto de pasos organizados para procesar, ajustar y mejorar predicciones es lo que convierte a los algoritmos de aprendizaje profundo en algoritmos en sí mismos. Aunque sus capacidades son avanzadas y pueden aprender, siguen una secuencia lógica y estructurada de acciones para resolver tareas, cumpliendo con la definición de un algoritmo.
Hice lo propio con los árboles de decisión.
Los árboles de decisión son algoritmos utilizados para tomar decisiones basadas en una serie de condiciones. Este tipo de algoritmo se organiza como una estructura jerárquica en forma de árbol, en la cual cada nodo interno representa una decisión o prueba basada en una característica de los datos, y cada rama representa el resultado de esa prueba. Al final de cada rama, un nodo hoja representa una decisión final o resultado. Este proceso secuencial y lógico convierte a los árboles de decisión en algoritmos porque siguen una serie de pasos definidos para llegar a un resultado.
Aquí está el flujo de un árbol de decisión para entender por qué es considerado un algoritmo:
- Identificación del Problema: El árbol de decisión comienza con un problema específico que debe resolver, como clasificar datos o tomar una decisión entre varias opciones. Se elige una característica de los datos que ayude a segmentar la información en subconjuntos.
- Nodos de Decisión: En cada nodo del árbol, se toma una decisión basada en el valor de una característica específica (por ejemplo, “¿el cliente tiene más de 30 años?”). Estas decisiones se toman siguiendo una secuencia lógica y clara.
- Ramas: Cada decisión lleva a una nueva rama en el árbol, donde se repite el proceso de evaluación. Cada rama representa un camino basado en la respuesta a la prueba realizada en el nodo.
- Evaluación de Criterios: En cada paso, se evalúan ciertos criterios o condiciones, como el valor más común de la característica, la pureza de los datos en cada nodo, o la ganancia de información. Estos criterios definen la estructura del árbol y ayudan a decidir cómo dividir los datos en cada nivel.
- Nodos Hojas (Resultados): Al final de cada camino o rama se encuentra un nodo hoja que representa la decisión o clasificación final (por ejemplo, “aceptar préstamo” o “rechazar préstamo”). Estos nodos contienen los resultados del análisis.
- Cálculo de la Precisión y Mejora: Durante el proceso de creación, el árbol se puede ajustar mediante pruebas y evaluaciones para mejorar su precisión. Esto implica retroceder y revisar algunas ramas si es necesario, de manera estructurada.
Esta secuencia de pasos claramente definidos convierte a los árboles de decisión en algoritmos, ya que siguen una lógica estructurada y específica para llevar a cabo clasificaciones o decisiones de forma repetible y confiable. Aunque los árboles de decisión pueden parecer simples en comparación con otros métodos de IA, cumplen con todas las características de un algoritmo: son lógicos, repetibles y capaces de procesar datos de entrada para producir una salida.
Por último, me ocupo también de los algoritmos de procesamiento de lenguaje natural.
Los algoritmos de NLP están diseñados específicamente para comprender, interpretar y generar lenguaje humano de manera estructurada. Estos algoritmos son la base de herramientas como chatbots y asistentes virtuales que pueden interactuar con los usuarios en lenguaje natural. A pesar de que estas interacciones pueden parecer complejas y adaptativas, el procesamiento del lenguaje natural sigue una serie de pasos específicos y estructurados, lo que hace que sean considerados algoritmos.
A continuación, el flujo de trabajo típico de un algoritmo de NLP:
- Entrada de Texto: El algoritmo comienza con una entrada de texto en lenguaje natural (por ejemplo, una pregunta hecha a un chatbot). Esta entrada debe ser procesada y entendida de manera que el sistema pueda responder de forma coherente.
- Preprocesamiento de Texto: En esta etapa, el texto se limpia y transforma. Esto incluye pasos como la eliminación de palabras irrelevantes (palabras vacías como “el” o “de”), tokenización (dividir el texto en palabras o frases) y lematización (reducir las palabras a su forma base). Cada paso sigue una secuencia lógica y determinada.
- Análisis Sintáctico y Semántico: Luego, el algoritmo analiza la estructura gramatical (sintaxis) y el significado de las palabras en el contexto (semántica). Esto ayuda a que el sistema entienda, por ejemplo, quién es el sujeto, el verbo y el objeto en una oración, y qué intención tiene el usuario. El análisis sigue reglas específicas de lenguaje y patrones predefinidos.
- Identificación de Intención y Entidades: Los algoritmos de NLP también detectan la intención del usuario (por ejemplo, “preguntar por el clima”) y extraen entidades relevantes (como “Madrid” si el usuario pregunta por el clima allí). Esto se realiza mediante modelos que identifican patrones específicos en el texto.
- Generación de Respuesta: Con base en la intención y las entidades identificadas, el algoritmo genera una respuesta. Puede consultar una base de datos, ejecutar una operación o simplemente construir una frase en lenguaje natural. La generación de respuesta también sigue una estructura definida para que el mensaje sea coherente y adecuado.
- Salida de Texto: Finalmente, el algoritmo presenta una respuesta en texto (o incluso en voz, en el caso de asistentes virtuales) al usuario, completando el ciclo de procesamiento.
Este flujo organizado convierte a los algoritmos de NLP en algoritmos porque siguen una serie de pasos claros y definidos para transformar la entrada (texto del usuario) en una salida (respuesta del sistema). Aunque se basan en datos y aprendizaje automático para mejorar la precisión y el contexto, la estructura de procesamiento es lógica y repetible, lo que cumple con la definición de un algoritmo.
Finalmente, para analizar la relación entre un algoritmo en el contexto de inteligencia artificial y su aplicación en el testing ágil, comenzamos destacando que un algoritmo, como secuencia de pasos para resolver un problema, juega un rol clave en pruebas automatizadas y en técnicas específicas de prueba que también siguen patrones estructurados y algoritmos para garantizar la cobertura y eficiencia de nuestras pruebas.
En testing, los algoritmos nos ayudan por ejemplo a garantizar la cobertura de los casos de prueba y a simular comportamientos complejos en situaciones específicas. En el ISTQB, técnicas de caja negra, como la Prueba de Tabla de Decisión y el Análisis de Valores Límite, son ejemplos de métodos que representan el uso de algoritmos en pruebas de software.
Comparto un ejemplo para aclarar un poco más la situación.
La Prueba de Tabla de Decisión es útil para casos en los que existen múltiples condiciones que pueden afectar el resultado de una función o sistema. Este enfoque, similar a un algoritmo de decisión, permite definir todas las combinaciones posibles de condiciones de entrada y las acciones resultantes para asegurar la cobertura.
Escenario: Supongamos una aplicación bancaria que decide el tipo de interés aplicable a un préstamo en función de tres condiciones:
- Si el cliente es nuevo o existente.
- Si el crédito del cliente es alto o bajo.
- Si el cliente selecciona un plazo de préstamo corto o largo.
Cada una de estas condiciones afecta el tipo de interés aplicable. Para aplicar la Prueba de Tabla de Decisión, se crea una tabla con todas las combinaciones posibles de estas condiciones (simulando un algoritmo de árbol de decisiones). Esto garantiza que se prueben todos los escenarios posibles, evaluando así la precisión del sistema en la determinación de los tipos de interés.
Práctica de Testing:
- Cada fila en la tabla representa una combinación de entradas y un caso de prueba correspondiente.
- Se verifican todos los posibles caminos de decisión, garantizando que el sistema calcule los intereses correctamente en cada situación.
Beneficio del Algoritmo en Testing: Esta técnica ayuda a simular un algoritmo de «if-then-else» que evalúa cada condición y garantiza que el sistema se comporte correctamente en función de cualquier combinación de condiciones.
Ahora sólo te queda el ejercicio de explorar su aplicación en las otras prácticas.
Muchas gracias por seguir los artículos que publico en este blog y en LinkedIn.