2015-06-12 9 views
39

Disponiamo di modelli per la conversione di parole in vettori (ad esempio il modello word2vec). Esistono modelli simili che convertono frasi/documenti in vettori, usando forse i vettori appresi per le singole parole?Come può essere convertita una frase o un documento in un vettore?

+0

@alvas, puoi chiarire cosa vuoi nella tua risposta. Forse posso aiutare. – Azrael

+0

@azarel, sto solo attirando l'attenzione su questo post e forse ne uscirà qualcosa di buono se più persone risponderanno e forse troveranno un modo non così popolare ma interessante per modellare le frasi come vettori – alvas

+0

https://stackoverflow.com/ domande/29760935/how-to-get-vector-for-a-phrase-from-the-word2vec-of-tokens-in-sentence/29891392 – kampta

risposta

14

tutto dipende da:

  • quale modello vettore si sta utilizzando
  • qual è lo scopo del modello
  • la vostra creatività nel combinare vettori di parole in un vettore del documento

Se hai generato il modello utilizzando Word2Vec, puoi provare:

Oppure si può fare quello che alcune persone fanno, vale a dire sommare tutte le parole di contenuto nei documenti e dividere per le parole di contenuto, per esempio https://github.com/alvations/oque/blob/master/o.py#L13 (nota: la linea 17-18 è un trucco per ridurre il rumore):

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)) 
+1

l'immersione del risultato finale con il numero di parole non normalizza il vettore. È meglio se lo dividete per dimensione del vettore: 'sent_vec/np.sqrt (sent_vec.dot (sent_vec))' – Mehdi

12

Ci sono un sacco di modi per rispondere a questa domanda. La risposta dipende dalla tua interpretazione di frasi e frasi.

Questi modelli di distribuzione come word2vec che forniscono una rappresentazione vettoriale per ogni parola possono solo mostrare come una parola di solito viene utilizzata in un contesto di finestra in relazione con altre parole. Sulla base di questa interpretazione delle relazioni di parole di contesto, puoi prendere il vettore medio di tutte le parole in una frase come rappresentazione vettoriale della frase. Ad esempio, in questa frase:

i vegetariani mangiano verdure.

V_s

possiamo prendere il vettore normalizzato come rappresentazione vettoriale:

V(sentence)

Il problema è di natura compositiva di frasi. Se si prendono i vettori di parole medie come sopra, queste due frasi hanno la stessa rappresentazione vettoriale:

verdure mangiate vegetariani.

Ci sono molte ricerche sulla moda distributiva per imparare le strutture ad albero attraverso l'elaborazione del corpus. Ad esempio: Parsing With Compositional Vector Grammars. Questo video spiega anche questo metodo.

Ancora una volta voglio sottolineare l'interpretazione. Questi vettori di frase probabilmente hanno i loro significati nella tua applicazione. Ad esempio, nell'analisi del sentimento in this project in Stanford, il significato che stanno cercando è il sentimento positivo/negativo di una frase.Anche se trovi una rappresentazione vettoriale perfetta per una frase, ci sono dibattiti filosofici sul fatto che questi non sono significati reali delle frasi se non puoi giudicare la condizione di verità (David Lewis "General Semantics" 1970). Ecco perché ci sono linee di lavoro incentrate sulla visione artificiale (this paper o this paper). Il mio punto è che può completamente dipendere dalla vostra applicazione e interpretazione dei vettori.

37

1) Metodo Skip grammo: paper here e lo strumento che lo utilizza, google word2vec

2) Uso LSTM-RNN per formare rappresentazioni semantiche di frasi.

3) Rappresentazioni di sentences and documents. Il vettore Paragrafo è introdotto in questo documento. È fondamentalmente un algoritmo non supervisionato che impara rappresentazioni di funzioni a lunghezza fissa da parti di testo di lunghezza variabile, come frasi, paragrafi e documenti.

4) Anche se questo paper non forma i vettori di frase/paragrafo, è abbastanza semplice farlo. Si può semplicemente collegare i singoli vettori di parole (Gloveword vectors per ottenere le prestazioni migliori) e quindi può formare una rappresentazione vettoriale dell'intera frase/paragrafo.

5) Utilizzo di documenti da CNN a summarize.

+0

Vale la pena menzionare quale soluzione utilizza effettivamente i singoli vettori di parole per formare un vettore per un documento. Sembra che pochi di loro stiano usando vettori di parole apprese. – Mehdi

15

Una soluzione che è leggermente inferiore al largo della piattaforma, ma probabilmente difficile da battere in termini di precisione, se si dispone di una cosa specifica che si sta cercando di fare:

Costruire un RNN (con LSTM o celle di memoria GRU , comparison here) e ottimizzare la funzione di errore dell'attività effettiva che si sta tentando di realizzare. Gli dai la tua frase e la istruisci per produrre l'output che vuoi. Le attivazioni della rete dopo aver ricevuto la tua frase è una rappresentazione della frase (anche se potresti preoccuparti solo dell'output della rete).

È possibile rappresentare la frase come una sequenza di caratteri codificati a una temperatura elevata, come sequenza di parole codificate a una temperatura elevata o come sequenza di vettori di parole (ad esempio GloVe o word2vec). Se si utilizzano i vettori di parole, è possibile continuare a retroproporzionare nei vettori di parole, aggiornando i loro pesi, in modo da ottenere anche vettori di parole personalizzati ottimizzati specificamente per l'attività che si sta eseguendo.

+1

Questa è una buona soluzione quando si dispone di molti dati etichettati per eseguire un addestramento RNN supervisionato. Quando disponi di molti dati senza etichetta, preferirei integrare un PV non supervisionato sull'intero set di dati. E poi fare un allenamento di regressione logistica su un set di allenamento etichettato più piccolo. – justint

Problemi correlati