Wie wir anfingen, Produktkarten automatisch zu erstellen

Bild

In meinem letzten Artikel habe ich darüber gesprochen, wie wir gelernt haben, Produkte automatisch nach Produktnamen abzugleichen, das heißt zum Beispiel zu verstehen
Headset A4Tech Bloody G501 schwarz
und
A4 G501, schwarz (rot) {Kopfhörer mit Mikrofon, 2,2 m}

- Es ist das Gleiche. Dies ermöglichte es, alles in Bezug auf Preise und Verfügbarkeit zu automatisieren. In diesem Artikel werde ich Ihnen erzählen, wie wir weiter gegangen sind und die Arbeit mit den Merkmalen und Bildern von Waren automatisiert haben.

Dies ist eine logische Fortsetzung der Produktentwicklung, da die automatische Zuordnung von Waren nach Namen zuverlässig funktioniert. Wir haben das Automatisierungsprojekt einem separaten Unternehmen zugewiesen, und ich spreche am Beispiel eines unserer Kunden über das Projekt und teile einige Daten des Kunden mit seiner Erlaubnis. Als nächstes folgt eine kleine Einführung, und dann werden wir über die von uns verwendeten Algorithmen sprechen.

Wo haben wir angefangen?


Der Ausgangszustand vor einem Jahr war wie folgt: Ein Katalog von 120.000 Waren, von denen 70.000 auf Lager sind. Nachdem der automatische Vergleich und die Erstellung von Waren gestartet wurden (wie im letzten Artikel beschrieben), wuchs der Katalog schnell auf eine Million mit einigen wenigen Waren, von denen 600-650.000 auf Lager waren. Für Einzelhandelskäufe standen jedoch nur 350.000 Stellen zur Verfügung, da der Rest keine Merkmale aufwies. Je nach Kategorie muss ein bestimmter Prozentsatz der Merkmale ausgefüllt werden, damit ein Produkt zum Verkauf angeboten wird. In einigen Kategorien muss ein Foto vorhanden sein. Von den 350.000 verkauften Waren hatten 120.000 keine Bilder. Ich werde erklären, dass Waren, die auf Lager sind, aber nicht im Einzelhandel verkauft werden, im Großhandel verkauft werden können. Es ist üblich, dort Excel-Dateien mit Namen und Preisen zu senden. Aber das B2B-Portal mit Karten ist zweifellos ein Plus.Sie können auch auf Aggregatoren platziert werden, wo bereits detailliertere Informationen zum Produkt vorhanden sind.

Bilder und Spezifikationen wurden im halbautomatischen Modus ausgefüllt. In diesem Jahr erschienen andere Kunden, und jetzt weiß ich, wie der Prozess in ein Dutzend oder zwei relativ großen Läden aufgebaut wurde. Er ist mehr oder weniger Standard. Der Programmierer, der die Site von Zeit zu Zeit verwaltet, schreibt Site-Parser zum Thema des Geschäfts. Darüber hinaus vergleicht die Inhaltsabteilung im Admin-Bereich die verbrauchten Waren und Produkte aus dem Katalog sowie die Kategorien in der Quelle und die Kategorien im Katalog. Dann werden in jeder Kategorie für jede Eigenschaft Korrespondenz, Ersetzungen und Einheitenumrechnung konfiguriert. Karten einiger Waren werden vollständig manuell ausgefüllt. Ein kleiner Teil der Ware wird an einen externen Auftragnehmer übergeben. So war es auch bei unserem Kunden.

Etwa 6% des Katalogs sind pro Monat veraltet, dh um 500.000 Produkte auf einer Website zu verkaufen, müssen Sie 30.000 Karten pro Monat erstellen, um die Menge auf dem gleichen Niveau zu halten.

Wir haben uns entschlossen, das Problem so systematisch wie möglich anzugehen und den Prozess der Erstellung von Produktkarten so weit wie möglich zu automatisieren.

Woher bekommen wir die Daten?


Die erste Frage, die sich stellt, ist, woher die Quelldaten stammen und wie viel wir bekommen können. Wir haben zwei Hauptquellen:

  • Herstellerdateien und APIs
  • die Daten, die wir im Internet gefunden haben

