web-dev-qa-db-fra.com

Stemmers vs Lemmatizers

Le traitement automatique du langage naturel (NLP), en particulier pour l'anglais, est devenu le stade où le stemming deviendrait une technologie archaïque s'il existait des lemmatiseurs "parfaits". C'est parce que les stemmers changent la forme de surface d'un mot/jeton en quelques tiges sans signification.

Là encore, la définition du lemmatiseur "parfait" est discutable car une tâche PNL différente aurait nécessité un niveau de lemmatisation différent. Par exemple. Convertir les mots entre les formes verbe/nom/adjectif .

Stemmers

[in]: having
[out]: hav

Lemmatiseurs

[in]: having
[out]: have
  • La question est donc la suivante: les souches anglaises sont-elles utiles du tout aujourd'hui? Puisque nous avons une pléthore d'outils de lemmatisation pour l'anglais

  • Sinon, comment devrions-nous passer à la construction de lemmatiseurs robustes pouvant prendre en charge les pré-processus nounify, verbify, adjectify et adverbify?

  • Comment la tâche de lemmatisation pourrait-elle être facilement mise à l'échelle vers d'autres langues qui ont des structures morphologiques similaires à l'anglais?

69
alvas

Q1: "[..] les stemmers anglais sont-ils utiles du tout aujourd'hui? Puisque nous avons une pléthore d'outils de lemmatisation pour l'anglais"

Oui. Les souches sont beaucoup plus simples, plus petites et généralement plus rapides que les lemmatiseurs, et pour de nombreuses applications, leurs résultats sont assez bons . Utiliser un lemmatiseur pour cela est un gaspillage de ressources. Considérez, par exemple, la réduction de la dimensionnalité dans la recherche d'informations. Vous remplacez tous drive/driving par driv dans les documents recherchés et la requête. Vous ne vous souciez pas si c'est lecteur ou driv ou x17a $ tant qu'il regroupe les mots liés par flexion ensemble.

Q2: "[..] comment devrions-nous passer à la construction de lemmatiseurs robustes qui peuvent prendre en charge les pré-processus de dénomination, verbification, adjectification et adverbification?

Quelle est votre définition d'un lemme, inclut-elle la dérivation (lecteur - pilote) ou seule inflexion (lecteur - lecteurs - conduit)? Tient-il compte de la sémantique?

Si vous souhaitez inclure dérivation (ce que la plupart des gens diraient inclure les noms verbants, etc.), gardez à l'esprit que la dérivation est bien plus irrégulier que l'inflexion. Il existe de nombreuses particularités, lacunes, etc. Voulez-vous vraiment que changer (changer de train) et changer (en pièces) pour avoir même lemme? Sinon, où tracez-vous la frontière? Que diriez-vous nerf - nnerve, terre - dénicher - terrien, .. Cela dépend vraiment de l'application.

Si vous prenez en compte la sémantique (bank serait étiquetée bank-money ou - bank-river selon le contexte), à ​​quelle profondeur allez-vous (distinguez-vous bank-institution de bank-building)? Certaines applications peuvent ne pas s'en soucier du tout, certaines voudront peut-être distinguer la sémantique de base, d'autres voudront peut-être une granularité fine.

Q3: "Comment la tâche de lemmatisation pourrait-elle être facilement mise à l'échelle vers d'autres langues qui ont des structures morphologiques similaires à l'anglais?"

Qu'entendez-vous par "structures morphologiques similaires à l'anglais"? L'anglais a très peu de morphologie flexionnelle. Il existe de bons lemmatiseurs pour les langues d'autres types morphologiques (vraiment flexionnel, agglutinatif, modèle, ...).

