In primo luogo, prima di iniziare, ti consiglio di fare riferimento a domande simili sulla rete come /datascience/25053/best-practical-algorithm-for-sentence-similarity e https: // stackoverflow. com / domande / 62328 / è-ci-un-algoritmo che-dice-il-semantico-similarità-di-due-frasi
Per determinare la somiglianza delle frasi dobbiamo considerare che tipo di dati abbiamo. Ad esempio, se si disponesse di un set di dati etichettato, ad esempio frasi simili e frasi diverse, un approccio semplice potrebbe essere stato quello di utilizzare un algoritmo supervisionato per classificare le frasi.
Un approccio che potrebbe determinare la somiglianza strutturale della frase sarebbe quello di calcolare la media dei vettori di parole generati dagli algoritmi di incorporamento delle parole, ovvero word2vec. Questi algoritmi creano un vettore per ogni parola e la somiglianza del coseno tra loro rappresenta la somiglianza semantica tra le parole. (Daniel L 2017)
Usando i vettori di parole possiamo usare le seguenti metriche per determinare la somiglianza delle parole.
- Distanza del coseno tra gli incastri delle parole
- Distanza euclidea tra gli incastri delle parole
La somiglianza del coseno è una misura della somiglianza tra due vettori diversi da zero di uno spazio interno del prodotto che misura il coseno dell'angolo tra di essi. L'angolo del coseno è la misura della sovrapposizione tra le frasi in termini di contenuto.
La distanza euclidea tra due vettori di parole fornisce un metodo efficace per misurare la somiglianza linguistica o semantica delle parole corrispondenti. (Frank D 2015)
In alternativa, è possibile calcolare l'autovettore delle frasi per determinare la somiglianza delle frasi.
Gli autovettori sono un insieme speciale di vettori associati a un sistema lineare di equazioni (cioè equazione di matrice). Qui viene generata una matrice di somiglianza di frase per ciascun cluster e viene calcolato l'autovettore per la matrice. Puoi leggere di più sull'approccio basato sull'autovettore alla classifica delle frasi su questo documento https://pdfs.semanticscholar.org/ca73/bbc99be157074d8aad17ca8535e2cd956815.pdf
Per il codice sorgente Siraj Rawal ha un notebook Python per creare un insieme di vettori di parole. I vettori di parole possono quindi essere utilizzati per trovare la somiglianza tra le parole. Il codice sorgente è disponibile qui https://github.com/llSourcell/word_vectors_game_of_thrones-LIVE
Un'altra opzione è un tutorial di Oreily che utilizza la libreria gensin Python per determinare la somiglianza tra i documenti. Questo tutorial usa NLTK per tokenizzare quindi crea un modello tf-idf (termine frequenza-documento inverso) dal corpus. Il tf-idf viene quindi utilizzato per determinare la somiglianza dei documenti. Il tutorial è disponibile qui https://www.oreilly.com/learning/how-do-i-compare-document-similarity-using-python