2013-11-04 10 views
13

Sto provando a scrivere un semplice programma per confrontare i prezzi dei prodotti di diversi fornitori. Diversi fornitori possono chiamare lo stesso prodotto cose diverse.Confronto e abbinamento dei nomi dei prodotti di diversi negozi/fornitori

Ad esempio, le seguenti tre corde si riferiscono allo stesso prodotto:

  • A2 Full Cream Milk Bottle 2l
  • A2 latte intero 2L
  • A2 latte intero 2L

O le seguenti due stringhe sono lo stesso prodotto:

  • Ambi Pur Air Freshener Car Voyage 8mL. Fragranza fresca di fiori di vaniglia. - 1 ogni
  • Ambi Pur Deodorante Viaggio 8ml primaria

Inoltre - alcuni prodotti non sono le stesse, ma sono simili (per esempio, Crema completa 2L latte può comprendere vari prodotti simili.)

Le uniche informazioni che ho su ciascun prodotto sono il titolo e un prezzo.

Quali sono le tecniche attualmente consigliate per la corrispondenza di stringhe di prodotto come questa?

Dal mio Googling e leggendo altri thread SO, ho trovato:

  • Qualcuno consiglia di utilizzare tecniche di filtraggio bayesiano.
  • Alcuni consigliano di eseguire l'estrazione di funzioni su tutte le stringhe di prodotti. Quindi puoi estrarre cose come marchi (ad esempio "A2"), Prodotto ("Latte") e capacità ("2L") dai prodotti, quindi creare vettori di distanza tra prodotti e utilizzare qualcosa come un classificatore binario per abbinare i prodotti (SVM è stato menzionato). Tuttavia, non sono sicuro di come ottenere questo risultato senza un sacco di regole o regex? Suppongo che ci siano probabilmente metodi di apprendimento non supervisionati più intelligenti per attaccare questo problema? Il prezzo potrebbe probabilmente essere un'altra "caratteristica" che potremmo usare per calcolare anche il vettore della distanza.
  • Alcune persone consigliavano di utilizzare approcci alla rete neurale, tuttavia, non ero in grado di trovare molto in termini di codice concreto o esempi qui.
  • Altri hanno consigliato l'uso di algoritmi di similarità delle stringhe, come la distanza di Levenshtein o la distanza di Jaro-Winkler.

Utilizzeresti una delle tecniche di cui sopra o utilizzeresti una tecnica diversa?

Inoltre, qualcuno conosce un codice di esempio o anche librerie per questo tipo di problema? Non riesco a trovare nessuno.

(Per esempio, ho visto che alcune persone avevano problemi di prestazioni nel calcolare la distanza di Jaro-Winkler per grandi set di dati. Speravo che potesse esserci un'implementazione distribuita dell'algoritmo (ad esempio con Mahout), ma non era Non è possibile trovare nulla di concreto.)

+0

Quanti prodotti diversi (stima parco giochi) dovrai gestire? – Blacksad

+0

È un supermercato, quindi un numero piuttosto elevato di articoli - stimerei in decine di migliaia? – victorhooi

+0

Beh, tutti i suggerimenti sono buoni, ma controllati. E l'apprendimento supervisionato su decine di migliaia di classi sarà un inferno ... Non riesco a pensare ad alcun approccio senza supervisione. – Blacksad

risposta

5

Utilizzeresti una delle tecniche di cui sopra o utilizzeresti una tecnica diversa?

Se stessimo facendo questo per davvero, non userei molto l'apprendimento automatico. Sono sicuro che la maggior parte delle grandi aziende ha un database di nomi di marca e di prodotto e lo usa per abbinare le cose abbastanza facilmente. Alcuni servizi igienico-sanitari potrebbero essere necessari - ma non è un problema di tipo ML.

Se non si dispone di quel database, direi semplice. Converti tutto in un feature-vector e fai la ricerca del vicino più vicino. Usalo per creare uno strumento che ti aiuti a creare un database. IE: contrassegni tu stesso il primo "A2 Whole Milk 2L" come "latte" e poi vedi se i suoi vicini più prossimi sono il latte. Datti un modo per contrassegnare rapidamente "sì" e "ha bisogno di revisione", o qualche simile opzione simile.

Per dati semplici come suggerito, dove funzionerà il 90% delle volte, dovresti essere in grado di ottenere facilmente i dati. Ho fatto in modo simile a etichettare diverse migliaia di documenti in un giorno.

Una volta che hai il tuo database, risolverli dovrebbe essere piuttosto semplice. È possibile riutilizzare il codice per creare il database per gestire i dati "invisibili".

Problemi correlati