Apprentissage des fonctionnalités non supervisé pour NER

11

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.

MaticDiba
la source

Réponses:

5

Oui, il est tout à fait possible de combiner l'apprentissage non supervisé avec le modèle CRF. En particulier, je vous recommande d'explorer la possibilité d'utiliser word2vec fonctionnalités de comme entrées pour votre CRF.

Word2vec apprend à distinguer les mots appropriés pour un contexte donné et les mots sélectionnés de manière aléatoire. Certains poids du modèle peuvent alors être interprétés comme une représentation vectorielle dense d'un mot donné.

Ces vecteurs denses ont la propriété attrayante que les mots sémantiquement ou syntaxiquement similaires ont des représentations vectorielles similaires. L'arithmétique vectorielle de base révèle même des relations apprises intéressantes entre les mots.
Par exemple, vecteur ("Paris") - vecteur ("France") + vecteur ("Italie") donne un vecteur assez similaire au vecteur ("Rome").

À un niveau élevé, vous pouvez considérer les représentations word2vec comme étant similaires aux représentations LDA ou LSA, dans le sens où vous pouvez convertir un vecteur d'entrée clairsemé en un vecteur de sortie dense qui contient des informations de similitude de mots.

Pour cette question, LDA et LSA sont également des options valides pour l'apprentissage des fonctionnalités non supervisées - les deux tentent de représenter les mots comme des combinaisons de «sujets» et de produire des représentations de mots denses.

Pour le texte anglais, Google distribue des modèles word2vec pré-entraînés sur un énorme ensemble de données Google News de 100 milliards de mots, mais pour d'autres langues, vous devrez former votre propre modèle.

Madison May
la source
Hé, je veux d'abord vous remercier pour votre réponse. J'ai une autre question. Les vecteurs de mots renvoyés par l'algorithme word2vec ont des valeurs flottantes, donc des mots comme gros et plus gros auront des vecteurs proches dans l'espace vectoriel, mais les valeurs des vecteurs pourraient être complètement différentes. Par exemple, grand = [0,1, 0,2, 0,3] et plus grand = [0,11, 0,21, 0,31]. N'est-ce pas un problème pour l'algorithme CRF, car cet algorithme les traiterait comme n'étant pas similaires? Existe-t-il un traitement supplémentaire qui devrait être effectué avant d'utiliser ce mot vecteurs dans CRF? J'espère que ma question est suffisamment claire.
MaticDiba
4

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.

user2404894
la source
3

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.

Vlad
la source