Entrée : phrase 1, phrase 2
résultat : valeur de la similarité sémantique (entre 0 et 1), ou la probabilité que ces deux phrases parlent de la même chose
Entrée : phrase 1, phrase 2
résultat : valeur de la similarité sémantique (entre 0 et 1), ou la probabilité que ces deux phrases parlent de la même chose
Vous pouvez consulter ce document :
Similitude des phrases basée sur les réseaux sémantiques et les statistiques de corpus (PDF)
J'ai mis en œuvre l'algorithme décrit. Notre contexte était très général (deux phrases anglaises quelconques) et nous avons constaté que l'approche adoptée était trop lente et que les résultats, bien que prometteurs, n'étaient pas assez bons (ou susceptibles de l'être sans un effort supplémentaire considérable).
Vous ne donnez pas beaucoup de contexte et je ne peux donc pas nécessairement vous recommander cette solution, mais la lecture de l'article pourrait vous aider à comprendre comment aborder le problème.
Voir aussi,
Matt.
Il y a une réponse courte et une réponse longue à cette question.
La réponse est courte :
Utiliser le WordNet::Similarity Paquet Perl . Si Perl n'est pas votre langage de prédilection, consultez le site Page du projet WordNet à Princeton, ou recherchez une bibliothèque de wrappers sur Google.
La réponse longue :
La détermination de la similarité des mots est une question complexe, et la recherche dans ce domaine est encore très active. Pour calculer la similarité, vous avez besoin d'une représentation appropriée de l'ensemble des mots. sens d'un mot. Mais quelle serait la représentation du sens de "chaise", par exemple ? En fait, quelle est le sens exact du mot "chaise" ? Si vous y réfléchissez longuement, cela vous tordra l'esprit, vous deviendrez légèrement fou, et vous vous lancerez finalement dans 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 on n'en voit pas la fin.
Si vous souhaitez explorer ce problème de manière plus approfondie, je vous recommande vivement de lire le chapitre 20.7 de l'ouvrage intitulé Traitement de la parole et du langage par Jurafsky et Martin, dont certains sont disponibles par l'intermédiaire de Google Books . Il donne un très bon aperçu de l'état de l'art des méthodes distributionnelles, qui utilisent les statistiques de cooccurrence des mots pour définir une mesure de la similarité des mots. Il est cependant peu probable que vous trouviez des bibliothèques mettant en œuvre ces méthodes.
Vous pouvez vous renseigner sur la WordNet à l'université de Princeton. Une approche possible consisterait à passer d'abord chaque phrase par une liste de mots d'arrêt (pour supprimer les mots "courants" tels que "a", "to", "the", etc.). Ensuite, pour chacun des mots restants dans chaque phrase, vous pourriez 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 aller du mot1 au mot2.
Désolé, c'est du haut niveau. Je n'ai évidemment jamais essayé. C'est juste une petite idée.
Je me pencherais sur l'indexation sémantique latente. Je pense qu'il est possible de créer quelque chose de similaire à un index de recherche dans l'espace vectoriel, mais en rapprochant les termes sémantiquement liés, c'est-à-dire en réduisant l'angle qui les sépare. Si j'en apprends davantage, je le publierai ici.
Pour amplifier : obtenir un corpus de texte représentatif (large), décomposer chaque document en bigrammes ("termes"), créer une matrice comptant l'occurrence des termes (lignes) dans les documents (colonnes), décomposer la matrice, arrondir/projeter/réduire la dimensionnalité, utiliser le résultat pour faire de nouvelles prédictions.
Je me pencherais sur les techniques statistiques qui prennent en considération la probabilité d'apparition de chaque mot dans une phrase. Cela vous permettra d'accorder 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 constituent donc un meilleur facteur de discrimination. Par exemple, si vous avez deux phrases :
1) L'algorithme de Smith-Waterman donne une mesure de similarité entre deux chaînes de caractères. 2) Nous avons examiné l'algorithme de Smith-Waterman et nous l'avons trouvé 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 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 aux documents suivants 1) Mesures de similarité des chaînes de caractères ; 2) Méthodes statistiques ;
J'espère que cela vous aidera.
Gia : les chaînes suivantes sont similaires : ( I love you
, I hate you
) mais ont des significations opposées. Les chaînes suivantes sont différentes mais ont des significations similaires : ( Thank you; the dinner was delicious!
, You always cook a fine meal. Much appreciated.
) Utilisation d'un mot peu courant : ( An onomatopoeia is a word that imitates the sound of the thing it describes
, Children and non-natives use onomatopoeia to describe things more than adult native speakers.
) ne disent pas la même chose.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
La démo en ligne de WordNet Similarity for Java a été utile pour se familiariser avec les différents algorithmes fournis par WordNet : ws4jdemo.appspot.com
0 votes
Je suis un nouveau venu au NLP et j'hésitais entre graph random walk et word vector ; je suis intéressé par votre démo. pouvez-vous fournir des informations, en particulier sur le processus de la langue chinoise ?