martes, 19 de octubre de 2010

¿Cómo funciona un filtro de spam?

No hace falta nada más que consultar tu correo electrónico para comprobar que hoy en día hay una cantidad enorme de correos basura (spam). Pero afortunadamente, existen unos filtros que detectan este tipo de mails con muy poco margen de error, facilitándonos la tarea de deshacernos de ellos. Pero... ¿cómo funcionan?


La idea es sencilla. Utilizando técnicas de reconocimiento de formas (pattern recognition) se pretende aprender de forma automática qué tipo de correos son spam y cuales no. Para ello hacen falta principalmente 2 cosas: una representación de los correos y un modelo capaz de aprender a distinguirlos.

Normalmente se utiliza una representación llamada bolsa de palabras (bag of words) que consiste en lo siguiente. Dado un correo electrónico y un vocabulario (un conjunto de palabras), se cuenta cuantas veces aparece cada palabra y se divide por el número total de palabras. Así, se obtiene una representación numérica del correo. Dicha representación es una simplificación de la información contenida en el mail, ya que se pierde el orden entre las palabras, de ahí el nombre de bolsa de palabras (si metemos el contenido de un correo en una bolsa y las sacamos una a una, contándolas, obtenemos la representación). Lo interesante es que el spam suele incluir palabras clave como "gratis", "sex" o "viagra" que hacen que con esta representación sea posible reconocerlo correctamente. Por ejemplo, usando un vocabulario de 5 palabras para distinguir entre spam y un correo de este blog, un e-mail podría representarse como

 gratis  viagra  el   karma curioso
[ 0.07    0.04   0.0   0.0    0.0  ]

donde sin ver el mail original, claramente nos decantaríamos por mandarlo a correo basura.

Por último, se necesita disponer de ejemplos de correos ya etiquetados como spam o no-spam, y utilizar modelos como las redes neuronales, support vector machines o una distribución multinomial, que sean capaces de aprender a partir de las muestras. De este modo, dado un nuevo correo, utilizando un modelo entrenado, se decide si es o no spam. Por eso es importante marcar como spam cualquier correo basura que llegue a nuestra bandeja de entrada, porque el modelo aprenderá del mismo y se irá adaptando a las nuevas formas de publicidad en la red.

Si alguien quiere saber más acerca de este tema, además de consultar los modelos enlazados para el aprendizaje a partir de ejemplos, está el problema de la elección del vocabulario, además de la posibilidad de incluir en la representación otra serie de características (número de mayúsculas, signos de puntuación). Una base de datos etiquetada está disponible aquí.

No hay comentarios:

Publicar un comentario