La multiherramienta más útil del aprendizaje automático: incrustaciones

Las incrustaciones son una de las técnicas más versátiles en el aprendizaje automático y una herramienta crítica que todo ingeniero de ML debe tener en su cinturón de herramientas. ¡Es una pena, entonces, que tan pocos de nosotros entendamos qué son y para qué sirven!

El problema, tal vez, es que las incrustaciones suenan un poco abstractas y esotéricas:

En el aprendizaje automático, una incrustación es una forma de representar datos como puntos en un espacio n-dimensional para que los puntos de datos similares se agrupen.

¿Suena aburrido y poco impresionante? No se deje engañar. Porque una vez que comprenda esta multiherramienta de ML, podrá crear todo, desde motores de búsqueda hasta sistemas de recomendación, chatbots y mucho más. Además, no tiene que ser un científico de datos con experiencia en ML para usarlos, ni necesita un gran conjunto de datos etiquetados.

¿Te he convencido de lo buenos que son estos chicos malos? 🤞

Bien. Profundicemos. En esta publicación, exploraremos:

  • ¿Qué son las incrustaciones?
  • para que se usan
  • Dónde y cómo encontrar modelos de incrustación de código abierto
  • como usarlos
  • Cómo construir tus propias incrustaciones

¿Qué se puede construir con incrustaciones?

Antes de hablar sobre qué son las incrustaciones, hagamos un balance rápido de lo que puede construir con ellas. (Ya sabes, para abrir el apetito.) Potencia de incrustaciones de vectores:

  1. Sistemas de recomendación (es decir, al estilo de Netflix, si te gustan estas películas, también te gustará esta)
  2. todo tipo de busqueda

    • Búsqueda de texto (como la Búsqueda de Google)
    • Búsqueda de imágenes (como la búsqueda por imagen de Google)
    • Búsqueda de música (al estilo de «¿qué canción es esta?»)
  3. Chatbots y sistemas de preguntas y respuestas
  4. Preprocesamiento de datos (preparación de datos para introducirlos en un modelo de aprendizaje automático)
  5. Aprendizaje one-shot/zero-shot (es decir, modelos de aprendizaje automático que aprenden casi sin datos de entrenamiento)
  6. Detección de fraude/detección de valores atípicos
  7. Detección de errores tipográficos y todas las formas de «coincidencia aproximada»
  8. Detectar cuando los modelos ML se vuelven obsoletos (deriva)
  9. ¡Mucho más!

Incluso si no está tratando de hacer algo en esta lista, las aplicaciones de incrustaciones son tan amplias que probablemente debería seguir leyendo, por si acaso. ¿Derecha?

¿Qué son las incrustaciones?

Las incrustaciones son una forma de representar datos, casi cualquier tipo de datos, como texto, imágenes, videos, usuarios, música, lo que sea, como puntos en el espacio donde las ubicaciones de esos puntos en el espacio son semánticamente significativas.

La mejor manera de entender intuitivamente lo que esto significa es con un ejemplo, así que echemos un vistazo a una de las incrustaciones más famosas, Word2Vec.

Word2Vec (abreviatura de word to vector) fue una técnica inventada por Google en 2013 para incrustar palabras. Toma como entrada una palabra y escupe una coordenada n-dimensional (o «vector») de modo que cuando traza estos vectores de palabras en el espacio, los sinónimos se agrupan. Aquí hay una imagen:

Ilustración de Word2vec

Palabras trazadas en un espacio tridimensional. Las incrustaciones pueden tener cientos o miles de dimensiones, demasiadas para que los humanos las visualicen.

Con Word2Vec, palabras similares se agrupan en el espacio, por lo que el vector/punto que representa «rey», «reina» y «príncipe» se agruparán cerca. Lo mismo con los sinónimos («caminó», «paseó», «trotó»).

Para otros tipos de datos, es lo mismo. La incrustación de una canción trazaría canciones cercanas con un sonido similar. Una incrustación de imágenes trazaría imágenes cercanas de aspecto similar. Una incrustación de clientes ubicaría a los clientes con hábitos de compra similares en las cercanías.

