Comment nous avons commencé à créer automatiquement des fiches produit

image

Dans mon dernier article, j'ai expliqué comment nous avons appris à faire correspondre automatiquement les produits par nom de produit, c'est-à-dire à comprendre, par exemple, que
Casque A4Tech Bloody G501 noir
et
A4 G501, noir (rouge) {Casque avec microphone, 2,2 m}

- C'est le même. Cela a permis d'automatiser tout ce qui concerne les prix et la disponibilité. Dans cet article, je vais vous dire comment nous sommes allés plus loin et automatisé le travail avec les caractéristiques et les images des marchandises.

Il s'agit d'une continuation logique du développement du produit, étant donné le fonctionnement fiable de l'appariement automatique des produits par leur nom. Nous avons attribué le projet d'automatisation à une entreprise distincte, et je parle du projet en utilisant l'exemple de l'un de nos clients, et partage certaines des données du client avec sa permission. Ensuite, une petite introduction, puis nous parlerons des algorithmes que nous avons utilisés.

Par où avons-nous commencé


Il y a un an, l'état initial était le suivant: un catalogue de 120 000 marchandises, dont 70 000 en stock. Après le lancement automatique de la comparaison et de la création de marchandises (comme le dernier article parlait), le catalogue a rapidement atteint le million avec quelques marchandises, dont 600-650 mille étaient en stock. Mais seulement 350 000 postes étaient disponibles pour les achats au détail, car le reste n'avait pas de caractéristiques. Selon la catégorie, pour qu'un produit apparaisse en vente, un certain pourcentage de caractéristiques doit être renseigné. Dans certaines catégories, il doit y avoir une photo. Sur les 350 000 produits en vente, 120 000 n'avaient aucune image. J'expliquerai que les marchandises qui sont en stock mais qui ne sont pas vendues au détail peuvent être vendues en gros, il est habituel d'y envoyer des fichiers Excel avec noms et prix. Mais le portail B2B avec cartes est sans aucun doute un plus.Ils peuvent également être placés sur des agrégateurs, où il existe déjà des informations plus détaillées sur le produit.

Les images et les spécifications ont été remplies en mode semi-automatique. Au cours de cette année, d'autres clients sont apparus, et maintenant je sais comment le processus a été construit dans une douzaine ou deux magasins relativement grands, il est plus ou moins standard. Le programmeur qui gère le site de temps en temps écrit des analyseurs de site sur le sujet du magasin. En outre, le service de contenu du panneau d'administration compare les biens et produits consommés du catalogue, ainsi que les catégories de la source et les catégories du catalogue. Ensuite, dans chaque catégorie, pour chaque propriété, la correspondance, les remplacements, la conversion d'unités sont configurés. Les fiches de certaines marchandises sont remplies entièrement manuellement. Une petite partie des marchandises est confiée à un contractant externe. C'était donc avec notre client.

Environ 6% du catalogue devient obsolète par mois, c'est-à-dire que pour vendre 500 000 produits sur un site, vous devez créer 30 000 cartes par mois juste pour maintenir la quantité au même niveau.

Nous avons décidé d'aborder le problème le plus systématiquement possible et d'automatiser au maximum le processus de création des fiches produits.

Où obtenons-nous les données


La première question qui se pose est de savoir où obtenir les données source et combien nous pouvons obtenir. Nous avons deux sources principales:

  • fichiers fournisseurs et API
  • les données que nous avons trouvées sur Internet

Le deuxième point concerne l'analyse des sites. Nous avons créé une infrastructure pour créer des analyseurs, qui vous permet de configurer l'analyse du site en environ une demi-heure. Puis une centaine d'analyseurs ont été réalisés sur cette infrastructure, au moment où ils ont déjà collecté des informations sur 16 millions de produits et téléchargé et téléchargé 35 millions d'images et de documents (instructions, fiche technique) sur CDN. En tant que CDN, nous utilisons un Bunny CDN. Lors de l'enregistrement des images, nous considérons leurs hachages perceptuels afin que nous puissions trouver rapidement des doublons plus tard, nous en parlerons plus en détail ci-dessous. Idéalement, si l'analyseur lui-même sans les conseils et les paramètres sera en mesure de collecter des informations sur les produits sur n'importe quel site, mais ce sont des plans éloignés.

Comment remplir la fiche produit avec des images


