Doc2Vec - Comment étiqueter les paragraphes (gensim)

17

Je me demande comment étiqueter (étiqueter) des phrases / paragraphes / documents avec doc2vec dans gensim - d'un point de vue pratique.

Avez-vous besoin d'avoir chaque phrase / paragraphe / document avec sa propre étiquette unique (par exemple "Sent_123")? Cela semble utile si vous voulez dire "quels mots ou phrases sont les plus similaires à une seule phrase spécifique intitulée" Sent_123 ".

Pouvez-vous faire répéter les étiquettes en fonction du contenu? Par exemple, si chaque phrase / paragraphe / document concerne un certain article de produit (et qu'il existe plusieurs phrases / paragraphes / documents pour un article de produit donné), pouvez-vous étiqueter les phrases en fonction de l'article, puis calculer la similitude entre un mot ou un phrase et cette étiquette (ce qui, je suppose, serait comme une moyenne de toutes les phrases qui avaient à voir avec le produit)?

B_Miner
la source

Réponses:

10

Les deux sont possibles. Vous pouvez attribuer à chaque document un ID unique (tel qu'un numéro de série séquentiel) en tant que doctag, ou un doctag de chaîne partagée représentant autre chose, ou les deux en même temps.

Le constructeur TaggedDocument prend une liste de balises. (S'il vous arrive de vous limiter à des entiers simples ascendants à partir de 0, le modèle Doc2Vec les utilisera comme index directs dans son tableau de support, et vous économiserez beaucoup de mémoire qui serait autrement consacrée à une chaîne -> recherche d'index , ce qui peut être important pour les grands ensembles de données. Mais vous pouvez utiliser des doctags de chaîne ou même un mélange de doctags int et de chaîne.)

Vous devrez expérimenter ce qui fonctionne le mieux pour vos besoins.

Pour certaines tâches de classification, une approche qui a parfois mieux fonctionné que ce à quoi je m'attendais est de sauter complètement les ID par texte et de simplement former le modèle Doc2Vec avec des exemples de classe connus, avec les classes souhaitées comme doctags. Vous obtenez alors des «vecteurs doc» juste pour la classe doctags - pas tous les documents - un modèle potentiellement beaucoup plus petit. L'inférence ultérieure de vecteurs pour de nouveaux textes se traduit par des vecteurs significativement proches des vecteurs de doc de classe apparentés.

gojomo
la source
Merci beaucoup! En passant, alors que je commence à jouer avec genim - je suis curieux de savoir s'il est possible de calculer la similitude entre un document (peu importe si des balises uniques ou partagées sont utilisées) et un mot - cela peut-il être fait selon votre expérience?
B_Miner
1
Certains modes de formation créent des vecteurs de mots et de documents à l'intérieur du même espace et les similitudes peuvent donc être significatives. Voir par exemple cet article - arxiv.org/abs/1507.07998 - qui fait même une sorte d '«analogie arithmétique» impliquant des vecteurs doc (articles Wikipedia) et des vecteurs mots. La formation dans ce papier est comme le mode DBOW de gensim avec le mot-formation simultanée saut-gramme: dm=0, dbow_words=1.
gojomo
Merci @gojomo! J'ai ajouté une requête sur la façon de procéder sur la liste gensim
B_Miner
S'il vous plait corrigez moi si je me trompe. Dans votre dernier paragraphe, vous proposez que chaque document soit balisé comme nous balisons les questions sur ce site. Et après l'entraînement, nous obtiendrons une représentation vectorielle de chaque étiquette. Lorsqu'un nouveau document arrive, nous pouvons simplement utiliser une métrique de similarité pour suggérer des balises pour le nouveau document.
utilisateur
@user - oui, il est possible et parfois avantageux de le faire, bien que ce ne soit pas nécessaire.
gojomo
9

doc2vecmodèle tire son algorithme de word2vec.

Il word2vecn'y a pas besoin d'étiqueter les mots, car chaque mot a sa propre signification sémantique dans le vocabulaire. Mais dans le cas de doc2vec, il est nécessaire de spécifier le nombre de mots ou de phrases véhiculant une signification sémantique, afin que l'algorithme puisse l'identifier comme une entité unique. Pour cette raison, nous spécifions labelsou tagsà la phrase ou au paragraphe selon le niveau de signification sémantique véhiculée.

Si nous spécifions une seule étiquette pour plusieurs phrases dans un paragraphe, cela signifie que toutes les phrases du paragraphe sont nécessaires pour transmettre le sens. D'un autre côté, si nous spécifions des étiquettes variables pour toutes les phrases d'un paragraphe, cela signifie que chacune véhicule une signification sémantique et qu'elles peuvent ou non avoir une similitude entre elles.

En termes simples, un labelsignifie le sens sémantique de quelque chose.

yazhi
la source
If we specify a single label to multiple sentences in a paragraph, it means that all the sentences in the paragraph are required to convey the meaning.Je ne suis pas sûr de bien comprendre cela. D'après les algorithmes POV, est-ce que toutes les phrases avec la même balise sont nécessaires pour la définition sémantique ou toutes les phrases avec la même balise décrivent la même chose? Dans le premier cas, aucune phrase n'est autonome en soi, dans le second cas, une seule phrase est autosuffisante.
utilisateur
@user: C'est le deuxième cas, à partir de l'algorithme POV, une balise est définie comme une entité qui, lorsqu'elle est utilisée dans une seule phrase, capture la signification de tous les mots. De la même manière, lorsqu'il est utilisé dans plusieurs phrases, il capture également les mots dans toutes les autres phrases.
yazhi