Der zweite Punkt betrifft das Parsen von Sites. Wir haben eine Infrastruktur zum Erstellen von Parsern erstellt, mit der Sie die Site-Analyse in etwa einer halben Stunde konfigurieren können. Dann wurden ungefähr hundert Parser auf dieser Infrastruktur erstellt. Derzeit haben sie bereits Informationen über 16 Millionen Produkte gesammelt und 35 Millionen Bilder und Dokumente (Anweisungen, Datenblatt) heruntergeladen und auf CDN hochgeladen. Als CDN verwenden wir ein Bunny CDN. Beim Speichern von Bildern berücksichtigen wir deren Wahrnehmungs-Hashes, damit wir später schnell Duplikate finden können. Wir werden weiter unten mehr darüber sprechen. Idealerweise, wenn der Parser selbst ohne Hinweise und Einstellungen Informationen zu Produkten auf jeder Website sammeln kann, dies jedoch weit entfernte Pläne sind.

Wie füllen wir die Produktkarte mit Bildern?


Dies ist der einfachste und offensichtlichste Teil. Wir haben bereits einen Mechanismus zum Abgleichen von Produkten nach Namen, der schnell und genau funktioniert. In diesem Fall sind wir an falsch positiven Antworten interessiert, die etwa 0,1% betragen. Falsch negativ wirkt sich praktisch nicht auf das Ergebnis aus, da es keinen großen Unterschied gibt, wir arbeiten am Ende mit 10 oder 11 Quellen. Der Vergleich erfolgt mit einer Geschwindigkeit von 5-6.000 Produkten pro Sekunde, und alle unsere 15 Millionen Produkte werden in weniger als einer Stunde mit jedem Katalog abgeglichen. Darauf könnte man schließen, da wir nach dem Vergleich alle Bilder der Ware kennen. In der Praxis werden sie jedoch auf verschiedenen Websites in unterschiedlichen Kombinationen dupliziert. Es ist richtig, aus einer Reihe ähnlicher Bilder die beste Qualität auszuwählen und den Rest als Optionen für die spätere manuelle Bearbeitung der Produktkarte zu belassen.

Die Identifizierung ähnlicher Bilder erfolgt in zwei Schritten. In der ersten Phase, wenn wir eine Datei herunterladen, betrachten wir für jedes unserer Bilder einen Wahrnehmungs-Hash. Entfernen Sie zuerst den festen Hintergrund und schneiden Sie die Felder zu. Wenden Sie dann DCT-Hashing auf das resultierende Bild an. Über diesen Algorithmus gab es einmal einen Artikel über Habré .

Nach dem Abgleich für jedes Produkt haben wir eine Reihe von Bildern mit bereits berechneten Hashes. Wir müssen diese in Cluster unterteilen und dann aus jedem Cluster das Bild mit der höchsten Qualität auswählen. Die Größe eines solchen Satzes kann von mehreren Einheiten bis zu mehreren hundert Einheiten variieren, ein typischer Wert liegt zwischen 10 und 40. Bei dieser Größe können Sie den quadratischen Komplexitätsalgorithmus anwenden. Die Hauptoperation - die Berechnung der Hamming-Distanz - ist sehr schnell.

Wir teilen die Bilder wie folgt in Cluster ein:

  1. Das erste Bild aus dem Satz bildet den ersten Cluster
  2. Jedes nächste Bild wird mit dem ersten Bild aus jedem Cluster verglichen
  3. Wenn der höchste Ähnlichkeitskoeffizient größer als der Schwellenwert ist, fügen Sie das Bild dem vorhandenen Cluster hinzu
  4. Andernfalls erstellen wir einen neuen Cluster aus einem Bild

Danach nehmen wir von jedem Cluster das Bild mit der höchsten Qualität. In erster Näherung wird die Qualität durch die Größe und Auflösung des Bildes bestimmt. Je größer die Größe und Auflösung, desto besser, aber das Verhältnis von Größe zu Auflösung sollte innerhalb angemessener Grenzen liegen. Eine solche Analyse reicht in der Praxis aus.

