python - ¿Cómo entrenar Word2vec en conjuntos de datos muy grandes?
machine-learning (1)
Estoy pensando en entrenar word2vec en datos a gran escala de más de 10 TB + de tamaño en el volcado de rastreo web.
Personalmente entrené la implementación de GoogleNews-2012 dump (1.5 gb) en mi iMac, me tomó aproximadamente 3 horas entrenar y generar vectores (impresionados por la velocidad). Sin embargo, no probé la implementación de Python :( Leí en algún lugar que generar vectores en un volcado de wiki (11 gb) de 300 vectores de longitud tarda aproximadamente 9 días en generarse.
¿Cómo acelerar word2vec? ¿Necesito usar modelos distribuidos o qué tipo de hardware necesito para hacerlo dentro de 2 a 3 días? Tengo iMac con 8gb ram.
¿Cuál es más rápido? Gensim python o C implemention?
Veo que la implementación de word2vec no admite la formación de GPU.
Hay una serie de oportunidades para crear modelos de Word2Vec a escala. Como señaló, las soluciones candidatas se distribuyen (y / o multiproceso) o GPU. Esta no es una lista exhaustiva, pero con suerte obtendrá algunas ideas sobre cómo proceder.
Opciones distribuidas / multihilo:
- Gensim usa Cython donde importa, y es igual o no mucho más lento que las implementaciones de C. Los subprocesos múltiples de Gensim funcionan bien, y el uso de una máquina con amplia memoria y una gran cantidad de núcleos reduce significativamente el tiempo de generación de vectores. Es posible que desee investigar utilizando instancias de Amazon EC2 16 o 32-core.
- Deepdist puede utilizar gensim y Spark para distribuir las cargas de trabajo de gensim en un clúster. Deepdist también tiene algunas optimizaciones inteligentes de SGD que sincronizan el gradiente entre nodos. Si utiliza máquinas de varios núcleos como nodos, puede aprovechar tanto la agrupación en clúster como la multihebra.
Existen varias implementaciones de GPU de Word2Vec. Dado el gran tamaño del conjunto de datos y la memoria limitada de la GPU, es posible que deba considerar una estrategia de agrupación en clústeres.
- Bidmach parecer, Bidmach es muy rápido (sin embargo, falta documentación, y hay que admitir que he tenido problemas para que funcione).
- DL4J tiene una implementación de Word2Vec pero el equipo aún no ha implementado cuBLAS gemm y es relativamente lento en comparación con las CPU.
- Keras es un marco de aprendizaje profundo de Python que utiliza Theano. Si bien no implementa word2vec per se, implementa una capa de incrustación y se puede usar para crear y consultar vectores de palabras.
Existen otras implementaciones CUDA de Word2Vec, con diversos grados de madurez y soporte:
- https://github.com/whatupbiatch/cuda-word2vec [memory mgmt se ve muy bien, aunque no existe documentación sobre cómo crear conjuntos de datos]
- https://github.com/fengChenHPC/word2vec_cbow [super rápido, pero problemas de memoria de GPU en grandes conjuntos de datos]
Creo que el equipo de SparkML ha implementado recientemente un prototipo de implementación de Word2Vec basada en cuBLAS. Es posible que desee investigar esto.