Cuándo convertir datos a incrustaciones de palabras en NLP
Cuando se entrena una red con incrustaciones de palabras, es estándar agregar una capa de incrustación para convertir primero el vector de entrada en las incrustaciones.
Sin embargo, suponiendo que las incrustaciones estén preentrenadas y congeladas, existe otra opción. Podríamos simplemente preprocesar los datos de entrenamiento antes de dárselos al modelo para que ya estén convertidos a las incrustaciones. Esto acelerará el entrenamiento, ya que esta conversión solo necesita realizarse una vez, en lugar de sobre la marcha para cada época.
Por lo tanto, la segunda opción parece mejor. Pero la primera opción parece más común. Suponiendo que las incrustaciones estén preentrenadas y congeladas, ¿hay alguna razón por la que podría elegir la primera opción sobre la segunda?
Respuestas
Si tiene que mover una gran cantidad de datos durante el entrenamiento (como recuperar lotes del disco/red/lo que sea), es mucho más rápido hacerlo como un tensor de rango 3 de [lotes, documentos, índices] que como un rango -4 tensor de [lotes, documentos, índices, vectores]. En este caso, mientras que la incrustación es O(1) donde sea que la coloques, es más eficiente hacerlo como parte del gráfico.
Hay varias formas de incorporar palabras a partir de un corpus.
- Count Vectorizer: puede usar
CountVectorizer()fromsklearn.feature_extraction.texty luego usefit_transform()si el corpus se ha convertido en una lista de oraciones - Vectorizador TF-IDF: puede usar
TfidfVectorizerfromsklearn.feature_extraction.texty luego usar thefit_transform()en una lista de oraciones - word2vec: puedes hacer un
word2vecmodelogensim.modelsusandoword2vec.Word2vec.
Suponiendo que el diccionario de las palabras que crea su modelo es un subconjunto de las incrustaciones preentrenadas, por ejemplo, word2vec preentrenada de Google, entonces tal vez sea una mejor opción seguir estas incrustaciones, si su modelo puede manejar ese tamaño de dimensión. .
Sin embargo, a veces esa no siempre sería la mejor solución, teniendo en cuenta la naturaleza del problema. Por ejemplo, si está tratando de usar NLP en textos médicos que contienen palabras raras y especiales, entonces tal vez debería usar su capa de incrustación, asumiendo que tiene un tamaño de datos adecuado, o ambos. Eso es solo un pensamiento mío. Por supuesto, puede haber varios otros casos de uso que deberían proponer la capa de incrustación.