J'ai généré les vecteurs d'une liste de jetons à partir d'un document volumineux utilisant Word2vec. Étant donné une phrase, est-il possible d'obtenir le vecteur de la phrase à partir du vecteur des jetons dans la phrase.
Il existe différentes méthodes pour obtenir les vecteurs de phrases:
Il y a plusieurs façons d'obtenir un vecteur pour une phrase. Chaque approche présente des avantages et des inconvénients. Le choix dépend de la tâche que vous souhaitez effectuer avec vos vecteurs.
Premièrement, vous pouvez simplement moyenner les vecteurs de Word2vec. Selon Le et Mikolov , cette approche fonctionne mal pour les tâches d'analyse de sentiment, car elle "perd l'ordre des mots de la même manière que les modèles standard de sac à mots" et "échec [s] reconnaître de nombreux phénomènes linguistiques sophistiqués, par exemple le sarcasme ". D'autre part, selon Kenter et al. 2016 , "le simple calcul de la moyenne des incorporations de mots de tous les mots dans un texte s'est avéré être une base solide ou une caractéristique pour une multitude de tâches", telles que tâches de similarité de texte. Une variante consisterait à pondérer les vecteurs Word avec leur TF-IDF afin de réduire l'influence des mots les plus courants.
Une approche plus sophistiquée développée par Socher et al. consiste à combiner les vecteurs Word dans un ordre donné par l’arbre d’analyse d’une phrase, en utilisant des opérations matricielles. Cette méthode fonctionne pour l'analyse du sentiment des phrases, car elle dépend de l'analyse.
C'est possible, mais pas à partir de Word2vec. La composition des vecteurs Word afin d'obtenir des représentations de niveau supérieur pour les phrases (et plus encore pour les paragraphes et les documents) est un sujet de recherche réellement actif. Il n’existe pas de solution optimale, cela dépend vraiment de la tâche à laquelle vous souhaitez appliquer ces vecteurs. Vous pouvez essayer la concaténation, la sommation simple, la multiplication par point, la convolution, etc. Vous pouvez apprendre de nombreuses publications à ce sujet, mais vous devez en fin de compte expérimenter et voir ce qui vous convient le mieux.
Cela dépend de l'utilisation:
1) Si vous souhaitez uniquement obtenir un vecteur de phrase pour certaines données connues. Découvrez le vecteur de paragraphe dans ces articles:
Quoc V. Le et Tomas Mikolov. 2014. Représentations distribuées de phrases et de documents. Eprint Arxiv, 4: 1188-1196.
A. M. Dai, C. Olah et Q. V. Le. 2015. DocumentEmbedding avec des vecteurs de paragraphe. E-print ArXiv, juillet.
2) Si vous souhaitez qu'un modèle estime le vecteur de phrase pour les phrases inconnues (test) avec une approche non supervisée:
Vous pouvez consulter ce document:
3) Les chercheurs recherchent également la sortie de certaines couches d'un réseau RNN ou LSTM, voici un exemple récent:
http://www.aaai.org/ocs/index.php/AAAI/AAAI16/paper/view/12195
4) Pour le groupe de travail doc2vec, de nombreux chercheurs n’ont pas pu obtenir de bons résultats pour surmonter ce problème. Ils ont ensuite utilisé un document utilisant doc2vec basé sur des vecteurs Word pré-formés.
5) Tweet2vec ou envoyé2vec .
Facebook a un projet SentEval pour évaluer la qualité des vecteurs de phrases.
https://github.com/facebookresearch/SentEval
6) Il y a plus d'informations dans le papier suivant:
Modèles de réseaux neuronaux pour l'identification de paraphrases, la similarité textuelle sémantique, l'inférence de langage naturel et la réponse à une question
Et pour l'instant, vous pouvez utiliser 'BERT':
Google publie le code source ainsi que des modèles pré-entraînés.
https://github.com/google-research/bert
Et voici un exemple pour exécuter bert en tant que service:
Vous pouvez obtenir des représentations vectorielles des phrases pendant la phase d’apprentissage (rejoignez le test et entraînez les phrases dans un seul fichier et exécutez le code Word2vec obtenu à partir du lien suivant).
Le code pour phrase2vec a été partagé par Tomas Mikolov ici . Il suppose que le premier mot d'une ligne est phrase-id. Compilez le code en utilisant
gcc Word2vec.c -o Word2vec -lm -pthread -O3 -march=native -funroll-loops
et l'exécuter en utilisant
./Word2vec -train alldata-id.txt -output vectors.txt -cbow 0 -size 100 -window 10 -negative 5 -hs 0 -sample 1e-4 -threads 40 -binary 0 -iter 20 -min-count 1 -sentence-vectors 1
[~ # ~] éditer [~ # ~]
Gensim (version de développement) semble avoir une méthode pour déduire des vecteurs de nouvelles phrases. Découvrez la méthode model.infer_vector(NewDocument)
dans https://github.com/gojomo/gensim/blob/develop/gensim/models/doc2vec.py
J'ai eu de bons résultats de:
Les embeddings universels de Google pour les phrases sont une solution actualisée à ce problème. Il n'utilise pas Word2vec mais donne lieu à une solution concurrente.
Voici ne visite avec TFHub et Keras .