Probablemente ya pueda ver cómo esto es útil: las incrustaciones nos permiten encontrar puntos de datos similares. Podría construir una función, por ejemplo, que tome como entrada una palabra (es decir, «rey») y me encuentre sus diez sinónimos más cercanos. Esto se llama búsqueda de vecino más cercano. No es muy interesante hacerlo con palabras sueltas, pero imagínese si incrustáramos tramas completas de películas. Entonces podríamos construir una función que, dada la sinopsis de una película, nos dé diez películas similares. O, dado un artículo de noticias, recomienda artículos semánticamente similares.

Además, las incrustaciones nos permiten calcular puntuaciones de similitud numérica entre puntos de datos incrustados, es decir, «¿Qué tan similar es este artículo de noticias a ese?» Una forma de hacer esto es calcular la distancia entre dos puntos incrustados en el espacio y decir que cuanto más cerca están, más similares son. Esta medida también se conoce como distancia euclidiana. (También puede usar el producto escalar, la distancia del coseno y otras medidas trigonométricas).

Las puntuaciones de similitud son útiles para aplicaciones como la detección de duplicados y el reconocimiento facial. Para implementar el reconocimiento facial, por ejemplo, puede incrustar imágenes de rostros de personas y luego determinar que si dos imágenes tienen una puntuación de similitud lo suficientemente alta, son de la misma persona. O bien, si incrustara todas las imágenes en la cámara de su teléfono celular y encontrara fotos que estaban muy cerca en el espacio de incrustación, podría concluir que esos puntos probablemente eran fotos casi duplicadas.

Las puntuaciones de similitud también se pueden utilizar para la corrección de errores tipográficos. En Word2Vec, las faltas de ortografía comunes (“hola”, “hola”, “hola”, “hEeeeelO”) tienden a tener puntajes altos de similitud porque todos se usan en los mismos contextos.

Los gráficos anteriores también ilustran una propiedad adicional muy clara de Word2Vec, que es que los diferentes ejes capturan el significado gramatical, como el género, el tiempo verbal, etc. Esto significa que al sumar y restar vectores de palabras, podemos resolver analogías, como «el hombre es a la mujer como el rey es a ____». Es una característica bastante interesante de los vectores de palabras, aunque esta característica no siempre se traduce de manera útil en incrustaciones de tipos de datos más complejos, como imágenes y fragmentos de texto más largos. (Más sobre esto en un segundo.)

¿Qué tipo de cosas se pueden incrustar?

Texto

Palabras sueltas, como en el caso de Word2Vec, pero también frases enteras y fragmentos de texto. Uno de los modelos de incrustación de código abierto más populares se llama Codificador de oraciones universal (USAR). El nombre es un poco engañoso, porque USE se puede usar para codificar no solo oraciones sino también fragmentos de texto completo. Aquí hay una imagen del sitio web de TensorFlow. El mapa de calor muestra cuán similares son las diferentes oraciones según su distancia en el espacio incrustado.

visualización de incrustaciones USE

El modelo Universal Sentence Encoder tiene muchos usos, especialmente cuando se trata de búsqueda de texto. Esto se debe a que las incrustaciones de USE capturan los significados de las oraciones en lugar de sobreajustar las palabras individuales.

Imagine, por ejemplo, que quisiera crear una base de datos de búsqueda de artículos de noticias.

La base de datos de artículos de noticias de Dale Times
hombre muerde perro
¿Son los burritos el próximo taco?
Las diez principales tendencias de ML que te perdiste esta semana
Ciencia: ¿Ha ido demasiado lejos?
Pelusa: domar la amenaza del cajón de los calcetines

Ahora supongamos que busco en esta base de datos con la consulta de texto «comida». El resultado más relevante en la base de datos es el artículo sobre la infame controversia del burrito/taco, aunque la palabra “comida” no aparece en el título del artículo. Si buscáramos por las incrustaciones de USE de los titulares en lugar del texto sin procesar en sí, podríamos capturar eso, porque USE captura la similitud semántica del texto en lugar de la superposición de palabras específicas.

Vale la pena señalar aquí que, dado que podemos asociar muchos tipos de datos con texto (títulos para imágenes, transcripciones para películas), también podemos adaptar esta técnica para usar la búsqueda de texto para multimedia. Como ejemplo, echa un vistazo a este archivo de video de búsqueda.