C'est la partie la plus simple et la plus évidente. Nous avons déjà un mécanisme d'appariement des produits par leur nom, il fonctionne rapidement et avec précision, dans ce cas, nous sommes intéressés par les faux positifs qui sont de l'ordre de 0,1%. Les faux négatifs n'affectent pratiquement pas le résultat, car il n'y a pas beaucoup de différence, on travaille au final avec 10 ou 11 sources. La comparaison fonctionne à une vitesse de 5 à 6 000 produits par seconde, et tous nos 15 millions de produits sont adaptés à n'importe quel catalogue en moins d'une heure. Il serait possible de terminer là-dessus, car après comparaison, nous connaissons toutes les images des marchandises. Mais en pratique, ils sont dupliqués sur différents sites dans différentes combinaisons, et il serait judicieux de choisir la meilleure qualité parmi un ensemble d'images similaires, et de laisser le reste comme options en cas de modification manuelle ultérieure de la fiche produit.

L'identification d'images similaires se déroule en deux étapes. Dans un premier temps, lors du téléchargement d'un fichier, pour chacune de nos images nous considérons un hachage perceptuel. Tout d'abord, supprimez l'arrière-plan uni, recadrez les champs. Appliquez ensuite le hachage DCT à l'image résultante. À propos de cet algorithme une fois qu'il y avait un article sur Habré .

Après avoir comparé pour chaque produit, nous avons un ensemble d'images avec des hachages déjà calculés, et nous devons le diviser en grappes, puis sélectionner l'image de la plus haute qualité de chaque grappe. La taille d'un tel ensemble peut varier de plusieurs unités à plusieurs centaines d'unités, une valeur typique est de 10 à 40. À cette taille, vous pouvez appliquer l'algorithme de complexité quadratique, l'opération principale - calculer la distance de Hamming - est très rapide.

Nous divisons les images en grappes comme suit:

  1. la première image de l'ensemble forme le premier cluster
  2. chaque image suivante est comparée à la première image de chaque cluster
  3. si le coefficient de similitude le plus élevé est supérieur à la valeur seuil, ajoutez l'image au cluster existant
  4. sinon nous créons un nouveau cluster à partir d'une image

Après cela, nous prenons l'image de la plus haute qualité de chaque cluster. En première approximation, la qualité est déterminée par la taille et la résolution de l'image. Plus la taille et la résolution sont grandes, mieux c'est, mais le rapport taille / résolution doit être dans des limites raisonnables. Une telle analyse suffit en pratique.

De plus, il y a encore une nuance. Nous avons trouvé automatiquement les photos des marchandises, mais, jusqu'à présent, la personne est plus importante. Et si une personne décide de changer la séquence d'images, elle devrait avoir une telle opportunité. Mais en même temps, nous n'aimons pas l'idée de "geler" la carte après une édition manuelle, nous voulons améliorer les algorithmes, trouver de nouvelles images et améliorer automatiquement la carte à l'avenir.

Dans cette optique, cette approche s'est avérée être une option de travail: toutes les images qui ont été modifiées manuellement (et un changement ici signifie l'ensemble d'actions le plus large possible: confirmation, exclusion, modification de l'ordre) resteront toujours en place. Toutes les autres images que nous pouvons changer à l'avenir en mode automatique.

Comment remplir une fiche produit avec des propriétés


Avec les propriétés, les choses sont un peu plus compliquées qu'avec les images. Dans différentes sources, la même propriété peut être appelée différemment, peut être exprimée dans différentes unités, ne pas avoir de correspondance explicite (par exemple, HDMI: oui et Interfaces: HDMI, USB).

Nous avons commencé par définir les propriétés et avons proposé les types suivants:

  • et bien non
  • nombre + unité
  • choix unique
  • choix multiple
  • ligne

De plus, j'utiliserai les termes « dimension » et « unité de mesure », ils ont des significations différentes.

Ils ont ensuite décrit les unités de mesure et comment les convertir. À l'heure actuelle, il y en a déjà plus d'une centaine, des mètres aux décibels. Tous sont divisés en groupes selon la dimension, et au sein du groupe peuvent être amenés les uns aux autres. Par exemple, la puissance en chevaux peut être convertie en watts et les lumens en newton mètres - c'est impossible.

Ensuite, nous avons essayé de briser le processus de remplissage des propriétés en étapes indépendantes afin que chaque étape puisse être améliorée et testée séparément des autres. Pour chaque produit du catalogue, nous effectuons les opérations suivantes:

  1. nous comparons les marchandises aux marchandises provenant de sources par leur nom (nous avons un processus complexe, il est décrit en détail dans un article précédent )
  2. former une liste de définitions de propriétés à remplir
  3. nous formons une liste de propriétés de tous les produits associés
  4. nous associons à chaque définition de l'article 2 une liste de valeurs de l'article 3
  5. convertir la liste en une seule valeur

