Cómo comenzamos a crear tarjetas de productos automáticamente

imagen

En mi último artículo, hablé sobre cómo aprendimos a unir automáticamente los productos por los nombres de los productos, es decir, entender, por ejemplo, que
Auriculares A4Tech Bloody G501 negro
y
A4 G501, negro (rojo) {Auriculares con micrófono, 2.2m}

- Es lo mismo. Esto permitió automatizar todo lo relacionado con precios y disponibilidad. En este artículo le contaré cómo fuimos más allá y automatizamos el trabajo con las características e imágenes de los productos.

Esta es una continuación lógica del desarrollo del producto, dada la operación confiable de la correspondencia automática de productos por nombre. Asignamos el proyecto de automatización a una compañía separada, y hablo sobre el proyecto usando el ejemplo de uno de nuestros clientes, y comparto algunos de los datos del cliente con su permiso. Lo siguiente es una pequeña introducción, y luego hablaremos sobre los algoritmos que usamos.

Por donde empezamos


El estado inicial hace un año fue el siguiente: un catálogo de 120 mil productos, de los cuales 70 mil están en stock. Después de que se lanzó la comparación automática y la creación de bienes (como se trataba el último artículo), el catálogo creció rápidamente a un millón con unos pocos bienes, de los cuales 600-650 mil estaban en stock. Pero solo 350 mil puestos estaban disponibles para compras minoristas, porque el resto no tenía características. Dependiendo de la categoría, para que un producto aparezca en venta, se debe llenar un cierto porcentaje de características. En algunas categorías, debe haber una foto. De los 350 mil bienes en venta, 120 mil no tenían imágenes. Explicaré que los productos que están en stock pero que no se venden al por menor se pueden vender al por mayor, es costumbre enviar archivos de Excel con nombres y precios allí. Pero el portal b2b con tarjetas es, sin duda, una ventaja.También se pueden colocar en agregadores, donde ya hay información más detallada sobre el producto.

Las imágenes y especificaciones se completaron en modo semiautomático. Durante este año, aparecieron otros clientes, y ahora sé cómo se construyó el proceso en una docena o dos tiendas relativamente grandes, es más o menos estándar. El programador que mantiene el sitio de vez en cuando escribe analizadores del sitio sobre el tema de la tienda. Además, el departamento de contenido en el panel de administración compara los bienes consumidos y los productos del catálogo, así como las categorías en la fuente y las categorías en el catálogo. Luego, en cada categoría, para cada propiedad, se configuran correspondencia, reemplazos, conversión de unidades. Las tarjetas de algunos productos se completan de forma completamente manual. Una pequeña parte de los bienes se entrega a un contratista externo. Así fue con nuestro cliente.

Alrededor del 6% del catálogo queda desactualizado por mes, es decir, para vender 500 mil productos en un sitio, debe crear 30 mil tarjetas por mes solo para mantener la cantidad al mismo nivel.

Decidimos abordar el problema de la manera más sistemática posible y automatizar el proceso de creación de tarjetas de productos tanto como sea posible.

¿Dónde obtenemos los datos?


La primera pregunta que surge es dónde obtener los datos de origen y cuánto podemos obtener. Tenemos dos fuentes principales:

  • archivos de proveedores y API
  • los datos que encontramos en Internet

El segundo punto implica analizar sitios. Hemos creado una infraestructura para crear analizadores, que le permite configurar el análisis del sitio en aproximadamente media hora. Luego, se realizaron alrededor de un centenar de analizadores en esta infraestructura, en este momento ya han recopilado información sobre 16 millones de productos y han descargado y cargado 35 millones de imágenes y documentos (instrucciones, hoja de datos) en CDN. Como CDN usamos un Bunny CDN. Cuando guardamos imágenes, consideramos sus hashes perceptuales para poder encontrar rápidamente duplicados más adelante, hablaremos más sobre esto a continuación. Idealmente, si el analizador en sí mismo sin las sugerencias y configuraciones podrá recopilar información sobre los productos en cualquier sitio, pero estos son planes distantes.

¿Cómo llenamos la tarjeta del producto con imágenes?


