Doc2Vec - Come etichettare i paragrafi (gensim)


17

Mi chiedo come etichettare (taggare) frasi / paragrafi / documenti con doc2vec in gensim - da un punto di vista pratico.

Devi avere ogni frase / paragrafo / documento con una propria etichetta univoca (ad esempio "Sent_123")? Questo sembra utile se vuoi dire "quali parole o frasi sono più simili a una singola frase specifica etichettata" Sent_123 ".

È possibile ripetere le etichette in base al contenuto? Ad esempio, se ogni frase / paragrafo / documento riguarda un determinato articolo di prodotto (e ci sono più frasi / paragrafi / documenti per un determinato articolo di prodotto) puoi etichettare le frasi in base all'articolo e quindi calcolare la somiglianza tra una parola o un frase e questa etichetta (che suppongo sarebbe una media di tutte quelle frasi che avevano a che fare con l'articolo del prodotto)?

Risposte:


10

Entrambi sono possibili. Puoi assegnare a ogni documento un ID univoco (come un numero seriale sequenziale) come un doctag o un doctag stringa condivisa che rappresenta qualcos'altro al riguardo o entrambi contemporaneamente.

Il costruttore TaggedDocument prende un elenco di tag. (Se ti capita di limitarti a semplici in ordine crescente da 0, il modello Doc2Vec userà questi come indici diretti nel suo array di supporto e risparmierai molta memoria che altrimenti verrebbe dedicata a una stringa -> ricerca indice , che potrebbe essere importante per insiemi di dati di grandi dimensioni. Ma è possibile utilizzare i doctag di stringa o anche una combinazione di doc e tag int e string.)

Dovrai sperimentare ciò che funziona meglio per le tue esigenze.

Per alcune attività di classificazione, un approccio che a volte ha funzionato meglio di quanto mi sarei aspettato è di saltare del tutto gli ID per testo e di addestrare il modello Doc2Vec con esempi di classi conosciute, con le classi desiderate come doctag. Quindi ottieni "vettori di documenti" solo per i doctag di classe - non tutti i documenti - un modello potenzialmente molto più piccolo. Successivamente inferendo i vettori per i nuovi testi si traduce in vettori significativamente vicini ai vettori di documenti di classe correlati.


Grazie mille! A parte come sto iniziando a giocare con genim - sono curioso di sapere se è possibile calcolare la somiglianza tra un documento (indipendentemente dal fatto che vengano usati tag univoci o condivisi) e una parola - può essere fatto nella tua esperienza?
B_Miner,

1
Alcune modalità di allenamento creano vettori di parole e documenti all'interno dello "stesso spazio" e quindi le somiglianze possono essere significative. Vedi ad esempio questo articolo - arxiv.org/abs/1507.07998 - che fa persino una sorta di "aritmetica di analogia" che coinvolge vettori di documenti (articoli di Wikipedia) e vettori di parole. La formazione a che la carta è come la modalità di DBOW gensim con concomitante skip-gram word-formazione: dm=0, dbow_words=1.
gojomo,

Grazie @gojomo! Ho aggiunto una domanda su come eseguire questa operazione nell'elenco gensim: groups.google.com/forum/#!topic/gensim/RLRfY6k3ulw
B_Miner

Perfavore, correggimi se sbaglio. Nel tuo ultimo paragrafo, stai suggerendo che ogni documento dovrebbe essere taggato come se taggassimo le domande in questo sito. E dopo l'allenamento, avremo la rappresentazione vettoriale di ogni tag. Quando arriva un nuovo documento, possiamo semplicemente usare la metrica di somiglianza per suggerire tag per il nuovo documento.
utente

@utente: sì, è possibile e talvolta utile farlo, anche se non è necessario.
gojomo,

9

doc2vecil modello ottiene il suo algoritmo da word2vec.

In word2vecnon c'è bisogno di etichettare le parole, perché ogni parola ha il suo significato semantico nel vocabolario. Ma in caso doc2vecaffermativo, è necessario specificare che il numero di parole o frasi trasmette un significato semantico, in modo che l'algoritmo possa identificarlo come una singola entità. Per questo motivo, stiamo specificando labelso tagsfrase o paragrafo a seconda del livello di significato semantico trasmesso.

Se specifichiamo una singola etichetta per più frasi in un paragrafo, significa che tutte le frasi nel paragrafo sono necessarie per trasmettere il significato. D'altra parte, se si specificano etichette variabili per tutte le frasi in un paragrafo, significa che ognuna trasmette un significato semantico e che possono avere o meno somiglianze tra loro.

In termini semplici, labelsignifica un significato semantico di qualcosa.


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.Non sono sicuro di capirlo correttamente. Dagli algoritmi POV, sono necessarie tutte le frasi con lo stesso tag per la definizione semantica o tutte le frasi con lo stesso tag descrivono la stessa cosa? Nel primo caso, nessuna singola frase è autosufficiente da sola, nel secondo caso una singola frase è autosufficiente.
utente

@utente: è il secondo caso, dall'algoritmo POV, un tag è definito come un'entità che, se usata in una singola frase, acquisisce il significato di tutte le parole. Allo stesso modo, se usato in più frasi, cattura anche le parole in tutte le altre frasi.
yazhi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.