Podemos mejorar considerablemente (por mucho, en algunos casos) el tiempo total de ejecución de esta rutina de preprocesamiento, si extraemos de la función de clean_text
las tareas o acciones que no necesitan ser ejecutadas una y otra vez en cada batch.
Un ejemplo claro es la creación del set
de stopwords
, que no necesitamos estar invocando en cada batch (1000 veces, en este ejemplo) sino sólo una vez, al inicio (aún antes de declarar nuestra función clean_text
) como si fuera una constante:
STOP_WORDS = set(stopwords.words('spanish'))
def clean_text(sentence_batch):
# ... luego, dentro del for
filtered_text = [word for word in word_tokens if word not in STOP_WORDS]
#...
Sólo con ese cambio (y pre-compilar las regular-expressions que luego reusaremos tantas veces) podemos ver mejoras notables (al menos la mitad del tiempo o menos, en este caso particular). Obviamente con un subconjunto más grande (o con este corpus completo u otro con billones de registros), ese tipo de mejoras bien valen la pena.
Les comparto este colab con las 2 versiones para comprobar la diferencia.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?