Imágenes

También podemos incrustar imágenes, lo que nos permite realizar una búsqueda inversa de imágenes, es decir, «buscar por imagen». Un ejemplo es la búsqueda de productos de visión, que también resulta ser una producto de la nube de Google por el mismo nombre.

Imagine, por ejemplo, que tiene una tienda de ropa y desea crear una función de búsqueda. Es posible que desee admitir consultas de texto como «minifalda gótica de cuero con tachuelas». Usando algo como una incrustación USE, es posible que pueda hacer coincidir esa consulta de usuario de texto con una descripción del producto. Pero, ¿no sería genial si pudieras permitir que los usuarios busquen por imagen en lugar de solo por texto? ¿Para que los compradores puedan cargar, por ejemplo, una parte superior de tendencia de Instagram y verla comparada con productos similares en su inventario? (Eso es exactamente lo que este tutorial le muestra cómo construir.)

Uno de mis productos favoritos que utiliza la búsqueda de imágenes es Google Lens. Hace coincidir las fotos de la cámara con productos visualmente similares. Aquí, trata de hacer coincidir los productos en línea que se parecen a mi par de zapatillas:

Google lens search de las zapatillas de deporte de Dale

Al igual que con las incrustaciones de oraciones, hay muchos modelos de incrustación de imágenes de uso gratuito disponibles. Esta página de TensorFlow Hub proporciona un montón, bajo la etiqueta «vector de características». Estas incrustaciones fueron extraídas de grandes modelos de aprendizaje profundo que se entrenaron inicialmente para realizar la clasificación de imágenes en grandes conjuntos de datos. Para ver una demostración de la búsqueda de imágenes impulsada por Incorporaciones de MobileNetverificar esta demostración que te permite subir una foto y busca en todo Wikimedia para encontrar imágenes similares.

Desafortunadamente, a diferencia de las incrustaciones de oraciones, las incrustaciones de imágenes de código abierto a menudo deben ajustarse para que una tarea en particular sea de alta calidad. Por ejemplo, si desea crear una búsqueda de similitud para la ropa, es probable que desee un conjunto de datos de ropa para entrenar sus incorporaciones. (Más sobre cómo entrenar incrustaciones en un momento).

-Pruébalo: Compresión, búsqueda, interpolación y agrupación de imágenes mediante aprendizaje automático

Productos y Compradores

Las incrustaciones son especialmente útiles en el espacio minorista cuando se trata de hacer recomendaciones de productos. ¿Cómo sabe Spotify ¿Qué canciones recomendar a los oyentes en función de sus historiales de escucha? ¿Cómo decide Netflix? ¿Qué películas sugerir? ¿Cómo sabe Amazon qué productos recomendar a los compradores en función del historial de compras?

Hoy en día, la forma más avanzada de construir sistemas de recomendación es con incrustaciones. Usando datos de historial de compra/escucha/mirada, los minoristas entrenan modelos que incorporan usuarios y artículos.

¿Qué significa eso?

Imagine, por ejemplo, que soy un comprador frecuente en un sitio imaginario de venta de libros de alta tecnología llamado BookShop. Usando los datos del historial de compras, BookShop entrenó dos modelos de incrustación:

El primero, su modelo de inserción de usuario, me mapea, un comprador de libros, al espacio del usuario en función de mi historial de compras. Es decir, debido a que compro muchas guías tecnológicas, libros de ciencia popular y libros de fantasía de O’Reilly, este modelo me ubica cerca de otros nerds en el espacio del usuario.

Mientras tanto, BookSpace también mantiene un modelo de incrustación de elementos que asigna libros al espacio de elementos. En el espacio de elementos, esperaríamos que los libros de géneros y temas similares se agruparan. Entonces, encontraríamos el vector que representa Do Androids Dream of Electric Sheep de Philip K. Dick cerca del vector que representa Neuromancer de William Gibson, ya que estos libros son tópicamente/estilísticamente similares.

¿Cómo se crean las incorporaciones/dónde anoto algunas?

