J'ai implémenté le système NER avec l'utilisation de l'algorithme CRF avec mes fonctionnalités artisanales qui ont donné de très bons résultats. Le fait est que j'ai utilisé beaucoup de fonctionnalités différentes, y compris des balises POS et des lemmes.
Maintenant, je veux faire le même NER pour une langue différente. Le problème ici est que je ne peux pas utiliser de balises POS et de lemmes. J'ai commencé à lire des articles sur l'apprentissage en profondeur et l'apprentissage des fonctionnalités non supervisées.
Ma question est:
Est-il possible d'utiliser des méthodes d'apprentissage non supervisé des fonctionnalités avec l'algorithme CRF? Quelqu'un at-il essayé cela et obtenu de bons résultats? Y a-t-il un article ou un tutoriel à ce sujet?
Je ne comprends toujours pas complètement cette façon de créer des fonctionnalités, donc je ne veux pas passer trop de temps pour quelque chose qui ne fonctionnera pas. Donc, toute information serait vraiment utile. Créer un système NER complet basé sur le deep learning est un peu trop pour le moment.
la source
Dans cet article de 2014 ( GitHub ), les auteurs ont comparé de multiples stratégies d'incorporation de mots dans un système NER basé sur CRF, y compris une intégration dense, une incorporation binerisée, une intégration en grappes et une nouvelle méthode prototype . L'utilisation directe de vecteurs denses comme le suggère vlad est la manière la plus simple mais aussi la moins efficace dans les évaluations multiples.
J'ai implémenté l'idée du prototype dans mon projet NER spécifique au domaine et cela fonctionne assez bien pour moi.
la source
J'ai seulement 5 mois de retard, mais avec CRFSuite, vous pouvez réellement utiliser ces fonctionnalités flottantes comme des nombres, pas comme des chaînes. Pour cela, il vous suffit d'inventer une étiquette unique pour chaque dimension puis d'ajouter un ":" suivi de la valeur.
Par exemple, un mot "jungle" est représenté en 5 dimensions: 0,1 0,4 0,8 0,2 0,9
CRFSuite prendrait alors ce mot + fonctionnalité comme:
ÉTIQUETTE f1: 0,1 f2: 0,4 f3: 0,8 f4: 0,2 f5: 0,9
où bien sûr vous remplacez `` LABEL '' par une chaîne réelle et vous séparez tous les espaces avec des tabulations (c'est le format de CRFSuite).
Pas sûr cependant pour les autres packages.
la source