MACHINE LEARNING

Sería allá por el año 2002 cuando por primera vez formé parte de un equipo de I+D aplicada, cosa que no se ha vuelto a repetir hasta ahora y difícilmente creo que se vuelva a dar. Como soy licenciado en informática, obviamente, mi campo era la I.A. En concreto nos centrábamos (si es que se puede decir que estábamos centrados en algo) en los siguientes campos:

microsoft_machine_learning

 

Sí compañeros, como podéis ver le dábamos a casi todo por aquel entonces. Digamos que aquello era una “rave” del procesamiento computacional. La cosa que más me chocó de todo, fueron los sistemas expertos y las redes neuronales, por la capacidad de aprender que tienen. Uno de estos sistemas es capaz de tomar decisiones a través del aprendizaje y que resulta relativamente sencillo de implementar eran los sistemas expertos, en los cuales, simplemente tenías que definir un conjunto de probable de entrada y darle una salida correcta.

Obviamente, a medida que el sistema empieza a aprender, comete muchos errores en función de que la muestra de “entradas conocidas” sea más o menos amplia y de que su distribución sea uniforme a lo largo de la población muestreada. Una vez que vamos corrigiendo errores en la salida, el proceso va almacenando dicho conocimiento, añadiéndole un peso a cada condición de entrada respecto a la salida esperada. Una vez que crece el conocimiento heurístico que el sistema es capaz de almacenar, es capaz de anticipar salidas desconocidas según el escenario de entrada.

Me hacía gracia pensar que un sistema experto está un poco vivo, en tanto en cuanto tenía que aprender y que cuanto más tiempo dedicábamos a enseñarle más rápido aprendía y mejor lo hacía… tal y como una mascota o un ser humano. Pero lo que sucede en realidad no es algo tan mágico, es mucho más simple, una inferencia estadística según un escenario inicial y una salida con una probabilidad de éxito.

Recientemente me he vuelto a topar con esta rama de la I.A., concretamente con el machine learning y me he acordado de lo que hacía y así he podido comparar cómo han avanzado los algoritmos computacionales.

Estamos en la era de los datos, sólo que los datos que se tratan ahora son datos no estructurados. Son Terabytes de información que se obtienen de distintos orígenes, el mundo de la integración de sistemas y estaba claro que para explotar dicha información necesitábamos dotar al hardware de un mecanismo para ello. Es aquí donde el machine learnintoma importancia, ya que es capaz de inferir información concreta sobre una base de información sin estructurar, o lo que es lo mismo, es capaz de inducir conocimiento de, por ejemplo, textos descriptivos.

Esto sirve para cosas tan complejas como clasificar comportamientos o características y como podéis imaginar la aplicación es la que quieras dar al resultado de dicha información, desde sectorizar o predecir comportamientos ya sean de personas u otro tipo de entidades que nos proporcionan información.

machine_learning

 

Nosotros, en concreto, nos centramos en la sectorización empresarial por la actividad desarrollada según descripciones obtenidas por distintos medios. De esta forma, nos hemos decantado por algoritmos de máquinas de vectores de soporte (SVM) y por clustering.

Son los algoritmos SVM los que mejores resultados nos han proporcionado en la clasificación y su funcionamiento es muy sencillo. De momento sólo estamos utilizando esta técnica para deducir a qué sector pertenece una empresa. Como los sectores empresariales se solapan (la misma empresa puede estar en dos sectores al mismo tiempo), no podemos crear un único modelo, sino que debemos crear un modelo por cada sector y aplicárselo a todas las empresas.

Para ello cogemos un sector determinado y un conjunto de entrenamiento formado por empresas que pertenecen al sector, cuanto mayor sea el conjunto de entrenamiento mejores resultados nos dará el algoritmo, pero también podemos suministrar en nuestro conjunto de entrenamiento empresas que no pertenecen al sector, ya que también el sistema aprende de los casos negativos. Nos está dando muy buenos resultados y una vez generados los diccionarios es realmente rápido. Para que entendáis mejor cómo se realiza la vectorización de un texto os pongo el siguiente ejemplo:

