Architect Solution per generare set di frasi predefinite da un ampio elenco di frasi specifiche

3

Abbiamo un ampio set di coppie chiave-valore esistenti (ad esempio specifiche del prodotto). Un esempio inventato potrebbe essere:

Prod 1, LOGO, The standard 1990 Audi logo is located in the center of the grille.
Prod 2, LOGO, The standard 2010 Volkswagen logo is located in the upper right corner of the trunk
Prod 3, LOGO, The standard 2005 Porche logo is located in the center of the hood, near the front. 
Prod 4, ENGINE, The 2016 Volvo comes standard with a 2.8 litre v6 engine.
Prod 1, ENGINE, The 2016 Audi comes standard with a 1.8 litre v6 engine.
Prod 1, OTHER, blah blah this is a one-off spec that isn't found nearly as commonly as the others.

Quindi ci sarebbero molte migliaia di queste, tutte le diverse specifiche (non solo LOGO ), ecc., ma puoi vedere che per la voce di elenco di esempio, ci sono parti comuni trovate nella stringa "valore".

Alcune delle specifiche, ad es. LOGO e ENGINE verrebbero trovati per quasi tutti i prodotti e la verbosità di ognuno di questi è generalmente coerente. Altri come OTHER sarebbero rari.

Sto cercando di progettare un processo che:

  1. esamina l'elenco esistente di coppie chiave-valore (ad esempio specifiche del prodotto)
  2. trova i verbali più comuni per ogni specifica in base alla stringa di valori con le parti variabili mascherate ...

Il risultato (basato sull'esempio impostato sopra) assomiglia a qualcosa di simile:

LOGO, The standard _____ logo is located in the _____ of the _____. (occurs 3 times in the list above)
ENGINE, The _____ comes standard with a _____ engine. (occurs 3 times)
OTHER, blah blah this is a one-off spec that isn't found nearly as commonly as the others.  (this one wouldn't have any words replaced with blanks since it only occurs once or just a few times (occurs 1 time)

Non ci sono maschere di valore di default esistenti ora, quindi non c'è nulla che possa usare per sapere quali parole / posizioni hanno valori variabili (come marca, modello, tipo di motore, ecc. dell'esempio).

Quale approccio o logica posso applicare al set esistente di valori di specifiche per trovare le parti comuni del fraseggio per ogni specifica?

L'obiettivo finale è quello di ricavare un insieme di frasi predefinite comuni per ogni "chiave" specifica in base alle migliaia di voci che già esistono E.G. alla fine dovrei avere una lista che mi mostrerebbe che "il modello di verbiage più comune per LOGO è The standard _____ logo is located in the _____ of the _____. " ecc.

Altre utili informazioni:

  • Le prestazioni non sono un problema
  • Questa sarebbe una procedura unica
  • Sarebbe eseguito su una macchina dedicata senza preoccuparsi di utilizzare troppa memoria altre risorse ecc.

Spero di averlo spiegato abbastanza bene. Fammi sapere se ha bisogno di maggiori dettagli.

    
posta GWR 21.03.2018 - 13:53
fonte

1 risposta

2

Potrebbero esserci altri migliori algoritmi di corrispondenza dei pattern per questo, ma dove potresti voler iniziare è qualcosa di simile a Algoritmo di distanza di Lensenstein per le stringhe. In questo caso però, sostituiresti i token per i personaggi. Che invece di dire CAT e CUT sono una distanza di 1 perché una lettera è diversa, si potrebbe dire "LOGO, Il logo standard del 1990 Audi" è una distanza di 2 da "LOGO, Il logo standard Volkswagen 2010" perché ci sono due token che sono diversi.

In base ai tuoi esempi, ignorerei anche le modifiche di posizione. Questo dovrebbe semplificare l'implementazione un po 'e darti risultati più chiari.

Una volta creato questo, puoi confrontare tra loro tutte le frasi. Questo potrebbe richiedere un po 'di tempo, ma tu dici che non è un problema. Dovresti quindi trovare raggruppamenti di frasi che sono simili tra loro. Puoi rappresentarlo come un grafico e trovare i cluster.

Quindi all'interno di ciascun cluster, dovresti essere in grado di determinare quali parti delle frasi sono identiche. Questa è la maschera. I parametri poi cadono facilmente da questo.

Una delle complicazioni citate nel commento a questa risposta è che il fraseggio, l'ortografia, la punteggiatura e / o la maiuscola non sono perfettamente coerenti. Un'opzione è usare un algoritmo di distanza standard come Levenshtein o Jaro-Winkler tra i token. Questo rallenterà un po 'di più ma probabilmente non in modo significativo e potrebbe rendere i risultati meno chiari. Dovrai impostare una sorta di soglia su quanto possono essere diversi i token. Ignorare il caso e la punteggiatura semplificherà un po 'le cose.

Potrebbe essere necessario creare anche thesaurus di sinonimi per il processo di abbinamento. Ma penso che probabilmente dovresti usare un approccio che combini un algoritmo come quello qui descritto in combinazione con una rete neurale che puoi trovare tra le tue orecchie. Cioè, quando si esegue questo, si dovrebbe essere in grado di vedere i cluster abbastanza facilmente nei dati. Se li abbassi ad un livello ragionevole dovresti essere in grado di vedere anche che alcuni dei cluster che sono differenti sono realmente equivalenti per scopo e significato. Provare ad automatizzare è probabile che non ne valga la pena per uno sforzo una tantum.

    
risposta data 21.03.2018 - 15:45
fonte

Leggi altre domande sui tag