Contenidos
¿A las imágenes importantes les falta el texto alternativo de la imagen en su sitio web?
En la Búsqueda de Google: Estado de la Unión en mayo pasado, John Mueller y Martin Splitt dedicaron aproximadamente una cuarta parte del discurso a temas relacionados con la imagen. Google Search: State of the Union
Anunciaron una gran lista de mejoras en la búsqueda de imágenes de Google y predijeron que sería una gran oportunidad sin explotar para el SEO.
SEO Clarity, un proveedor de herramientas de SEO, publicó un informe muy interesante al mismo tiempo Entre otros hallazgos, encontraron que más de un tercio de los resultados de búsqueda web incluyen imágenes. very interesting report
Las imágenes son importantes para los visitantes de búsqueda no solo porque son visualmente más atractivas que el texto, sino que también transmiten un contexto al instante que requeriría mucho más tiempo al leer el texto.
Google cree que las mejoras de imagen en los motores de búsqueda ayudarán a los usuarios a visitar páginas que coincidan con sus intenciones.
Ahora, tengo buenas y malas noticias para ti con respecto a esta nueva oportunidad.
La mala noticia es que para mejorar la capacidad de clasificación de sus imágenes, debe hacer el tedioso trabajo de agregar metadatos de texto en forma de texto alternativo de calidad y texto circundante.
¡Pero la buena noticia es que vamos a aprender cómo automatizar ese tedioso trabajo con Python!
Este es nuestro plan de acción:
- Usaremos DeepCrawl para rastrear un sitio web y encontrar imágenes importantes a las que les falta el texto ALT de la imagen.
- Entrenaremos un modelo usando Pythia que puede generar leyendas de imágenes.
- Escribiremos una función de Python para iterar sobre las imágenes y generar sus leyendas.
- Aprenderemos algunos trucos para mejorar la calidad de los subtítulos y producir unos más personalizados.
- Aprenderemos sobre los conceptos de aprendizaje profundo que hacen esto posible.
- Compartiré recursos para aprender más y proyectos comunitarios interesantes.
Introduciendo Pitia
Los avances que están ocurriendo en la comunidad de aprendizaje profundo son emocionantes e impresionantes ¡Es muy difícil mantenerse al día!
🏎 Smaller, faster, cheaper, lighter: Introducing DilBERT, a distilled version of BERT by @SanhEstPasMoi https://t.co/MuVpaQB4Le
— Hamlet Batista (@hamletbatista) August 28, 2019
🏎 Más pequeño, más rápido, más barato, más liviano: presentamos DilBERT, una versión destilada de BERT por @SanhEstPasMoi https://t.co/MuVpaQB4Le @SanhEstPasMoi
— Hamlet Batista (@hamletbatista) 28 de agosto de 2019 August 28, 2019
Solo mire el modelo Megatron lanzado por NVIDIA el mes pasado con 8.300 millones de parámetros y 5 veces más grande que GPT2, el poseedor del récord anterior.
Pero, lo que es más importante, repasemos algunas de las cosas increíbles que ahora son posibles.
No dude en consultar este sitio de demostración centrado en hacer preguntas sobre el contenido de las imágenes.
¿Bien adivina que? Es uno de los proyectos de aprendizaje profundo de Facebook y lo pondremos a trabajar en este artículo. Pythia
Extracción de imágenes sin texto alternativo con DeepCrawl
Vamos a generar subtítulos para este agradable sitio que tiene todo lo que pueda necesitar sobre alpacas. nice site
Cuando configure el rastreo, asegúrese de incluir recursos de imagen (tanto internos como externos).
Seleccione una extracción personalizada predefinida para extraer imágenes sin atributo de texto alternativo.
Una vez que finalice el rastreo, exporte la lista de URL de imágenes como un CSV después de que finalice el rastreo.
Generación de subtítulos a partir de las imágenes usando Pythia
Dirígete a la página de Pythia GitHub y haz clic en el enlace de demostración de subtítulos de imagen Está etiquetado como «Subtítulos de imagen BUTD». GitHub page
BUTD significa «Bottom Up and Top Down», que se analiza en el artículo de investigación que explica la técnica utilizada. research paper
Si sigue el enlace, accederá a un bloc de notas de Google Colab, pero es de solo lectura. Debe seleccionar Archivo > Hacer una copia en Drive.
Ahora, los siguientes pasos son la parte más difícil.
En Tiempo de ejecución, seleccione Ejecutar todo.
Desplácese hacia abajo hasta la última celda del cuaderno y espere a que finalice la ejecución.
Copie y pegue la imagen de ejemplo en una celda separada y ejecútela con Shift+Enter.
image_text = init_widgets( "http://images.cocodataset.org/train2017/000000505539.jpg" )
Debería ver un widget con un aviso para subtitular una imagen usando su URL ¡Presiona el botón que dice Subtitular esa imagen!
La leyenda dice claramente «una jirafa y dos cebras caminando por un camino».
Veamos un par de imágenes de productos a las que les falta texto alternativo en nuestro sitio de ropa de alpaca.
Estamos revisando esta página específicamente. this page
La leyenda generada dice «una mujer parada frente a un fondo blanco».
La leyenda generada dice «un jarrón blanco sobre una mesa», lo cual es incorrecto, ¡pero no completamente loco!
¡Resultados muy impresionantes sin escribir una línea de código!
Iterando sobre todas las imágenes que faltan subtítulos con Python
Necesitamos agregar el siguiente código al final del cuaderno de demostración de Pythia que clonamos de su sitio.
Comencemos cargando el archivo que exportamos de DeepCrawl.
from google.colab import files uploaded = files.upload()
Vamos a cargar el archivo en pandas para descubrir cómo extraer las URL de las imágenes usando una URL de ejemplo.
Podemos hacer pequeñas modificaciones a la función al hacer clic en el botón para crear su función generar subtítulos Esta función tomará la URL de una imagen como entrada y generará un título.
Aquí hay un ejemplo El pie de foto dice «una mujer con un vestido rojo que sostiene un oso de peluche». No es 100% exacto, pero tampoco terrible.
Este código nos ayudará a subtitular todas las imágenes para esa URL de ejemplo.
Esto es lo que dicen los nuevos subtítulos:
- “una mujer sonriendo con una sonrisa en su rostro”
- “una pila de jarrones junto a una pila de rocas”
- “una mujer sonriendo mientras sostiene un cigarrillo en la mano”
Los ejemplos son cercanos pero decepcionantes. Pero, ¡el siguiente tenía toda la razón!
La leyenda dice «un par de ovejas paradas una al lado de la otra», sobre lo que nadie puede discutir, pero en realidad son alpacas, no ovejas.
Finalmente, hagamos algunos cambios para poder generar subtítulos para todas las URL de imágenes que exportamos desde DeepCrawl.
Puede ver en el resultado algunas URL con atributos adicionales como este.
<img style="display: block; margin-left: auto; margin-right: auto;" src="https://alpacas.com/pub/media/wysiwyg/panel/shippingusa.jpg" alt="" />
El siguiente fragmento de código nos ayudará a eliminar esos atributos adicionales y obtener las URL de las imágenes.
image_urls = [re.sub('<img .+ src="', '', url).strip() for url in images if url] image_urls = [re.sub('" alt=""\s*/>', '', url).strip() for url in image_urls if url]
Esto nos da una lista limpia con 144 URL de imágenes.
unique_images = set(image_urls)
A continuación, convertimos la lista en un conjunto de 44 URL únicas.
Finalmente, iteramos sobre cada imagen y generamos un título para ella como lo hicimos mientras probamos en una URL.
Algunas imágenes no se subtitularon debido al tamaño de la imagen y a lo que espera la red neuronal Capturé, ignoré e informé esas excepciones.
Así es como se ve la salida parcial.
La leyenda dice «una mujer de pie junto a un grupo de ovejas».
La leyenda dice «un estante lleno de muchos artículos de diferentes colores»
Los subtítulos generados no son particularmente precisos porque entrenamos a Pythia en un conjunto de datos de subtítulos genéricos Específicamente, el conjunto de datos COCO, que significa Common Objects in Context. COCO dataset
Para producir mejores subtítulos, debe generar su propio conjunto de datos personalizado Compartiré algunas ideas y algunos de mis primeros resultados en la siguiente sección.
El poder del entrenamiento en un conjunto de datos personalizado
Para obtener mejores subtítulos, debe crear un conjunto de datos de imágenes y subtítulos utilizando sus propias imágenes. El proceso para hacer esto está fuera del alcance de este artículo, pero aquí hay un tutorial que puede seguir para comenzar. tutorial
La idea principal es que necesita extraer imágenes e, idealmente, cinco subtítulos por imagen, cambiarles el tamaño para usar un tamaño estandarizado y formatear los archivos como lo espera el formato COCO.
{ "info": {...}, "licenses": [...], "images": [...], "annotations": [...], "categories": [...], <-- Not in Captions annotations "segment_info": [...] <-- Only in Panoptic annotations }
Una idea que he utilizado con éxito para los clientes de comercio electrónico es generar un conjunto de datos personalizado utilizando imágenes de productos y los correspondientes resúmenes de reseñas de cinco estrellas como subtítulos.
El objetivo no es solo generar texto alternativo de imagen, sino también titulares potenciales basados en beneficios.
Permítanme compartir algunos ejemplos cuando comencé a jugar con esto el año pasado. Usé reseñas de 3 a 5 estrellas para obtener suficientes datos.
Aquí hay un par de divertidos para mostrarle que hacer este tipo de trabajo puede ser muy divertido. Creo que desperté a mi esposa cuando me eché a reír con estos.
Comprender cómo funciona la pitia
Es muy interesante cómo una red neuronal produce subtítulos a partir de imágenes.
En mis artículos anteriores sobre aprendizaje profundo, mencioné el enfoque general de codificador-decodificador utilizado en la mayoría de las tareas de aprendizaje profundo. Es lo mismo con la leyenda de la imagen, excepto que tenemos dos tipos diferentes de redes neuronales conectadas aquí.
Una red neuronal convolucional toma una imagen y puede extraer características sobresalientes de la imagen que luego se transforman en vectores/incrustaciones. convolutional neural network
Una red neuronal recurrente toma las incrustaciones de imágenes e intenta predecir las palabras correspondientes que pueden describir la imagen. recurrent neural network
Pythia utiliza un enfoque más avanzado que se describe en el documento «Atención de abajo hacia arriba y de arriba hacia abajo para subtítulos de imágenes y preguntas y respuestas visuales». “Bottom Up and Top Down Attention for Image Captioning and Visual Question and Answering”
En lugar de utilizar una CNN tradicional que se utiliza en tareas de clasificación de imágenes para alimentar el codificador, utiliza una red neuronal de detección de objetos (Faster R-CNN) que puede clasificar objetos dentro de las imágenes.
Creo que esta es la razón principal por la que es capaz de producir pies de foto de alta calidad.
Comprender la atención neuronal
La atención neuronal ha sido uno de los avances más importantes en las redes neuronales. Neural attention
En términos simples, el mecanismo de atención permite que la red se concentre en las partes correctas de la entrada que pueden ayudar a completar la tarea de transformación en cuestión.
En el ejemplo anterior, puede ver, por ejemplo, que la red asocia «jugar» con la imagen visual del frisbee y el fondo oscuro con el hecho de que están jugando en la oscuridad.
La atención neuronal es un componente clave de la arquitectura de Transformers que impulsa BERT y otros codificadores de última generación. Transformers architecture
Recursos y Proyectos Comunitarios
Cubrí este tema de generación de texto a partir de imágenes y texto en profundidad durante un seminario web reciente para DeepCrawl Puede encontrar el resumen aquí y también mis respuestas a las preguntas de los asistentes. recap here
Originalmente aprendí a construir un sistema de subtítulos desde cero porque era el proyecto final del primer módulo de la Especialización en aprendizaje automático avanzado de Coursera. Advanced Machine Learning Specialization
Las clases son increíblemente desafiantes, incluso más cuando no eres un ingeniero de aprendizaje automático a tiempo completo. Pero la experiencia me enseñó mucho sobre lo que es posible y la dirección que los investigadores están tomando.
El entusiasmo por Python continúa creciendo en nuestra comunidad Cada vez veo más gente preguntando cómo empezar y compartiendo sus proyectos.
Primero, un gran agradecimiento a Parker, quien se tomó la molestia de lograr que el equipo legal de su empresa aprobara la publicación de este código que desarrolló internamente. Parker
Es un script que lee los datos de la API de estadísticas y los almacena en una base de datos para ayudarlo a visualizarlos en Tableau.
Aquí hay algunos ejemplos más y la lista sigue creciendo:
Data collector with custom CTR fitting and score calculation (CTRdelta * Impressions)
Made to track and analyze effect of external links.Build over a GSC wrapper and uses scrapper so you can just enter the external link and a date.https://t.co/5M500uG9kT
— Gefen Hermesh (@Ghermesh) July 31, 2019
Recopilador de datos con ajuste de CTR personalizado y cálculo de puntaje (CTRdelta * Impresiones) Hecho para rastrear y analizar el efecto de los enlaces externos.
Construya sobre un envoltorio GSC y use scrapper para que pueda ingresar el enlace externo y una fecha. https://t.co/5M500uG9kT https://t.co/5M500uG9kT
— Gefen Hermesh (@Ghermesh) 31 de julio de 2019 July 31, 2019
Maybe this Content parity report to compare desktop vs mobile for the MFI or for compare sites during migration fits in your article 🙂 https://t.co/zm5KyjYTFQ
— Nacho Mascort (@NachoMascort) July 31, 2019
Tal vez este informe de paridad de contenido para comparar computadoras de escritorio y dispositivos móviles para la IMF o para comparar sitios durante la migración se ajuste a su artículo 🙂 https://t.co/zm5KyjYTFQ https://t.co/zm5KyjYTFQ
— Nacho Mascort (@NachoMascort) 31 de julio de 2019 July 31, 2019
I didn’t find an easy way to do it in Excel, so here is a way in #python to see competitors that are also ranking for your keywords: https://t.co/u8lJRJY1X9
— KarinaKumyK (@karinakumykova) July 31, 2019
No encontré una manera fácil de hacerlo en Excel, así que aquí hay una forma en #python para ver a los competidores que también están clasificados por sus palabras clave: https://t.co/u8lJRJY1X9 #python
— KarinaKumyK (@karinakumykova) 31 de julio de 2019 July 31, 2019
Late, but still 🙂
It’s prepared here:https://t.co/MPb18mG8ay
Readme is still in progress but basic operations are there (I’ll finish it in next hour).
— Filip Podstavec ⛏ (@filippodstavec) September 5, 2019
Tarde, pero igual 🙂
Se prepara aquí: https://t.co/MPb18mG8ay https://t.co/MPb18mG8ay
Léame todavía está en progreso, pero las operaciones básicas están ahí (lo terminaré en la próxima hora).
— Filip Podstavec ⛏ (@filippodstavec) 5 de septiembre de 2019 September 5, 2019
Más recursos:
Créditos de imagen
Todas las capturas de pantalla tomadas por el autor, septiembre de 2019
Leer el articulo original en Search Engine Journal.