Construimos primero nuestro diccionario:

la => 1, casa => 2, verde => 3, el => 4, perro => 5, de => 6

Hemos construido un diccionario de 6 dimensiones. Ahora podemos vectorizar los textos, donde cada dimensión corresponde a una palabra del diccionario:

Para obtener mejores resultados, se pasa toda el texto a minúsculas, se quitan tildes y caracteres especiales, se eliminan las stopwords (palabras más comunes del idioma, en nuestro ejemplo serían: la, el, de) se lematizan todas las palabras (eliminando plurales, declinaciones, conjugación de verbos, etc.) y se utilizan bigrams o trigrams (conjuntos de 2 o 3 palabras seguidas).

Obviamente un algoritmo de extracción de keywords (palabras clave sobre la información de una entidad concreta) nos permitiría tener un diccionario mucho menor y así obtener mucho mejores resultados a la hora de aplicar el algoritmo SVM, que es en lo que ahora estamos trabajando.

También estamos intentando afinar un algoritmos de clustering que nos permita extraer agrupaciones de la población de entidades que manejamos, para obtener automáticamente los sectores sugeridos por el sistema.

De este modo entre unos y otros algoritmos podemos llegar a tener unos resultados muy eficientes.

Es ahora cuando asusta ver que una máquina puede aprender mucho más rápido que nosotros y dar mejores resultados, lo que me tranquiliza al final es que por mucho que aprenda, jamás entenderá la información de una manera lógica y por mucho que sea capaz de deducir, inducir o reducir, no se dejará llevar por la intuición ni tomará conciencia de sus actos o existencia, vamos que la era de Skynet aún se me antoja lejana…

images

Bibliografía

Para desarrollar esto me he apoyado en algunas entradas de la Wikipedia, pero sobre todo os he buscado enlaces de interés para que podáis ahondar más en un tema que considero realmente apasionante:

 


Suscribirse a comentarios Comentarios | Trackback |

Comentarios ( 5 )

Muy interesante. Las aplicaciones del clustering para campañas de publicidad, captación de clientes que compartan intereses o necesiten productos o servicios que una empresa ofrezca, incluso para inducir necesidades que a priori son difíciles de identificar, es algo que a mi antojo produce una ventaja competitiva.
Sin llamarlo del todo inteligencia artificial, diría que el desarrollo de estas aplicaciones se extenderá en no mucho tiempo y nos acostumbraremos a verlas en muchos sectores empresariales.
Por último, en cuanto al desarrollo de la I.A. hasta el nivel Skynet, espero que sigamos contando con la ventaja que mos da la impronta y el derecho a cometer errores y realizar actos guiados por la intuición y los sentimientos.

Mario enviado el 26/09/15 04:48

Muy interesante el artículo. Llevo varios años trabajando en el mundo de la Inteligencia Artificial con redes neuronales y es cierto que es aplicable a un número muy extenso de ámbitos. Sin duda, con la cantidad de datos que existen almacenados sin uso, estas técnicas nos pueden proporcionar mucha información del comportamiento futuro de muchas cosas.
Enhorabuena!

Miguel Ángel Molina enviado el 26/09/15 12:26

Me ha parecido muy interesante el artículo. Llevo varios años trabajando en el mundo de la Inteligencia Artificial con redes neuronales sobre todo, aunque también con SVM y otras técnicas.

Sin duda, el desarrollo de estas aplicaciones se extienden ya actualmente a un ritmo vertiginoso en diversos ámbitos, gracias a la gran cantidad de datos que existen almacenados y que contienen una cantidad de información muy importante.

Enhorabuena!

Miguel Ángel enviado el 26/09/15 12:33

Enhorabuena por el artículo.

Ignacio Garcia enviado el 26/09/15 14:46

Me ha encantado el artículo, Alberto. Felicidades.

Javier Moya enviado el 28/09/15 07:49

Enviar comentario


XHTML: Puede utiliza las etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*


Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies