Comment utiliser un mot incorporé pour mapper un document sur un vecteur de caractéristiques approprié pour une utilisation avec apprentissage supervisé?
Un mot incorporant mappe chaque mot à un vecteur , où est un nombre non trop grand (par exemple 500). Les mots les plus utilisés sont Word2vec et Glove .
Je veux appliquer l'apprentissage supervisé pour classer les documents. Je mappe actuellement chaque document à un vecteur de caractéristiques à l'aide de la représentation de sac de mots, puis j'applique un classificateur standard. J'aimerais remplacer le vecteur de fonctionnalité de sac de mots par quelque chose basé sur un incorporation de mots pré-formés existants, afin de tirer parti des connaissances sémantiques contenues dans l'incorporation de mots. Y at-il un moyen standard de le faire?
Je peux imaginer des possibilités, mais je ne sais pas s’il ya quelque chose de plus sensé. Approches du candidat que j'ai envisagées:
Je pouvais calculer le vecteur pour chaque mot du document et faire la moyenne de tous. Cependant, cela semble perdre beaucoup d’informations. Par exemple, avec la représentation en sac de mots, s'il y a quelques mots qui sont très pertinents pour la tâche de classification et que la plupart des mots ne sont pas pertinents, le classificateur peut facilement apprendre cela; si je fais la moyenne des vecteurs pour tous les mots du document, le classificateur n'a aucune chance.
La concaténation des vecteurs de tous les mots ne fonctionne pas, car elle ne conduit pas à un vecteur de caractéristiques de taille fixe. En outre, cela semble être une mauvaise idée car il sera trop sensible au placement spécifique d'un mot.
Je pourrais utiliser le mot imbriqué pour regrouper le vocabulaire de tous les mots en un ensemble fixe de groupes, par exemple, 1 000 groupes, où j'utilise la similarité cosinus sur les vecteurs comme mesure de la similarité des mots. Ensuite, au lieu d'un sac de mots, je pourrais avoir un sac de-grappes: l'offre vecteur caractéristique I du classificateur pourrait être un 1000 vecteur, où les e compte composant le nombre de mots dans le document font partie du groupe i .
Étant donné un mot , ces mots me permettent de calculer un ensemble des 20 mots les plus similaires w 1 , … , w 20 et leur score de similarité s 1 , … , s 20 . Je pourrais adapter le vecteur de caractéristiques de type sac de mots en utilisant ceci. Quand je vois le mot w , en plus d'incrémenter l'élément correspondant au mot w par 1 , je peux également incrémenter l'élément correspondant au mot w 1 par s 1 , incrémenter l'élément correspondant au mot w 2 par , et ainsi de suite.
Existe-t-il une approche spécifique susceptible de bien fonctionner pour la classification des documents?
Je ne cherche pas paragraphe2vec ou doc2vec; ceux qui nécessitent une formation sur un grand corpus de données, et je n'ai pas un grand corpus de données. Au lieu de cela, je veux utiliser un mot existant incorporant.
Réponses:
One simple technique that seems to work reasonably well for short texts (e.g., a sentence or a tweet) is to compute the vector for each word in the document, and then aggregate them using the coordinate-wise mean, min, or max.
TL;DR: Surprisingly, the concatenation of the min and max works reasonably well.
Reference:
Representation learning for very short texts using weighted word embedding aggregation. Cedric De Boom, Steven Van Canneyt, Thomas Demeester, Bart Dhoedt. Pattern Recognition Letters; arxiv:1607.00570. abstract, pdf. See especially Tables 1 and 2.
Credits: Thanks to @user115202 for bringing this paper to my attention.
la source
You can use doc2vec similar to word2vec and use a pre-trained model from a large corpus. Then use something like
.infer_vector()
in gensim to construct a document vector. The doc2vec training doesn't necessary need to come from the training set.Another method is to use an RNN, CNN or feed forward network to classify. This effectively combines the word vectors into a document vector.
You can also combine sparse features (words) with dense (word vector) features to complement each other. So your feature matrix would be a concatenation of the sparse bag of words matrix with the average of word vectors. https://research.googleblog.com/2016/06/wide-deep-learning-better-together-with.html
Another interesting method is to use a similar algorithm to word2vec but instead of predicting a target word, you can predict a target label. This directly tunes the word vectors to the classification task. http://arxiv.org/pdf/1607.01759v2.pdf
For more ad hoc methods, you might try weighing the words differently depending on syntax. For example, you can weigh verbs more strongly than determiners.
la source
If you are working with English text and want pre-trained word embeddings to begin with, then please see this: https://code.google.com/archive/p/word2vec/
This is the original C version of word2vec. Along with this release, they also released a model trained on 100 billion words taken from Google News articles (see subsection titled: "Pre-trained word and phrase vectors").
In my opinion and experience of working on word embeddings, for document classification, a model like doc2vec (with CBOW) works much better than bag of words.
Since, you have a small corpus, I suggest, you initialize your word embedding matrix by the pre-trained embeddings mentioned above. Then train for the paragraph vector in the doc2vec code. If you are comfortable with python, you can checkout the gensim version of it, which is very easy to modify.
Also check this paper that details the inner workings of word2vec/doc2vec: http://arxiv.org/abs/1411.2738. This will make understanding the gensim code very easy.
la source