En resumen, hasta ahora hemos hablado de:

  • Qué tipos de aplicaciones potencian las incrustaciones
  • Qué son las incrustaciones (un mapeo de datos a puntos en el espacio)
  • Algunos de los tipos de datos que realmente se pueden incrustar

Lo que aún no hemos cubierto es de dónde vienen las incrustaciones. (Cuando un científico de datos y una base de datos SQL se aman mucho…) Er, uh, más específicamente: cómo construir un modelo de aprendizaje automático que tome datos y escupa incrustaciones semánticamente significativas basadas en su caso de uso.

Aquí, como en la mayor parte del aprendizaje automático, tenemos dos opciones: la ruta del modelo preentrenado y la ruta del modelo DIY, entrene su propio modelo.

Modelos Pre-Entrenados

Si desea incrustar texto, es decir, realizar una búsqueda de texto o una búsqueda de similitud en el texto, tiene suerte. Hay toneladas y toneladas de incrustaciones de texto previamente entrenadas, gratuitas y fácilmente disponibles para su uso. Uno de los modelos más populares es el modelo Universal Sentence Encoder que mencioné anteriormente, que puedes descargar aquí del repositorio de modelos de TensorFlow Hub. Usar este modelo en el código es bastante sencillo. Esta muestra de Python se tomó directamente del sitio web de TensorFlow:

import tensorflow_hub as hub

embed = hub.load("https://tfhub.dev/google/universal-sentence-encoder/4")
embeddings = embed([
    "The quick brown fox jumps over the lazy dog.",
    "I am a sentence for which I would like to get its embedding"])

print(embeddings)

# Response looks like: [[0.001, 0.201, ...]]
# i.e., an array of vectors

Para aprovechar realmente estas incrustaciones de texto, necesitaremos implementar la búsqueda del vecino más cercano y calcular la similitud. Para eso, déjame señalarte esta publicación de blog que escribí recientemente sobre este mismo tema: crear texto/aplicaciones semánticamente inteligentes usando incrustaciones de oraciones.

Las incrustaciones de imágenes de código abierto también son fáciles de conseguir. Aquí es donde puedes encontrarlos en Centro TensorFlow. Nuevamente, para que sea útil para tareas específicas del dominio, a menudo es útil ajustar estos tipos de incrustaciones en datos específicos del dominio (es decir, imágenes de prendas de vestir, razas de perros, etc.)

Finalmente, sería negligente no mencionar uno de los modelos de incrustación más llamativos lanzados últimamente: Modelo CLIP de OpenAI. CLIP puede tomar una imagen o texto como entrada y asigne ambos tipos de datos al mismo espacio de incrustación. Esto le permite crear software que puede hacer cosas como: determinar qué pie de foto (texto) es más adecuado para una imagen.

Entrenamiento de sus propias incrustaciones

Más allá de las incrustaciones genéricas de texto e imágenes, a menudo necesitamos entrenar modelos de incrustación con nuestros propios datos. Hoy en día, una de las formas más populares de hacer esto es con lo que se llama un modelo de dos torres. Desde el sitio web de Google Cloud:

El modelo Two-Tower entrena incrustaciones mediante el uso de datos etiquetados. El modelo Two-Tower empareja tipos similares de objetos, como perfiles de usuario, consultas de búsqueda, documentos web, pasajes de respuesta o imágenes, en el mismo espacio vectorial, de modo que los elementos relacionados estén cerca unos de otros. El modelo Two-Tower consta de dos torres codificadoras: la torre de consulta y la torre candidata. Estas torres incrustan elementos independientes en un espacio de incrustación compartido, lo que permite que Matching Engine recupere elementos con coincidencias similares.

No voy a entrar en detalles sobre cómo entrenar un modelo de dos torres en esta publicación. Para eso, lo remitiré a esta guía en Entrenamiento de su propio modelo de dos torres en Google Cloudo esta página en Recomendadores de Tensorflowque le muestra cómo entrenar sus propios modelos de recomendación/dos torres de TensorFlow.

De todos modos, eso es todo por ahora. A continuación, hablaremos sobre cómo crear aplicaciones basadas en tecnología de incrustación. Como siempre, gracias por leer.

Fuente del artículo

¿Que te ha parecido?

Deja un comentario