web-dev-qa-db-fra.com

Existe-t-il un algorithme qui indique la similitude sémantique de deux phrases

entrée: phrase 1, phrase 2

sortie: valeur de similitude sémantique (entre 0 et 1), ou la probabilité que ces deux phrases parlent de la même chose

62
btw0

Vous voudrez peut-être consulter ce document:

Similitude de phrase basée sur les réseaux sémantiques et les statistiques de corpus (PDF)

J'ai implémenté l'algorithme décrit. Notre contexte était très général (en fait deux phrases anglaises) et nous avons trouvé que l'approche adoptée était trop lente et les résultats, bien que prometteurs, pas assez bons (ou susceptibles de l'être sans effort considérable supplémentaire).

Vous ne donnez pas beaucoup de contexte, je ne peux donc pas nécessairement le recommander, mais la lecture du document pourrait vous être utile pour comprendre comment résoudre le problème.

Cordialement,

Mat.

42
Matt Mower

Il y a une réponse courte et longue à cela.

La réponse courte:

Utilisez le package WordNet :: Similarity Perl . Si Perl n'est pas la langue de votre choix, consultez la page du projet WordNet à Princeton, ou google pour une bibliothèque d'encapsuleurs.

La réponse longue:

La détermination de la similitude de Word est un problème compliqué, et la recherche est encore très chaude dans ce domaine. Pour calculer la similitude, vous avez besoin d'une représentation appropriée de la signification d'un mot. Mais quelle serait la représentation de la signification de, disons, "chaise"? En fait, quelle est la signification exacte de "chaise"? Si vous y réfléchissez longuement et longuement, cela vous tordra l'esprit, vous deviendrez un peu fou, et enfin vous lancerez une carrière de chercheur en philosophie ou en linguistique computationnelle pour trouver la vérité ™. Les philosophes et les linguistes ont essayé de trouver une réponse pendant des milliers d'années, et il n'y a pas de fin en vue.

Donc, si vous êtes intéressé à explorer ce problème un peu plus en profondeur, je vous recommande fortement de lire le chapitre 20.7 dans Traitement de la parole et du langage par Jurafsky et Martin, dont certains sont disponibles via Google Livres . Il donne un très bon aperçu de l'état de l'art des méthodes de distribution, qui utilisent les statistiques de co-occurrence de Word pour définir une mesure de la similitude de Word. Cependant, il est peu probable que vous trouviez des bibliothèques les implémentant.

32
nfelger

Vous voudrez peut-être vérifier le projet WordNet à l'Université de Princeton. Une approche possible consiste à exécuter d'abord chaque phrase dans une liste de mots vides (pour supprimer les mots "communs" tels que "a", "à", "le", etc.). chaque phrase, vous pouvez calculer la "similitude" sémantique entre chacun des mots de l'autre phrase en utilisant une mesure de distance basée sur WordNet. La mesure de distance pourrait être quelque chose comme: le nombre d'arcs que vous devez traverser dans WordNet pour passer de Word1 à Word2.

Désolé, c'est assez haut niveau. Je n'ai évidemment jamais essayé ça. Juste une petite pensée.

7
Chuck Wooters

Pour tous ceux qui viennent de le faire, je suggère de jeter un œil à SEMILAR - http://www.semanticsimilarity.org/ . Ils mettent en œuvre de nombreuses méthodes de recherche modernes pour calculer la similitude des mots et des phrases. Il est écrit en Java.

L'API SEMILAR est fournie avec diverses méthodes de similitude basées sur Wordnet, Latent Semantic Analysis (LSA), Latent Dirichlet Allocation (LDA), BLEU, Meteor, Pointwise Mutual Information (PMI), des méthodes basées sur la dépendance, des méthodes optimisées basées sur l'affectation quadratique, etc. les méthodes de similarité fonctionnent dans différentes granularités - Word à Word, phrase à phrase ou textes plus gros.

5
kyrenia

J'examinerais l'indexation sémantique latente pour cela. Je crois que vous pouvez créer quelque chose de similaire à un index de recherche d'espace vectoriel mais avec des termes sémantiquement plus proches, c'est-à-dire ayant un angle plus petit entre eux. Si j'apprends plus, je posterai ici.

5
jonfm

Désolé de déterrer une question de 6 ans, mais comme je viens de tomber sur ce post aujourd'hui, je jetterai une réponse au cas où quelqu'un d'autre chercherait quelque chose de similaire.

cortical.io a développé un processus pour calculer la similitude sémantique de deux expressions et elles ont un démo de celui-ci sur leur site Web . Ils offrent une API gratuite donnant accès à la fonctionnalité , vous pouvez donc l'utiliser dans votre propre application sans avoir à implémenter l'algorithme vous-même.

3
Hybrid System

Une solution simple consiste à utiliser le produit scalaire des vecteurs n-gramme de caractères. Ceci est robuste sur les changements de commande (ce que de nombreuses métriques de distance d'édition ne sont pas) et capture de nombreux problèmes liés à la racine. Cela empêche également le problème de l'intelligence sémantique complète de l'IA.

Pour calculer le vecteur n-gram, choisissez simplement une valeur de n (disons, 3) et hachez chaque séquence de 3 mots de la phrase en un vecteur. Normalisez le vecteur à la longueur unitaire, puis prenez le produit scalaire de différents vecteurs pour détecter la similitude.

Cette approche a été décrite dans J. Mitchell et M. Lapata, "Composition in Distributional Models of Semantics", Cognitive Science, vol. 34, no. 8, pp. 1388–1429, nov. 2010., DOI 10.1111/j.1551-6709.2010.01106.x

3
Jonathan Betz

Essayez SimService , qui fournit un service pour calculer les top-n mots similaires et la similarité des phrases.

2
Lushan Han

J'examinerais les techniques statistiques qui prennent en considération la probabilité que chaque mot apparaisse dans une phrase. Cela vous permettra de donner moins d'importance aux mots populaires tels que "et", "ou", "le" et de donner plus d'importance aux mots qui apparaissent moins régulièrement, et qui sont donc un meilleur facteur de discrimination. Par exemple, si vous avez deux phrases:

1) L'algorithme smith-waterman vous donne une mesure de similitude entre deux chaînes. 2) Nous avons examiné l'algorithme smith-waterman et nous l'avons trouvé assez bon pour notre projet.

Le fait que les deux phrases partagent les mots "smith-waterman" et les mots "algorithmes" (qui ne sont pas aussi courants que 'et', 'ou', etc.), vous permettra de dire que les deux phrases pourraient bien parler du même sujet.

En résumé, je vous suggère de jeter un coup d'œil à: 1) les mesures de similitude des chaînes; 2) Méthodes statistiques;

J'espère que cela t'aides.

2
Gia

Cela nécessite que votre algorithme sache de quoi vous parlez. Cela peut être fait sous une forme rudimentaire en comparant simplement les mots et en recherchant des synonymes, etc., mais toute sorte de résultat précis nécessiterait une certaine forme d'intelligence.

1
Rik

Jetez un œil à http://mkusner.github.io/publications/WMD.pdf Cet article décrit un algorithme appelé Word Mover distance qui essaie de découvrir une similitude sémantique. Il s'appuie sur les scores de similitude dictés par Word2vec. L'intégration avec GoogleNews-vectors-negative300 donne des résultats souhaitables.

0
Anonymous