Come costruire una ricerca semantica per un determinato dominio


19

C'è un problema che stiamo cercando di risolvere dove vogliamo fare una ricerca semantica sul nostro set di dati, ovvero abbiamo un dato specifico del dominio (esempio: frasi che parlano di automobili)

I nostri dati sono solo un mucchio di frasi e ciò che vogliamo è dare una frase e recuperare le frasi che sono:

  1. Simile a quella frase
  2. Ha una parte di una frase simile alla frase
  3. Una frase che ha significati contestualmente simili


Lasciami provare a darti un esempio supponiamo che io cerchi la frase "Buying Experience", dovrei ottenere frasi come:

  • Non avrei mai pensato che l'acquisto di auto potesse richiedere meno di 30 minuti per firmare e acquistare.
  • Ho trovato un'auto che mi piaceva e il processo di acquisto è stato
    semplice e immediato

  • Odio assolutamente fare shopping in auto, ma oggi sono contento di averlo fatto


Voglio porre l'accento sul fatto che stiamo cercando una somiglianza contestuale e non solo una ricerca di parole con forza bruta.

Se la frase usa parole diverse, allora dovrebbe anche essere in grado di trovarla.

Cose che abbiamo già provato:

  1. Apri ricerca semantica il problema che abbiamo affrontato qui è generare ontologia dai dati che abbiamo, o per quel motivo cercare ontologia disponibile da diversi domini di nostro interesse.

  2. Ricerca elastica (BM25 + Vectors (tf-idf)), abbiamo provato questo in cui ha dato alcune frasi ma la precisione non era eccezionale. Anche l'accuratezza era cattiva. Abbiamo provato contro un set di dati a cura dell'uomo, è stato in grado di ottenere solo il 10% delle frasi.

  3. Abbiamo provato diversi incorporamenti come quello menzionato una volta nei trasformatori di frasi e abbiamo anche esaminato l' esempio e provato a valutare il nostro set curato dall'uomo e che aveva anche una precisione molto bassa.

  4. Abbiamo provato ELMO . Questa era un'accuratezza migliore ma ancora inferiore a quanto ci aspettassimo e c'è un carico cognitivo per decidere il valore del coseno al di sotto del quale non dovremmo considerare le frasi. Questo vale anche per il punto 3.

Qualsiasi aiuto sarà apprezzato. Grazie mille per l'aiuto in anticipo


Domanda ben scritta: puoi aggiungere altri 5 esempi di termini di ricerca? Sono sempre frasi da una a tre parole o i termini di ricerca possono essere più lunghi? Sei sulla buona strada
Adnan S

Ciao Adnan, il termine di ricerca sarà sempre composto da una o tre parole. Es .: esperienza di acquisto, comfort di guida, sistema di infotainment, interni, chilometraggio, prestazioni, comfort di seduta, comportamento del personale.
Jickson,

Questo articolo potrebbe essere interessante per il tuo caso: elastic.co/blog/… (suggerimento: leva di word2vec)
Val

@Val Questo è davvero interessante che stavo per menzionare lo stesso articolo che hai menzionato e poi ho visto il tuo commento. Penso che questo metodo ti avvicinerà a ciò che vuoi.
nima,

potresti voler esaminare la somiglianza del coseno. Come spiegato di seguito, comporta la conversione delle stringhe in vettori che possono essere rappresentati nello spazio 2D. Viene calcolato l'angolo del coseno di quei 2 vettori. Questo angolo rappresenta la "somiglianza" tra le 2 stringhe. Ecco un bell'articolo su medium.com/swlh/playing-with-word-vectors-308ab2faa519
sagar1025

Risposte:


5

Consiglio vivamente di guardare la lezione di Trey Grainger su come costruire un sistema di ricerca semantica => https://www.youtube.com/watch?v=4fMZnunTRF8 . Parla dell'anatomia di un sistema di ricerca semantica e ciascuno dei pezzi usato per adattarsi insieme per offrire una soluzione finale.

Un ottimo esempio della somiglianza contestuale è il motore di ricerca di Bing: inserisci qui la descrizione dell'immagine

La query originale aveva i termini {soda in scatola} e i risultati della ricerca di bing possono riferirsi a {soda dietetica in scatola}, {bevande analcoliche}, {pop a temperatura ambiente non aperta} o {bevande gassate}. Come ha fatto Bing a fare questo ?:

