Question

entrée: phrase 1, phrase 2

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

Était-ce utile?

La solution

Vous pouvez consulter ce document:

p "> Similarité des phrases 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 réalité deux phrases en anglais) et nous avons trouvé que l'approche adoptée était trop lente et les résultats, bien que prometteurs, insuffisants (ou susceptibles de l'être sans effort considérable, supplémentaire).

Vous ne donnez pas beaucoup de contexte, je ne peux donc pas le recommander, mais lire le document pourrait vous être utile pour comprendre comment aborder le problème.

Cordialement,

Matt.

Autres conseils

Il existe une réponse courte et longue à cette question.

La réponse courte:

Utilisez le paquet WordNet :: Similarity Perl . Si Perl n’est pas votre langue de choix, consultez la page de projet WordNet à Princeton, ou recherchez une bibliothèque d'encapsidation dans Google.

La réponse longue:

La détermination de la similarité des mots est une question compliquée et la recherche est encore très demandée dans ce domaine. Pour calculer la similarité, vous avez besoin d'une représentation appropriée de la signification d'un mot. Mais que serait une représentation du sens de, par exemple, «chaise»? En fait, quel est le sens exact de "chaise"? Si vous y réfléchissez longuement, cela vous changera les idées, vous deviendrez un peu fou et vous vous lancerez enfin dans une carrière de chercheur en philosophie ou en linguistique informatique 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 souhaitez explorer ce problème un peu plus en profondeur, je vous recommande vivement 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 actuel des méthodes de distribution, qui utilisent des statistiques de cooccurrence de mots pour définir une mesure de la similarité de mot. Il est toutefois peu probable que vous trouviez des bibliothèques implémentant celles-ci.

Vous voudrez peut-être vérifier le projet WordNet de l'Université de Princeton. Une approche possible consiste à commencer par passer chaque phrase par une liste de mots vides (pour supprimer les mots "courants" tels que "un", "à", "le", etc.), puis pour chacun des mots suivants: les mots restants dans chaque phrase, vous pouvez calculer la "similarité" 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 mot1 à mot2.

Désolé, c'est plutôt élevé. Je n'ai évidemment jamais essayé cela. Juste une petite pensée.

Je rechercherais une indexation sémantique latente pour cela. Je pense que vous pouvez créer quelque chose de similaire à un index de recherche dans l’espace vectoriel mais avec des termes sémantiquement proches étant plus proches, c’est-à-dire qu’ils forment un angle plus petit entre eux. Si j'en apprends plus, je posterai ici.

Pour ceux qui viennent juste ici, je suggérerais de jeter un coup d'oeil à SEMILAR - http://www.semanticsimilarity.org / . Ils mettent en œuvre de nombreuses méthodes de recherche modernes pour calculer la similarité de mots et de phrases. Il est écrit en Java.

  

L'API SEMILAR propose différentes méthodes de similarité basées sur Wordnet, l'analyse sémantique latente (LSA), l'allocation de Dirichlet latent (LDA), BLEU, Meteor, les informations basées sur la dépendance (PMI), les dépendances, les méthodes optimisées basées sur l'affectation quadratique, etc. Et les méthodes de similarité fonctionnent dans différentes granularités - mot à mot, phrase à phrase ou textes plus grands.

Désolé de creuser une question de 6 ans, mais comme je viens de découvrir ce billet aujourd'hui, je vais vous donner une réponse au cas où quelqu'un d'autre recherche quelque chose de similaire.

cortical.io a mis au point un processus permettant de calculer la similarité sémantique de deux expressions et leur en faire la démonstration sur leur site Web . Ils offrent une API gratuite donnant accès à la fonctionnalité , afin que vous puissiez l'utiliser dans votre propre application sans avoir à implémenter vous-même l'algorithme.

Une solution simple consiste à utiliser le produit scalaire des vecteurs de caractère n-gramme. Ceci est robuste par rapport aux modifications de commande (ce que beaucoup de métriques de modification de distance ne sont pas) et prend en compte de nombreux problèmes liés à la radicalisation. Cela évite également le problème de la compréhension sémantique totale de l'IA.

Pour calculer le vecteur n-gramme, il suffit de choisir une valeur de n (disons 3) et de hacher toutes les séquences de 3 mots de la phrase en un vecteur. Normalisez le vecteur en unités de longueur, puis utilisez le produit scalaire de différents vecteurs pour détecter la similarité.

Cette approche a été décrite dans J. Mitchell et M. Lapata, «Composition dans les modèles distributionnels de la sémantique», Sciences cognitives, vol. 34, non. 8, p. 1388–1429, nov. 2010., DOI 10.1111 / j.1551-6709.2010.01106.x

Je jetterais un coup d'œil aux techniques statistiques qui prennent en compte la probabilité que chaque mot apparaisse dans une phrase. Cela vous permettra de donner moins d'importance aux mots populaires tels que «et», «ou», et de donner plus d'importance aux mots qui apparaissent moins régulièrement, ce qui constitue donc un meilleur facteur de discrimination. Par exemple, si vous avez deux phrases:

1) L’algorithme Smith-Waterman vous donne une mesure de similarité entre deux chaînes. 2) Nous avons examiné l’algorithme Smith-Waterman et nous l’avons jugé suffisamment bon pour notre projet.

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

En résumé, je vous suggérerais de regarder:  1) mesures de similarité de chaîne;  2) méthodes statistiques;

J'espère que cela vous aidera.

Essayez SimService , qui fournit un service permettant de calculer les mots et expressions similaires similaires et plus proches. <

Cela nécessite que votre algorithme sache réellement 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 forme d'intelligence.

Consultez http://mkusner.github.io/publications/WMD.pdf Cet article décrit un algorithme appelé distance Word Mover qui tente de découvrir une similarité sémantique. Il repose sur les scores de similarité dictés par word2vec. L'intégration de cela avec GoogleNews-vectors-negative300 donne des résultats souhaitables.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top