web-dev-qa-db-fra.com

Python: score de similitude sémantique pour les chaînes

Existe-t-il des bibliothèques pour calculer les scores de similitude sémantique pour une paire de phrases?

Je suis au courant de la base de données sémantique de WordNet et de la façon dont je peux générer le score pour 2 mots, mais je recherche des bibliothèques qui effectuent toutes les tâches de prétraitement comme le portage, l'arrêt de la suppression de Word, etc., sur des phrases et des sorties entières un score pour la relation entre les deux phrases.

J'ai trouvé un travail en cours qui est écrit en utilisant le framework .NET qui calcule le score en utilisant un tableau d'étapes de prétraitement. Y a-t-il un projet qui fait cela en python?

Je ne cherche pas la séquence d'opérations qui m'aiderait à trouver le score (comme demandé ici )
J'adorerais implémenter chaque étape par moi-même, ou coller des fonctions de différentes bibliothèques pour que cela fonctionne pour les paires de phrases, mais j'en ai surtout besoin comme outil pour tester les inférences sur les données.


EDIT: J'envisageais d'utiliser NLTK et de calculer le score pour chaque paire de mots répétée sur les deux phrases, puis de tirer des inférences de l'écart-type de la résultats, mais je ne sais pas si c'est une estimation légitime de la similitude. De plus, cela prendra beaucoup de temps pour les longues cordes.
Encore une fois, je recherche des projets/bibliothèques qui implémentent déjà cela intelligemment. Quelque chose qui me permet de faire ceci:

import amazing_semsim_package
str1='Birthday party ruined as cake explodes'
str2='Grandma mistakenly bakes cake using gunpowder'

>>similarity(str1,str2)
>>0.889
42
user8472

Le meilleur package que j'ai vu pour cela est Gensim, trouvé sur le Gensim Homepage . Je l'ai utilisé plusieurs fois et dans l'ensemble, je suis très satisfait de sa facilité d'utilisation; il est écrit en Python, et a un facile à suivre tutoriel pour vous aider à démarrer, qui compare 9 chaînes. Il peut être installé via pip, vous n'aurez donc pas beaucoup de soucis à l'installer, j'espère.

Quel algorithme de notation que vous utilisez dépend fortement du contexte de votre problème, mais je suggère de commencer par la fonctionnalité LSI si vous voulez quelque chose de basique. (C'est ce que le didacticiel vous guide.)

Si vous parcourez le tutoriel pour gensim, il vous guidera à travers la comparaison de deux chaînes, en utilisant la fonction Similarities. Cela vous permettra de voir comment vos piqûres se comparent les unes aux autres, ou à une autre piqûre, sur la base du texte qu'elles contiennent.

Si vous êtes intéressé par la science derrière son fonctionnement, consultez cet article.

46
Justin Muller

Malheureusement, je ne peux pas vous aider avec PY mais vous pouvez jeter un oeil à mon ancien projet qui utilise des dictionnaires pour effectuer les comparaisons sémantiques entre les phrases (qui peuvent ensuite être codées dans PY implémentant l'analyse d'espace vectoriel). Il ne faut que quelques heures de codage pour traduire de Java vers PY. https://sourceforge.net/projects/semantics/

3
Damir Olejar