À l'exception possible des langages agglutinants, je dirais qu'une table de recherche (disons un trie compressé) est la meilleure solution. (Peut-être avec quelques règles de sauvegarde pour les mots inconnus tels que les noms propres). La recherche est suivie d'une sorte de désambiguïsation (allant de trivial - prenez le premier, ou prenez le premier cohérent avec les mots balise POS, à beaucoup plus sophistiqué). Les ambiguïtés les plus sophistiquées sont généralement des algorithmes stochastiques supervisés (par exemple TreeTagger ou Faster ), bien que la combinaison de l'apprentissage automatique et des règles créées manuellement ait également été effectuée (voir par exemple ceci ).

Évidemment, pour la plupart des langues, vous ne voulez pas créer la table de recherche à la main, mais la générer à la place à partir d'une description de la morphologie de cette langue. Pour les langues flexionnelles, vous pouvez suivre la voie d'ingénierie de Hajic pour le tchèque ou Mikheev pour le russe, ou, si vous êtes audacieux, vous utilisez la morphologie à deux niveaux. Ou vous pouvez faire quelque chose entre les deux, comme Hana (moi-même) (Notez que ce sont tous des analyseurs morphologiques complets qui incluent la lemmatisation). Ou vous pouvez apprendre le lemmatiseur de manière non supervisée à la Yarowsky et Wicentowski , éventuellement avec un post-traitement manuel, corrigeant les mots les plus fréquents.

Il y a beaucoup trop d'options et tout dépend vraiment de ce que vous voulez faire avec les résultats.

81
Jirka

Une application classique du stemming ou de la lemmatisation est l'amélioration des résultats des moteurs de recherche: en appliquant le stemming (ou la lemmatisation) à la requête ainsi que (avant l'indexation) à tous les jetons indexés, les utilisateurs recherchant, disons, "avoir" sont capables pour trouver des résultats contenant "has".

(On peut dire que les verbes sont quelque peu rares dans la plupart des requêtes de recherche, mais le même principe s'applique aux noms, en particulier dans les langues à morphologie de nom riche.)

Aux fins de l'amélioration des résultats de recherche, il n'est pas vraiment important que la tige (ou le lemme) ait un sens ("avoir") ou non ("hav"). Il lui suffit de pouvoir représenter la Parole en question, et toutes ses formes flexionnelles. En fait, certains systèmes utilisent des nombres ou d'autres types de chaînes id au lieu de la racine ou du lemme (ou de la forme de base ou de tout autre nom).

Par conséquent, ceci est un exemple d'application où les stemmers (selon votre définition) sont aussi bons que les lemmatiseurs.


Cependant, je ne suis pas tout à fait convaincu que votre définition (implicite) de "stemmer" et de "lemmatizer" soit généralement acceptée. Je ne sais pas s'il existe une définition généralement acceptée de ces termes, mais la façon dont je les définis est la suivante:

Stemmer: fonction qui réduit les formes flexionnelles aux tiges ou aux formes de base, en utilisant des règles et des listes de suffixes connus.

Lemmatizer: Une fonction qui effectue la même réduction, mais en utilisant un dictionnaire complet de formulaire complet pour pouvoir traiter les formulaires irréguliers.

Sur la base de ces définitions, un lemmatiseur est essentiellement une version de plus haute qualité (et plus chère) d'un stemmer.

5
jogojapan

La réponse dépend fortement de la tâche ou du domaine d'études spécifique au sein du Natural Language Processing (NLP) dont nous parlons.

Il convient de souligner qu'il a été prouvé que dans certaines tâches spécifiques, comme l'analyse des sentiments (qui est un sous-champ préféré en PNL), en utilisant a Stemmer ou Lemmatizer en tant que caractéristique du développement d'un système (formation d'un modèle d'apprentissage automatique) n'a pas d'effet notable sur la précision du modèle, quelle que soit sa taille. l'outil est. Même si cela améliore un peu les performances, mais il existe des fonctionnalités plus importantes telles que Analyse des dépendances qui ont un potentiel considérable à travailler dans de tels systèmes.

Il est important de mentionner que les caractéristiques de la langue sur laquelle nous travaillons doivent également être prises en considération.

2
Pedram