Esta es la parte más simple y obvia. Ya tenemos un mecanismo para hacer coincidir los productos por nombre, funciona de manera rápida y precisa, en este caso, estamos interesados ​​en respuestas falsas positivas, que son aproximadamente 0.1%. Falso negativo prácticamente no afecta el resultado, porque no hay mucha diferencia, al final trabajamos con 10 u 11 fuentes. La comparación funciona a una velocidad de 5-6 mil productos por segundo, y todos nuestros 15 millones de productos se combinan con cualquier catálogo en menos de una hora. Sería posible terminar con esto, ya que después de la comparación conocemos todas las imágenes de los productos. Pero en la práctica, se duplican en diferentes sitios en diferentes combinaciones, y sería correcto elegir la mejor calidad de un conjunto de imágenes similares, y dejar el resto como opciones en caso de posterior edición manual de la tarjeta del producto.

La identificación de imágenes similares ocurre en dos etapas. En la primera etapa, al descargar un archivo, para cada una de nuestras imágenes consideramos un hash perceptual. Primero, elimine el fondo sólido, recorte los campos. Luego aplique el hashing DCT a la imagen resultante. Acerca de este algoritmo una vez que hubo un artículo sobre Habré .

Después de comparar para cada producto, tenemos un conjunto de imágenes con hashes ya calculados, y necesitamos dividirlo en grupos, y luego seleccionar la imagen de mayor calidad de cada grupo. El tamaño de un conjunto de este tipo puede variar de varias unidades a varios cientos de unidades, un valor típico es de 10 a 40. En este tamaño, puede aplicar el algoritmo de complejidad cuadrática, la operación principal (calcular la distancia de Hamming) es muy rápida.

Dividimos las imágenes en grupos de la siguiente manera:

  1. la primera imagen del conjunto forma el primer grupo
  2. cada imagen siguiente se compara con la primera imagen de cada grupo
  3. Si el coeficiente de similitud más alto es mayor que el valor umbral, agregue la imagen al clúster existente
  4. de lo contrario, creamos un nuevo clúster a partir de una imagen

Después de eso, tomamos la imagen de más alta calidad de cada grupo. En una primera aproximación, la calidad está determinada por el tamaño y la resolución de la imagen. Cuanto mayor sea el tamaño y la resolución, mejor, pero la relación de tamaño a resolución debe estar dentro de límites razonables. Tal análisis es suficiente en la práctica.

Además hay un matiz más. Encontramos las imágenes de los productos automáticamente, pero, sin embargo, hasta ahora la persona es más importante. Y si una persona decide cambiar la secuencia de imágenes, debería tener esa oportunidad. Pero al mismo tiempo, no nos gusta la idea de "congelar" la tarjeta después de la edición manual, queremos mejorar los algoritmos, encontrar nuevas imágenes y mejorar automáticamente la tarjeta en el futuro.

Con esto en mente, el siguiente enfoque resultó ser una opción de trabajo: todas las imágenes que se han cambiado manualmente (y un cambio aquí significa el conjunto de acciones más amplio posible: confirmación, exclusión, cambio del orden) siempre permanecerán en su lugar. Todas las demás imágenes las podemos cambiar en el futuro en modo automático.

¿Cómo rellenamos una ficha de producto con propiedades?


Con las propiedades, las cosas son un poco más complicadas que con las imágenes. En diferentes fuentes, la misma propiedad puede llamarse de manera diferente, puede expresarse en diferentes unidades, puede no tener una correspondencia explícita (por ejemplo, HDMI: sí e Interfaces: HDMI, USB).

Comenzamos definiendo propiedades y creamos los siguientes tipos:

  • bueno no
  • número + unidad
  • opción única
  • opción multiple
  • línea

Además, usaré los términos " dimensión " y " unidad de medida ", tienen diferentes significados.

Luego describieron las unidades de medida y cómo convertirlas. Por el momento, ya hay más de cien, desde metros hasta decibelios. Todos ellos se dividen en grupos según la dimensión, y dentro del grupo se pueden unir entre sí. Por ejemplo, los caballos de fuerza se pueden convertir a vatios y los lúmenes a metros newton: es imposible.

Luego, intentamos dividir el proceso de llenar las propiedades en pasos independientes para que cada paso pudiera mejorarse y probarse por separado de los demás. Para cada producto del catálogo, realizamos las siguientes operaciones:

  1. comparamos productos con productos de fuentes por nombre (tenemos un proceso complejo, se describe en detalle en un artículo anterior )
  2. formar una lista de definiciones de propiedades para completar
  3. formamos una lista de propiedades de todos los productos relacionados
  4. asociamos con cada definición de la cláusula 2 una lista de valores de la cláusula 3
  5. convertir la lista a un solo valor