Weiter gibt es noch eine Nuance. Wir haben die Bilder für die Ware automatisch gefunden, aber bisher ist die Person wichtiger. Und wenn eine Person beschließt, die Reihenfolge der Bilder zu ändern, sollte sie eine solche Gelegenheit haben. Gleichzeitig gefällt uns die Idee, die Karte nach der manuellen Bearbeitung einzufrieren, nicht. Wir möchten die Algorithmen verbessern, neue Bilder finden und die Karte in Zukunft automatisch verbessern.

Vor diesem Hintergrund hat sich der folgende Ansatz als funktionierende Option herausgestellt: Alle Bilder, die manuell geändert wurden (und eine Änderung hier bedeutet die größtmögliche Anzahl von Aktionen: Bestätigung, Ausschluss, Änderung der Reihenfolge), bleiben immer bestehen. Alle anderen Bilder können wir in Zukunft im Automatikmodus ändern.

Wie füllen wir eine Produktkarte mit Eigenschaften aus?


Bei Eigenschaften sind die Dinge etwas komplizierter als bei Bildern. In verschiedenen Quellen kann dieselbe Eigenschaft unterschiedlich aufgerufen werden, in verschiedenen Einheiten ausgedrückt werden und möglicherweise keine explizite Entsprechung aufweisen (z. B. HDMI: Ja und Schnittstellen: HDMI, USB).

Wir haben zunächst Eigenschaften definiert und uns folgende Typen ausgedacht:

  • Ja Nein
  • Nummer + Einheit
  • Single Choice
  • Mehrfachauswahl
  • Linie

Weiterhin werde ich die Begriffe " Dimension " und " Maßeinheit " verwenden, sie haben unterschiedliche Bedeutungen.

Dann beschrieben sie die Maßeinheiten und wie man sie umrechnet. Im Moment gibt es bereits mehr als hundert, von Metern bis Dezibel. Alle von ihnen sind je nach Dimension in Gruppen unterteilt und können innerhalb der Gruppe zueinander gebracht werden. Zum Beispiel kann Pferdestärke in Watt und Lumen in Newtonmeter umgerechnet werden - das ist unmöglich.

Als nächstes haben wir versucht, den Prozess des Füllens der Eigenschaften in unabhängige Schritte zu unterteilen, damit jeder Schritt verbessert und getrennt von den anderen getestet werden kann. Für jedes Produkt aus dem Katalog führen wir die folgenden Vorgänge aus:

  1. Wir vergleichen Waren mit Waren aus Quellen nach Namen (wir haben einen komplexen Prozess, der in einem früheren Artikel ausführlich beschrieben wurde ).
  2. eine Liste der auszufüllenden Eigenschaftsdefinitionen bilden
  3. Wir bilden eine Liste der Eigenschaften aller verwandten Produkte
  4. Wir verknüpfen mit jeder Definition aus Abschnitt 2 eine Liste von Werten aus Abschnitt 3
  5. Konvertieren Sie die Liste in einen einzelnen Wert

Betrachten wir die letzten beiden Punkte als Beispiel genauer. Angenommen, wir haben eine Eigenschaftsdefinition wie diese:
Name: "Leistung"
Typ: Nummer (6, 0)
Einheit: Watt
und eine solche Liste von Werten (tatsächlich ist sie viel größer):
Länge (mm): 220
Länge: 0,22 m
Leistung (kW): 1,8
Leistung: 1,8 kW Nennleistung
: 1800 W
Leistung: 2 kW
Leistung: 1800
Zunächst müssen wir verstehen, welche Werte im Prinzip zu berücksichtigen sind. Eine funktionierende, aber nicht endgültige Version sieht folgendermaßen aus:

  • ( )
  • ( )
  • .

Wir haben diese Punkte als unabhängige Algorithmen für jeden Fall implementiert, sodass jeder separat von den anderen verbessert werden kann. In dem Absatz mit Synonymen haben wir einige der offensichtlichsten Paare manuell eingegeben und auf bessere Zeiten verschoben. Außerdem werden wir möglicherweise versuchen, Synonyme automatisch auszuwählen, indem wir Daten aus den gefüllten Eigenschaften verwenden. Außerdem können wir nur einen Wert aus einer Quelle entnehmen, sodass jeder der Algorithmen eine Priorität hat und die Reihenfolge der Ausführung der Algorithmen bestimmt.

