Comment développer une liste de mots associés en fonction des mots clés initiaux?


19

J'ai récemment vu une fonctionnalité intéressante qui était auparavant disponible dans Google Sheets: vous commencez par écrire quelques mots clés associés dans des cellules consécutives, par exemple: "bleu", "vert", "jaune", et cela génère automatiquement des mots clés similaires (dans ce cas , autres couleurs). Voir plus d'exemples dans cette vidéo YouTube .

Je voudrais reproduire cela dans mon propre programme. Je pense à utiliser Freebase, et cela fonctionnerait intuitivement comme ceci:

  1. Récupérez la liste des mots donnés dans Freebase;
  2. Trouvez leur «dénominateur (s) commun (s)» et construisez une métrique de distance basée sur cela;
  3. Classez les autres concepts en fonction de leur «distance» par rapport aux mots clés d'origine;
  4. Affichez les prochains concepts les plus proches.

Comme je ne connais pas ce domaine, mes questions sont les suivantes:

  • Y a-t-il une meilleure manière de faire cela?
  • Quels outils sont disponibles pour chaque étape?

Je suppose que cela est basé sur des sujets d'apprentissage dans un grand corpus.
tchakravarty

Si vous voulez trouver leur explication, je pense qu'il y avait un document sur la méthode sous-jacente appelée Google Sets.
jamesmf

1
Ce problème est appelé "expansion de requête".
Emre

Réponses:


15

L' algorithme word2vec peut être un bon moyen de récupérer plus d'éléments pour une liste de mots similaires. Il s'agit d'un algorithme «d'apprentissage en profondeur» non supervisé qui a déjà été démontré avec des données de formation basées sur Wikipedia (des scripts d'aide sont fournis sur la page de codes de Google).

Il existe actuellement des implémentations C et Python . Ce tutoriel de Radim Řehůřek , l'auteur de la bibliothèque de modélisation de sujets Gensim , est un excellent point de départ.

La démonstration de "sujet unique" dans le didacticiel est un bon exemple de récupération de mots similaires à un seul terme (essayez de rechercher sur "rouge" ou "jaune"). Il devrait être possible d'étendre cette technique pour trouver les mots qui ont la plus grande similitude globale avec un ensemble de mots d'entrée.


5

Avez-vous envisagé une approche basée sur la fréquence exploitant la simple co-occurrence des mots dans les corpus? Du moins, c'est ce que j'ai vu la plupart des gens utiliser pour cela. Je pense que cela pourrait être brièvement abordé dans le livre de Manning et Schütze, et je semble me souvenir de quelque chose comme ça en tant que devoir à la maison pendant les études supérieures ...

Plus d'informations ici: http://nlp.stanford.edu/IR-book/html/htmledition/automatic-thesaurus-generation-1.html

Pour cette étape:

Classez les autres concepts en fonction de leur «distance» par rapport aux mots clés d'origine;

Il existe plusieurs métriques de similitude sémantique que vous pourriez examiner. Voici un lien vers certaines diapositives que j'ai rassemblées pour un projet de classe utilisant quelques-unes de ces mesures de similitude dans WordNet: http://www.eecis.udel.edu/~trnka/CISC889-11S/lectures/greenbacker-WordNet-Similarity. pdf


3

C'est l'un des problèmes intéressants où la portée peut varier d'une affectation aux devoirs à un projet de taille Google.

En effet, vous pouvez commencer par la co-occurrence des mots (par exemple, probabilité conditionnelle). Vous découvrirez rapidement que vous obtenez la liste des mots vides comme liés le plus des mots simplement parce qu'ils sont très populaires. L'utilisation de la levée de la probabilité conditionnelle prendra en charge les mots vides mais rendra la relation sujette à erreur en petit nombre (la plupart de vos cas). Vous pouvez essayer Jacard, mais comme il est symétrique, il ne trouvera pas beaucoup de relations.

Ensuite, vous pourriez envisager des relations qui n'apparaissent qu'à courte distance du mot de base. Vous pouvez (et devriez) envisager des relations basées sur des corpus généraux (par exemple, Wikipedia) et spécifiques à l'utilisateur (par exemple, ses e-mails).

Très bientôt, vous aurez de nombreuses mesures de parenté, lorsque toutes les mesures sont bonnes et ont un certain avantage sur les autres.

Afin de combiner de telles mesures, j'aime réduire le problème en un problème de classification.

Vous devez créer un ensemble de données de paris de mots et les étiqueter comme "est lié". Pour créer un grand ensemble de données étiqueté, vous pouvez:

  • Utilisez des sources de mots apparentés connus (par exemple, de bonnes vieilles catégories Wikipedia) pour les positifs
  • La plupart des mots non connus comme liés ne sont pas liés.

Utilisez ensuite toutes les mesures que vous avez comme caractéristiques des paires. Vous êtes maintenant dans le domaine des problèmes de classification supervisée. Construisez un classificateur sur l'ensemble de données, évalué en fonction de vos besoins et obtenez une mesure de similitude qui correspond à vos besoins.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.