Bene, le parole che hanno significati simili ottengono vettori simili e quindi questi vettori possono essere proiettati su un grafico bidimensionale per essere facilmente visualizzati. Questi vettori vengono addestrati garantendo che parole con significati simili siano fisicamente vicine l'una all'altra. È possibile addestrare il proprio modello basato su vettori allenando il modello GloVeinserisci qui la descrizione dell'immagine

Più vicine sono le distanze dei vettori, meglio è. Ora puoi cercare le query del vicino più vicino in base alla distanza dei loro vettori. Ad esempio, per la query {come impedire agli animali di distruggere il mio giardino}, il vicino più vicino fornisce questi risultati:

inserisci qui la descrizione dell'immagine

Puoi saperne di più qui. Nel tuo caso puoi trovare una soglia per la distanza massima che un vettore di una frase può essere dalla query di ricerca originale affinché possa essere considerata una frase contestualmente simile.

La somiglianza contestuale può anche essere fatta riducendo la dimensione del vocabolario usando qualcosa come LSI (Latent Semantic Indexing). Per fare questo in Python ti consiglio vivamente di dare un'occhiata alla libreria di genismo per python: https://radimrehurek.com/gensim/about.html .


1

Potresti essere interessato a esaminare Weaviate per aiutarti a risolvere questo problema. È un grafico intelligente basato sulla vettorializzazione di oggetti dati .

Se hai una lingua specifica del dominio (ad es. Abbreviazioni) puoi estendere Weaviate con concetti personalizzati .

Potresti essere in grado di risolvere il tuo problema con le funzionalità di ricerca semantica (ovvero, Explore{}) o le funzionalità di classificazione automatica.

Esplora la funzione

Poiché tutti gli oggetti dati vengono vettorizzati, è possibile eseguire una ricerca semantica come la seguente (questo esempio proviene dai documenti , è possibile provarlo qui utilizzando GraphQL):

{
  Get{
    Things{
      Publication(
        explore: {
          concepts: ["fashion"],
          certainty: 0.7,
          moveAwayFrom: {
            concepts: ["finance"],
            force: 0.45
          },
          moveTo: {
            concepts: ["haute couture"],
            force: 0.85
          }
        }
      ){
        name
      }
    }
  }
}

Se strutturi il tuo schema grafico in base, per esempio, al nome della classe "Frase", una query simile potrebbe assomigliare a questa:

{
  Get{
    Things{
      Sentence(
        # Explore (i.e., semantically) for "Buying Experience"
        explore: {
          concepts: ["Buying Experience"]
        }
        # Result must include the word "car" 
        where: {
          operator: Like
          path: ["content"]
          valueString: "*car*"
        }
      ){
        content
      }
    }
  }
}

Nota:
è anche possibile esplorare il grafico semanticamente nel suo insieme.

Classificazione automatica

Un'alternativa potrebbe essere lavorare con le caratteristiche di classificazione contestuale o KNN .

Nel tuo caso, potresti usare la classe Frase e metterli in relazione con una classe chiamata Esperienza, che avrebbe la proprietà: buying(ci sono ovviamente molte altre configurazioni e strategie tra cui puoi scegliere).

PS:
questo video offre un po 'più contesto se vuoi.


0

Per quanto ne so, non credo che esista alcun modello teorico per la costruzione di un motore di ricerca semantico. Tuttavia, credo che un motore di ricerca semantico dovrebbe essere progettato per soddisfare i requisiti specifici a portata di mano. Detto questo, qualsiasi motore di ricerca semantico in grado di comprendere con successo l'intento dell'utente e il contesto del termine di ricerca, deve lavorare con l'elaborazione del linguaggio naturale (NLP) e l'apprendimento automatico come elementi costitutivi.

Anche se i motori di ricerca funzionano in modo diverso dagli strumenti di ricerca, puoi fare riferimento agli strumenti di ricerca aziendale per avere un'idea di un modello di ricerca semantico che funzioni. Le piattaforme new age come 3RDi Search funzionano secondo i principi della ricerca semantica e hanno dimostrato di essere la soluzione ideale per i dati non strutturati con cui le aziende devono confrontarsi. Molto probabilmente Google sta lavorando a un modello per introdurre la semantica avanzata nei motori di ricerca.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.