Nach dieser Operation haben wir die folgenden Werte:
Leistung (kW): 1,8
Leistung: 1,8 kW Nennleistung
: 1800 W
Leistung: 2 kW
Leistung: 1800
Wir wissen, dass diese Menge auf eine bestimmte Dimension reduziert werden muss. Für jeden Typ haben wir einen unabhängigen Algorithmus. Bei Anzahl und Maßeinheit gehen wir wie folgt vor:

Für jeden Wert versuchen wir, die Maßeinheit zu bestimmen. Wenn dies fehlgeschlagen ist oder seine Dimension nicht mit der Dimension der Eigenschaft übereinstimmt, ignorieren Sie diesen Wert in Zukunft. Wir werden die folgenden Werte haben:
Leistung (kW): 1,8
Leistung: 1,8 kW Nennleistung
: 1800 W
Leistung: 2 kW
Wir versuchen, jeden der Werte in eine Zahl umzuwandeln und auf die gewünschte Maßeinheit zu bringen. Hier versuchen wir, alle möglichen Formate zu berücksichtigen: mit einem Komma und einem Punkt, um die ganzzahligen und gebrochenen Teile zu trennen, mit Kommas und Leerzeichen, um die Tausenden zu trennen, Abkürzungen wie Tausende und so weiter. Es stellt sich Folgendes heraus:
1800 W
1800 W
1800 W
2000 W.
Dieser Satz muss auf einen einzigen Wert reduziert werden. Verwenden Sie einen einzelnen Wert in der Menge. Wenn die Werte mehr als eins sind und sie übereinstimmen, dann noch besser. Wenn die Werte mehr als eins sind und sie nicht übereinstimmen, nehmen wir den häufigsten. Ist dies nicht der Fall, füllen Sie die Eigenschaft nicht automatisch aus.

Dies war ein Beispiel für eine Eigenschaft eines numerischen Typs. Bei anderen Typen sind die letzten Schritte unterschiedlich und berücksichtigen deren Merkmale.

Bei der manuellen Bearbeitung werden Eigenschaften genauso behandelt wie bei Bildern. Alles, was manuell geändert oder bestätigt wurde, kann nicht mehr automatisch geändert werden. Alles andere kann.

Wie testen wir ein Projekt?


Dieses Projekt hat eine bemerkenswerte Eigenschaft: Der Kern ist eine Technologie, die ausschließlich aus Optimierungsaufgaben besteht. Darüber hinaus haben die meisten dieser Aufgaben keine genaue Lösung, und für sie haben wir unsere eigenen Kriterien entwickelt, die Geschwindigkeit und Genauigkeit berücksichtigen. Hier werden die Tests wirklich benötigt.

Die Architektur des Projekts ist so konzipiert, dass komplexe Algorithmen so weit wie möglich in einfache Schritte unterteilt werden. Für jeden Schritt gibt es ein Optimierungskriterium und eine Reihe von Tests. Schwerpunkt auf Genauigkeit, aber auch Geschwindigkeit. Zumindest haben wir uns um jede Veränderung gekümmert. Jeder dieser Schritte ähnelt der Aufgabe der Sportprogrammierung, und wir haben die Möglichkeit, die Ergebnisse nach jeder Änderung zu vergleichen.

Ergebnisse


Nach einigen Monaten Arbeit in der Produktion können die Ergebnisse genauer ausgewertet werden. Inzwischen ist weniger als eine Woche vergangen. In dieser Zeit konnten wir der Website etwa 110.000 Produkte hinzufügen, die zuvor aufgrund fehlender Eigenschaften oder Bilder nicht verkauft wurden.
Das Ziel für die Zukunft ist es, die manuelle Arbeit zum Füllen des Katalogs vollständig aufzugeben. In der ersten Phase wäre es ein gutes Ergebnis, das Volumen um 70% zu reduzieren. Ich denke, dass wir dies durch die Ergebnisse mehrerer Monate erreichen werden.

All Articles