Consideremos con más detalle, como ejemplo, los dos últimos puntos. Supongamos que tenemos una definición de propiedad como esta:
Nombre: "Potencia"
Tipo: Número (6, 0)
Unidad: Watt
y dicha lista de valores (de hecho, es mucho más grande):
Longitud (mm): 220
Longitud: 0.22 m
Potencia (kW): 1.8
Potencia: 1.8 kW
Potencia nominal: 1800 W
Potencia: 2 kW
Potencia: 1800
Para empezar, debemos comprender qué valores vale la pena considerar en principio. Una versión funcional pero no final se ve así:

  • ( )
  • ( )
  • .

Tenemos estos puntos implementados como algoritmos independientes para cada caso, por lo que cada uno se puede mejorar por separado de los demás. En el párrafo con sinónimos, ingresamos manualmente algunos de los pares más obvios y los posponemos hasta tiempos mejores. Además, quizás intentaremos seleccionar sinónimos automáticamente, utilizando datos de las propiedades rellenas. Además, podemos tomar solo un valor de una fuente, por lo que cada uno de los algoritmos tiene una prioridad, determina el orden de ejecución de los algoritmos.

Después de esta operación, tendremos el siguiente conjunto de valores:
Potencia (kW): 1.8
Potencia: 1.8 kW
Potencia nominal: 1800 W
Potencia: 2 kW
Potencia: 1800
Sabemos que este conjunto debe reducirse a un número de cierta dimensión. Para cada tipo, tenemos un algoritmo independiente. En el caso del número y la unidad de medida, hacemos lo siguiente:

para cada valor, tratamos de determinar la unidad de medida. Si esto falla, o su dimensión no coincide con la dimensión de la propiedad, ignore este valor en el futuro. Tendremos el siguiente conjunto de valores:
Potencia (kW): 1.8
Potencia: 1.8 kW
Potencia nominal: 1800 W
Potencia: 2 kW
Intentamos convertir cada uno de los valores en un número y llevarlo a la unidad de medida deseada. Aquí intentamos tener en cuenta todos los formatos posibles: con una coma y un punto para separar las partes enteras y fraccionarias, con comas y espacios para separar los miles, abreviaturas como miles, etc. Resulta lo siguiente:
1800 W
1800 W
1800 W
2000 W
Este conjunto debe reducirse a un solo valor. En el caso de un solo valor en el conjunto, úselo. Si los valores son más de uno y coinciden, aún mejor. Si los valores son más de uno y no coinciden, tomamos el más común. Si este no es el caso, no complete la propiedad automáticamente.

Este fue un ejemplo para una propiedad de un tipo numérico, para otros tipos los últimos pasos son diferentes y tienen en cuenta sus características.

En cuanto a la edición manual, tratamos las propiedades exactamente de la misma manera que con las imágenes. Cualquier cosa que se haya cambiado o confirmado manualmente ya no puede cambiar automáticamente. Todo lo demás puede.

¿Cómo probamos un proyecto?


Este proyecto tiene una característica notable: el núcleo es una tecnología que consiste completamente en tareas de optimización. Además, la mayoría de estas tareas no tienen una solución exacta, y para ellas se nos ocurrió nuestro propio criterio que tiene en cuenta la velocidad y la precisión. Aquí es donde realmente se necesitan las pruebas.

La arquitectura del proyecto está diseñada de tal manera que los algoritmos complejos, en la medida de lo posible, se dividen en pasos simples. Para cada paso hay un criterio de optimización y un conjunto de pruebas. Énfasis en la precisión, pero también en la velocidad. Por lo menos, estábamos cuidando cada cambio. Cada uno de estos pasos se asemeja a la tarea de la programación deportiva, y tenemos la oportunidad de comparar los resultados después de cada cambio.

resultados


Será posible evaluar con mayor precisión los resultados después de un par de meses de trabajo en producción. Ya ha pasado menos de una semana. Durante este tiempo, pudimos agregar al sitio alrededor de 110 mil productos que no se vendieron previamente debido a la falta de propiedades o imágenes.
El objetivo para el futuro es abandonar por completo el trabajo manual para llenar el catálogo. En la primera etapa, un buen resultado sería reducir su volumen en un 70%. Creo que por los resultados de varios meses lo lograremos.

All Articles