En los siguientes videos me
gustaría hablar del diseño de sistemas de aprendizaje automático.
En los siguientes videos trataré
los problemas más importantes a los que
te puedes enfrentar al diseñar
un sistema complejo de aprendizaje automático e
intentaré dar
algunos consejos sobre
cómo integrar estratégicamente un sistema complejo de aprendizaje automático.
Si los siguientes
videos parecen estar
un poco inconexos, es porque
tratarán
diferentes asuntos a los que
te puedes enfrentar al diseñar sistemas complejos de aprendizaje.
Aún cuando los
siguientes videos
parezcan ser menos matemáticos, creo que
su contenido puede ser
de mucha utilidad y podrán
ahorrarte tiempo
cuando construyas un gran sistema de aprendizaje automático.
Me gustaría empezar con
el tema de
priorizar y de cómo
administrar tu tiempo o en qué invertirlo.
Empezaré con
un ejemplo de clasificación de spam.
Digamos que quieres construir un clasificador de spam.
Aquí hay algunos ejemplos de
emails que son obviamente spam y otros que no lo son.
Este de la izquierda trata de vender cosas.
Fíjense cómo los spammers
cometerán errores ortográficos intencionalmente, como
V1ncent, con un 1, y M0rgages.
Este de la izquierda
es un ejemplo obvio de un email
que no es spam. De hecho es un correo de mi hermano menor.
Digamos que tenemos un conjunto
de aprendizaje con un valor asignado
de un número de correos de spam y
de correos normales, que denotaremos
con las etiquetas 1 y 0.
¿Cómo construiríamos
un clasificador utilizando el aprendizaje supervisado
para distinguir entre el spam y los correos normales?
Para aplicar el aprendizaje supervisado,
la primera decisión que
debemos tomar es cómo
representar “x”; es decir,
las variables del correo.
Con las funciones, “x” y
los valores asignados “y” en nuestro
conjunto de entrenamiento, podemos
entrenar un clasificador utilizando, por ejemplo, la regresión logística.
Aquí presento una manera de elegir
un conjunto de funciones para nuestros correos.
Podemos generar, digamos,
una lista de
cien palabras que pensamos
que son indicativas de si el correo es
spam o no. Por
ejemplo, si un correo
contiene la palabra “oferta”
lo más seguro es que será
spam y si contiene la palabra
“compra” es probable
que sea spam. Igual, si
tiene la palabra “descuento” también es
probable que sea spam. Por el contrario,
si un correo contiene mi nombre,
Andrew, quizá signifique
que quien lo envía sabe
quién soy y esto indicaría que
es menos probable que sea spam.
Quizá, por alguna razón
la palabra “ahora” sea un
indicativo de que el correo no es spam
porque recibo muchos correos
urgentes.
Entonces, podemos elegir alrededor de cien palabras.
Con un correo específico,
podemos tomarlo y
codificarlo
en una función
vectorial como está.
Tomaré mi lista de
cien palabras y la
ordenaré «alfa»béticamente.
No tienen que estar ordenadas pero,
bueno, aquí está mi
lista de palabras como “descuento”,
hasta llegar
a “ahora”.
En un correo
como el que se
muestra a la derecha,
verificaré si cada una
de estas palabras
aparece en él y
definiré un vector de
función “x”.
En este correo de la
derecha no aparece
mi nombre así que pondré un 0.
La palabra “compra” sí aparece,
así que pondré un 1 ahí
y pondré unos y ceros.
Aquí pondré un
1 aunque la palabra “compra” aparece dos veces.
No contaré las repeticiones de las palabras.
La palabra “oferta” aparece, así que pondré un 1.
La palabra “descuento” no aparece,
por lo menos en este
correo, etc.
La palabra “ahora” sí aparece.
En este vector de variable
pondré unos y ceros dependiendo de
si una palabra aparece o no.
En este ejemplo, mi
vector de función tendría
que mencionar cien
si tengo cien o si
elijo cien
palabras para utilizarlas
en esta representación y cada
una de mis variables “xj” será
1, si una
palabra en particular, digamos la
palabra “j”, aparece en el
correo y “xj” será
0 si no aparece.
Ok.
Esto me da
la representación de variables de un correo.
Por cierto, aunque
describí este proceso
como la selección manual de cien palabras,
en la práctica, lo que se hace
generalmente es analizar el conjunto
de entrenamiento y
elegir, en él,
las “n” palabras más frecuentes,
donde “n” es entre diez mil
y cincuenta mil, y utilizarlas
como variables.
Entonces, en vez de elegir manualmente
cien palabras, analizas los
ejemplos de entrenamiento y
eliges las palabras que aparecen con más frecuencia, entre
diez mil y cincuenta mil
palabras. Estas serán
las funciones que
utilizarás para representar tu correo para la clasificación de spam.
Ahora, si estás armando un
clasificador de spam, una de las preguntas a las
que te puedes enfrentar es ¿cuál
es el mejor uso de mi tiempo si
quiero mejorar
la precisión de mi clasificador de spam y un error menor?
La inclinación natural es ir a recolectar más datos
¿Correcto?
De hecho, existe la tendencia
a pensar que entre
más datos tengamos mejor se desempeñará el algoritmo.
En el ámbito de
los correos spam, hay
proyectos muy importantes llamados
proyectos Honey Pot, que crean direcciones
falsas de correos electrónicos e intentan
poner estas direcciones en
manos de los spammers y
utilizarlas para recolectar toneladas
de correos spam y, por lo tanto,
obtener una gran cantidad de datos de spam para entrenar algoritmos de aprendizaje.
Ya hemos visto en los videos
anteriores que obtener
muchos datos será de ayuda en algunas ocasiones, pero no siempre.
Sin embargo, para la mayoría de los problemas de aprendizaje
hay muchas otras cosas que
puedes intentar para mejorar su desempeño.
Para el spam, una de las
cosas que pudieras pensar es
desarrollar variables más sofisticadas en
el correo, por ejemplo, con base en la información de enrutamiento.
Esta sería información contenida en el encabezado del correo.
Seguido, cando los spammers envían correos,
intentan esconder
los orígenes del
correo y utilizar
encabezados falsos.
También pueden enviar el
correo por conjuntos de servicio inusuales o por
rutas inusuales para intentar hacerte llegar el spam.
Parte de esta información se verá reflejada en el encabezado del correo.
Por lo tanto, uno se puede
imaginar ver estos encabezados e
intentar desarrollar variables más sofisticadas
para capturar esta
información de enrutamiento de correos e identificar si alguno es spam.
Otra cosa que puedes considerar es
ver el cuerpo del
correo, es decir, el
texto e intentar desarrollar variables más sofisticadas.
Por ejemplo, ¿debemos tratar
las palabras “descuento” y
“descuentos” como la misma
palabra? o ¿debemos
tratar la palabra “venta” o “Vendo” como la misma palabra, a pesar
de que una está escrita
con mayúscula y la otra con minúscula?
O ¿queremos funciones más complejas de la puntuación porque, a lo mejor, el spam
utiliza más signos de exclamación?
No sé.
Similar a esto, quizá queramos
desarrollar
algoritmos más sofisticados para detectar
y corregir faltas de ortografía intencionales,
como m0rtgage, med1cine o w4atches.
Los spammers hacen esto
porque la técnica de la que
hablábamos; es decir,
el clasificador de spam, quizá
no contaría
esta palabra
como la palabra
“watches” y sería
más difícil que
detectaran spam con estos errores intencionales.
Esta es la razón por la que los spammers lo hacen.
Cuando trabajamos en un problema de
aprendizaje automático, seguido
hacemos una lista de cosas que podemos intentar, como estas.
Por cierto, yo mismo
he trabajado por un tiempo en el
problema del spam
y le dediqué mucho tiempo.
Sin embargo, aunque
entiendo el problema del spam
y sé algo al respecto,
no podría realmente
decirte
cuál de estas cuatro opciones
es el mejor uso de mi tiempo si
lo que pasa seguido, francamente muy
seguido, es que un grupo
de investigación o un
grupo de producto se concentrará aleatoriamente en una de estas opciones.
A veces resulta que
esta opción no es la manera
más adecuada de invertir tu tiempo,
dependiendo de cuál
de estas opciones es en la que se están concentrando.
De hecho, si llegas a
la etapa en la que
haces una lista de
cosas distintas que puedes intentar,
ya estás aventajado.
Tristemente, en vez de
hacer una lista de
las opciones que se pueden
intentar, muchas personas
sólo despiertan por
la mañana y, por alguna razón,
tienen el presentimiento
y se imaginan "¡Ya sé!, hagamos
un proyecto Honoypot enorme
para recolectar muchos datos”.
Por la razón que sea,
simplemente se despiertan, se obsesionan
con esta opción y se
dedican a ella por seis meses.
Pero creo que podemos hacerlo mejor.
Lo que me gustaría hacer
en el video
siguiente es hablarte, específicamente,
sobre el concepto de análisis de errores
y hablar sobre una
manera en la que
puedes elegir de forma más
sistemática entre las
diferentes opciones
que tienes para trabajar y,
por lo tanto, invertir
bien tu tiempo por
las siguientes
semanas, o los siguientes días, o meses.