Nous avons des modèles pour convertir les mots en vecteurs (par exemple, le modèle Word2vec). Existe-t-il des modèles similaires convertissant des phrases/documents en vecteurs, en utilisant peut-être les vecteurs appris pour les mots individuels?
1) Ignorer la méthode gramme: papier ici et l’outil qui l’utilise, google Word2vec
2) Utilisation de LSTM-RNN pour former des représentations sémantiques de phrases.
3) Représentations de phrases et documents . Le vecteur de paragraphe est introduit dans cet article. Il s'agit essentiellement d'un algorithme non supervisé qui apprend des représentations d'entités de longueur fixe à partir de textes de longueur variable, tels que des phrases, des paragraphes et des documents.
4) Bien que ce papier ne forme pas de vecteurs phrase/paragraphe, il est assez simple de le faire. On peut simplement brancher les vecteurs Word individuels ( GloveLes vecteurs Word sont réputés offrir les meilleures performances) et former ensuite une représentation vectorielle de la phrase/du paragraphe.
Une solution un peu moins standard, mais probablement difficile à battre en termes de précision si vous essayez de faire quelque chose de spécifique:
Construisez un RNN (avec des cellules de mémoire LSTM ou GRU, comparaison ici ) et optimisez la fonction d'erreur de la tâche que vous essayez d'accomplir. Vous alimentez votre phrase et l’entraînez à produire le résultat souhaité. Les activations du réseau après avoir alimenté votre phrase sont une représentation de la phrase (même si vous ne vous souciez que de la sortie du réseau).
Vous pouvez représenter la phrase sous forme de séquence de caractères codés à une seule étape, de séquences de mots codés à une étape ou de séquences de vecteurs Word (par exemple, GloVe ou Word2vec ). Si vous utilisez des vecteurs Word, vous pouvez continuer à propager en arrière dans les vecteurs Word, en mettant à jour leurs poids, de sorte que vous obteniez également des vecteurs Word personnalisés spécifiquement adaptés à la tâche que vous effectuez.
Tout dépend de:
Si vous avez généré le modèle à l'aide de Word2Vec, vous pouvez soit essayer:
Ou vous pouvez faire ce que certaines personnes font, c'est-à-dire additionner tous les mots contenus dans les documents et les diviser par les mots contenus, par ex. https://github.com/alvations/oque/blob/master/o.py#L13 (remarque: la ligne 17-18 est un moyen de réduire le bruit)
def sent_vectorizer(sent, model):
sent_vec = np.zeros(400)
numw = 0
for w in sent:
try:
sent_vec = np.add(sent_vec, model[w])
numw+=1
except:
pass
return sent_vec / np.sqrt(sent_vec.dot(sent_vec))
Il y a beaucoup de façons de répondre à cette question. La réponse dépend de votre interprétation des phrases et des phrases.
Ces modèles de distribution tels que Word2vec
qui fournissent une représentation vectorielle pour chaque mot peuvent uniquement montrer comment un mot est généralement utilisé dans un contexte de base de fenêtre en relation avec d'autres mots. Sur la base de cette interprétation des relations contexte-mot, vous pouvez prendre le vecteur moyen de tous les mots d'une phrase comme représentation vectorielle de la phrase. Par exemple, dans cette phrase:
les végétariens mangent des légumes.
On peut prendre le vecteur normalisé comme représentation vectorielle:
Le problème réside dans la composition des phrases. Si vous prenez les vecteurs Word moyens comme ci-dessus, ces deux phrases ont la même représentation vectorielle:
les légumes mangent des végétariens.
Il existe de nombreuses recherches dans le domaine de la distribution pour apprendre les structures arborescentes via le traitement de corpus. Par exemple: Analyse avec des grammaires vectorielles compositionnelles . Cette vidéo explique également cette méthode.
Encore une fois, je veux insister sur l'interprétation. Ces vecteurs de phrases ont probablement leur propre signification dans votre application. Par exemple, dans l'analyse des sentiments dans ce projet de Stanford , le sens qu'ils recherchent est le sentiment positif/négatif d'une phrase. Même si vous trouvez une représentation vectorielle parfaite pour une phrase, il existe des débats philosophiques selon lesquels ce ne sont pas des significations réelles des phrases si vous ne pouvez pas juger de la condition de vérité (David Lewis "General Semantics" 1970). C'est pourquoi il existe des lignes de travaux axés sur la vision par ordinateur ( ce document ou ce document ). Mon argument est que cela peut dépendre complètement de votre application et de votre interprétation des vecteurs.
J'espère que vous accueillerez une mise en œuvre. J'ai rencontré le même problème en convertissant les tracés de film pour analyse. Après avoir essayé de nombreuses autres solutions, je me suis attaché à une implémentation facilitant mon travail. L'extrait de code est joint ci-dessous.
Installez 'spaCy' à partir du lien suivant.
import spacy
nlp = spacy.load('en')
doc = nlp(YOUR_DOC_HERE)
vec = doc.vector
J'espère que cela t'aides.