Quando convertire i dati in incorporamenti di parole in PNL
Quando si addestra una rete utilizzando gli incorporamenti di parole, è normale aggiungere un livello di incorporamento per convertire prima il vettore di input negli incorporamenti.
Tuttavia, supponendo che gli incorporamenti siano pre-addestrati e congelati, esiste un'altra opzione. Potremmo semplicemente preelaborare i dati di addestramento prima di darli al modello in modo che siano già convertiti negli incorporamenti. Ciò accelererà l'addestramento, poiché questa conversione deve essere eseguita solo una volta, anziché al volo per ogni epoca.
Pertanto, la seconda opzione sembra migliore. Ma la prima scelta sembra più comune. Supponendo che gli incorporamenti siano pre-addestrati e congelati, c'è un motivo per cui potrei scegliere la prima opzione rispetto alla seconda?
Risposte
Se devi spostare molti dati durante l'addestramento (come il recupero di batch da disco/rete/cosa hai), è molto più veloce farlo come tensore di rango 3 di [batch, documenti, indici] piuttosto che come rango -4 tensore di [batch, documenti, indici, vettori]. In questo caso, mentre l'incorporamento è O(1) ovunque lo metti, è più efficiente farlo come parte del grafico.
Esistono diversi modi per ottenere l'incorporamento di parole da un corpus.
- Count Vectorizer: è possibile utilizzare
CountVectorizer()
fromsklearn.feature_extraction.text
e quindi utilizzare thefit_transform()
se il corpus è stato convertito in un elenco di frasi - Vettorizzatore TF-IDF: puoi usare
TfidfVectorizer
fromsklearn.feature_extraction.text
e poi usare di nuovo thefit_transform()
su un elenco di frasi - word2vec: puoi creare un
word2vec
modellogensim.models
utilizzandoword2vec.Word2vec
.
Supponendo che il dizionario delle parole, fornito dal tuo modello, sia un sottoinsieme degli incorporamenti preaddestrati, ad esempio la parola2vec preaddestrata di Google, allora è forse un'opzione migliore seguire questi incorporamenti, se il tuo modello è in grado di gestire quella dimensione della dimensione .
Tuttavia, a volte questa non sarebbe sempre la soluzione migliore, tenendo conto della natura del problema. Ad esempio, se stai cercando di utilizzare la PNL su testi medici che contengono parole rare e speciali, allora forse dovresti usare il tuo livello di incorporamento, supponendo che tu abbia una dimensione di dati adeguata, o entrambi. Questo è solo un mio pensiero. Di sicuro, ci possono essere molti altri casi d'uso che dovrebbero proporre il livello di incorporamento.