Domanda

ingresso:frase 1, frase 2

produzione:valore di somiglianza semantica (tra 0 e 1), ovvero la probabilità che queste due frasi parlino della stessa cosa

È stato utile?

Soluzione


Potresti voler dare un'occhiata a questo documento:

Somiglianza delle frasi basata su reti semantiche e statistiche sui corpus (PDF)

Ho implementato l'algoritmo descritto.Il nostro contesto era molto generale (in pratica due frasi inglesi qualsiasi) e abbiamo scoperto che l'approccio adottato era troppo lento e i risultati, sebbene promettenti, non abbastanza buoni (o probabilmente lo sarebbero stati senza uno sforzo considerevole e aggiuntivo).

Non fornisci molto contesto, quindi non posso necessariamente consigliarlo, ma leggere il documento potrebbe esserti utile per capire come affrontare il problema.

Saluti,

Opaco.

Altri suggerimenti

C'è una risposta breve e una lunga a questo.

La risposta breve:

Usa il Pacchetto WordNet::Similarità Perl.Se Perl non è la lingua che preferisci, controlla il file Pagina del progetto WordNet a Princeton o cerca su Google una libreria wrapper.

La risposta lunga:

Determinare la somiglianza delle parole è una questione complicata e la ricerca è ancora molto attiva in questo settore.Per calcolare la somiglianza, è necessaria una rappresentazione appropriata di Senso di una parola.Ma quale sarebbe una rappresentazione del significato, ad esempio, di "sedia"?In effetti, cosa È il significato esatto di "sedia"?Se ci pensi a lungo e intensamente, ti distorcerà la mente, diventerai leggermente matto e alla fine intraprenderai una carriera di ricerca in Filosofia o Linguistica Computazionale per trovare la verità™.Sia i filosofi che i linguisti hanno cercato di trovare una risposta letteralmente per migliaia di anni, e non si vede alcuna fine.

Quindi, se sei interessato ad esplorare questo problema un po' più in profondità, ti consiglio vivamente di leggere il Capitolo 20.7 in Elaborazione del parlato e del linguaggio di Jurafsky e Martin, alcuni dei quali sono disponibili tramite libri di Google.Fornisce un'ottima panoramica dello stato dell'arte dei metodi distribuzionali, che utilizzano statistiche di co-occorrenza delle parole per definire una misura della somiglianza delle parole.Tuttavia, non è probabile che troverai librerie che li implementino.

Potresti voler controllare il WordNet progetto presso l'Università di Princeton.Un possibile approccio a questo potrebbe essere quello di far scorrere ciascuna frase attraverso un elenco di parole non significative (per rimuovere parole "comuni" come "a", "a", "il", ecc.) Quindi per ciascuna delle parole rimanenti in ciascuna frase, potresti calcolare la "somiglianza" semantica tra ciascuna delle parole dell'altra frase utilizzando una misura di distanza basata su WordNet.La misura della distanza potrebbe essere qualcosa del tipo:il numero di archi che devi attraversare in WordNet per andare da parola1 a parola2.

Mi dispiace, questo è piuttosto di alto livello.Ovviamente non l'ho mai provato.Solo un pensiero veloce.

Per questo esaminerei l'indicizzazione semantica latente.Credo che tu possa creare qualcosa di simile a un indice di ricerca nello spazio vettoriale ma con termini semanticamente correlati più vicini tra loro, ad es.avendo un angolo più piccolo tra loro.Se imparo di più pubblicherò qui.

Per chiunque sia appena arrivato a questo, suggerirei di dare un'occhiata a SEMILAR - http://www.semanticsimilarity.org/ .Implementano molti dei moderni metodi di ricerca per calcolare la somiglianza di parole e frasi.È scritto in Java.

SEMILAR API viene fornito con vari metodi di somiglianza basati su Wordnet, Latent Semantic Analysis (LSA), Latent Dirichlet Allocation (LDA), BLEU, Meteor, Pointwise Mutual Information (PMI), metodi basati sulle dipendenze, metodi ottimizzati basati sull'assegnazione quadratica, ecc.E i metodi di somiglianza funzionano con granularità diverse: parola per parola, frase per frase o testi più grandi.

Mi dispiace riesumare una domanda vecchia di 6 anni, ma poiché mi sono imbattuto in questo post solo oggi, aggiungerò una risposta nel caso qualcun altro stia cercando qualcosa di simile.

cortical.io ha sviluppato un processo per calcolare la somiglianza semantica di due espressioni e hanno a demo sul loro sito web.Offrono a API gratuita che fornisce l'accesso alla funzionalità, quindi puoi usarlo nella tua applicazione senza dover implementare tu stesso l'algoritmo.

Una soluzione semplice consiste nell'utilizzare il prodotto scalare di vettori di caratteri n-grammi.Ciò è efficace nell'ordinare le modifiche (cosa che molte metriche della distanza di modifica non lo sono) e cattura molti problemi relativi allo stemming.Previene inoltre il problema completo dell'intelligenza artificiale della piena comprensione semantica.

Per calcolare il vettore n-grammi, basta scegliere un valore di n (diciamo, 3) e convertire ogni sequenza di 3 parole nella frase in un vettore.Normalizza il vettore alla lunghezza unitaria, quindi prendi il prodotto scalare di diversi vettori per rilevare la somiglianza.

Questo approccio è stato descritto inJ.Mitchell e M.Lapata, “Composizione nei modelli distribuzionali della semantica”, Scienze cognitive, vol.34, n.8, pagg.1388–1429, novembre2010., DOI 10.1111/j.1551-6709.2010.01106.x

Darei un'occhiata alle tecniche statistiche che prendono in considerazione la probabilità che ogni parola appaia all'interno di una frase.Questo ti permetterà di dare meno importanza a parole popolari come 'e', ​​'o', 'il' e di dare più importanza a parole che compaiono meno regolarmente e che quindi costituiscono un miglior fattore discriminante.Ad esempio, se hai due frasi:

1) L'algoritmo Smith-Waterman fornisce una misura di somiglianza tra due stringhe.2) Abbiamo esaminato l'algoritmo Smith-Waterman e lo abbiamo trovato sufficientemente buono per il nostro progetto.

Il fatto che le due frasi condividano le parole "smith-waterman" e le parole "algoritmi" (che non sono così comuni come "e", "o", ecc.), ti permetterà di dire che le due frasi potrebbero effettivamente parlare dello stesso argomento.

Riassumendo ti consiglio di dare un'occhiata a:1) Misure di similarità delle stringhe;2) Metodi statistici;

Spero che questo ti aiuti.

Tentativo SimService, che fornisce un servizio per calcolare le prime n parole simili e la somiglianza delle frasi.

Ciò richiede che il tuo algoritmo sappia effettivamente di cosa stai parlando.Può essere fatto in una forma rudimentale semplicemente confrontando le parole e cercando sinonimi, ecc., Ma qualsiasi tipo di risultato accurato richiederebbe una qualche forma di intelligenza.

Dare un'occhiata a http://mkusner.github.io/publications/WMD.pdf Questo articolo descrive un algoritmo chiamato Distanza Word Mover che tenta di scoprire la somiglianza semantica.Si basa sui punteggi di somiglianza dettati da word2vec.L'integrazione con GoogleNews-vettori-negative300 produce risultati desiderabili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top