2015-12-25 23 views
7

Sono riuscito ad addestrare un word2vec con tensorflow e voglio alimentare quei risultati in un rnn con celle di lstm per l'etichettatura in sequenza.Etichettatura di sequenza in TensorFlow

1) Non è chiaro come utilizzare il modello word2vec per un rnn. (Come alimentare il risultato?)

2) Non trovo molta documentazione su come implementare un'etichetta di sequenza lstm. (Come posso portare le mie etichette?)

Qualcuno potrebbe indicarmi la giusta direzione su come iniziare con questa attività?

risposta

2

Mi rendo conto che questo è stato pubblicato qualche tempo fa, ma ho trovato this Gist about sequence labeling e this Gist about variable sequence labeling davvero utile per capire l'etichettatura di sequenza. Lo schema di base (il succo del Gist):

  1. Utilizzare dynamic_rnn per gestire lo srotolamento della rete per l'allenamento e la previsione. Questo metodo è stato spostato in parte nell'API, quindi potresti doverlo trovare per la tua versione, ma solo Google.
  2. Disponi i tuoi dati in lotti di dimensioni [batch_size, sequence_length, num_features] e le tue etichette in lotti di dimensioni [batch_size, sequence_length, num_classes]. Si noti che si desidera un'etichetta per ogni passaggio temporale della sequenza.
  3. Per le sequenze di lunghezza variabile, passare un valore all'argomento sequence_length del wrapper dynamic_rnn per ogni sequenza nel batch.
  4. Allenare l'RNN è molto simile all'addestramento di qualsiasi altra rete neurale una volta definita la struttura della rete: alimenta i dati di allenamento e le etichette target e osservali apprendere!

E alcuni avvertimenti:

  1. con sequenze a lunghezza variabile, sarà necessario costruire maschere per calcolare le metriche di errore e roba. È tutto nel secondo link qui sopra, ma non dimenticare quando fai le tue metriche di errore! Mi sono imbattuto in questo un paio di volte e ha fatto apparire le mie reti come se stessero facendo molto peggio su sequenze a lunghezza variabile.
  2. È possibile aggiungere un termine di regolarizzazione alla funzione di perdita. Ho avuto alcuni problemi di convergenza senza questo.
  3. Si consiglia di utilizzare tf.train.AdamOptimizer con le impostazioni predefinite inizialmente. A seconda dei dati, questo potrebbe non convergere e sarà necessario regolare le impostazioni. This article fa un buon lavoro di spiegare cosa fanno le diverse manopole. Iniziare a leggere dall'inizio, alcune delle manopole sono spiegate prima della sezione di Adamo.

Speriamo che questi collegamenti siano utili per gli altri in futuro!

6

Suggerisco di iniziare leggendo il RNN tutorial e sequence-to-sequence tutorial. Spiegano come costruire LSTM in TensorFlow. Una volta che hai dimestichezza con questo, dovrai trovare la giusta variabile di incorporamento e assegnarla usando il tuo modello word2vec pre-addestrato.

+0

Ma come gestireste l'etichettatura della sequenza? – Milan

+0

Ecco perché è necessario guardare sequenza/sequenza o codifica/decodifica RNN ... mapperà la sequenza di input in una sequenza di etichette. Un altro modo è quello di addestrare una CNN sulla sequenza di input per assegnare etichette. – j314erre

Problemi correlati