Prenons les deux derniers points plus en détail à titre d'exemple. Supposons que nous ayons une définition de propriété comme celle-ci:
Nom: «Power»
Type: Numéro (6, 0)
Unité: Watt
et une telle liste de valeurs (en fait, elle est beaucoup plus grande):
Longueur (mm): 220
Longueur: 0,22 m
Puissance (kW): 1,8
Puissance: 1,8 kW
Puissance nominale: 1800 W
Puissance: 2 kW
Puissance: 1800
Pour commencer, nous devons comprendre quelles valeurs méritent d'être prises en compte en principe. Une version fonctionnelle mais non finale ressemble à ceci:

  • ( )
  • ( )
  • .

Nous avons ces points implémentés en tant qu'algorithmes indépendants pour chaque cas, afin que chacun puisse être amélioré séparément des autres. Dans le paragraphe avec les synonymes, nous avons entré manuellement certaines des paires les plus évidentes et reportés à des temps meilleurs. De plus, nous essaierons peut-être de sélectionner automatiquement les synonymes, en utilisant les données des propriétés remplies. De plus, nous ne pouvons prendre qu'une seule valeur d'une même source, donc chacun des algorithmes a une priorité, il détermine l'ordre d'exécution des algorithmes.

Après cette opération, nous aurons l'ensemble de valeurs suivant:
Puissance (kW): 1,8
Puissance: 1,8 kW
Puissance nominale: 1800 W
Puissance: 2 kW
Puissance: 1800
Nous savons que cet ensemble doit être réduit à un certain nombre d'une certaine dimension. Pour chaque type, nous avons un algorithme indépendant. Dans le cas du nombre et de l'unité de mesure, nous procédons comme suit:

pour chaque valeur, nous essayons de déterminer l'unité de mesure. Si cela échoue ou si sa dimension ne coïncide pas avec la dimension de la propriété, ignorez cette valeur à l'avenir. Nous aurons l'ensemble de valeurs suivant:
Puissance (kW): 1,8
Puissance: 1,8 kW
Puissance nominale: 1800 W
Puissance: 2 kW
Nous essayons de convertir chacune des valeurs en un nombre et de l'amener à l'unité de mesure souhaitée. Ici, nous essayons de prendre en compte tous les formats possibles: avec une virgule et un point pour séparer les parties entières et fractionnaires, avec des virgules et des espaces pour séparer les milliers, des abréviations comme des milliers et ainsi de suite. Il s'avère ce qui suit:
1800 W
1800 W
1800 W
2000 W
Cet ensemble doit être réduit à une seule valeur. Dans le cas d'une valeur unique dans l'ensemble, utilisez-la. Si les valeurs sont supérieures à un et qu'elles coïncident, c'est encore mieux. Si les valeurs sont supérieures à un et qu'elles ne coïncident pas, nous prenons la plus courante. Si ce n'est pas le cas, ne remplissez pas la propriété automatiquement.

C'était un exemple pour une propriété de type numérique, pour les autres types les dernières étapes sont différentes et prennent en compte leurs fonctionnalités.

Quant à l'édition manuelle, nous traitons les propriétés exactement de la même manière qu'avec les images. Tout ce qui a été modifié ou confirmé manuellement ne peut plus changer automatiquement. Tout le reste peut.

Comment testons-nous un projet


Ce projet a une caractéristique remarquable: le cœur est une technologie entièrement constituée de tâches d'optimisation. De plus, la plupart de ces tâches n'ont pas de solution exacte, et pour elles, nous avons élaboré nos propres critères qui tiennent compte de la vitesse et de la précision. C'est là que les tests sont vraiment nécessaires.

L'architecture du projet est conçue de telle manière que les algorithmes complexes, dans la mesure du possible, sont divisés en étapes simples. Pour chaque étape, il existe un critère d'optimisation et un ensemble de tests. Accent sur la précision, mais aussi sur la vitesse. À tout le moins, nous nous occupions de chaque changement. Chacune de ces étapes ressemble à la tâche de la programmation sportive, et nous avons la possibilité de comparer les résultats après chaque changement.

résultats


Il sera possible d'évaluer plus précisément les résultats après quelques mois de travail en production. Moins d'une semaine s'est écoulée. Pendant ce temps, nous avons pu ajouter au site environ 110 000 produits qui n'étaient pas vendus auparavant par manque de propriétés ou d'images.
L'objectif pour l'avenir est d'abandonner complètement le travail manuel pour remplir le catalogue. Dans un premier temps, un bon résultat serait de réduire son volume de 70%. Je pense que grâce aux résultats de plusieurs mois, nous y parviendrons.

All Articles