Cuándo convertir datos a incrustaciones de palabras en NLP

Aug 21 2020

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

2 Oso Aug 25 2020 at 20:36

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.

1 SauravMaheshkar Aug 25 2020 at 08:40

Hay varias formas de incorporar palabras a partir de un corpus.

  • Count Vectorizer: puede usar CountVectorizer()from sklearn.feature_extraction.texty luego use fit_transform()si el corpus se ha convertido en una lista de oraciones
  • Vectorizador TF-IDF: puede usar TfidfVectorizerfrom sklearn.feature_extraction.texty luego usar the fit_transform()en una lista de oraciones
  • word2vec: puedes hacer un word2vecmodelo gensim.modelsusando word2vec.Word2vec.
ddaedalus Aug 25 2020 at 04:29

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.